Du côté des sceptiques, on peut quand même remarquer que beaucoup de méthodes de travail en programmation font plus de sens quand on a déjà été confronté, dans sa pratique, aux problèmes qu’elles attaquent. Quand on commence tout juste, on ne ressent pas le besoin d’un outil de gestion de version, on travaille dans un fichier, éventuellement on fait des copies (code_1, code_2 etc.) quand on veut des sauvegardes. Pareil pour le build system, on peut appeler le compilateur/l’interpréteur à la main au début, etc. Les tests unitaires, on comprend vraiment l’intérêt quand on voit sa première régression dans un projet, au début on fait juste des tests sur le moment et on les efface.
Du coup, montrer tout ça à quelqu’un qui vient tout juste de programmer, il y a un risque de le dérouter avec ce protocole et cette complexité dont il ne voit pas l’intérêt. J’aurais plutôt tendance à apprendre aux gens le minimum pour être productifs pour faire de petites expériences, coder un vrai petit projet de leur côté, et ensuite dans un second temps introduire plus d’outils et de méthodes. Tout cela peut se faire au sein d’un même cours (avec un chapitre "vrai projet" au milieu, guidé ou non), mais c’est aussi naturel de séparer en plusieurs cours.
(Pour l’algorithmique aussi je suis personnellement de l’avis que ça vient plus naturellement après une pratique basique de la programmation, et que ça peut se faire en donnant des exemples dans plusieurs langages de programmation différents, en évitant le pseucode qui ne s’exécute pas.)