Recommandations de lecture

Durant des sessions de formations, on m’a souvent demandé des bibliographies ou des conseils de lecture sur certains sujets. J’ai décidé de mentionner ici quelques ouvrages qui me semblent particulièrement judicieux pour étudier ou approfondir des domaines liés à la programmation, aux systèmes Unix et Linux, ou aux environnements temps-réel et embarqués.

J’ai regroupé les livres par thèmes, et au sein de chaque thème j’ai classé les ouvrages par ordre alphabétique de nom d’auteur.

Tous ces ouvrages sont de grande qualité, et en regard de chaque livre j’ai indiqué sur une échelle de 1 à 3 étoiles ma perception personnelle et subjective ainsi :

*** Indispensable. Si vous ne l’avez pas lu, commandez-le tout de suite.
** Très utile. Fortement recommandé pour maîtriser le domaine.
* Utile pour approfondir un sujet.

CONCEPTION, ARCHITECTURE

Frederick P. Brooks : Le mythe du mois-homme – The Mythical Man-Month (*)

S’appuyant sur l’étude de projets d’envergure des années 70, notamment sur IBM/360, Frederick Brooks pose les fondations du génie logiciel, qu’il approfondit à travers une collection d’articles des années 80 et 90. Deux idées maîtresses qui me semblent parfaitement juste: “Inutile d’ajouter des programmeurs sur un projet en retard, ça le retardera encore plus” et “Prévoyez de jeter un exemplaire de votre code et de tout réécrire, alors commencez par un prototype“.

Steve Krug : Don’t make me think revisited (*) et Rocket Surgery Made Easy (*)

Don’t make me think est un guide pour le développeur et le testeur pour s’assurer de la qualité d’utilisation d’une interface graphique. Les éditions actuelles sont centrées sur les fonctionnalités modernes liées au web 2.0, mais les concepts s’appliquent plus largement à de nombreuses applications graphiques. Il s’agit de la seconde édition, revue et modifiée pour s’adapter aux applications mobiles. Rocket Surgery Made Easy est la mise en pratique de ces concepts, en menant des “Usability Tests” pour vérifier la qualité d’utilisation d’un logiciel ou d’un site web.

Steve Mc Connell : Stratégies pour Développer Juste – Software Project Survival Guide (**)

Se présentant comme un guide de survie (pour le logiciel, pas pour le développeur), ce livre insiste sur l’organisation des étapes nécessaires autour du développement proprement dit (architecture, qualité, livraison, modifications, etc.) pour assurer la réussite d’un projet.

Steve Maguire : Debugging the Development Process (**)

Ce livre est un manuel à l’usage du chef de projet pour mener à bien un développement logiciel en minimisant les retards et optimisant la qualité du code produit. L’accent est porté sur la motivation et l’encadrement de l’équipe de développement.

PROGRAMMATION, LANGAGES

Michael Feathers : Working Effectively with Legacy Code (**)

La maintenance d’un code pré-existant, dont on hérite sans avoir participé à sa création initiale, sans connaître les raisons des choix initiaux de conception est une activité très répandue, souvent peu gratifiante et plutôt pénible.

L’auteur nous présente une méthode de travail, s’appuyant notamment sur la qualité des tests unitaires pour intervenir dans du code qui n’est pas le nôtre. De nombreux cas sont analysés et présentés en détail.

Martin Fowler, Kent Beck, et al. : Refactoring: Improving the Design of Existing Code (**)

Ce livre est une référence incontournable du refactoring, la retouche régulière du code existant pour en améliorer la qualité, la robustesse, la maintenabilité, etc. Les auteurs présentent des recettes détaillées pour la modification d’un code source en évitant les risques de régression.

James W. Grenning : Test-Driven Development for Embedded C (***)

Le développement piloté par les tests est une manière d’organiser la programmation en structurant la production de code autour des tests unitaires. Cette approche permet de garantir un développement fluide, en éliminant au maximum les phases de débogage pénibles et coûteuses. Plusieurs livres traitent de ce sujet avec talent. Celui-ci me plaît beaucoup pour deux raisons : il traite du langage C, alors que la plupart des autres ouvrages contiennent des exemples en Java, et il présente la vision d’un ingénieur en systèmes embarqués. Ce point est important car la communication avec le matériel – qui est habituellement au cœur des projets embarqués – est souvent complexe à tester de manière automatisée.

