Clean code: scrivere codice (almeno) decente

Quindi? Cos’è il Clean Code?

Così come ci sono tante piccole tecniche da applicare esistono anche diverse definizioni di clean code, e di seguito trovate i punti di vista di chi la sa un po’ più lunga di noi.

Mi piace che il mio codice sia elegante ed efficiente. La logica dovrebbe essere semplice, tale che i bug difficilmente vi si possano nascondere. Il clean code fa una cosa, e fatta bene.
Bjarne Stroustrup, inventore ed autore del C++

Secondo Bjarne quindi il clean code è un codice che è un piacere leggere. Fate sempre attenzione alle finestre rotte, il codice non è esente da questo problema, e se trovate una finestra rotta aggiustatela, il “poi la sistemo” non va bene (perché poi non la sistemate, e lo sapete benissimo).

Il clean code è semplice e diretto. Si deve poter leggere come una prosa ben scritta
Grady Booch, Autore di Object-Oriented Analysis and Design with Applications

La definizione di Booch per certi versi coincide con quella di Stroustrup, ma la mette dal punto di vista della leggibilità. Ripensate al vostro codice: racconta una storia come farebbe un buon romanzo? Oppure da una riga all’altra salta da una storia all’altra, senza soluzione di continuità. Immaginate se ne “Il signore degli anelli” Tolkien parlasse di Gran Burrone alla riga 105, di Frodo alla 106 e di Gandalf alla 107, e che tutto il libro sia così. Un bel pastrocchio, eh?

Il clean code può essere letto, e migliorato, da un altro sviluppatore, diverso dal suo autore originale. Ha test unitari e di accettazione.
Dave Thomas, uno dei padri di Eclipse

Ci sono diversi aspetti interessanti nella definizione di Dave. Innanzitutto il clean code è un codice sia facile da migliorare per altre persone. Non solo: il concetto di clean code è strettamente legato ai test. Il codice, senza test, non è pulito.

 Il clean code è un codice che ha sempre l’aspetto di una cosa scritta da chi ne ha avuto cura.
Michael Feathers, autore di Working Effectively with Legacy Code

Quindi secondo Michael Feathers il clean code è il codice di cui qualcuno ha avuto cura.

In ordine di priorità, il clean code passa tutti i test, non contiene duplicazione, esprime tutte le idee di progettazione che stanno nel sistema, minimizza il numero di entità come classi, metodi, funzioni e via dicendo.
Ron Jeffries, autore di Extreme Programming Installed e Extreme Programming Adventures in C#

Il punto forse più importante di questi quattro è la duplicazione. Un codice che contiene parti duplicate non è un buon codice. Magari in un progetto giocattolo va bene, ma pensate al mondo reale: un pezzo di codice duplicato, supponiamo, dieci volte in un progetto da 250.000 linee (numero buttato lì a caso). Primo: se lì c’è un bug dovete correggerlo in tutti e dieci i punti. Secondo: valli un po’ a trovare…
Il punto però non è solo questo. Quando un codice è duplicato significa che abbiamo in testa una qualche idea non rappresentata nel codice. Quando succede, cerchiamo di capire qual è questa idea (ad esempio un contenitore di query strings), e tentiamo di esprimerla in maniera più chiara.
L’espressività è un qualcosa che va oltre i nomi. A tutti noi piace avere a che fare con un oggetto o una classe che fa una sola cosa (ricordate cosa diceva Bjarne?). Migliorare un brutto codice tenendo in mente solamente i concetti di duplicazione ed espressività può fare una grossa differenza.
Secondo Uncle Bob poca duplicazione, alta espressività e costruzione di semplici astrazioni (già nelle fasi iniziali), oltre a ciò che ha detto Ron Jeffries, sono la chiave di tutto.

Sai che stai lavorando su del codice pulito quando leggendo ciascun metodo o funzione scopri che è esattamente ciò che ti aspettavi. Inoltre è un bellissimo codice quando sembra proprio che il linguaggio che hai usato sia stato fatto per quel problema.
Ward Cunningham, il padrino di tutti coloro che hanno cura del loro codice.

Il concetto è fin troppo semplice: leggi, fai un cenno di assenso con la testa e vai oltre. Ward si aspetta che quando leggi un codice pulito non hai nessuna sorpresa. Questo codice è semplice, ovvio ed efficace. I codici puliti sono talmente tanto ben scritti che nemmeno te ne accorgi. Portiamo questo concetto nel mondo reale: uno non si accorge di nulla quando un vagone della metropolitana è pulito e senza graffiti o vandalismi di sorta, ma quando trovi una cosa come questa:
la prima frase che pronunci è “ammazza che schifo!”. E basta un solo scarabocchio per accorgersene.
Da ciò che dice Ward Cunningham possiamo dedurre anche un altro concetto importante: non è il linguaggio a far sì che il programma sembri semplice (io quando ho visto due righe di Objective C volevo morire…), ma è il programmatore a far sembrare semplice il linguaggio.

 In conclusione

Lo scopo di questo articolo era quello di dare un input per far capire che scrivere codice di corsa quindi va bene tutto, male ma basta che funzioni e cose così non conviene a nessuno. Come lettura consiglio ovviamente Clean Code di Robert “Uncle Bob” Martin. Nei prossimi articoli illustrerò alcune delle tecniche descritte nel libro.
Se l’articolo vi è piaciuto non esitate a contattarmi sui miei profili social (trovate i link qui accanto) oppure, se preferite, offritemi un caffè (chi mi conosce sa che sono un caffeinomane).

Pierpaolo Paris

Sono uno dei tanti che sono entrati nel girone infernale di Ingegneria Informatica, e che poi ne è anche uscito. Attualmente lavoro come sviluppatore presso una società di consulenza. Ogni tanto mi diletto con la fotografia.

2 thoughts on “Clean code: scrivere codice (almeno) decente

  1. Concordo in pieno.

    Non hai parlato della faccia che fanno colleghi e capi vari quando cerchi di spiegare che un BUG “intellettuale” è comunque un BUG anche se il codice “funziona”, altro aspetto interessante direi. eheheh

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *