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 logicielle

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

S’appuyant sur l’étude de projets importants 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 (*)

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.

Steve Krug : Rocket Surgery Made Easy (*)

Une mise en pratique de son livre « Don’t make me think » dans lequel Steve Krug explique de manière détaillé comment mener des « Usability Tests » pour vérifier la qualité d’utilisation d’un logiciel ou d’un site web.

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

Se présentant comme un guide de survie (pour le logiciel, pas pour le developpeur), 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 : Du code et des hommes – 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 et langages

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 mettrai 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. Martin : Clean Code (***)

J’ai découvert récemment ce livre. Il est très proche de ceux de Steve Mc Connel et Steve Maguire, mais son approche est légèrement plus moderne. Étonnament, même si ces trois livres contiennent des conseils assez similaires, ils présentent des points de vue différents et je trouve enrichissant de les lire et relire tous les trois.

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 jucieux de ses exemples.

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

On connait 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 : 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 la biographie de Steve Jobs…

Systèmes temps-réel et embarqué

À venir…

Une réponse

  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é.

URL de trackback pour cette page