- Cet article propose des cours d’informatique réalistes et satiriques que les développeurs logiciels devraient suivre, bien qu’ils n’existent pas réellement
- Chaque cours met en lumière de manière critique les problèmes de la culture de développement moderne ou certaines façons de penser biaisées
- On y traite par exemple de la foi aveugle dans le paradigme orienté objet, du mépris pour l’UX des outils en ligne de commande, ou encore des idées reçues sur les performances des langages lents
- La liste inclut aussi des matières consacrées aux obsessions psychologiques des développeurs et à leurs habitudes improductives
- Dans l’ensemble, le texte présente avec humour les limites de l’enseignement de l’informatique et le besoin d’introspection dans la culture du développement
CSCI 2100: Oublier la programmation orientée objet
- Ce cours porte sur les concepts de variables et de fonctions qui n’appartiennent pas à une hiérarchie d’objets
- Il s’éloigne de la pensée centrée sur l’orienté objet pour explorer la souplesse et la simplicité de la programmation fonctionnelle
- La « fonction » y est présentée comme un concept plus général et plus réutilisable que la « méthode »
- Le prérequis est n’importe quel cours ayant utilisé le terme « abstract base class »
- L’objectif est de déconstruire la dépendance excessive au paradigme orienté objet et de redéfinir une manière plus essentielle de penser la programmation
CSCI 3300: Études sur les logiciels classiques
- Cours consacré à l’analyse et à la discussion de logiciels historiquement importants
- Parmi les exemples étudiés figurent VisiCalc, AppleWorks, Robot Odyssey, Zork, MacPaint
- L’accent est mis sur l’interface utilisateur (UI) et l’influence des contraintes matérielles sur la créativité
- En revisitant les innovations nées de ces contraintes passées, le cours réexamine les principes fondamentaux du design logiciel moderne
CSCI 4020: Écrire du code rapide dans un langage lent
- Ce cours explique comment écrire du code haute performance même avec des langages interprétés (comme Python)
- Il explore des stratégies permettant d’effectuer une analyse de performance à haut niveau et d’atteindre une efficacité digne du C++
- Il cherche à la fois à réduire la fragilité du code et à préserver le plaisir de développer
- Il remet en cause l’idée reçue selon laquelle « les langages lents sont lents » et montre le potentiel d’optimisation du design des langages et de l’environnement d’exécution
CSCI 2170: L’expérience utilisateur (UX) des outils en ligne de commande
- Cours d’introduction aux principes de conception de l’expérience utilisateur pour les programmes en ligne de commande
- Les thèmes centraux sont la pertinence, la lisibilité et la sobriété de la sortie
- En prenant la commande UNIX
ls comme étude de cas, le cours analyse les problèmes liés à l’excès d’options et aux interfaces complexes
- Il souligne que les outils en ligne de commande, eux aussi, ont besoin d’une conception centrée sur l’utilisateur, comme les interfaces graphiques
PSYC 4410: La psychologie des obsessions du programmeur
- Ce cours explore les obsessions improductives et les schémas de pensée compulsifs dans lesquels tombent souvent les développeurs logiciels
- Exemples : le formatage du code, les taxonomies, les systèmes de types, la fragmentation excessive des fichiers, etc.
- Il analyse d’un point de vue psychologique les réactions critiques immédiates et réflexes face à un système inconnu
- Il vise à comprendre les biais cognitifs et les tendances perfectionnistes des développeurs, afin de rechercher un équilibre entre collaboration et créativité
Contexte général
- Cette liste n’est pas un véritable programme de cours, mais une critique satirique de l’enseignement de l’informatique et de la culture du développement
- Chaque matière met en évidence les angles morts d’une pensée trop centrée sur la technique et invite les développeurs à faire preuve de souplesse intellectuelle et d’introspection
- Bien que publié en 2015, le texte porte un constat qui reste pleinement pertinent aujourd’hui
1 commentaires
Avis Hacker News
CSCI 3300: Études classiques du logiciel
Ce qu’Alan Kay souligne depuis des décennies, c’est que nous continuons à réinventer des concepts déjà établis à la fin des années 70
Je partage sa déception face au fait que, tout comme un artiste apprend l’histoire de l’art, les programmeurs devraient aussi apprendre l’histoire de l’informatique
Comparer l’informatique, dépendante des performances du matériel physique, à l’art me semble exagéré
Penser que la manière de résoudre les problèmes en 1970 s’applique telle quelle en 2025, c’est passer à côté de la réalité
Ce cycle de redécouvertes répétées, où chaque génération croit avoir trouvé quelque chose de nouveau, est fascinant
Apprendre les problèmes et les solutions du passé n’est jamais une perte de temps
Ce travail m’a permis de mieux comprendre l’évolution d’Unix et du logiciel propriétaire, et je suis totalement d’accord avec Alan Kay
CSCI 3240: Ignorer le battage médiatique
Un cours pour apprendre à ignorer les modes autour des dernières plateformes ou bibliothèques
Puis CSCI 3120: Développement guidé par la nouveauté traiterait au contraire de la manière de suivre les tendances pour garder sa motivation
Les deux cours ne peuvent pas être suivis en même temps
On pourrait aussi imaginer des cours sur la conduite de réunions (PSYC 4870), l’acceptation des frictions organisationnelles (PSYC 5630), etc.,
qui traiteraient de la communication et de la motivation dans un cadre de travail réaliste
CSCI 4810: Le laboratoire du refus
Un laboratoire où l’on simule des demandes produit non éthiques et la pression des délais, et où il faut les refuser selon des standards professionnels pour valider le cours
Proposition de cours sur le débogage
J’aimerais qu’il existe un cours pour apprendre à trouver la cause racine des bugs et à utiliser différents outils
printIl faudrait prendre le temps de parler du salut qu’apporte le débogage interactif
CSCI 0001: Programmation fonctionnelle et théorie des types
Le jargon obscur et les formules du monde académique ont longtemps freiné la popularisation de la programmation fonctionnelle
Il est temps d’apprendre directement pourquoi une monade est un monoïde dans la catégorie des endofoncteurs
CSCI 4020: Écrire du code rapide dans des langages lents
Un cours qui enseignerait la complexité algorithmique avec des langages lents (VB, Ruby, etc.) et montrerait qu’un O(N) en Ruby peut battre un O(N²) en C++
et j’avais été surpris de voir BASIC obtenir un résultat étonnamment rapide
Cela m’a permis de comprendre concrètement pourquoi Python est utile en IA
Du code vectorisé sur mémoire linéaire est bien plus rapide que des données dispersées sur le tas
Collection des épisodes précédents
La série « Computer science courses that don't exist, but should » comprend notamment
l’édition 2015 (247 comments),
l’édition 2017,
l’édition 2018
Cela me rappelle un cours de Software Archaeology que j’avais suivi à l’université
C’était un cours où l’on réimplémentait des exercices de compilateur des années 1970,
et même si cela me semblait inutile à l’époque, cela m’a ensuite beaucoup aidé à comprendre la conception des systèmes
Savoir remonter d’anciens bugs, des wikis, l’historique des versions et celui des équipes est indispensable
Aujourd’hui, beaucoup de cursus en informatique sont devenus en pratique des écoles professionnelles de code
Les étudiants savent utiliser des frameworks, mais ne comprennent ni la philosophie de conception des langages ni l’évolution des systèmes
Il ne faut pas oublier que l’informatique n’est pas seulement une affaire d’implémentation, mais aussi une discipline d’idées et de concepts
Les critères d’accréditation laissent peu de marge pour s’éloigner fortement du programme
CSCI 3210: Encodage et traitement modernes du texte
Un cours pour apprendre Unicode et UTF-8, et abandonner l’idée qu’« 1 caractère = 1 octet »
Il traiterait non seulement de l’encodage, mais aussi de la recherche, du tri, du rendu des polices et de la gestion des emoji
C’est fondamental, mais rares sont ceux qui le comprennent vraiment