1. Smalltalk
Progettato originariamente almeno in parte come un modo per i bambini di utilizzare i computer per imparare. La sintassi è abbastanza semplice da descrivere in un paragrafo. Come LOGO, esemplifica il principio "barriera bassa all'ingresso, soffitto alto".
Smalltalk è un linguaggio OO puro , nel senso che "tutto è un oggetto".
Insegna anche molte tecniche funzionali, in particolare nella sua API Collection: concatenare messaggi, funzioni di ordine superiore, mappare, ridurre e così via.
La community di Squeak è vivace e accogliente. Vedrai anche molte discussioni su tecniche avanzate: proprio come la comunità lisp, ci sono molti Smalltalker molto esperti nella mailing list disposti a condividere le loro conoscenze. (Non fa male che la comunità di Squeak abbia una grande sottopopolazione di educatori professionisti.) C'è anche un altro elenco per principianti.
2. PROLOG
Un linguaggio di programmazione logica che ti darà una visione del calcolo molto diversa da qualsiasi altro linguaggio. Prolog è anche altamente dichiarativo (ma non completamente: l' !
operatore o cut può avere un significativo effetto semantico su un predicato).
3. Lisp comune
Sostituisci lo schema qui, se lo desideri. Common Lisp supporta molteplici paradigmi, in particolare OO e funzionali. Ha anche una lunga storia (Lisp è il secondo linguaggio più antico ancora ampiamente usato: solo il più vecchio di FORTRAN).
4. Haskell
(Avvertenza: ho appena iniziato a impararlo.) Probabilmente il linguaggio funzionale più puro del pianeta. Ha un sistema di tipo statico molto avanzato. Handy intro libri esistono.
5. C o Delphi
Devi sapere come funzionano i computer. Devi sapere come funzionano effettivamente la memoria e la CPU. Entrambi sono tradizionalmente "vicini al metal" e hanno comunità che incoraggiano a pensare a come il loro linguaggio si compila in assemblea.
Perché questo ordine?
Smalltalk è molto facile da imparare, quindi puoi iniziare rapidamente a concentrarti sulla risoluzione dei problemi piuttosto che sulla lotta contro un compilatore ("bassa barriera all'ingresso"). Una volta che inizi a programmare, non c'è limite artificiale a ciò che puoi fare: "soffitto alto".
Una volta che hai una buona idea di come funziona OO (e - a condizione che ci siano MOLTE diverse interpretazioni sul significato di "OO" - è giusto dire che OO domina il mercato), passare a Prolog ti assicura di non iniziare pensando che OO è l'unico modo. Prolog è molto diverso dalla maggior parte delle lingue e allungherà i muscoli mentali in modo da non iniziare a pensare di sapere tutto.
Il Lisp comune, a sua volta, è la lingua di un adulto. Ha uno standard maturo, ha guidato la progettazione del linguaggio per decenni (insieme a Smalltalk) - tutte quelle nuove fantasiose funzionalità che la tua lingua preferita ha appena acquisito? È probabile che le idee vengano incubate in Lisp o Smalltalk. Anche il Lisp comune è un po 'verrucoso e troverai la verruche ovunque tu vada.
Il quarto di Haskell nella lista perché (mi hanno detto: ho appena iniziato a impararlo) la sua purezza significa che alcune cose molto comuni (come l'I / O) sono più difficili da fare rispetto a linguaggi meno puramente funzionali. La gente di Haskell usa anche alcune terminologie abbastanza esotiche (parole come "catamorfismo", diciamo), e probabilmente staresti meglio con qualche esperienza di programmazione sotto la cintura prima di affrontarla. (Ma devo ripetere, ho appena iniziato a impararlo! Prendi questa opinione con un pizzico di sale!)
E perché C / Delphi dura? Perché se non lavori nei sistemi embedded, non dovresti davvero imparare la programmazione pensando che la gestione manuale della memoria sia tutto ciò che c'è. La raccolta dei rifiuti ha funzionato abbastanza bene per una macchina di livello anni '80. Il tuo telefono è così potente!
Infine, non ho inserito Erlang nell'elenco sopra, anche se dovrei davvero.