Article original : What's on my software engineering bookshelf
Par Luca Florio
Rester à jour et s'améliorer constamment fait partie du travail d'un ingénieur logiciel.
Il existe de nombreuses façons d'étudier de nouvelles choses sur Internet comme les MOOC, les tutoriels et les articles. Cependant, parfois un livre physique est le meilleur choix, surtout lorsqu'il s'agit d'une "référence" qui fournit des connaissances qui dureront des années. Nous pouvons le mettre sur notre étagère et le consulter chaque fois que nous en ressentons le besoin.
Voici une liste de livres de référence que je garde sur mon étagère d'ingénierie logicielle. J'espère qu'elle pourra être une source d'inspiration pour tous ceux qui cherchent quelque chose d'intéressant à lire ! ?
Ce que j'ai sur mon étagère
Design Patterns: Elements of Reusable Object-Oriented Software
C'est un classique.
Dans ce livre, le célèbre "Gang of Four" présente les 23 design patterns qui ont façonné le monde de l'Orienté Objet pendant des décennies. De nouveaux patterns ont été créés depuis, mais ceux du livre sont considérés comme les fondations de tous les autres patterns.
Ce n'est pas une lecture facile, mais vous devriez y jeter un coup d'œil pour comprendre où trouver ce dont vous avez besoin à chaque occasion. Gardez-le sur votre bureau et consultez-le lorsque vous construisez quelque chose et que vous avez l'impression, "Ce que je fais me semble familier." Vous découvrirez probablement que vous essayez d'implémenter un design pattern déjà décrit dans ce livre.

Clean Code: A Handbook of Agile Software Craftsmanship
J'ai lu ce livre il y a plusieurs années, mais il est resté avec moi depuis.
C'est une excellente source de bonnes pratiques pour produire du code propre et lisible et éviter les mauvaises odeurs de code. Le livre est principalement axé sur Java/OOP, mais de nombreux conseils peuvent être appliqués à tous les langages ou paradigmes de programmation.
Écrire du code maintenable et lisible n'est pas un luxe -- c'est quelque chose que tout bon ingénieur logiciel devrait aspirer à faire. Ce livre vous fournira les connaissances pour y parvenir.
Uncle Bob peut être un peu extrême parfois, et je ne suis pas d'accord avec lui sur toutes les techniques présentées. Mon conseil : lisez-le et ne gardez avec vous que les choses que vous sentez justes. Dans tous les cas, c'est un livre qui vaut la peine d'être lu.

Learn You a Haskell for Great Good!: A Beginner's Guide
C'est un livre sur le langage de programmation Haskell, alors pourquoi l'acheter et le garder comme référence ? Mes raisons sont :
- C'est un livre très bien écrit et facile à lire sur un sujet pas si facile comme la programmation fonctionnelle
- Il vous donne les bases de la pensée fonctionnelle, pas seulement la syntaxe de Haskell
- Haskell est un langage très élégant et je l'aime
C'est le livre qui m'a introduit à la programmation fonctionnelle. Actuellement, je programme principalement en Scala, mais la transition a été beaucoup plus facile après avoir appris les bases de Haskell.
La programmation fonctionnelle n'est pas facile, mais elle ouvrira votre esprit. Elle peut être très théorique, et la mettre en pratique avec Haskell aidera beaucoup.
Il y a aussi de très jolies illustrations dans le livre, donc vous n'avez aucune excuse pour ne pas le feuilleter. ?

Category Theory for Programmers
Ce livre couvre la théorie des catégories, qui est la fondation du paradigme de la programmation fonctionnelle.
Le sujet est assez complexe pour les non-mathématiciens, mais l'auteur a fait un grand effort pour le rendre compréhensible pour les développeurs. J'admets que j'ai eu quelques difficultés à le lire, mais j'aimerais le relire.
Ce livre n'est pas nécessaire pour devenir un grand programmeur fonctionnel. Lisez-le si vous aimez les défis et voulez approfondir les fondations théoriques de la programmation fonctionnelle.

Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems
C'est mon préféré, peut-être parce que j'adore les systèmes distribués ! :-D
Dans ce livre, Martin Kleppmann décrit tous les différents aspects des systèmes distribués, de la sérialisation aux modèles de cohérence et de consensus, en passant par les différents moteurs de bases de données. Il explore également les nouvelles tendances concernant les applications pilotées par les données.
Dans un monde d'applications basées sur des microservices natifs du cloud, il est fondamental de connaître les différents aspects d'un système distribué. Les connaissances fournies par ce livre ne sont pas liées à une technologie spécifique et seront précieuses tout au long de votre carrière en ingénierie logicielle.

