martedì 26 agosto 2008

“Only a good understanding of the ideas behind the language facilities leads to mastery" (part 2)

Nel 1722 J.S.Bach incomincia a scrivere il primo dei due libri formanti il Das Wohltemperirte Clavier, oder Praeludia, und Fugen durch alle Tone und Semitonia ... con "clavier", raccolta di preludi e fughe che coprono tutte e ventiquattro le tonalità (il secondo libro lo finirà 22 anni dopo nel 1744).
Bach giustifica quest’opera dicendo che l’ha scritta “per l'uso e il godimento di tutti i giovani musicisti desiderosi di imparare […]”. L’ascolto di questi due volumi è qualcosa di straordinariamente appagante. Dà un senso estremo di organizzazione, pulizia e tutto sembra scorrere sostenuto da una qualche forma di armonia con il mondo e con la natura.
Spesso, quando scrivo codice, ascolto questi 24 preludi e fughe. Mi danno un senso di tranquillità e mi aiutano a scrivere un software più “armonico”.
In un software di questo tipo, le istruzioni scorrono via amalgamandosi in un tutto. Il mio maestro mi ripeteva sempre che un codice bello da vedere, è sempre anche quello che funziona meglio, ed io sono pienamente d’accordo con lui. Un codice armonioso, musicale, non pasticciato, si rivela al primo sguardo di un occhio allenato a cercare la bellezza e non soltanto la funzionalità.
Bach era pienamente consapevole di questa ricerca della bellezza, infatti, oltre ad inseguirla nella sua musica, era solito adornare ed abbellire i suoi spartiti con frasi e disegni decorativi.
Per concludere, tornando alla frase di Stroustrup, una filologia di un linguaggio è essenziale per eccellere in quello che è il nostro mezzo di espressione, e solo attraverso la profonda conoscenza di quelle idee che hanno plasmato un linguaggio è possibile apprezzarene pienamente la bellezza. Dopo tutto Keats aveva ragione: “Bellezza è verità, verità è bellezza”…

Luca Ciciriello

domenica 17 agosto 2008

"Only a good understanding of the ideas behind the language facilities leads to mastery" (part 1)

Questa frase di Bjarne Stroustrup, che si trova nell'introduzione alla terza edizione del suo libro “C++ Programming”, ci porta a considerare un argomento che mi sta particolarmente a cuore. Molto spesso, mi è capitato di lavorare con persone che, pur definendosi programmatori, considerano la programmazione solo come un atto ingegneristico. Per loro un programma è soltanto una serie di istruzioni che messe una dietro l'altra fanno sì che bene o male le cose “girino” a dovere. Le parole “stile”, “forma”, “bellezza”, “musicalità”, non hanno alcun significato per loro. È vero, si può scrivere un programma funzionante anche ignorando queste parole, ma (almeno per me) c'è una bella differenza tra scrivere un programma e “comporre” un programma. Ma torniamo alla frase di Stroustrup. Ogni Venerdì, io ho l'abitudine di mandare via mail a tutti i miei colleghi d'ufficio una frase che in maniera più o meno diretta riguarda il mondo informatico. Faccio questo perché spero (speranza regolarmente disillusa) che si inneschi una qualche forma di discussione su argomenti che credo possano interessare a chiunque affermi di essere un programmatore. Bene, quando ho mandato questa frase di Stroustrup ai miei colleghi, uno di loro mi ha detto (testuali parole): “Io sono pagato per scrivere codice e non per diventare un maestro del linguaggio”. Io allora mi chiedo: “chi è quell'atleta che non voglia eccellere nella propria disciplina? Chi è quel musicista che non voglia sempre migliorarsi nella sua arte o quel pittore che ricerchi sempre di avvicinarsi alla perfezione nella tecnica pittorica?”. È tanto diverso per un programmatore? Se faccio della programmazione la mia professione io voglio sapere tutto di questa professione; la storia, chi sono stati i grandi maestri del passato e chi sono i maestri del presente, Tutte le tecniche che mi possano portare ad eccellere in quello che è a tutti gli effetti il mio mezzo di espressione.
Con queste considerazioni concludo la prima parte di questo intervento.
Nella seconda parte vedremo cosa è per me la musicalità di un programma.

Luca Ciciriello

domenica 3 agosto 2008

Così tanta luce in un centimetro quadrato.

Avete mai pensato quanti byte contiene il più piccolo programma compilabile, linkabile e lanciabile scritto in C++ standard?
Bé, non è poi così difficile darsi una risposta. Basta aprire un editor qualsiasi, ad esempio TextEdit (A, tra l'altro, io uso Mac OS X, di Apple. Computers e sistemi per tempi più civilizzati come direbbe Obi-Wan Kenobi), scrivere: int main(){} , contare i caratteri ed accorgersi che sono esattamente 12.
Se ora provate a compilare e linkare la translation unit (che nel frattempo avrete creato salvando il file generato da TextEdit), ad esmpio con gcc, vi accorgerete che nessun errore o warning verrà segnalato.
Avete ora un mini programma completamente eseguibile. Ok, d'accordo, non è che questo programma faccia qualcosa di molto interessante, ma inizialmente ci siamo chiesti quanti byte avrebbe contenuto un programma minimale in C++ e non un programma minimale che facesse qualcosa.
Se ci fermiamo ora a riflettere un attimo, in soli 12 byte c'è tutta l'informazione necessaria ad un compilatore per eseguire un'analisi sintattica e semantica del codice e ad un linker per creare del codice macchina eseguibile.
Parafrasando quindi la frase tratta dall'opera prima di Marisha Pessl : ”Teoria e pratica di ogni cosa”, posso tranquillamente affermare: “Così tanta informazione in 12 byte”.

Luca Ciciriello