Domanda affascinante; Mi piace la tua enfasi su criteri oggettivi. Vogliamo che le matricole imparino:
concetti di programmazione : il primo linguaggio di programmazione deve supportare: chiamate di funzione, iterazione, ricorsione
idee fondamentali : il primo linguaggio di programmazione deve supportare gli array (per i primi passi di una delicata introduzione su come funziona davvero la memoria e come funzionano i puntatori)
capacità pratiche di programmazione : come usare il debugger, come usare il profiler, come risolvere grandi problemi (un linguaggio di alto livello), come mettere insieme sistemi di grandi dimensioni, come abbattere problemi (decomposizione dei problemi), come evitare di scrivere codice complicato, come comunicare agli umani l'intento dietro una serie (spesso criptica) di dichiarazioni eseguibili.
il fatto che esistono librerie pre-scritte per cose come sort () e come usarle - cioè il fatto che non è necessario scrivere tutto da zero.
Altri criteri per una prima lingua :
interpretato (feedback rapido aiuta il processo di apprendimento).
un ambiente interattivo che accelera l'apprendimento, i test e il debug.
codice sorgente di alta qualità è disponibile per gli studenti a leggere in quella lingua
"facile da leggere", "sintassi che si avvicina al linguaggio naturale" (per facilitare la lettura e la classificazione del SourceCode)
portatile (funziona su Mac OS, Windows, Unix). Almeno un'implementazione software gratuita della lingua.
veloce da insegnare, "pochi gotchas" - per esempio, "[I] t potrebbe essere più veloce da insegnare prima ai principianti Python e poi Java, piuttosto che Java come primo OOPL". - "Confronto tra linguaggi di programmazione orientati agli oggetti" e TelescopeRule
Matthias Felleisen ha sviluppato un linguaggio di programmazione con messaggi di errore su misura per un pubblico principiante. Sottolinea che la scelta della lingua particolare non è importante quanto l'insegnamento di una buona metodologia di progettazione. In effetti, vede il primo corso CS come una lezione di arti liberali, insegnando il pensiero critico, la risoluzione dei problemi e l'attenzione ai dettagli.
criteri per un secondo linguaggio di programmazione
Roba che vogliamo che gli studenti imparino, ma forse questo può attendere il secondo linguaggio di programmazione:
un linguaggio "rilevante" che non sia "non troppo esoterico"; qualcosa di "popolare nel settore"
Teoria della complessità: come riconoscere compiti impossibili con la tecnologia attuale.
roba di livello superiore: come scegliere lo strumento giusto per il lavoro , come utilizzare un compilatore, strutture, programmazione orientata agli oggetti, programmazione funzionale, programmazione logica, progettazione di compilatori, composizione e manipolazione di funzioni (nel senso di Lisp / ML), programmazione concorrente e distribuita,
materiale di basso livello: puntatore aritmetico, architettura del computer. gestione della memoria, stack frame, programmazione degli assiemi, architettura della macchina, driver di dispositivo e progettazione del sistema operativo (quindi la macchina "non sembrerà una scatola nera spaventosa che non riescono a penetrare")
EDIT: Trovo deludente che pubblicare un riassunto di qualcosa che ho scritto, in collaborazione con molti altri, "potrebbe non essere un post legale".
Quindi sto aggiungendo una citazione più formale al mio precedente link informale, cercando di rispettare il fair use e altre questioni relative al copyright del wiki.
Questa risposta è una sintesi della prima lingua di Freshman (Anon 2011) presso il Portland Pattern Repository.
(Anon 2011) Molti autori anonimi e vari altri. "Freshmans First Language". Portland Pattern Repository. 27 settembre 2011. http://c2.com/cgi/wiki?FreshmansFirstLanguage .