Wednesday, February 3, 2010

Fortunato di essere un programmatore

Nelle scorse settimane, ho lavorato ad un progetto che richiedeva ogni tipo di sforzo di programmazione. Ora è arrivato a un buon punto, quindi posso quasi ritornare agli impegni normali, ma quando la gente mi sente parlare delle "ore di pazzia" che ho passato, spesso dice che le dispiace. Non dovrebbe. Non lo farei mai spesso, o per lunghi periodi, o senza un compenso adatto se lo facessi per lavoro, ma la verità è che questi "concentrati di programmazione" sono alcuni tra i periodi che preferisco nella mia vita. Sotto le giuste condizioni, scrivere software provoca piacere talmente intenso che dovrebbe essere reso illegale.

Molti programmatori ci si ritrovano, ma altri restano sorpresi quando lo sentono. Credo che sia perché le istituzioni sono brave a spremere via il divertimento da ogni cosa. Fa impallidire, ad esempio, come le scuole possano prendere gli argomenti più vivaci e sfigurarli in mediocri e ripetitive "sgobbate". Ed è così anche per la programmazione. Molto spesso si trasforma un'esperienza naturalmente gratificante in qualcosa che la gente può a malapena sopportare, in cambio di un voto o di un assegno.

Che peccato. Sono poche le cose migliori di passare del tempo in uno stato creativo, consumati dalle idee, osservando il proprio lavoro venire alla luce, andando a letto tardi, desiderosi di alzarzi presto per andare a vedere se le cose funzionano. Non voglio dire che un numero di ore eccessivo è necessario o consigliabile, dei ritmi sani sono un dovere, ma facendo eccezione per "brevi" periodi intensi. Il fatto è che programmare è un intenso piacere creativo, un miscuglio perfetto di rompicapi, scrittura ed artigianato.

La programmazione offre sfide intriganti ed ampio spazio per l'inventiva. Alcuni problemi sono di tipo investigativo e di riduzione: perché questo codice gira lento? Cosa diamine sta causando questo bug? Altri sono di tipo costruttivo, come progettare un algoritmo o un'architettura. Sono entrambi una delizia, se si ama il lavoro analitico, immersi in un mondo pieno di "bestie" come il malware, i router, le cache, i protocolli, i database, i grafi, le codifiche, le rappresentazioni di dati ed i numeri.

Questo lato analitico è quello che viene associato, dalla maggior parte delle persone, alla programmazione. La rende interessante, come un complesso gioco di strategia. Ma nella maggior parte del software la prima sfida è la comunicazione: con gli "amici programmatori" attraverso il codice, con gli utenti attraverso le interfacce. Con poche eccezioni, scrivere codice è un esperimento piuttosto che un rompicapo. È dare forma alle proprie idee e ai propri schemi in un corpo coerente; è andare alla ricerca della chiarezza, della semplicità e della sintesi. Sia il codice sia le interfacce abbondano della semplice gioia della creazione.

Un'altra fonte di piacere è che, sotto alcune circostanze, dalla programmazione sorge la bellezza. Potranno sembrare cazzate, ma è la verità: quel tipo di cose che rendono una giornata migliore. Prendiamo per esempio la dimostrazione di due righe, di Euclide, che i numeri primi sono infiniti. Credo che molti la troverebbero bella, un risultato così succinto ed affascinante. Questa è la bellezza della matematica, fredda e austera, e questa stessa bellezza pervade il software. È insita in algoritmi intelligenti come il quicksort, nei sorgenti dei kernel e dei compilatori, in eleganti exploit e nei trucchi che ci inventiamo per risolvere i problemi di ogni giorno. Quando si osservano queste soluzioni, siano esse algoritmi famosi o trucchi di tutti i giorni, si sorride e si esclama "geniale!", e uno si sente bene. Il nobile ragionamento!

Nei programmi esiste anche una bellezza non matematica, analoga all'eloquenza nei discorsi. È presente nel software ben congegnato, che fa molto con poco codice, in metodi brevi e frizzanti, in architetture ben fatte. Alcuni linguaggi rendono tutto ciò difficile da fare, e non tutti i programmatori ne sono in grado, ma è un piacere leggere e lavorare su questo tipo di codice. Se si lavora con un linguaggio espressivo o su del codice che piace, spesso sembra che le cose si illuminino.

Ora, per quanto riguarda l'artigianato: in un certo senso il software è astratto. Dov'è che esiste il comportamento di un programma se non nella nostra mente? Tuttavia, si dice che il software viene costruito (built) per un motivo ben preciso: ai programmi viene data una forma, funzionalità per funzionalità, le architetture nascono come impalcature e poi crescono, le interfacce vengono assemblate, i bug vengono corretti ed i punti critici vengono ottimizzati per far sì che le cose girino più velocemente. Il software dà un profondo e soddisfacente "senso di manufatto". Le cose vengono costruite, a partire da idee pure, e poi le si osservano risolvere problemi reali, permettendo alle persone di stare un po' meglio. O molto meglio, in certi casi.

