Le sfide dello sviluppatore
domenica, 20 dicembre 2020Quali difficoltà deve affrontare un professionista per ritenersi tale?
Foto di Andras Kovacs su Unsplash
Chi lavora con il codice prima o poi deve fare i conti con le difficoltà connesse ad esso. In questo articolo vorrei approfondire le implicazioni di un approccio professionale alla programmazione e i diversi aspetti che lo caratterizzano.
Il tempo è limitato
Il primo ostacolo che incontra chi ha a che fare con il codice a livello professionale è il limite di tempo: spesso infatti ci si trova davanti ad una scadenza prefissata che non ammette giustificazioni.
In genere più è lontana la scadenza e più è alto il rischio di sottovalutare il problema, con il risultato di trovarsi spesso a dover concludere il lavoro in fretta e furia per salvare la faccia agli occhi del committente. In queste situazioni, sopratutto se ci si sente sotto pressione, la tentazione è di aggiungere tempo extra al normale orario di lavoro: terminare qualche ora dopo, iniziare qualche ora prima, sfruttare il fine settimana e magari qualche festività. Sfruttare il tempo libero è però un’arma a doppio taglio, il tuo capo può vederlo come un gesto di impegno e devozione ma, in fondo, quello che vuole davvero è che il lavoro sia finito per tempo e, se questo non avviene, potrebbe al contrario leggere il tuo sacrificio come un segnale di debolezza: “Se ha bisogno di lavorare anche nel week end forse non è in grado di gestire il proprio lavoro”, il rischio è di risultare inaffidabile.
Guardando invece a noi stessi, sebbene sia normale qualche ora di straordinario di tanto in tanto, privarsi sistematicamente del tempo libero può portare a conseguenze disastrose sul lungo termine. Come sviluppatori e come esseri umani abbiamo bisogno di tempo per formarci, per coltivare interessi personali, per stare con la famiglia e gli amici e, non da ultimo, per riposarci. Quando si attinge continuamente da questo tipo di tempo, non ci si può stupire delle ricadute fisiche e mentali. Nel caso migliore forse potreste prendere coscienza della situazione, incolpare l’azienda per cui lavorate e cercare un nuovo posto di lavoro dove il problema probabilmente si ripresenterà da capo.
Se quindi è importante per la propria professionalità sforzarsi di rispettare le scadenze è anche necessario avere coscienza di ciò a cui si rinuncia per riuscire a raggiungere l’obiettivo.
La qualità conta
Un altro fattore che può dilatare enormemente il tempo richiesto per concludere il lavoro è la qualità di quest’ultimo. Proviamo a mettere sulla bilancia due approcci estremizzati:
“Basta che funzioni”
Il tempo è denaro, rispettare la scadenza è la priorità e la voglia di concludere ha la precedenza su tutto. Si inizia quindi a scrivere il codice di getto, ispirati dal proprio istinto di artista della tastiera, in modo da vedere il prima possibile qualcosa di presentabile. Non si spreca tempo a trovare i nomi adatti per funzioni e variabili, i commenti non sono necessari, il codice può essere riordinato quando ci sarà più tempo, i test si lasciamo fare ad altri e così via.
Questo atteggiamento permette allo sviluppatore di risparmiare inizialmente un’enormità di tempo, ma in questo modo si sta scavando la fossa da solo: lo aspetta un circolo senza fine di segnalazioni di bug che probabilmente saranno corretti di fretta introducendo ulteriore errori. A distanza di mesi il codice sarà incomprensibile anche all’autore stesso e il tempo richiesto per comprenderlo e modificarlo supererà di gran lunga quello risparmiato in prima battuta.
“La ricerca della perfezione”
Lo sviluppatore si chiude nel suo mondo ideale dove può godere della soddisfazione di fare tutto alla perfezione, o quantomeno al massimo delle sue capacità. Innanzi tutto studia a tavolino il design del codice prevedendo da subito tutto quello che è necessario compresi i possibili sviluppi futuri complicando il codice senza essere certo che nel futuro possa essere utile. Quando approccia il codice inizia a modificare e riscrivere il codice esistente, specialmente se scritto dai colleghi. Quando finalmente inizia a scrivere qualcosa di concreto investe molto tempo nello stendere l’architettura di codice perfetta, documenta ogni riga (anche ciò che è intuitivo), scrive test automatici e si assicura di rispettare tutte le buone pratiche che ha assimilato leggendo articoli e manuali sulla buona programmazione. IL perfezionista ha l’illusione che la qualità del codice che sta scrivendo sia talmente alta che non dovrà mai più essere toccato (e guai a chi ci proverà!) ma alla scadenza si troverà ad un decimo del lavoro che gli era stato commissionato e nel frattempo il committente ha modificato i requisiti vanificando gran parte del lavoro.
Ovviamente quasi mai lo sviluppatore incarna pienamente uno dei due estremi, è più probabile ritrovarsi in una sfumatura intermedia. La sensazione è che tirando la coperta rimanga sempre scoperto qualche angolo nel triangolo delle priorità:
- Il tempo;
- La qualità del lavoro;
- La qualità della vita;
Come fare quindi ad alleviare lo stress di questo continuo tira e molla?
Le priorità facilitano il successo
La soluzione perfetta a questo dilemma non esiste, purtroppo. Possiamo però cercare di fissare qualche punto in modo da avere meno variabili da considerare. Il tempo è probabilmente la condizione che è meglio mantenere costante. E’ necessario fare una buona stima prima di iniziare a lavorare e fare il possibile per rispettare la scadenza concordata in modo da non danneggiare il tuo datore di lavoro (posticipando le scadenze) o la tua vita personale (sacrificando il tempo libero). In questo modo ci possiamo concentrare sulla qualità del lavoro senza trascurare quella della vita personale.
Come scegliere le priorità
Riprendiamo l’esempio dei due estremi possibili: se è vero che è poco efficace, posizionarsi ad uno dei due estremi, è anche vero che vale la pena tendere il più possibile a un lavoro di alta qualità calibrando le energie in modo da terminare il progetto nei tempi richiesti.
Un lavoro di qualità è un investimento sul futuro: quando tornerai a modificare il codice sarà più semplice fare mente locale su quello che hai fatto, estendere le parti esistenti e aggiungere nuove funzionalità senza dover riscrivere completamente le parti vecchie.
Un codice ben organizzato e corredato di test automatici è meno esposto a bug; è estremamente frustante passare ad una nuova attività e doverla interrompere continuamente perché emergono errori nel lavoro precedente. In questa situazione lavoriamo male sul progetto corrente perché continuamente distratti e correggiamo gli errori in maniera frettolosa introducendo ulteriori problemi.
Un possibile approccio
In questo articolo ho scritto di un possibile approccio concreto con cui potete organizzare il vostro lavoro e rendere la vostra attività più efficace.