Uno dei fattori più importanti che distinguono un programmatore bravo da un programmatore mediocre è la capacità di progettare corettamente i programmi che sviluppa.
Un programmatore con competenze mediocri - o ancora più basse - si lancia come un ariete in un progetto prima di capire cosa deve esattamente fare. Forse ha una vaga idea di quello che vuole fare, forse l’idea gli è stata passata dall’alto sotto forma di una lista di intenti, Per molti basta, tanto (almeno è così che si consolano) loro sono programmatori “agili”, e si adatteranno strada facendo. Cambieranno i prerequisiti, cambieranno le specifiche, e loro cambieranno il codice. Purtroppo, la realtà non è proprio così.
Anche i programmatori esperti si possono lanciare subito nello sviluppo, ma questo succede in quanto loro, grazie alla vasta esperienza lavorativa su progetti impegnativi, sviluppati in modo organizzato, tenendo conto alla qualità del codice, alla qualità delle strutture dati e alla qualità delle archittetture utilizzate. Hanno già in mente gli algoritmi da utilizzare, gli schemi progettuali, ecc. Altre volte si lanciano immediatamente nello sviluppo perché per completare il quadro esposto prima hanno bisogno di qualche pezzo del mosaico e cercano subito di arrivare alla soluzione, magari facendo un percorso di prototipazione rapida.
In ogni caso, anche quando dentro lo stesso gruppo di lavoro si osserva due programmatori delle categorie esposte, è visibile dopo una breve occhiata al codice chi di loro appartiene a quale delle due categorie. A volte non è necessario neanche guardare il codice, è sufficente osservare LORO mentre lavorano e il quadro della situazione è già chiaro.
Comunque, sono programmatori (ma è davvero caso di chiamarli così?) che non si schiodano mai dalla posizione iniziale. A volte ci lavorano nel campo da anni, ma danno sempre l’impressione di essere dei principianti. Degli eterni principianti.
Nelle nostre carriere lavorative ci è capitato diverse volte di trovarci dal lato della scrivania che appartiene all’adetto alla selezione del personale. Spesso i nostri clienti ci chiedono di aiutarli con la selezione del personale per risolvere il problema di mancanza di programmatori da allocare a un progetto nuovo, per soperire all’esigenza immediata. Dato che poi ci sarebbe toccato lavorare con queste persone appena asunte, era nel nostro migliore interesse aiutare i clienti, in modo di trovarci colleghi con alte competenze con i quali possa essere un piacere lavorare.
E’ sconvolgente vedere quanto volte ci troviamo davanti delle persone che millantano delle significative esperienze lavorative (per esempio, dieci anni di esperienza) che però non corrisponderebbe alle risposte alle domande tecniche che facciamo a loro. La realtà è che loro hanno l’esperienza di un anno, ripetuta per dieci volte o, ancora peggio, di sei mesi, ripetuta per venti volte.
Anche la presunta “agilità” menzionata prima spesso si dimostra inesistennte, in quanto cercando di essere agili, e non avendo le idee chiare, i loro programmi diventano - fragili.
Un progettista esperto, anche quando cambiano i requisiti e le specifiche sa come intervenire sul codice, sa come applicare le modifiche e lasciare il progetto in stato consistente e pulito. Quello che non capiterà mai con un programmatore con 10 x 1 anno di esperienza.
I nostri corsi di progettazione del codice hanno come obiettivo di portare ordine nel modo di lavorare di persone che non sono in grado di progettare, e di insegnarli a lavorare in modo organizzato. Così anche quando capita di dover modificare il codice dopo la modifica delle specifiche loro siano in grado di farlo in modo corretto.