Si discute molto su internet sulle qualità che rendano migliore uno sviluppatore rispetto gli altri. Si parla in particolare di 10x Engineer, che ho tradotto in italiano come sviluppatore 10X, quindi uno sviluppatore che valga dieci volte gli altri.
Leggendo vari articoli online trovo però che in realtà questa è la definizione che personalmente attribuisco a un programmatore Senior, sia ben chiaro che per me uno sviluppatore non diventa senior perchè lavora da molto tempo ma perché nel tempo in cui ha lavorato ha affrontato e risolto problematiche sempre diverse.
Nel suo articolo CHARLES MAX WOOD elenca quelle che secondo lui sono le caratteristiche che uno sviluppatore deve avere per poter valere come 10.
1. Sono eccellenti comunicatori
Effettivamente la comunicazione è una skill molto importante all’interno del mondo lavorativo. Indipendentemente da quanto sia bravo uno sviluppatore saper spiegare quello che fa ai colleghi e ai suoi responsabili è di fondamentale importanza non solo per lui ma anche per il resto del team.
2. Apprendono cose nuove continuamente
Il mondo dell’informatica è molto dinamico per cui uno sviluppatore non può fossilizzarsi su una determinata tecnologie e credere che potrà lavorare su quella per il resto della sua vita. I linguaggi cambiano ed anche i tipi di applicazioni, fino a pochi anni fa non esistevano smartphone o smartwatch e pensare di creare web application che funzionassero in mobilità era fantascienza. Oggi ci sono rivoluzioni continue ed anche se si resta a programmare in un linguaggio come il Java questo con l’avanzamento delle versioni introduce sempre nuove features rimuovendo quelle vecchie.
3. Scrivono codice in maniera comprensibile
La leggibilità del codice è fondamentale per la sua manutenibilità, serve ad agevolare il lavoro dei colleghi che dovranno modificare il codice e quindi per prima cosa capire come funziona. Non è detto che a modificare una parte del codice siano per forza dei colleghi ma potrebbe essere anche l’autore stesso, e anche in questo caso è importante che capisca quello che ha scritto anche se sono passati vari mesi.
4. Scrivono test
Scrivere test è spesso un’operazione molto lunga, bisogna scrivere il codice per renderlo testabile, mantenendo ad esempio un basso accoppiamento tra le classi. Inoltre l’aver scritto dei test su di una funzione non significa che questa sia priva di bug. Tuttavia avere un buon numero di test rende più facile la modifica del codice perché permette di effettuare un non-regression test. In pratica uno sviluppatore si sente più sicuro a modificare un metodo precedentemente testato perché sa che se dovesse alterarne il comportamento ci sarebbe un test a farglielo notare.
5. Sanno cosa e come cercare su internet
È impossibile conoscere per intero le librerie che si sta utilizzando o conoscere tutti i problemi che possono nascere a causa di configurazioni sbagliate ecc…. In questo internet da una mano a tutti noi sviluppatori, ma come ogni strumento è necessario saperlo utilizzare. Quindi selezionare ad esempio bene le parole chiave da cercare su google, evitare di fare domande ambigue su siti come stackoverflow o su forum per sviluppatori.
6. Selezionano una nicchia nella quale specializzarsi
Questa è effettivamente una caratteristica che non amo affatto ma purtroppo è vera. Quando lavora, tranne forse poche eccezioni, lo sviluppatore tende a entrare in delle nicchie in base al lavoro che fa, ad esempio programmatore backend java, o frontender che usa angular. Lavorando per mesi interi solo su una nicchia si ragiona sempre allo stesso modo e quando si è costretti a passare ad un altro tipo di programmazione si ha qualche problema nell’immediato. Chi si presenta come sviluppatore 10x ( o senior ) specifica la sua nicchia di appartenenza ma secondo me dovrebbe comunque essere in grado di lavorare al di fuori della sua comfort zone.
7. Sono dei mentori
Essere dei bravi mentori è una caratteristica fondamentale per uno sviluppatore esperto. Non si tratta solo di condivisione della conoscenza ma di formare una persona che in un secondo momento sarà in grado di aiutare. Quando si è l’unica persona ad avere la conoscenza di un sistema ci si può sentire sicuramente importanti ma diventa un problema quando si è o si vuole essere assenti. Per questo fare da mentori è da vedere come un investimento che da i suoi frutti con una diminuzione del lavoro e la possibilità qualora si vogliano prendere delle ferie di avere un proprio backup.
8. Sono in linea con la mission della loro azienda, e hanno la stessa visione e gli stessi valori
Per questa dichiarazione c’è bisogno di un contesto, banalmente si tratta di sviluppatori che lavorano per un’azienda di prodotto ( o di servizi ). Ad esempio chi lavora per aziende come Apple o Google crede fortemente nei valori aziendali e si impegna sempre al massimo perché sente il prodotto come suo.
9. Scrivono codice nel tempo libero
Questa è la frase che mi è piaciuta di meno. Se dedichi dalle 8 alle 12 ore al giorno al tuo lavoro poi torni a casa e continui a programmare hai qualche problema… Ci sta nel creare qualche progetto nel tempo libero o nel seguire dei tutorial ma questo non deve essere il proprio hobby. Le persone hanno bisogno del tempo libero per pensare a qualcosa di diverso, magari fare sport o anche solo passeggiare per far riposare il cervello. Non credo che continuare a scrivere codice una volta tornati dal lavoro sia un comportamento sano.
10. Amano lavorare con altri sviluppatori come loro
Su questa frase c’è da riflettere, per il momento abbiamo parlato degli sviluppatori 10X come bravi comunicatori e ottimi mentori. Non abbiamo discusso di leadership, perché un buono sviluppatore deve anche accettare la leadership di un altro oppure essere in grado di farsi valere. In questo caso riassumerei il tutto dicendo che lo sviluppatore 10X deve essere in grado di lavorare in gruppo, unirsi ad un gruppo preesistente e far integrare persone nuove all’interno del proprio gruppo.
11. Identificano problemi e propongono soluzioni
Questa, per me, è la caratteristica fondamentale per uno sviluppatore 10X ( o senior ). L’esperienza lo ha portato a conoscere i diversi problemi che possono capitare in fase di sviluppo o progettazione e quindi interviene nella fase di analisi per evitarli. Sa quando tenersi largo con le tempistiche o al contrario quando può diminuire i tempi assegnando i task alle persone giuste o semplicemente progettando il sistema in modo tale che successive modifiche abbiano un impatto minore.