Con linguaggio di programmazione si intende esprimere un processo con il quale, mediante un programma, un processore ha la possibilità di eseguire un algoritmo o più semplicemente di risolvere un problema.
I linguaggi di programmazione riconosciuti sono solo quelli computazionalmente completi. Per linguaggi computazionalmente completi intendiamo un linguaggio equivalente in potere espressivo al linguaggio macchina di Turing e che non riesce ad esprimere anche programmi di cui non è decidibile la terminazione. Per esempio SQL non è un linguaggio completo perché si può sempre dire quando termina il programma. Quindi per definizione si definisce completo un linguaggio in grado di simulare arbitrarie macchine di Turing.
Nella “recente” storia dell’informatica possiamo annoverare centinaia o forse migliaia di linguaggi di programmazione. Sebbene molti di essi siano caduti in disuso, siano stati dimenticati o siano addirittura esoterici, hanno comunque influenzato o avuto un peso nella nascita di quelli moderni. Orientarsi in questo mare magnum di linguaggi non è semplice; riconoscerne somiglianze e differenze e afferrarne il language design ancora più complicato. Presentando alcuni di quelli che possiamo considerare i progenitori dei linguaggi di oggi, si possono riconoscere e capire alcuni dei più importanti concetti che hanno introdotto.
Di seguito alcuni linguaggi storici e le loro caratteristiche principali:
I paradigmi computazionali sono degli stili di programmazione che classificano i linguaggi. In un certo modo con un paradigma si definisce il modo in cui il programmatore concepisce e identifica il programma. Esistono diversi paradigmi di programmazione: funzionale, a oggetti, procedurale, ecc… Il paradigma non è il solo e unico aspetto determinante in un linguaggio, ma è certo che la scelta di un determinato paradigma computazionale influenzi in gran modo la maniera in cui si risolve un problema.