Come detto un calcolatore è in grado di eseguire solamente istruzioni scritte in linguaggio macchina che dipende strettamente dal calcolatore ed è cablato sulla sua architettura, la scrittura dei programmi in linguaggio macchina è complessa, le istruzioni sono formate da sequenze di 0 e 1 (codici operativi, dati, indirizzi).Una prima evoluzione è rapresentata dal Linguaggio Assembly che usa simboli al posto delle sequenze binarie, le istruzioni, i dati, gli indirizzi sono sostituiti da codici mnemonici quindi risulta più immediato da utilizzare rispetto al linguaggio macchina.
L' Assembler è tuttavia legato al calcolatore per il quale è stato progettato e rimane complesso da utilizzare visto che ogni istruzione esegue un operazione elementare.I Linguaggi di basso livello consentono di accedere direttamente alle funzionalità del calcolatore, specificano solo le operazioni elementari che l'elaboratore può eseguire anch'essi dipendono dalle caratteristiche architetturali e sono più orientati alla macchina che ai problemi da trattare.