Release It!: Design and Deploy Production-Ready Software
Je lis celui-ci en ce moment.
Avons-nous terminé une fois que notre logiciel est envoyé en production ? Non, ce n'est que le début !
Ce livre met en lumière ce qui peut mal se passer après que le logiciel est mis en production et doit faire face à de vrais utilisateurs. Il décrit les anti-patterns qui peuvent compromettre la stabilité de notre logiciel, ainsi que des solutions à ces problèmes.
Ce que j'aime le plus dans ce livre, c'est que chaque chapitre commence par un exemple tiré de la vie réelle. Ensuite, l'auteur analyse les problèmes qui ont causé l'échec du logiciel en production. Je pense que l'apprentissage à partir d'exemples concrets est une approche très efficace.

Introduction to Algorithms
Que puis-je dire sur ce livre ? Achetez-le simplement et gardez-le sur votre bureau.
Si vous êtes ingénieur logiciel, il y a de fortes chances que vous ayez dû étudier les structures de données et les algorithmes. Il n'est pas toujours facile de gérer la complexité ou de choisir la bonne structure de données.
Lorsque des doutes surgissent, ouvrez ce livre et vous trouverez ce dont vous avez besoin.
Pour la plupart des gens (y compris moi), c'est une lecture très difficile. Je lis généralement seulement ce dont j'ai besoin à ce moment-là, et je garde le livre à portée de vue sur mon bureau.

Hyperfocus: How to Manage Your Attention in a World of Distraction
Ce n'est pas un livre technique, mais il fait partie des lectures qui ont changé ma vie en mieux.
Notre travail en tant qu'ingénieurs logiciels consiste à résoudre des problèmes avec notre esprit. Pour être efficace dans cette tâche, nous avons besoin de la capacité à nous concentrer complètement sur le problème que nous résolvons.
Ici, vous pouvez trouver de nombreux conseils et techniques pour maximiser le temps que vous pouvez consacrer à une tâche. L'auteur discute également de l'importance de laisser votre esprit vagabonder lorsque vous avez besoin d'être plus créatif.
Maîtriser l'utilisation de votre attention est quelque chose qui améliorera non seulement vos performances au travail, mais aussi tous les autres aspects de votre vie.

Ce que j'ajouterai à mon étagère
The Pragmatic Programmer
C'est l'un des livres les plus célèbres dans le développement logiciel.
Les suggestions et techniques présentées dans ce livre ont influencé la carrière de nombreux développeurs et ingénieurs pour le mieux. Le livre a été publié en 1999, mais il est maintenant disponible dans une nouvelle édition mise à jour pour le 20e anniversaire.
Vous ne pouvez pas manquer cela. :-)

Refactoring: Improving the Design of Existing Code
Il est difficile de toujours livrer du code de haute qualité. Les délais, l'urgence, une mauvaise journée affectent tous la qualité de votre travail.
C'est pourquoi le refactoring est si important. Si nous n'avons pas pu fournir de la qualité la première fois, nous pouvons l'améliorer plus tard pour une meilleure maintenabilité. Martin Fowler (l'un de mes idoles dans le monde du développement logiciel) décrit les meilleures techniques pour un refactoring efficace.
Il y aura toujours de la place sur mon étagère pour les livres qui m'aident à écrire un meilleur code.

Conclusion
Voici ma liste de livres incontournables sur l'ingénierie logicielle. Ce n'est en aucun cas une liste exhaustive des livres "importants" dans ce domaine, et je suis sûr que j'ajouterai de plus en plus de livres dans les années à venir.
J'espère vous avoir donné quelques bons conseils sur le prochain livre que vous devriez lire. ?
À bientôt !