Question fascinante; J'aime votre insistance sur des critères objectifs. Nous voulons que les étudiants de première année apprennent:
Concepts de programmation : Le premier langage de programmation doit prendre en charge: appels de fonction, itération, récursivité
Idées fondamentales : le premier langage de programmation doit prendre en charge les tableaux (pour les premières étapes d'une introduction en douceur à la façon dont fonctionne réellement la mémoire et les pointeurs)
compétences pratiques en programmation : comment utiliser le débogueur, comment utiliser le profileur, comment résoudre des problèmes volumineux (un langage de haut niveau), comment assembler de grands systèmes, comment décomposer des problèmes (décomposition de problèmes), comment éviter d'écrire code compliqué, comment communiquer aux humains l’intention qui se cache derrière une série (souvent cryptée) d’instructions exécutables.
le fait que des bibliothèques pré-écrites existent pour des choses comme sort (), et comment les utiliser - c'est-à-dire qu'il n'est pas nécessaire d'écrire tout à partir de zéro.
Autres critères pour une première langue :
interprété (un retour rapide facilite le processus d’apprentissage).
un environnement interactif qui accélère l’apprentissage, les tests et le débogage.
le code source de haute qualité est disponible pour que les étudiants lisent dans cette langue
"facile à lire", "syntaxe proche du langage naturel" (pour faciliter la lecture et la notation du code source)
portable (fonctionne sous Mac OS, Windows, Unix). Au moins une implémentation de logiciel libre du langage.
rapide à enseigner, "peu de pièges" - par exemple, "il peut être plus rapide d'enseigner d'abord aux débutants Python, puis Java, plutôt que Java en tant que premier OOPL." - "Comparaison des langages de programmation orientés objet" et TelescopeRule
Matthias Felleisen a développé un langage de programmation avec des messages d'erreur adaptés à un public débutant. Il souligne que le choix d’une langue n’est pas aussi important que l’enseignement d’une bonne méthodologie de conception. En fait, il considère le premier cours de CS comme un cours d'arts libéraux, où il enseigne la pensée critique, la résolution de problèmes et le souci du détail.
critères pour un deuxième langage de programmation
Des choses que nous voulons que les étudiants apprennent, mais peut-être que cela peut attendre le deuxième langage de programmation:
un langage "pertinent" qui n'est "pas trop ésotérique"; quelque chose de "populaire dans l'industrie"
Théorie de la complexité: comment reconnaître des tâches impossibles avec les technologies actuelles.
niveau supérieur: comment choisir le bon outil pour le travail , comment utiliser un compilateur, structures, programmation orientée objet, programmation fonctionnelle, programmation logique, conception du compilateur, composition et manipulation de fonctions (au sens de Lisp / ML), programmation concurrente et distribuée,
trucs de bas niveau: arithmétique de pointeur, architecture informatique. gestion de la mémoire, cadres de pile, programmation des assemblages, architecture de la machine, pilotes de périphérique et conception du système d'exploitation (afin que la machine ne "ressemble pas à une boîte noire effrayante qu'elle ne peut pas pénétrer")
EDIT: Je trouve décevant que la publication d’un résumé de quelque chose que j’ai écrit, en collaboration avec beaucoup d’autres, "ne soit peut-être pas une publication légale".
J'ajoute donc une citation plus formelle à mon précédent lien informel, en essayant de respecter les règles d' utilisation équitable et d'autres droits d'auteur du wiki.
Cette réponse est un résumé de la langue première de Freshman (Anon 2011) au Portland Pattern Repository.
(Anon 2011) De nombreux auteurs anonymes et divers. "Première Langue Freshmans". Dépôt de modèle de Portland. 27 septembre 2011. http://c2.com/cgi/wiki?FreshmansFirstLanguage .