Come mio primo linguaggio di programmazione, ho deciso di imparare Haskell. Sono una specializzazione in filosofia analitica e Haskell mi ha permesso di creare rapidamente e correttamente programmi di interesse, ad esempio trasduttori per l'analisi del linguaggio naturale, dimostratori di teoremi e interpreti. Sebbene programmassi solo da due mesi e mezzo, ho trovato la semantica e la sintassi di Haskell molto più facili da imparare rispetto ai linguaggi imperativi più tradizionali e mi sento a mio agio (ora) con la maggior parte dei suoi costrutti.
La programmazione in Haskell è come la stregoneria, tuttavia, e vorrei ampliare la mia conoscenza della programmazione. Vorrei scegliere un nuovo linguaggio di programmazione da imparare, ma non ho abbastanza tempo per prendere un linguaggio arbitrario, lasciarlo cadere e ripetere. Quindi ho pensato di porre la domanda qui, insieme a diverse disposizioni sul tipo di lingua che sto cercando. Alcuni sono soggettivi, altri hanno lo scopo di facilitare la transizione da Haskell.
- Sistema di tipo forte. Una delle mie parti preferite della programmazione in Haskell è scrivere dichiarazioni di tipo. Questo aiuta a strutturare i miei pensieri sulle singole funzioni e sulla loro relazione con il programma nel suo complesso. Rende anche più facile ragionare in modo informale sulla correttezza del mio programma. Mi interessa la correttezza, non l'efficienza.
- Enfasi sulla ricorsione piuttosto che sull'iterazione. Uso costrutti iterativi in Haskell, ma li implemento in modo ricorsivo. Tuttavia, è molto più facile capire la struttura di una funzione ricorsiva rispetto a una complicata procedura iterativa, specialmente quando si usano combinatori e funzioni di ordine superiore come mappe, pieghe e legami.
- Appagante imparare. Haskell è un linguaggio gratificante in cui lavorare. È un po 'come leggere Kant. La mia esperienza di diversi anni fa con C, tuttavia, non lo era. Non sto cercando C. Il linguaggio dovrebbe imporre un paradigma concettualmente interessante, che a mio parere del tutto soggettivo, i C-like non lo fanno.
Valutare le risposte : queste sono solo note, ovviamente. Vorrei solo rispondere a tutti coloro che hanno dato risposte ben formate. Sei stato molto utile.
1) Diverse risposte hanno indicato che un linguaggio forte e staticamente tipizzato che enfatizza la ricorsione significa un altro linguaggio funzionale. Anche se voglio continuare a lavorare intensamente con Haskell, camccann e larsmans hanno correttamente sottolineato che un altro linguaggio simile "faciliterebbe troppo la transizione". Questi commenti sono stati molto utili, perché non sto cercando di scrivere Haskell in Caml! Degli assistenti alla prova, Coq e Agda sembrano entrambi interessanti. In particolare, Coq fornirebbe una solida introduzione alla logica costruttiva e alla teoria dei tipi formali. Ho passato un po 'di tempo con il predicato del primo ordine e la logica modale (Mendellsohn, Enderton, alcuni di Hinman), quindi probabilmente mi divertirei molto con Coq.
2) Altri hanno fortemente favorito Lisp (Common Lisp, Scheme e Clojure). Da quello che ho capito, sia Common Lisp che Scheme hanno un eccellente materiale introduttivo ( On Lisp e The Reasoned Schemer , SICP ). Il materiale in SICP mi fa propendere per Scheme. In particolare, Scheme through SICP coprirà una diversa strategia di valutazione, l'implementazione della pigrizia e la possibilità di concentrarsi su argomenti come continuazioni, interpreti, calcolo simbolico e così via. Infine, come altri hanno sottolineato, il trattamento del codice / dati da parte di Lisp sarebbe completamente nuovo. Quindi, mi sto appoggiando fortemente all'opzione (2), un Lisp.
3) Terzo, Prolog. Prolog ha una ricchezza di materiale interessante e il suo dominio principale è esattamente quello che mi interessa. Ha una sintassi semplice ed è di facile lettura. Al momento non posso commentare di più, ma dopo aver letto una panoramica di Prolog e aver scremato del materiale introduttivo, si classifica con (2). E sembra che il backtracking di Prolog sia sempre stato violato in Haskell!
4) Tra i linguaggi tradizionali, Python sembra il più interessante. Tim Yates rende le lingue molto attraenti. Apparentemente, Python viene spesso insegnato alle major CS del primo anno; quindi è concettualmente ricco o facile da imparare. Dovrei fare più ricerche.
Grazie a tutti per i vostri consigli! Sembra che un Lisp (Scheme, Clojure), Prolog o un assistente di prova come Coq o Agda siano le lingue principali consigliate.