mercoledì 9 novembre 2011

Questione di eleganza


Il primo Maggio del 1964 alle quattro del mattino, su un calcolatore GE-225,  “girava” il
primo programma scritto in BASIC. Come tanti altri della mia età, anche io ho iniziato a
scrivere i miei primi programmi in BASIC. Devo dire che ho iniziato abbastanza tardi, ma la
prima macchina per me abbordabile come prezzo è stato un C64 (Commodore 64) uscito
solo nel ’82.  Prima, il sogno mio e di molti altri come me appassionati di computers, era
“l’Apple II” i cui prezzi però erano molto al di sopra delle nostre possibilità economiche di
adolescenti. Mi ricordo ancora che il primo programma che scrissi in BASIC calcolava i
primi trenta numeri primi. Ci misi un’intera settimana a convertire l’algoritmo matematico
trovato su un libro in codice BASIC che mi sembrava una lingua misteriosa e affascinante.
Lanciai il tutto e i primi trenta numeri primi magicamente apparvero sullo schermo (un
televisore a valvole in bianco e nero). Funzionava! Mi sono sentito spinto da una euforia
incredibile. Ho capito che con quel “supercomputer” che avevo sotto mano e con la mia
(allora presunta) maestria nel dominare il linguaggio BASIC avrei potuto fare qualsiasi
cosa. Salvai il programma su una normale audiocassetta (il supporto di registrazione di
massa del C64) e iniziai a scrivere molti altri programmi in BASIC. Credo di avere ancora
quella prima cassetta con sopra il mio primo programma.
Il tempo passò.
All’università sono arrivato pensando di stupire tutti con la mia capacità di scrivere programmi, ma mi
sono accorto subito che li si parlava un’altra lingua e che il BASIC era considerato come le
prime parole dette da un bambino che impara a parlare. Ho scoperto così il FORTRAN.
Molto più ostico del BASIC da imparare, ma che offriva un universo di possibilità che con il
BASIC neanche potevo immaginare. Ovviamente decisi di scrivere la mia tesi utilizzando
FORTRAN. La tesi si basava sugli algoritmi genetici usati per gli automi cellulari ed in
particolare per il “Costruttore Universale” di Von Neumann, un’entità informatica in grado di
autoriprodursi ed emulare la diversità genetica. In quel periodo, il mio insegnate, mi diede
un libro che parlava di un altro linguaggio di programmazione che si chiamava LISP, nato
molto prima del BASIC e usato ancora oggi per applicazioni di Intelligenza Artificiale.
Subito lo sfogliai molto velocemente, dovevo concentrarmi sulla tesi e non avevo bisogno
di altre distrazioni, poi la mia curiosità verso il LISP crebbe. Il nucleo entrale della mia tesi
era una routine in FORTRAN che ad ogni generazione introduceva una piccola mutazione
nel codice genetico dell’automa cellulare e ricalcolava come sarebbe stata l’evoluzione
dell’automa nelle generazioni successive. Questa routine FORTRAN era lunga 10 pagine
di codice. Quasi per caso ripresi in mano il manuale di LISP che mi aveva dato il mio
insegnante e rimasi colpito da come erano brevi e “potenti” i programmi che si potevano
scrivere in LISP. Quasi per gioco ho iniziato a pensare che aspetto avrebbe avuto la mia
routine FORTRAN se l’avessi scritta in LISP. Avevo un problema però, sul sistema VAX su
cui lavoravo all’università c’erano disponibili diversi compilatori FORTRAN, ma niente
compilatori LISP. Tanto meno ne avevo uno sul mio computer Olivetti (con un nuovissimo
processore Intel 80286) a casa. Il compilatore per il “286”, ancora una volta me lo procurò
il mio insegnante e così provai a riscrivere la mia routine in LISP. Miracolo! La routine che
in FORTRAN era lunga 10 pagine, in LISP contava solo 25 righe di codice ed era almeno
tre volte più veloce nell’eseguire i calcoli. Mi ricordo che rimasi davanti al monitor ad
ammirare quel codice per almeno 10 minuti senza parlare. Qualcosa di magico era
successo, non solo il codice LISP era più corto e funzionava meglio, ma era anche bello
da vedere! C’era qualcosa di armonioso in tutto quel codice qualcosa che formava un tutto
tra l’idea e la sua implementazione. Ovviamente riscrissi l’intera tesi in LISP. Da allora ho
imparato ed usato molti altri linguaggi del “mainstream industriale” (C,C++,C#, Java, ecc.),
ma in ognuno di essi ho sempre ricercato oltre alla funzionalità anche la bellezza e
l’eleganza del codice scritto. Il mio insegnante di C++ in Inghilterra mi ripeteva sempre che
il programma bello da vedere è poi anche quello che funziona meglio, e con il tempo ho imparato che le sue parole erano vere. Oggi uso indistintamente molti linguaggi diversi, sia
per lavoro, sia per diletto, e ancora oggi, quando devo modellizzare un problema lo faccio
in LISP o in HASKELL (un altro linguaggio molto elegante nella scrittura ed estremamente
potente) anche se poi il programma lo scriverò in C# o in Java.
La bellezza e l’eleganza nello scrivere un codice armonioso non è una cosa che si può
insegnare, ma deve venire dalla nostra sensibilità nel vedere le parti di un’idea che si
combinano in un tutto.
Luca Ciciriello

2 commenti:

  1. Altro bel grande articolo, Luca!
    P.s. anche io ho scritto il mio primo programmino in Basic su un PC 80286 :)

    RispondiElimina