Il design di un linguaggio di programmazione dovrebbe essere chiaro fin dalla prima versione del linguaggio. Per quanto riguarda i linguaggi di programmazione per il Web, assistiamo molto spesso a linguaggi dal design incerto che cambiano radicalmente nel corso degli anni. Il principio della compatibilità a ritroso impedisce ai linguaggi di abbandonare completamente il supporto alle vecchie caratteristiche, ma l'inserimento di nuove caratteristiche molto spesso genera confusione tra gli sviluppatori.
JavaScript è un tipico esempio di linguaggio dal design incerto, o per meglio dire di un linguaggio che è stato utilizzato ben oltre le sue potenzialità. Storicamente JavaScript è un linguaggio object-based ma che manca delle tradizionali caratteristiche object-oriented di altri linguaggi (classi, operatori di visibilità ecc.).
ECMA recentemente ha deciso di spingere molto su caratteristiche object-oriented. Ma non è troppo tardi, considerando il fatto che la totalità delle librerie e delle implementazioni non utilizzano queste caratteristiche e che comunque hanno fatto cose egregie anche senza? E come si dovranno porre gli sviluppatori di fronte alle future modifiche?
Java, al contrario, è un linguaggio dal design solido e coerente. Il suo uso sul Web, insieme con quello di Python, non rende giustizia alle potenzialità di entrambi i linguaggi.
Parlando di Java e Python, ma anche delle potenti tecnologie .Net, non si può non pensare a PHP ed al suo ruolo nel Web odierno. Anche PHP è un linguaggio dal design incerto che solo negli ultimi anni ha cambiato radicalmente rotta, passando da un approccio procedurale ad uno object-oriented.
Stupisce in PHP la scelta di gestire l'interazione HTTP con array superglobali e non con classi apposite (come in Python). Questo dimostra che il principio della compatibilità a ritroso nei linguaggi dal design incerto spesso rallenta lo sviluppo di tali linguaggi.
Infine, la caratteristica saliente dei linguaggi dal design incerto è l'enorme produttività a livello di implementazioni da parte degli sviluppatori. Credo che questa produttività rispecchi la volontà di sopperire all'incoerenza del design di tali linguaggi e al fatto che chi programma è spesso costretto a superare i limiti del linguaggio dovuti alla sua evoluzione nel tempo.