A mio avviso, ciò che le persone colloquialmente considerano un "linguaggio di programmazione" sono in realtà tre cose separate:
- Tipo di lingua e sintassi
- IDE lingua
- Librerie disponibili per una lingua
Ad esempio, quando qualcuno fa apparire C # in una discussione, potresti pensare che stia parlando della sintassi del linguaggio (1), ma è certo al 95% che la discussione coinvolgerà .Net framework (3). Se non stai progettando una nuova lingua, è difficile e di solito inutile isolare (1) e ignorare (2) e (3). Questo perché IDE e la libreria standard sono "fattori di comfort", elementi che influenzano direttamente l'esperienza di utilizzo di un determinato strumento.
Negli ultimi anni anche io ho partecipato a Google Code Jam. La prima volta che ho optato per il C ++ perché ha un buon supporto per leggere l'input. Ad esempio, la lettura di tre numeri interi da un input standard in C ++ è simile alla seguente:
int n, h, w;
cin >> n >> h >> w;
Mentre in C # lo stesso sarebbe simile a questo:
int n, h, w;
string[] tokens = Console.ReadLine().Split(' ');
n = int.Parse(tokens[0]);
h = int.Parse(tokens[1]);
w = int.Parse(tokens[2]);
Questo è molto più sovraccarico mentale per una semplice funzionalità. Le cose diventano ancora più complicate in C # con input multilinea. Forse semplicemente non ho capito un modo migliore di allora. Comunque, non sono riuscito a superare il primo round perché avevo un bug che non riuscivo a correggere prima della fine del round. Ironia della sorte, il metodo di lettura dell'input ha offuscato il bug. Il problema era semplice, l'input conteneva un numero troppo grande per un numero intero a 32 bit. In C # int.Parse(string)
genererebbe un'eccezione, ma in C ++ il flusso di input di file imposterebbe un determinato flag di errore e fallirebbe silenziosamente rendendo inconsapevole lo sviluppatore ignaro di un problema.
Entrambi gli esempi dimostrano come è stata utilizzata la libreria piuttosto che la sintassi del linguaggio. Il primo dimostra la verbosità e l'altro dimostra l'affidabilità. Molte librerie sono portate su più lingue e alcune lingue possono usare librerie che non sono state create appositamente per loro (vedi la risposta di @ vartec su Python con le librerie C).
Per concludere, conoscere l'algoritmo giusto aiuta. Nelle competizioni di codifica è cruciale, specialmente quando risorse come il tempo di esecuzione e la memoria sono volutamente limitate. Nello sviluppo di applicazioni è il benvenuto ma generalmente non cruciale. La manutenibilità è più importante lì. Ciò può essere ottenuto applicando modelli di progettazione corretti, con buona architettura, codice leggibile e documentazione pertinente e tutti questi metodi dipendono fortemente dalle librerie interne e di terze parti. Quindi, trovo più importante sapere che tipo di ruote sono già state inventate e come si adattano quindi come costruirle.