Come e perché riprendere il controllo di Legacy Code
Q&A con Matteo Baglini
Matteo Baglini è Software Craftsman, Technical Coach, Clean Code addicted e docente Avanscoperta del corso Refactoring Legacy Code.
In questa intervista ci racconta di cosa si occupa e come si fa a riprendere il controllo di codice legacy.
Buona lettura!
Alessandra: Ciao Matteo e benvenuto a bordo dell’Avanscoperta team!
Ci racconti che strade hai percorso nel mondo dello sviluppo software, da dove sei partito, quali sentieri hai intrapreso e, soprattutto, dove sei diretto?
Matteo: Ho iniziato a lavorare come sviluppatore nel 2001, non appena finite le superiori. Ho scelto di non fare l’università perché volevo scrivere codice, produrre qualcosa e impara sul campo.
Ho lavorato come dipendente per diverse aziende fino al 2008, anno in cui ho deciso di cambiare strada e diventare uno sviluppatore libero professionista.
Ogni nuovo progetto portava con sé sfide ma soprattutto dubbi: era difficile crescere essendo soli. Da qui la voglia di avvicinarmi alle community o user group, fino a fondarne un paio. Credo fortemente nella condivisione e nel confronto con altri professionisti come metodo di miglioramento continuo.
Il passo successivo, cioè diventare Coach, è avvenuto qualche anno fa un po’ per caso, con una richiesta di affiancare un team al fine di trasmettere le mie conoscenze e il mio modo di lavorare. Chi se lo sarebbe mai aspettato! :-)
Nonostante questa fantastica esperienza rimango sempre uno sviluppatore alla ricerca di nuove sfide, ecco perché ho fondato doubleloop, una società che ha lo sviluppo software di qualità nel suo DNA.
Alessandra: Cosa ti spinge?
Matteo: Bella domanda, me lo sono sempre chiesto anch’io…
Alla fine le spinte sono diverse, talvolta anche in contrasto tra di loro: si va dalla fantastica sensazione di produrre qualcosa e vederlo “girare” in produzione, fino al continuo bisogno di essere ogni giorno migliore in quello che faccio, passando per la sensazione di magia trasmessa dalla scrittura del codice.
Alessandra: Proviamo insieme a te ad approfondire l’argomento refactoring di codice legacy. Anzitutto, ci dai una tua definizione di legacy code?
Matteo: Codice difficile da modificare. Non tanto perché complicato, ma perché pieno di dipendenze e scritto in modo da non favorire la comprensione e l’estensibilità.
Spesso si attribuisce la parola legacy a qualcosa di vecchio, in realtà (secondo la mia definizione) l’età è ininfluente: può essere legacy anche il codice scritto “ieri” che non è in grado di accogliere il cambiamento di “oggi”.
Alessandra: In quali contesti si rende necessario lavorare con legacy code?
Matteo: Sono molto più frequenti di quello che crediamo.
Alcuni esempi:
- trasformare un prototipo in un’applicazione stabile e scalabile senza compromettere la velocità di sviluppo;
- implementare feature per un prodotto già in produzione e in continua evoluzione senza introdurre regressioni;
- iniziare lo sviluppo di un nuovo progetto da zero e riuscire a mantenere lo stesso livello di produttività anche a distanza di mesi.
Alessandra: È davvero possibile riprendere il controllo del codice legacy?
Matteo: Sì, certo che lo è, ma bisogna fare attenzione alle aspettative.
Determinate codebase sono state sviluppate seguendo una cattiva rotta per anni, quindi è impensabile credere che basti applicare “quattro” mosse di refactoring per risolvere tutto.
Riprendere il controllo è un attività potenzialmente a lungo termine che richiede disciplina e costanza. Quello che possiamo e riusciamo a fare in poco tempo è acquisire la conoscenza di tecniche che ci permetteranno di lavorare in maniera più sicura e controllata.
Alessandra: Casi studio, esperienze reali con le quali ti sei confrontato?
Matteo: I principi che alimentano le tecniche di testing e refactoring sono agnostici rispetto al contesto di utilizzo. Mi è capitato di utilizzarle per diversi tipi di applicazioni web così come desktop e in domini/settori completamente diversi fra loro.
Alcuni esempi sono: implementazione di nuove feature per un applicazione desktop per il monitoraggio di mezzi nel settore trasporti; evoluzione di web api parte di una piattaforma e-commerce nel campo della moda; risolvere e migliorare la gestione della concorrenza e parallelismo di servizi di elaborazione dati per il mondo alberghiero.
Alessandra: Cosa significa per te creare codebases che si adattano alla continua evoluzione di un business?
Matteo: Porre, a livello di codice, l’accento su aspetti come l’espressività, la flessibilità ma soprattutto la semplicità, al fine di creare codebase con un costo associato al cambiamento costante nel tempo.
Alessandra: Dalla tua conoscenza ed esperienza in materia è nato il Refactoring Legacy Code workshop. Punti salienti del corso?
Matteo: Tratteremo in modo pratico tre skill in particolare: test, designe refactoring. Useremo il test per proteggerci dalle regressioni e attraverso il refactoring porteremo la codebase a un design migliore.
Alessandra: Parola d’ordine di questo workshop è esercitazioni. Come si svolgerà nella pratica il corso? Quali linguaggi?
Matteo: Prendiamo una codebase legacy e implemetiamo un nuovo requisito.
A tempo zero implementare tale requisito avrà un costo elevato a causa del cattivo design, quindi invece di partire a testa bassa a inserire il requisito a colpi di martello, applicheremo un metodo di lavoro che ci permetterà di modificare il design in maniera sicura e in fine implementare il requisito a un costo molto basso, quasi nullo. La codebase non è né troppo piccola né troppo grande, così da essere sfidante ma che al tempo stesso permetta di raggiungere obiettivi concreti nel tempo a disposizione.
Alessandra: A chi ha seguito già corsi sull’argomento ma è tornato a casa poco soddisfatto per la mancanza di esercitazioni pratiche, cosa diresti?
Matteo: In questo workshop la pratica sarà l’aspetto principale. Quando ho creato il contenuto ho pensato: “devo far vivere in prima persona ai partecipanti cosa vuol dire fare refactoring per accogliere il cambiamento”. Parliamo di qualcosa che è difficile apprendere o trasmettere con un libro o un articolo.
Alessandra: E a chi, invece non ha mai seguito un corso sul refactoring, perché consiglieresti il tuo workshop?
Matteo: Tratteremo l’argomento da zero, impareremo a riconoscere cosa impedisce il cambiamento (bad code smell) e le principali mosse di refactoring a nostra disposizione. In altre parole il corso permetterà a chi non sa nulla dell’argomento di tornare a lavoro con un nuovo set di skill applicabili sin da subito.
Alessandra: Grazie Matteo!
Intervista pubblicata sul blog di Avanscoperta.