Dopo aver partecipato e seguito al concorso Google Code Jam di quest'anno , non ho potuto fare a meno di notare l'incredibile numero di concorrenti [di successo] che hanno utilizzato C / C ++ e Java. La distribuzione delle lingue utilizzate durante il concorso può essere vista qui .
Dopo aver programmato in C / C ++ per diversi anni, di recente mi sono innamorato di Python per la sua natura leggibile / diretta. Più recentemente, ho imparato linguaggi funzionali come OCaml, Scheme e persino linguaggi logici come Prolog. Questi linguaggi hanno certamente i loro pregi e, a mio avviso, possono essere applicati più facilmente di C ++ e Java per determinate situazioni. Ad esempio, l'uso di call / cc da parte di Scheme semplifica il backtracking (uno strumento necessario per rispondere a diversi problemi) e la specifica logica di Prolog, sebbene inefficiente a causa della sua natura di forza bruta, può semplificare drasticamente (e persino risolvere automaticamente) alcuni problemi che sono difficili da avvolgere il proprio cervello.
È chiaro che un concorrente della competizione dovrebbe utilizzare gli strumenti più adatti alla sfida. Anche l'assemblaggio x86 è completo di Turing, il che non giustifica la risoluzione dei problemi con esso. In questo caso, perché i concorrenti che usano linguaggi meno comuni come Scheme / Lisp, Prolog e persino Python hanno un successo significativamente inferiore rispetto ai concorrenti che usano C / C ++ e Java? Con parole diverse, perché i concorrenti di successo non usano linguaggi che, sebbene possano essere meno diffusi, sono probabilmente strumenti migliori per il lavoro?
Ci sono diverse motivazioni per la mia domanda. Soprattutto, vorrei diventare un programmatore migliore, sia nell'aspetto pratico che in quello della competizione. Dopo essere stati introdotti a paradigmi così belli come la programmazione logica e funzionale, è scoraggiante vedere così tante persone scartarli a favore di C / C ++ e Java. Mi fa persino dubitare della mia ammirazione per detti paradigmi, preoccupandomi di non poter avere successo come programmatore Lisp / Scheme / Prolog in una competizione di programmazione.