4 points par GN⁺ 2025-10-25 | 1 commentaires | Partager sur WhatsApp
  • 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

 
GN⁺ 2025-10-25
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

    • Quand j’étais à RIT, il y avait un cours optionnel appelé « History of Computing ». Il couvrait l’histoire depuis le boulier jusqu’aux mainframes et aux réseaux, et les notes de cours existent toujours
    • L’histoire de l’art ou de la philosophie s’étend sur des millénaires, mais celle de l’informatique ne couvre guère qu’une génération ou deux ou trois
      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é
    • J’ai déjà vu sur GitHub quelqu’un demander « Quelle différence avec Ansible ? », et recevoir comme réponse « Je n’ai jamais entendu parler d’Ansible »
      Ce cycle de redécouvertes répétées, où chaque génération croit avoir trouvé quelque chose de nouveau, est fascinant
    • En travaillant avec des fondateurs de startup, on voit souvent des gens présenter comme nouvelle une idée qui existe déjà
      Apprendre les problèmes et les solutions du passé n’est jamais une perte de temps
    • À l’université, j’avais un devoir de « dissertation sur l’histoire des systèmes d’exploitation », et j’avais choisi OS X (Snow Leopard)
      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

    • CSCI 4812: Le laboratoire de carrière traiterait de la réalité consistant à gérer le travail restant après que des collègues ont accepté des demandes non éthiques puis sont partis
    • En réalité, beaucoup de cursus incluent déjà des cours liés à l’éthique
    • Mais les universités finissent tout de même par donner la priorité à l’employabilité de leurs diplômés
  • 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

    • Comme en TP de chimie, on pourrait donner aux étudiants une base de code legacy truffée de bugs, et le cours se terminerait lorsqu’ils feraient passer tous les tests
    • Il faudrait aussi apprendre à lire le code des autres et à ne pas démolir trop vite une structure existante (Chesterton’s fence)
    • Même beaucoup d’ingénieurs seniors déboguent encore avec print
      Il 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

    • Les fonctions pures fonctionnent aussi très naturellement dans une context window
  • 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++

    • Dans un livre que j’ai lu enfant, on comparait un tri à bulles en FORTRAN à un quicksort en BASIC,
      et j’avais été surpris de voir BASIC obtenir un résultat étonnamment rapide
    • J’ai déjà fait un exercice pratique consistant à transformer des boucles Python en opérations vectorisées numpy puis en opérations tensorflow pour mesurer les écarts de vitesse
      Cela m’a permis de comprendre concrètement pourquoi Python est utile en IA
    • Ce serait vraiment bien que les ingénieurs qui utilisent Python tous les jours comprennent pourquoi leur code est lent
    • Souvent, l’exploitation du matériel fait une plus grande différence que la complexité algorithmique
      Du code vectorisé sur mémoire linéaire est bien plus rapide que des données dispersées sur le tas
    • Livre de référence : Visual Basic Algorithms Ready-to-Run
  • 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

    • En pratique, le travail d’enquête numérique est très important dans les grandes bases de code
      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

    • Cela dit, certaines grandes universités publiques conservent encore un tronc commun quasiment identique à celui d’il y a 25 ans
      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