Kiss me, I’m a nerd

Kiss me, I’m a nerd

Fatemelo dire a chiare lettere: nell’industria IT non c’è più spazio per gli sviluppatori nerd. Mi riferisco a coloro che sono attratti dalle soluzioni complesse, dagli hack, dalle over-ingegnerizzazioni e da tutto ciò che, per essere compreso, richieda un QI elevato e, al contempo, mostrano seri problemi nelle relazioni interpersonali.

KISS

La letteratura dell’ingegneria del software parla chiaro, basta citare il principio KISS (Keep It Simple, Stupid) con cui si esorta a mantenere il codice sorgente semplice, lineare e comprensibile. Interessante notare che questo principio non nasce nel mondo informatico ma viene elaborato da Kelly Johnsond, un ingegnere americano, famoso per la progettazione di aerei militari.

Bisogna inoltre evitare l’ottimizzazione precoce, radice di tutto il male, come asserisce Donald Knuth. Molte scelte di un programmatore nerd infatti si basano sul concetto di ottimizzazione delle performance e del consumo di memoria. Nella maggior parte dei casi queste posizioni sono del tutto anacronistiche, avevano un senso quando la velocità dei processori si misurava in Megahertz e la memoria in Megabyte. Oggigiorno, tra hardware sempre più performante e compilatori sempre più raffinati, non ha senso continuare a scrivere codice ottimizzato per la macchina ma non per il programmatore.

E qui entra in gioco il baco, croce e delizia di tutti gli sviluppatori. Questo animaletto digitale ha il suo habitat nei grovigli di codice, nelle matasse di istruzioni criptiche e nelle soluzioni software “esoteriche”. Lì non lo trova nessuno e può vivere indisturbato per anni, all’ombra di codice che nessuno si sognerà mai di toccare. Ho visto programmatori così terrorizzati dalla sola idea di intervenire su certe porzioni complesse di codice che hanno preferito modificare tutto ciò che interagiva con esso.

Vale inoltre la pena soffermaci su quello che credo essere il principale giudice del nostro lavoro: il costo. Dobbiamo progettare sistemi che siano economici sia in fase di realizzazione, ma soprattutto in fase di manutenzione. E la manutenzione viene spesso fatta da persone diverse da quelle che hanno realizzato il sistema. Non rendiamo loro la vita difficile nell’interpretare quanto abbiamo realizzato. E non bastano i commenti nel codice, che tanto col tempo diventano obsoleti e fuorvianti. Sarebbe meglio avere pochi commenti su implementazioni, magari più prolisse, ma certamente più chiare.

Il nerd architetto

Qui si rischia davvero tanto. Il nerd architetto smania dalla voglia di inserire nel progetto il nuovissimo db NoSQL, un Identity Manager federato, un bel ESB, una pioggia di servizi RESTful, una architettura event driven che garantisca l’eventual consistency, l’ultima versione di Angular o React e ovviamente utilizzare una comunicazione asincrona con il server mediante Reactive Streams, ovviamente programmando secondo il paradigma funzionale. Il tutto poi dovrà essere corredato da test unitari con copertura del 100% del codice, test di integrazione e delle performance, sviluppato secondo metodologie agili e applicando la Continuous Integration e Continuous Delivery, facendo uso del Cloud mediante container Docker orchestrati da Kubernetes.

Anche in questo caso la “retta via” ce la indica un altro esperto di aerei, Antoine de Saint-Exupéry, secondo cui

la perfezione si raggiunge non quando non c’è nient’altro da aggiungere ma quando non c’è null’altro da togliere

Se in un progetto c’è qualcosa che può essere eliminato allora si tratta solo di zavorra, che appesantisce le parti indispensabili del sistema e rischia di essere fonte di malfunzionamenti.

Se non vi ha convinto l’autore del Piccolo Principe allora fidatevi almeno del Manifesto Agile secondo cui

la semplicità – l’arte di massimizzare la quantità di lavoro non svolto – è essenziale

Potremmo rileggere questo principio dicendo che in un progetto è essenziale massimizzare il numero di cose che non vi entreranno a far parte.

Il nerd fanatico

Il nerd fanatico non ascolta motivazioni che non siano di natura tecnica. Non ascolta chi, a suo avviso, è solo un retaggio della preistoria, non è “up-to-date”. Il nerd fanatico non ascolta chi adotta soluzioni diverse da quelle in cui fideisticamente crede. Insomma, il nerd fanatico non ascolta.

Il nerd fanatico combatte battaglie tra open e closed source, tra Windows e Linux, tra Microsoft e Google, tra Android e iOS, tra Java e .Net. Il nerd fanatico è sempre in guerra, non accetta mediazioni.

Anche in questo caso dal Manifesto Agile possiamo estrarre due passi illuminanti:

Una conversazione faccia a faccia è il modo più efficiente e più efficace per comunicare con il team ed all’interno del team.

A intervalli regolari il team riflette su come diventare più efficace, dopodiché regola e adatta il proprio comportamento di conseguenza.

Quanto spazio può avere il fanatismo, l’intransigenza, la chiusura, in una conversazione faccia a faccia o in una riflessione del team? Quante possibilità ci sono che un nerd fanatico regoli e adatti il proprio comportamento?

Il nerd asociale

Il nerd asociale si riconosce dal fatto che utilizza il monitor come barriera impenetrabile a protezione del suo isolamento. Passa la giornata lavorativa in religioso silenzio, interrotto di tanto in tanto da strani suoni o parole che pronuncia inconsciamente, magari anche ad alta voce. Il nerd asociale esce di rado dalla stanza in cui lavora, se non per necessità inderogabili, e non si confronta con i colleghi di pari grado, ne tanto meno con i superiori o con il cliente.

Anche stavolta mi tocca riportare un passo del Manifesto Agile:

Committenti e sviluppatori devono lavorare insieme quotidianamente per tutta la durata del progetto.

Non so voi, ma io dubito che un nerd asociale possa “lavorare insieme quotidianamente” con qualcuno.

… meno male che esistono i nerd

Non è mia intenzione demonizzare i nerd, al contrario ritengo che a loro gli dei della tecnologia abbiamo affidato il compito di custodire il sacro fuoco del progresso. Ma evidentemente non si tratta di un compito facile, quello stesso fuoco rischia di bruciare chi non lo maneggia con cura.