Quali sono i libri da leggere per gli ingegneri del software?

Prevedo che stiamo parlando di un ingegnere del software che ha raggiunto la competenza tecnica attraverso la scuola, il bootcamp o qualsiasi altra opportunità di apprendimento.

Gli algoritmi sono davvero importanti e il libro "Introduction to algorithms" è un must-read. Credo che avere una forte comprensione del design del software e del design orientato agli oggetti sia anche fondamentale, e la mia bibbia è ancora il libro "Design Patterns: Elements of Reusable Object-Oriented Software". I suoi esempi in Smalltalk non lo rendono il più facile da leggere al giorno d'oggi, eppure non sono a conoscenza di nessun altro libro con una tale profondità e ampiezza sull'argomento.

Ho incontrato molti ingegneri che iniziano a lavorare, e ho notato alcune lacune nel corso degli anni, quindi vorrei suggerire libri per ciascuna di queste aree.

I nuovi ingegneri tendono a non capire la concorrenza, non importa il linguaggio. Il concetto di eseguire più thread in parallelo fornendo il giusto livello di sincronizzazione tra loro non è facile da afferrare. Personalmente ho imparato molto leggendo "Java Concurrency in Practice", provenendo da un background Java. C'è anche una buona sezione sulla concorrenza in "Effective Java", la lettura obbligatoria su come codificare in modo appropriato in Java.

La cyber-sicurezza è finalmente un argomento caldo al giorno d'oggi. Ahimè, gli ingegneri junior tendono a non essere consapevoli dei concetti di sicurezza applicabili al loro codice. Un buon punto di partenza è la lettura della lista OWASP top 10 e l'approfondimento di ogni vulnerabilità dell'applicazione. Sono un grande fan di "24 Deadly Sins of Software Security: Programming Flaws and How to Fix Them."

I nuovi ingegneri tendono a concentrarsi sulla codifica. Credono che la codifica sia ciò che conta, e vogliono produrre del buon codice velocemente, a volte affidandosi a codice difficile da leggere perché possono scriverlo in modo più conciso. Ci sono solo due problemi con questo pensiero: ogni ingegnere del software crea bug, e gli ingegneri del software lavorano meglio in team! La qualità è importante, e anche la manutenibilità è importante. Personalmente, mi piacciono i libri "Working Effectively with Legacy Code" che parlano di test e del bisogno di test per rendere il codice migliore. "Clean Code: A Handbook of Agile Software Craftsmanship" affronta l'argomento della manutenibilità, a volte con un punto di vista estremo, il che lo rende un ottimo libro da leggere e discutere in gruppo.

I nuovi ingegneri, specialmente dopo il college, possono avere difficoltà ad adattarsi al posto di lavoro e al loro nuovo lavoro. Questo è in realtà vero per ogni ingegnere, in realtà chiunque, che inizia un nuovo lavoro. C'è questo grande libro "I primi 90 giorni: Proven Strategies for Getting Up to Speed Faster and Smarter" che mi ha insegnato diversi concetti su come iniziare un nuovo lavoro, e in particolare il bisogno di struttura. La struttura è grande. È confortante, soprattutto in un nuovo ambiente. Ottengo risultati coerenti applicando la stessa ricetta, proprio come quando cucino una torta con mia figlia. Quando ho iniziato a Wayfair undici mesi fa nel Native App Team, ho scelto di fare domande abbastanza generiche ma coerenti al mio arrivo per avere un quadro della situazione. Queste domande non solo mi hanno dato un'idea di quello che stava succedendo, ma mi hanno detto molto sulle persone che stavo incontrando. Ho continuato la mia missione di accertamento dei fatti per circa un mese usando lo stesso questionario ad ogni 1:1, e ho iniziato ad elencare le mie aree di interesse il primo giorno.

Sono stato nello sviluppo del software per più di vent'anni, leggendo libri di leadership negli ultimi dieci anni, quindi sentitevi liberi di chiedermi dei libri di leadership se preferite letture più recenti!