Il mondo è pieno di cose che hanno molte varianti: elaboratori di testi, automobili, design per la casa, bevande, caramelle, penne, pale, ecc. I motivi per cui ne abbiamo così tanti possono essere ridotti a pochi principi:
- Qualcuno pensa di poter migliorare i prodotti esistenti
- Un disegno diverso è richiesto da considerazioni locali (pensa: case su palafitte contro case su lastre di cemento)
- Una nuova categoria di prodotti soddisfa un'esigenza che prima non esisteva
Entra in qualsiasi negozio di articoli per ufficio e guarda la sezione "strumenti per scrivere": ci sono centinaia di varietà di penne. Fanno tutti all'incirca la stessa cosa: consegnare l'inchiostro su una superficie di scrittura. Ma ogni penna che vedi in vendita è lì perché uno dei tre motivi sopra.
- Le penne stilografiche a cartuccia sono un miglioramento rispetto alle penne stilografiche intinte, che sono esse stesse un miglioramento delle penne di piume.
- La NASA aveva bisogno di una penna che potesse scrivere in assenza di gravità, così fu inventata la penna a sfera pressurizzata.
- La prima penna stessa potrebbe benissimo essere stata un bastoncino appuntito imbevuto di catrame o sangue; prima di allora la gente stava raschiando pietre insieme o spalmando pigmenti sui muri con la pelliccia. (Solo una supposizione.)
L'evoluzione delle penne continuerà poiché nessun prodotto soddisfa le esigenze di tutti gli utenti. Alcune penne sono economiche e usa e getta, altre sono costose e costruite con materiali di alta qualità; alcuni usano gel, altri usano inchiostro, altri usano pigmenti; alcuni hanno tappi twist-off, altri non hanno affatto tappi; botti larghe, botti strette, botti tonde, botti quadrate; corto lungo; rosso, bianco, nero, blu. Ecc. Ecc.
Ma abbastanza per le penne.
La nostra attuale miriade di linguaggi di programmazione può essere fatta risalire ai primissimi: i codici numerici della macchina per i primi computer negli anni '40. Primitivo, difficile da usare e laborioso per entrare nel computer, ma hanno fatto il lavoro. Non passò molto tempo che i programmatori assegnarono parole mnemoniche (come ADD, CALL, LOAD) ai codici macchina, dando vita alla classe di linguaggi chiamati "assembly assembly".
Diverse architetture di processori richiedevano codici mnemonici diversi, a seconda delle caratteristiche specifiche delle macchine sottostanti. Prendere in considerazione queste differenze significava inventare linguaggi di assemblaggio diversi.
(Forse ormai puoi vedere dove sta andando ...)
I programmatori guardavano i loro programmi di linguaggio assembly e vedevano schemi: le stesse sequenze di istruzioni sarebbero state usate per formare loop, condizionali, assegnazione variabile, chiamate di funzione e così via. Pertanto, sono nati i linguaggi di programmazione procedurale. Queste lingue incapsulavano gruppi di istruzioni sotto termini ombrello come "if", "while", "let", ecc.
Da un'analisi matematica della programmazione informatica sono emersi i linguaggi funzionali - un modo completamente nuovo di guardare al calcolo. Non meglio, non peggio, solo diverso.
E poi ci sono orientati agli oggetti, digitati staticamente, tipizzati dinamicamente, associazione tardiva, associazione anticipata, utilizzo di memoria insufficiente, utilizzo di memoria elevata, parallelismo, lingue per usi specifici e così via.
In definitiva, abbiamo linguaggi di programmazione diversi perché vogliamo linguaggi di programmazione diversi. Ogni designer linguistico ha le proprie idee su come apparirà e funzionerà il suo linguaggio "da sogno". La diversità è una buona cosa.