Ad esempio, la biologia. Dopo circa 400 anni di rivoluzione scientifica, la biologia non è stata in grado di svilupparsi riguardo a problemi cruciali come cure efficaci per infezioni virali o il cancro. Alcuni dei progressi migliori, come gli antibiotici, sono dovuti al caso oppure ad esperimenti casuali. Si avvia una sperimentazione clinica su un farmaco per l'ipertensione ed all'improvviso... Wow! Tutti i soggetti hanno un'erezione. E così è nato il Viagra. Sicuramente il caso gioca un ruolo fondamentale in ogni progetto di ricerca, ma se la fisica e la chimica hanno delle basi teoriche corpose, la biologia è stata confinata nell'ambito delle soluzioni improvvisate. Si vuole trattare il cancro? Ecco, bombardiamo il paziente con radiazioni e veleni, magari il cancro muore per primo! Sono soluzioni improvvisate anche brillanti, e sono contento che ci siano, ma non è nemmeno lontanamente paragonabile alla precisione che abbiamo in altri campi.

Il software sta cambiando questa situazione. Soltanto 50 anni fa fu scoperta la forma del DNA, ma ora chiunque può cercare su Internet e scaricare centinaia di sequenze complete di genomi. Oppure consultare centinaia di geni (il DLEC1 per fare un esempio preso a caso), completi di sequenze di nucleotidi, sequenze di amminoacidi per le proteine, bibliografia che tratta del gene, basta chiedere! Oppure cercare in database enormi di geni e proteine, fornendo come chiavi sequenze di nucleotidi o amminoacidi, magari dopo averle tirate fuori da qualche strumento ancora più economico, ottenendo un rapporto completo sui risultati. E non importa se le informazioni sono tutte esatte, perché l'algoritmo in BLAST, lo strumento standard di ricerca delle sequenze, tira fuori risultati parziali da database, ordinandoli per importanza. Questi avanzamenti permetteranno alla medicina di tirare fuori risultati enormi. La biologia sta per entrare in una nuova era, come la fisica del XVIII secolo, spinta in avanti dal software.

Sì, senz'altro, i biologi hanno un ruolo minore (:P), ma noi ne abbiamo uno importante nel permettere sviluppi maggiori nella scienza, nella cultura e nell'economia. Quando un bambino del terzo mondo consulta una pagina di Wikipedia, è anche merito dei programmatori! Siamo noi ad aver scritto le RFC, gli stack delle reti, i browser, MediWiki, i sistemi operativi, ed i server HTTP. Senza contare un gran numero delle pagine di Wikipedia stessa. L'influenza dei programmatori va oltre i bit e i byte: è stato un programmatore ad aver inventato i wiki, e la comunità degli informatici ha dato il via ai blog. Henry Mencken ha giustamente fatto notare che "la libertà di stampa è limitata a chi possiede una testata". È un peccato che ora non sia qui attorno ad osservare le nostre creazioni che rompono l'opprimente conformismo ed il servilismo sociale del giornalismo professionale. Con meno stile, ma con grandi benefici, si può dire che le applicazioni hanno portato crescenti guadagni in termini di produttività alle economie. E questi sono solo pochi esempi, da una possibile lunga lista.

Negli ultimi tre anni di università, molte esperienze mi hanno fatto pensare male dei computer e di quello che c'è attorno ad essi, ogni tanto (raramente!) facendomi anche passare la voglia di proseguire su questa strada. Ora sono contento di averci sbattuto la testa e di aver raggiunto un buon livello nella scrittura del software. Anche se probabilmente mamma pensa ancora che io scriva cose senza senso, ma vabbè, che ci posso fare! :)

Se vi trovate in una situazione che sta per uccidere la vostra innata passione per la tecnologia, senza ombra di dubbio, smuovetevi! Non fissatevi, mentre la vostra passione si affievolisce. È difficile trovare in giro gente motivata, in qualunque ambito! Per tutti quelli che pensano che programmare possa essere una cosa interessante, a livello economico i guadagni non saranno necessariamente alti. Ma credo che sia una delle carriere giuste. Non è soltanto per le prospettive di lavoro fighe che uno può avere, ma è perché, dal momento che il ruolo del software nella società cresce, si potranno vedere molti più benefici per le persone. Sono felice di essere in gioco, perché così posso cercare costantemente di migliorare la mia arte e la mia tecnica per un ideale.

No comments:

Post a Comment