Principes et idées clés du génie logiciel#

Cette page rassemble les principes et idées importantes qui traversent l’ensemble du cours. Chaque principe est traité en profondeur dans le module où il est le plus pertinent ; les liens ci-dessous pointent vers ces sections.

Gestion de la complexité#

Principes de conception#

Principes de systèmes distribués#

  • Théorème CAP (Eric Brewer, 2000) : un système distribué ne peut garantir simultanément que deux des trois propriétés suivantes : cohérence, disponibilité, tolérance aux partitions → Module 5, Est-ce que ça va tenir la charge ?
  • Premature optimization (Donald Knuth) : « Premature optimization is the root of all evil. » Ne pas concevoir pour des millions d’utilisateurs avant d’en avoir besoin → Module 5, Est-ce que ça va tenir la charge ?

Principes de mesure et d’observation#

  • Loi de Goodhart (Charles Goodhart, 1975) : « Lorsqu’une mesure devient un objectif, elle cesse d’être une bonne mesure. » → Module 4, L’agilité (critique)
  • Dette technique (Ward Cunningham, 1992) : le code imparfait livré consciemment est une dette qui génère des intérêts → Module 4, Gestion de projet

Principes de pratique#

  • Refactoring (Martin Fowler, Refactoring, 1999) : modifier la structure interne du code sans changer son comportement observable, mécanisme de remboursement de la dette technique → Module 4, Gestion de projet
  • Egoless programming (Gerald Weinberg, The Psychology of Computer Programming, 1971) : dissocier son ego de son code, accueillir les critiques comme des contributions → Module 2, Introduction
  • Shift left : déplacer les vérifications de qualité le plus tôt possible dans le processus de développement, plutôt que de les confier à une équipe séparée en aval → Module 2, L’intégration continue
  • Boy Scout Rule : “Always leave the campground cleaner than you found it.”