Je vais faire une hypothèse ici que nous parlons d'un ingénieur logiciel qui a atteint la compétence technique par l'école, le bootcamp ou toute autre opportunité d'apprentissage.
Les algorithmes sont en effet importants et le livre "Introduction aux algorithmes" est un incontournable. Je crois qu'avoir une solide compréhension de la conception de logiciels et de la conception orientée objet est également essentiel, et ma bible reste le livre "Design Patterns : Elements of Reusable Object-Oriented Software". Ses exemples en Smalltalk n'en font pas le livre le plus facile à lire de nos jours, pourtant je ne connais pas d'autre livre avec une telle profondeur et une telle ampleur sur le sujet.
J'ai rencontré de nombreux ingénieurs débutant dans le monde du travail, et j'ai remarqué quelques lacunes au fil des ans, c'est pourquoi je voudrais suggérer des livres pour chacun de ces domaines.
Les nouveaux ingénieurs ont tendance à ne pas comprendre la concurrence, quel que soit le langage. Le concept d'exécuter plusieurs threads en parallèle tout en fournissant le bon niveau de synchronisation entre eux n'est pas facile à saisir. Personnellement, j'ai beaucoup appris en lisant "Java Concurrency in Practice", car je viens d'un environnement Java. Il y a aussi une bonne section sur la concurrence dans "Effective Java", l'incontournable pour savoir comment coder de manière appropriée en Java.
La cybersécurité est enfin un sujet d'actualité. Hélas, les ingénieurs juniors ont tendance à ne pas connaître les concepts de sécurité applicables à leur code. Un bon point de départ est de lire la liste OWASP top 10 et de forer sur chaque vulnérabilité d'application. Je suis un grand fan de "24 Deadly Sins of Software Security : Programming Flaws and How to Fix Them."
Les nouveaux ingénieurs ont tendance à se concentrer sur le codage. Ils pensent que le codage est ce qui compte, et ils veulent produire du bon code rapidement, en s'appuyant parfois sur du code difficile à lire parce qu'ils peuvent le taper de manière plus concise. Il n'y a que deux problèmes avec cette façon de penser : tout ingénieur logiciel crée des bogues, et les ingénieurs logiciels travaillent mieux en équipe ! La qualité est importante, mais la maintenabilité l'est tout autant. Personnellement, j'aime les livres "Working Effectively with Legacy Code" qui parlent des tests et de la nécessité des tests pour améliorer le code. "Clean Code : A Handbook of Agile Software Craftsmanship" aborde le sujet de la maintenabilité, parfois avec un point de vue extrême, ce qui en fait un excellent livre à lire et à discuter en équipe.
Les nouveaux ingénieurs, surtout ceux qui sortent de l'université, peuvent avoir du mal à s'adapter au lieu de travail et à leur nouvel emploi. C'est en fait vrai pour tout ingénieur, en fait n'importe qui, qui commence un nouvel emploi aussi. Il existe un excellent livre intitulé "The First 90 Days : Proven Strategies for Getting Up to Speed Faster and Smarter" qui m'a appris de nombreux concepts sur la façon de commencer un nouvel emploi, et en particulier le besoin de structure. La structure, c'est bien. Elle est réconfortante, surtout dans un nouvel environnement. J'obtiens des résultats cohérents en appliquant la même recette, tout comme lorsque je fais un gâteau avec ma fille. Lorsque j'ai commencé à travailler chez Wayfair il y a onze mois au sein de l'équipe Native App, j'ai choisi de poser des questions assez génériques mais cohérentes dès mon arrivée afin de m'imprégner du terrain. Ces questions m'ont non seulement donné une idée de ce qui se passait, mais m'ont aussi beaucoup appris sur les personnes que je rencontrais. J'ai poursuivi ma mission d'enquête pendant environ un mois en utilisant le même questionnaire à chaque 1:1, et j'ai commencé à dresser la liste de mes domaines d'intérêt dès le premier jour.
Je suis dans le développement de logiciels depuis plus de vingt ans, et je lis des livres sur le leadership depuis dix ans, alors n'hésitez pas à me demander des livres sur le leadership si vous préférez des lectures plus récentes!