L’informatica è una scienza interdisciplinare che riguarda tutti gli aspetti del trattamento dell’informazione mediante elaboratori elettronici.

C’è differenza tra chi scrive codice e chi lo sviluppa prima di scriverlo! Sembra la stessa cosa, ma dopo questo articolo converrete che non lo è.

Immaginiamo due persone, entrambe hanno fame ed hanno gli stessi ingredienti più qualche spezia. Entrambi hanno l’obiettivo di soddisfare il proprio bisogno: mangiare! Una prende gli ingredienti e, secondo un ordine più o meno corretto, li mette insieme; li cuoce in modo da creare qualcosa che sia di sapore accettabile e poi mangia. L’altra invece dosa gli ingredienti, li cuoce in maniera separata, li arricchisce con delle spezie e poi unisce il tutto così da creare qualcosa che sia buono; poi mangia.

Entrambi hanno soddisfatto lo stesso bisogno; ma secondo voi, chi dei due è il cuoco?

Questo esempio, per quanto possa sembrare banale, ben descrive la mia prima asserzione: "C’è differenza tra chi scrive codice e chi lo sviluppa prima di scriverlo".

Allo stato attuale, non occorre essere delle menti brillanti per realizzare software o pseudo-software. Esistono molti tools che permettono di fare il cosiddetto "" di codice, così da avere soluzioni pronte in poco tempo e senza avere la necessità di sapere cosa si sta facendo.

Anche i software WYSIWYG (What You See Is What You Get, quello che vedi è quello che ottieni) contribuiscono alla creazione di pseudo-professionisti che reputano di essere delle menti brillandi nel campo dei software, ma che invece non fanno altro che utilizzare la "pappa" già pronta di un altro.

Tutta questa premessa (per qualcuno offensiva e polemica) ha lo scopo di introdurre il discorso della bellezza del codice.

Quanto è importante avere un codice bello o più tecnicamente, è veramente più importante sviluppare applicazioni funzionali o la cosa importante è risolvere il problema (ergo, basta che funziona)?

La sensibilità estetica di una mente matematica permette di apprezzare le dimostrazioni che costituiscono composizioni magnifiche e di rifuggire da quelle brutte. E anche se una brutta dimostrazione è valida tanto quanto una bella, nell’eleganza si è sempre identificato un criterio importante per tracciare la rotta migliore da seguire quando ci si muove nel mondo matematico.

(L’Enigma dei Numeri Primi di Marcus du Sautoy p. 387 - ISBN: 88-17-00843-5)

Chi sviluppa molto spesso deve scontrarsi con codice fatto da altri e molto spesso ci si imbatte in codice esteticamente brutto. Conosco molti che fanno codice esteticamente brutto e questo sembra non creargli alcun problema. Premesso che il parametro di bellezza/bruttezza è abbastanza soggettivo e che ognuno è libero di definire tali parametri nella maniera che ritiene più opportuna, in questo articolo non stiamo parlando di bellezza/bruttezza estetica. Ci stiamo riferendo, piuttosto, alla bellezza/bruttezza della soluzione implementata.

Il lavoro dello sviluppatore (attenzione, ho detto sviluppatore e non programmatore) è un lavoro quasi interamente basato sulla mente.

Uno sviluppatore, prima di iniziare a macinare codice, immagina la propria soluzione software. La vede a lavoro nella propria mente e la descrive nei minimi particolari. La mette in funzione, col mouse clicca sulle icone e nelle aree predisposte inserisce le informazioni. Vede cosa succede quando si inseriscono dati sbagliati ed intuisce subito quelle che sono le debolezze.

Uno sviluppatore sà come funziona un computer, conosce i sistemi con cui (o per cui) lavora, conosce quello che il sistema operativo fa di propria natura.

Approndiamo "conosce quello che il sistema operativo fa di propria natura".

Immaginate di dover creare un software capace di copiare un file da un computer ad un altro. Questo software sarà disponibile solo per piattaforma Microsoft Windows e si interfaccerà solo a piattaforme Microsoft Windows. Secondo voi, è utile implementare un sistema di controllo che verifichi che il nome non sia composto dai caratteri "\ / : * ? " < > |", che sono caratteri non accettati dai sistemi Windows (e non solo)? La risposta è un assoluto NO! Questo perché, se il file è presente già sul computer, tale file avrà già superato i controlli intrinseci del sistema operativo e tra questi controlli c’è anche quello che verifica la correttezza dei caratteri del nome. Implementare un sistema del genere sarebbe solo ridondante, farebbe fare delle operazioni inutili al software e renderebbe lo stesso non funzionale. Un programmatore forse pensa a cose simili. Uno sviluppatore ci pensa sicuramente, per quanto possano sembrare banali.

Uno sviluppatore conosce i fondamenti della programmazioni. Molte volte ci sono programmatori che lottano contro problemi veramente complessi, ed alla fine urlano "Eureka!" perché in qualche modo agirano il problema. Certo c’è da esserne soddisfatti indubbiamente! Peccato che il più delle volte, lo stesso problema, poteva essere risolto applicando un qualche paradigma (o ) di sviluppo. Il più delle volte questo significa adottare una soluzione molto più leggera in termine di operazioni da eseguire e sicuramente più stabile (ergo, più funzionale).

Una soluzione funzionale non è necessariamente la più complessa. Lo sviluppo di software è paragobile al lavoro di un matematico teorico; infatti, come per un teorico, anche lo sviluppatore costruisce un modello matematico della soluzione da implementare. Entrambi tengono conto (anche se non sempre) di un principio chiamato "Il rasoio di Occam" (principio su cui basa, tra l’altro, il linguaggio di programmazione omonimo). Secondo questo principio, quando si deve scegliere tra due soluzioni, bisognerebbe sempre scegliere la più semplice.

È inutile fare con più quanto si può fare con meno.

Solo uno sviluppatore è in grado di fare un lavoro atto alla semplificazione delle operazioni. A differenza dei programmatori che macinano codice come fossero in trans, lo sviluppatore il codice lo pensa prima di scriverlo. Solo quando è in questo stato è possibile semplificarlo, perché si ha un quadro completo del tutto e si è in grado di manipolare la soluzione globalmente.

Per riassumere, la differenza tra del codice che funziona e codice funzionale, tra sviluppatore e programmatore, sta nell’approccio al problema.

Il programmatore, nella quasi totalità delle volte, macina codice. Sa che una funzione con un altra è in grado di dare quel risultato che poi dato ad un altra funzione ancora ne da un altro. Non si preoccupa di rendere la soluzione elegante, bella da vedere.

Lo sviluppatore, quello vero, assimila il problema mentalmente. Capisce quali sono i punti critici e definisce gli attori che avranno il compito di risolvere il problema. Con questa consapevolezza è in grado di identificare ed elaborare un modello capace di risolvere il problema in maniera astratta.

Certo, i più sempliciotti (in senso buono) obietteranno che, alla fine, entrambi raggiungono lo stesso obiettivo. Ma ricordate l’esempio iniziale? Entrambi risolvono il problema ma… quale dei due è il "cuoco"?