Lien Amazon : https://amzn.to/2E6Ud7m

Andrew Hunt & David Thomas : The Pragmatic Programmer, from Journeyman to Master (***)

Ce livre est une mine de conseils, de réflexions et de petites remarques sur l’amélioration de la qualité du code. Comme les ouvrages de Robert C. Martin (voir ci-dessous), ce sont des textes qui mettent en avant la satisfaction qu’apporte le travail du développeur.

Brian W. Kernighan & Rob Pike : The Practice of Programming (**)

Ce livre très intéressant est un ensemble de conseils avisés sur la qualité de la programmation tant sur le fond (algorithmes, structures de données, etc.) que sur la forme (style, conventions de codage…). L’accent est mis sur deux points essentiels pour la qualité logicielle : la lisibilité du code et la robustesse de l’implémentation.

Brian W. Kernighan & Dennis M. Ritchie : Le langage C – The C Programming Language (***)

Un livre incontournable pour tout développeur amené à programmer en C, C++, Java et tous les autres langages dérivés. L’intelligence du texte et le choix judicieux des exemples en fait un modèle de clarté et de précision.

Andrew Koenig : Pièges du langage C – C Traps and Pitfalls (**)

Une analyse pointue de certaines erreurs que peuvent commettre programmeurs débutants ou chevronnés en langage C. Très utile pour se perfectionner dans ce langage.

Steve Mc Connell : Code Complete (***)

Je mettrais peut-être ce livre en tête de ceux que je considère comme indispensables pour prétendre écrire du code robuste, extensible et performant. Il en existe deux éditions, la seconde intégrant les concepts de la programmation orientée objet. On peut le trouver tant en version originale qu’en version française, mais le titre français a changé entre les deux éditions.

Première édition

Seconde édition

Steve Maguire : L’art du code – Writing Solid Code (***)

Je rapproche cet ouvrage de celui de Steve Mc Connell ci-dessus. Il contient beaucoup de très bonnes idées pour améliorer la robustesse d’un logiciel en améliorant la qualité de l’implémentation originale plutôt qu’en comptant sur l’exhaustivité des tests.

Robert C. “Uncle Bob” Martin : Clean Code (***), Clean Coder (***), Clean Architecture (**)

Ces trois livres sont assez proches de ceux de Steve Mc Connell et Steve Maguire, mais l’approche est plus moderne. Le style et la richesse des textes d’Uncle Bob sont appréciables à chaque page. Comme les précédents, ce sont des ouvrages que je trouve enrichissant de lire et relire à plusieurs reprises.

SYSTÈMES D’EXPLOITATION, UNIX, LINUX

Michael Kerrisk : The Linux Programming Interface (***)

Je connais Michael depuis longtemps ; il est mainteneur du projet “Linux man-pages” et j’ai fait sa connaissance lorsque je gérais les traductions françaises des pages de manuel. J’ai eu le plaisir de participer à la relecture technique de ce livre et j’ai beaucoup apprécié la clarté du texte de Michael ainsi que la précision et le choix judicieux de ses exemples.

Eric S. Raymond : The Art of Unix Programming (**)

On connaît Eric Raymond comme promoteur de l’Open Source (plutôt que du Free Software de Richard Stallman dont il rejette la dimension politique et philosophique), et comme sociologue des logiciels libres (à travers entre autres son texte “La Cathédrale et le Bazar“). Dans ce livre, il présente, à travers de très nombreuses études de cas, des exemples de bonnes pratiques pour le développement Unix.

Richard Stevens : Unix Network Programming (**)

Pour tous ceux qui veulent approfondir les arcanes de la programmation réseau, il s’agit probablement d’un des ouvrages les plus pointus dans ce domaines. A noter que certains protocoles présentés sont aujourd’hui obsolètes (rlogin par exemple), mais les exemples de code utilisant les sockets BSD sont toujours aussi pertinents.

Richard Stevens, Stephen A. Rago : Advanced Programming in the Unix Environment (**)

Ce livre, souvent surnommé APUE dans les forums de développeurs, permet de tirer le meilleur parti des systèmes Unix. Pour l’étude des aspects spécifiques de Linux, je conseillerais toutefois en complément le livre de Michael Kerrisk.

Andrew Tanenbaum – Operating Systems Design and Implementation (***)

Un livre fondamental pour l’étude des systèmes d’exploitation modernes. C’est cet ouvrage qui a donné à Linus Torvalds l’envie d’écrire son propre clone d’Unix. L’auteur a écrit le système Minix dont les sources servent de support pour illustrer le propos de cet ouvrage.

Depuis son fameux conflit avec Linus, Andrew Tanenbaum reste arc-bouté contre Linux et persuadé de la suprématie de son système Minix. Il exprime dans un entretien récent sa frustration à travers des justifications futiles (le projet BSD bloqué à cause d’un conflit sur un numéro de téléphone…). Il n’en reste pas moins que ce livre est excellent pour comprendre les ressorts des systèmes d’exploitation et les algorithmes fondamentaux de gestion des ressources matérielles.

Linus Torvalds : Il était une fois Linux – Just for fun (*)

Incontournable pour les amateurs de l’histoire de Linux. De nombreuses anecdotes amusantes. Probablement inintéressant pour les autres lecteurs qui préféreront peut-être une biographie de Steve Jobs…

TEMPS RÉEL, DRIVERS, SYSTÈMES EMBARQUÉS

Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman : Linux Device Drivers (**)

Cet excellent livre est généralement surnommé LDD3 (troisième édition) par les développeurs Linux.

Je crois qu’il s’agit du seul livre que j’ai acheté trois fois, à chacune de ses nouvelles éditions car elles suivaient les évolutions importantes de structure du noyau dans ses premières versions. Depuis la troisième édition, adaptée au noyau 2.6.10, il n’y a malheureusement plus de mise à jour (hormis quelques ajouts et errata sur lwn.net).

Les rumeurs incessantes de nouvelle édition imminente ont été douchées par Greg Kroah-Hartman en 2017 d’un “It’s not going to happen sorry. There is no current plans for a new edition at all.“.

Le livre de John Madieu (ci-après) vient combler ce manque. Je conseillerais toutefois de conserver également le LDD3 en référence, tout en sachant que ses exemples sont dépassés.

Pierre Ficheux : “Linux embarqué” (***)

Le livre de mon ami Pierre est un ouvrage incontournable pour maîtriser  la conception et la production d’un système embarqué construit sur Linux. Outre la précision technique et la justesse des exemples, on notera la qualité pédagogique de ses explications, comme peuvent également en témoigner les lecteurs de ses nombreux articles dans la presse technique Linux.

John Madieu : “Linux Device Drivers Development” (***)

Pendant de nombreuses années, le seul livre détaillé sur l’écriture de drivers pour Linux était le “LDD3” malheureusement dépassé. Le livre de John Madieu vient combler un manque important en permettant aux lecteurs intéressés par le développement kernel de s’initier en s’appuyant sur des exemples récents et des références à jour aux noyaux actuels.

Pierre-Jean Texier & Petter Mabäcker : “Yocto for Raspberry Pi” (***)

Ce livre de mon confrère Pierre-Jean Texier est un très bon outil d’apprentissage de Yocto qui s’appuie sur la plus populaire des plates-formes pour Linux embarqué. Clair et très détaillé, il facilite énormément la découverte de l’univers Yocto / Open Embedded.

Karim Yaghmour : “Building Embedded Linux Systems” (***)

Un des premiers livres publiés consacré aux systèmes embarqués avec Linux. J’ai beaucoup aimé la première édition de ce livre. Un très bon complément à celui de Pierre Ficheux.

3 Réponses

  1. achille dit :

    Merci pour ces références! c’est vrai que la plupart du temps il est difficile pour nous les novices de savoir trouver la bonne documentions. vivement les références sur l’embarqué.

  2. GUEGAN Gael dit :

    Salut, cool ton site !

    Je recommanderais le livre “LINUX DEVICE DRIVERS” de jonathan Corbet, Allessandro Rubini et Greg Kroah-Hartman

    • cpb dit :

      Oui ce livre est très bien, mais il est très ancien (noyau 2.6.10).
      Les concepts n’ont pas énormément évolués, mais l’API proprement dite si.
      À noter : on peut le télécharger directement sur lwn.net.

      Je recommanderais un livre plus récent (fin 2017) : le “Linux Device Drivers Development” de John Madieu chez Packt Publishing. Très intéressant.

URL de trackback pour cette page