I linguaggi di programmazione si possono suddividere in due grandi categorie: linguaggi a basso livello (linguaggi macchina e Assembler), detti anche linguaggi orientati alla macchina perchè sono specifici di ciascuna macchina, o meglio di ciascun processore, e linguaggi ad alto livello o linguaggi evoluti.
L’unico linguaggio di programmazione che il computer è in grado di comprendere è il linguaggio macchina.
Tutti gli altri linguaggi devono essere tradotti in linguaggio macchina.
Il linguaggio Assembler è un linguaggio a basso livello, cioè ogni istruzione del linguaggio Assembler corrisponde ad una istruzione del linguaggio macchina; come il linguaggio macchina è quindi strettamente dipendente dal processore.
I linguaggi di programmazione ad alto livello, oltre a permettere l’uso di nomi simbolici, offrono istruzioni indipendenti dal processore, che corrispondono a più istruzioni in linguaggio macchina, e risultano più comprensibili perché più vicine al linguaggio naturale.
Il vocabolario usato da ciascun linguaggio di programmazione comprende delle parole riservate e delle parole che possono essere definite dal programmatore seguendo alcune semplici regole.
Le parole riservate permettono di definire i dati e di scrivere le istruzioni; le parole definite dal programmatore (o identificatori) sono in genere i nomi delle variabili e i nomi di nuovi moduli di programmazione (procedure, classi ecc.).
I linguaggi di programmazione usano molti paradigmi di programmazione diversi.