Dans cet article, je partage quelques lectures qui m'ont été utiles dans ma pratique du développement logiciel. Ces ouvrages couvrent divers aspects du développement, de la conception à la gestion de projet, en passant par les bonnes pratiques de codage.
Les livres avec des titres en anglais sont écrits en anglais.
Sommaire
Pour moi, c'est le premier livre à lire lorsqu'on souhaite augmenter la qualité de son code. Il présente les bonnes pratiques de codage avec des explications claires et des exemples concrets pour chaque principe. Il est très accessible et peut servir de support pour des cours. Le relire occasionnellement est bénéfique. J'ai apprécié la simplicité et l'efficacité des principes qui peuvent être appliqués dans n'importe quel langage de programmation.
Test-Driven Development by Example par Kent BeckUn livre sur le TDD (Test Driven Development) qui consiste à écrire les tests unitaires en même temps que l'implémentation. Certaines fois, on parle d'écrire les tests avant l'implémentation ce qui peut être mal interprété. Lorsque j'ai testé cette approche pour la première fois (après avoir lu un court article sur un blog), étant habitué à écrire les tests après l'implémentation, j'ai voulu écrire la totalité de mon test avant l'implémentation ce qui est à l'opposé de la méthode TDD. Cette méthode propose d'écrire le code par itération de cycles très courts en écrivant le test et l'implémentation en parallèle. Le but est d'avoir un retour (feedback) permanent sur le code écrit afin de détecter rapidement les erreurs. Même si on n'adopte pas la méthode dans son ensemble, il y a de nombreux conseils à prendre pour améliorer notre efficacité.
La méthode TDD est vendue comme étant très efficace car on écrit moins de code, on détecte les erreurs plus rapidement, on a un code mieux architecturé et, bien sûr, avec une excellent couverture de tests. Le lecteur est pris par la main pour comprendre la méthode TDD à travers des exemples concrets. Un de mes livres préférés, si ce n'est mon préféré. À mettre entre toutes les mains.
Un épisode de l'excellent podcast "Artisan Développeur" sur un retour d'expérience de l'utilisation du TDD :
Refactoring, Comment améliorer le code existant par Martin FowlerUn livre sur le refactoring, c'est-à-dire la modification du code existant pour l'améliorer sans changer son comportement. Le refactoring est une pratique essentielle pour maintenir la qualité du code au fil du temps. Le livre présente un très grand nombre de techniques de refactoring avec des exemples concrets. Chaque technique est discutée pour savoir quand et comment l'appliquer. Le livre est littéralement une liste d'exemples de codes avec toutes les étapes de transformation ce qui le rend difficile à lire de bout en bout. J'ai apprécié ce niveau de détails qui montre comment modifier du code, pas à pas, en prenant un maximum de précautions. Les motivations de chaque refactoring sont aussi très précieuses et décrivent des bonnes pratiques de codage.
Effective Software Testing, A Developer's Guide par Maurícia AnicheUn livre sur comment rédiger des tests unitaires de qualité. Il explique les différents types de tests unitaires, les techniques utilisées en programmation objet pour l'écriture des tests et comment utiliser les librairies de tests pour paramétrer les entrées. Si vous n'avez jamais écrit de tests unitaires, il y a peut-être des livres plus abordables. J'ai trouvé ce livre très complet et bien structuré, avec des exemples concrets.
The Pragmatic Programmer par David Thomas and Andrew HuntCe livre aborde de très nombreux aspects de la vie d'un développeur. De l'état d'esprit à adopter à certaines bonnes pratiques de codage, comme DRY ou l'orthogonalité, en passant par la boite à outils à maitriser. Les chapitres sont indépendants et peuvent être lus au gré des envies. J'ai apprécié le style informel et la variété des sujets traités. Chaque concept est traité en quelques pages. Par conséquent, on ne rentre pas dans les détails ce qui donne envie d'aller plus loin sur les sujets qui nous intéressent.
Pair Programming Illuminated par Laurie Williams and Robert KesslerCe livre détaille les principes du pair programming, c'est-à-dire deux ou plus développeurs qui travaillent ensemble sur une même machine (et donc sur le même code). Le livre présente l'intérêt du pair programming, comment le mettre en oeuvre et dans quels cas il est à éviter. De nombreux conseils sont donnés pour débuter sereinement avec cette méthodologie, de l'installation de l'environnement à la composition des binômes. Les avantages sont décrits avec des exemples concrets et des anecdotes illustrent avec humour les problèmes rencontrés. Si vous souhaitez découvrir le pair programming, ce livre est une excellente ressource qui vous donnera toutes les clés pour passer à la mise en pratique.
Un livre sur l'architecture logicielle qui est la structure globale d'un logiciel. Il présente les principes SOLID, les couches d'architecture, les styles architecturaux et les bonnes pratiques pour concevoir une architecture robuste et évolutive. J'ai apprécié le style direct et pragmatique de l'auteur qui partage son expérience avec des exemples concrets. Le livre est un peu plus théorique que les autres livres de cette liste mais les explications sont claires et permettent de comprendre les enjeux de l'architecture logicielle.
Design Patterns, Elements of Reusable Object-Oriented Software par Erich Gamma, Richard Helm, Ralph Johnson, John VlissidesUn excellent livre sur la conception de logiciel avec la programmation orientée objet. Il présente 23 patrons de conception (design patterns) qui sont des solutions réutilisables à des problèmes courants. Chaque patron est expliqué en détail avec des exemples concrets. J'ai apprécié les argumentations sur les avantages et les inconvénients de chaque patron qui montre que la conception de logiciel est un exercice d'équilibre et de compromis. Même si on ne souhaite pas utiliser les patrons de conception, le livre est une mine d'or pour comprendre les principes de la conception orientée objet.
Working Effectively with Legacy Code par Michael C. FeathersLe livre donne de nombreuses techniques pour améliorer du code existant en mauvais état, souvent appelé code legacy. Le code legacy peut avoir plusieurs conséquences néfastes : difficulté d'ajout de nouvelles fonctionnalités, bugs fréquents, difficulté de compréhension du code, etc. L'objectif est l'amélioration de ce code afin d'éviter le très (trop ?) couteux : "il faut tout réécrire". Basé sur de nombreux exemples concrets, le livre explique comment identifier les parties du code qui posent problème, comment les isoler et comment les améliorer. De très nombreuses techniques visent à pouvoir écrire des tests unitaires sur du code qui n'a pas été conçu pour cela. Ensuite, le code peut plus facilement être modifié et amélioré. J'ai apprécié le côté très pragmatique du livre et les explications détaillées.
Effective Python, 90 Speficic Ways to Write Better Python par Brett SlatkinLe livre présente des conseils concrets pour écrire du code Python de qualité en utilisant la programmation impérative ou orientée objet. Chaque conseil est illustré par des exemples de code. Plus on avance dans le livre, plus les conseils sont avancés. Comparé au livre "Python Cookbook", un autre livre de référence sur Python, j'ai apprécié la concision du livre et le choix des sujets traités.
Effective Java, 3rd Edition par Joshua BlochCe livre propose des recommandations concrètes pour améliorer la qualité du code Java. Il couvre un large éventail de sujets, appuyés par des explications claires et des exemples parlants. À l'image de "Effective Python", les conseils sont pragmatiques et directement applicables au quotidien. C'est un ouvrage pertinent pour progresser et affiner ses pratiques de développement.
Ce livre expose ce que les auteurs appellent la philosophie du développement agile. Dense et particulièrement riche, il propose une analyse approfondie de l’agilité. Le premier chapitre en pose les fondements : définition de l’agilité, types de projets pour lesquels elle est pertinente, et situations où son usage est déconseillé. Les chapitres suivants parcourent l’ensemble du cycle de développement logiciel en détaillant, pour chaque étape, les pratiques agiles associées, illustrées par des exemples concrets. Chaque pratique est analysée sous l’angle de ses prérequis, de ses bénéfices et des obstacles à sa mise en œuvre. J’ai particulièrement apprécié la rigueur des explications, le caractère opérationnel des conseils proposés et les réflexions sur les interactions entre les différentes pratiques.
eXtreme Programming, La référence par Kent BeckCe livre décrit la méthodologie de développement agile nommée eXtreme Programming (XP). Cette méthodologie met l'accent sur des cycles courts avec de très nombreuses versions. On cherche à supprimer les développements superflus en ce concentrant sur le minimum à inclure dans la prochaine version. Les cycles courts permettent d'obtenir des retours fréquents du client sur le produit qui est en cours de développement. La méthode est présentée de manière très pragmatique avec des conseils concrets pour le développeur, le manageur ou la vie d'équipe. La lecture est très agréable.
La pratique du lean management dans l'IT, Agilité et amélioration continue par Marie-Pia Ignace, Christian Ignace, Régis Medina, Antoine ContalLe livre décrit comment appliquer les principes du lean management dans le développement logiciel. Le lean management s'attèle à l'élimination des gaspillages dans les processus en se focalisant sur le rythme de la production afin d'obtenir un flux de valeur continu. Le lean management est apparu chez Toyota, au Japon, dans les années 50. Le livre explique comment appliquer ces principes dans le développement logiciel en s'appuyant sur l'étude de quatre cas concrets. J'ai apprécié le côté très pragmatique du livre qui permet de découvrir une méthodologie et de poser de bonnes questions. Très bon livre pour découvrir le lean management quand on est dans l'IT. Je pense que le livre n'est pas suffisamment détaillé pour être utilisé comme un guide de mise en œuvre.
The Mythical Man-Month par Frederick P. Brooks, JR.Un classique, au sens historique, sur la gestion de projet logiciel. Le livre explique pourquoi les projets logiciels échouent souvent et comment éviter ces pièges. La première croyance à laquelle l'auteur s'attaque est l'homme mois, c'est-à-dire l'idée que l'on peut estimer la durée d'un projet en multipliant le nombre de personnes par le nombre de mois en sous-estimant l'impact de la communication. La première édition date de 1975 !!! L'édition de 1995 est une édition augmentée de 4 chapitres. Certains concepts sont encore d'actualité, d'autres un peu moins. J'ai apprécié le style humoristique de l'auteur, la plongée dans l'histoire et les exemples d'un autre temps.
Un livre pour apprendre la programmation fonctionnelle qui semble avoir de nombreuses qualités. De nombreux principes posent de bonnes questions comme l'immutabilité des données et les fonctions pures. Un livre court qui pose les bases de façon claire. Je n'ai pas encore eu l'occasion de tester ce paradigme de programmation qui change la manière de penser le code. À lire pour s'ouvrir l'esprit et découvrir de nouvelles pistes pour écrire du code plus maintenable.
Machine Learning avec Scikit-Learn, Mise en oeuvre et cas concrets par Aurélien GéronUn livre sur l'apprentissage automatique (machine learning) avec Python. Tous les cas développés sont illustrés avec des exemples de code montrant la puissance de la librairie Scikit-Learn. J'ai apprécié les explications claires qui m'ont permis d'en apprendre beaucoup sur ce sujet.
Les mots sont des fenêtres (ou bien ce sont des murs) par Marshall B. RosenbergComme le développement logiciel est avant-tout un travail d'équipe, j'aime bien ce livre sur la communication non violente. Le livre est très accessible et contient de nombreux exemples concrets. Il est assez court et donne de nombreux conseils pour améliorer la communication dans l'équipe.
Si vous souhaitez apprendre la programmation, ce livre est une excellente introduction. Il est destiné aux enfants mais il est aussi très accessible pour les adultes débutants. Vous irez probablement plus vite mais vous aurez la chance de bien comprendre toutes les étapes pour créer votre premier logiciel. Je ne sais pas si c'est le meilleur livre pour débuter mais vous trouverez certainement les réponses à de nombreuses questions. Il y a des exemples pour illustrer toutes les étapes et vous guider pas à pas et deux exemples complets de jeux à coder.