-
Présentation du livre
- Il y a un livre prêté à un étudiant comme lecture d’été
- Ce livre est l’une des œuvres les plus importantes de l’informatique et a eu une grande influence sur le parcours et les recherches de son lecteur
- Son titre est Structure and Interpretation of Computer Programs (SICP), de Hal Abelson et Jerry Sussman
-
Importance du livre
- Ce livre a un fort impact lorsqu’on découvre l’informatique pour la première fois
- Il présente les éléments fondamentaux de la programmation et explore des sujets variés
- Parmi ces sujets figurent l’abstraction lambda, le calcul d’ordre supérieur, les structures de données complexes, la modularité, les flux, l’évaluation paresseuse, la construction d’interpréteurs et de compilateurs, ainsi que la gestion du stockage
-
Approche de la conception de langages
- Hal et Jerry considèrent tout comme un exercice de conception de langages
- Ils introduisent l’idée de structurer des systèmes complexes au moyen d’une conception en couches
- Chaque couche est construite en combinant des éléments considérés comme primitifs à ce niveau
-
Nature de l’informatique
- La révolution informatique est une révolution des façons de penser et des façons d’exprimer
- Ils introduisent le concept d’épistémologie procédurale, c’est-à-dire l’étude de la structure du savoir dans une perspective impérative
- L’informatique fournit un cadre pour répondre à la question du « comment »
-
Pertinence durable du livre
- Cet ouvrage, acheté en 1988, reste toujours pertinent
- C’est l’un des rares livres d’informatique qui conservent leur valeur avec le temps
- À l’image des Lectures on Physics de Feynman, il capture très bien l’essence de l’informatique
-
Mise à jour
- Mise à jour le 27 janvier 2024
- Ce livre figure aussi dans une bibliographie Lisp annotée
1 commentaires
Commentaires sur Hacker News
On peut apprendre le contenu du livre grâce aux vidéos du cours de 1986 d’Abelson et Sussman. Leur explication de la hiérarchisation des abstractions m’est utile, à titre personnel comme en tant que mentor.
Les textes classiques comme SICP parlent de conception de programmes, mais aujourd’hui j’ai l’impression que la conception de systèmes est plus importante. Je ne sais pas si les systèmes distribués font partie de l’informatique théorique, mais c’est un problème plus général à résoudre. Il faut écrire le système de la manière la plus simple possible, utiliser des outils d’observabilité pour repérer les défauts de conception, puis résoudre les problèmes à l’aide de structures de données ou d’autres méthodes issues de l’informatique. Dans la plupart des cas, la notation grand O et la complexité d’exécution n’ont pas tant d’importance, et un tableau avec un CPU rapide suffit à résoudre la majorité des problèmes. Quand il y a un problème de performance, il faut profiler le programme pour trouver les points chauds. L’informatique ne vous apprend pas comment fonctionne la mise en cache mémoire du CPU. Un bel algorithme de graphe peut avoir une bonne complexité théorique tout en ruinant complètement le cache du CPU, alors qu’on aurait pu aller plus vite avec un tableau. Les problèmes plus généraux sont la tolérance aux pannes, la justesse des verrous distribués et des files d’attente, ainsi que la montée en charge des systèmes. Je suis peut-être biaisé par ma formation en informatique matérielle et en génie électrique.
Le lien vers l’exemplaire gratuit est cassé. Vers 2001, seule la version HTML était disponible gratuitement, et quelqu’un l’a convertie en TeXinfo. Aujourd’hui, si vous voulez étudier SICP, vous pouvez exécuter le code avec MIT Scheme ou DrRacket.
"The Elements of Programming Style" mérite d’être lu trois fois, et j’en ai tiré beaucoup de bénéfices en le relisant encore davantage. On peut se référer à la critique de 2010.
J’aurais aimé apprécier SICP, mais Lisp me semble difficile. En revanche, j’aime Haskell et Standard ML. Je me demande si d’autres ont eu une expérience similaire. Il pourrait être intéressant de lire, dans un autre langage, un livre animé du même esprit que SICP. Je n’ai pas envie de faire SICP en JavaScript.
Je serais curieux d’avoir des avis sur "Software Design for Flexibility: How to Avoid Programming Yourself into a Corner".
SICP m’a aidé à comprendre qu’il existe différents modèles de programmation. Ce livre aide à lire la documentation des langages, bibliothèques et frameworks, et à s’orienter.
Je programme depuis 25 ans et je possède le livre depuis une dizaine d’années. J’ai commencé récemment avec DrRacket. L’un de ses avantages est qu’en survolant une variable avec la souris, on peut voir visuellement ses liens avec d’autres endroits du code. En revanche, j’étais un peu frustré que ce ne soit pas VS Code. J’ai donc configuré un environnement me permettant de résoudre les exercices avec VS Code, enfin en réalité Cursor. L’intégration des LLM est impressionnante, et je peux lui donner le code ainsi que le récit que j’ai écrit pour demander un retour. J’ai avancé un peu dans les exercices, puis j’ai transformé le code, les réponses que j’avais rédigées et les retours reçus du LLM en site statique. C’était une manière amusante de passer le temps. Je ne comprends pas complètement SICP sans l’aide d’un LLM, mais il est intéressant de voir comment intégrer un LLM dans la pratique.
À la deuxième lecture, j’ai commencé à explorer les notes de bas de page et la bibliographie, et j’ai découvert qu’il existe un monde magnifique. Il y a un article dans lequel Sussman et son équipe ont conçu un processeur programmable sur mesure pour calculer les propriétés des corps célestes. C’est toujours étonnant.
Fournit des liens vers la version originale et la version JavaScript.