Alcuni pensieri e considerazioni sul mondo del software, scritte da un insider

Big Bang Theory (2007)La società tende sempre a caratterizzare i propri membri e classificarli sulla base dei loro comportamenti. Ci sono però individui che sfuggono alle normali convenzioni sociali e che per questo vengono considerati bizzarri, strani o addirittura reietti e scarti della società. Sono persone che non fanno nulla di male, semplicemente hanno interessi che sfuggono alla massa delle persone, sia perché ritenuti troppo complessi o marginali per l'andamento della società. Col tempo queste categorie di persone sono state stereotipate, poi derise ed infine rivalutate. In particolare due categorie, il nerd e il geek hanno sempre generato confusione nella testa delle persone. Spesso le due categorie sono state sovrapposte, confuse ed assimilate, mentre all'occhio attento le differenze sono molte.

Premesso che non è giusto generalizzare sulle categorie di persone o ridicolizzarle, è noto che molti informatici spesso ricadono in una delle due categorie, eventualmente prendendo qualcosa da entrambi gli stereotipi. Ma qual è la vera differenza tra nerd e geek?

Linguaggio C (D. Ritchie, B. Kernighan, 1978, Jackson Ed.)Imparare a programmare in C su una nuova piattaforma è come iniziare a conoscere una persona: si inizia rompendo il ghiaccio con gli argomenti più generici, per arrivare piano piano a conoscerne le varie sfaccettature del carattere e la personalità. Imparai a programmare in C nel 1995, su piattaforma SCO UNIX. Il mainframe era un vecchio IBM HP 9000 del 1984 che il laboratorio di informatica ci metteva a disposizione attraverso terminali "stupidi" dotati di vetuste tastiere ingiallite dal tempo e fastidiosi monitor ai fostori verdi parzialmente impressionati in modo irreversibile. Al tempo la percezione era di camminare su un terreno minato poiché il grosso mainframe incuteva soggezione e soprattutto perché il linguaggio C non è propriamente immediato.

C'era chi diceva che prima di poter dire di conoscere il linguaggio C occorre studiarlo tre volte. Io ho perso il conto delle volte che ho letto e riletto il K&R, rigorosamente acquistato dal libraio. Il libro cartaceo era l'unico mezzo di apprendimento, esistevano le BBS (Bulletin Board System) e i newsgroup ma erano di solito organizzati in FAQ, tutorial e argomenti specifici. Non esisteva una guida omnicomprensiva, tipo un manuale online.

Negli anni '90 avevo un Amiga 500 sulla scrivania di casa ed era per me un grande compagno di giochi. Non mettevo in dubbio che lo si potesse programmare per fare anche altro, tuttavia non me ne ero mai preoccupato. Eppure era possibile, bastava un compilatore C ed un manuale.

CalendarioRicordo lo stupore che provai quando iniziai a programmare e scoprii le funzioni di libreria. Questo mondo magico ed ermetico, fatto di funzioni e metodi di cui non si riusciva a comprendere l'implementazione, risolvevano problemi in modo rapido, preciso ma anche misterioso. Quando si lavorava con le date poi sembrava che queste funzioni estrapolassero dati da fonti inaccessibili. Oggi mi rendo conto che dietro ogni funzione ci sono sempre poche righe di sapiente codice e tanto ingegno. Per lavoro mi capita spesso di occuparmi di sistemi che per funzionare devono risalire alla giornata lavorativa precedente nella settimana, e ciò generalmente si traduce nella giornata precedente, ma non il lunedì. Le librerie di funzioni, oggi come allora, mettono a disposizione metodi per estrarre da una data il giorno della settimana, cosa che diciotto anni fa suscitava in me una certa meraviglia, mista ad un religioso stupore. Eppure dietro c'è poco più che un po' di algebra lineare, ma come sempre è l'idea che conta. Ecco quella di Claus Tøndering.

CalendarioUno dei temi che si impara ad odiare per primo quando si inizia a programmare è la gestione delle date. Gestire un calendario significa fare tutto e quando si inizia a scrivere la prima libreria di funzioni in linguaggio C per gestire le date sembra quasi di dover lanciare una capsula nello spazio. In realtà esistono librerie di sistema per risolvere molti problemi in modo elegante ma scriversele da solo fa figo, non impegna e sta bene con tutto. Gestire le festività è semplice finché si parla di Natale o Capodanno ma le feste mobili sono le più antipatiche. Per esempio la Pasqua. Come si fa a stabilire quando cade la pasqua in un determinato anno?

A questo punto la letteratura abbonda di soluzioni. La più immediata per un programmatore è sicuramente il metodo di Gauss.

Da Dio a Google!Agli albori della sua storia, Google! era niente più che un motore di ricerca. Oggi è considerato alla stregua di una entità onniscente, una divinità o un'organizzazione segreta che si prefigge l'obiettivo di conquistare il mondo digitale attraverso il controllo dell'informazione. C'è un po' di verità in ciascuna di queste affermazioni, anche se da un punto di vista informatico un motore di ricerca è semplicemente un algoritmo che lavora su una base di dati. Se poi l'algoritmo è un complesso sistema di data mining che si basa su più di 100 euristiche, se lavora su una base di dati di 850 Terabyte ed è ospitato in uno dei CED più grandi e segreti del mondo, fa poca differenza per un informatico. Dopo tutto il bisogno di segretezza è necessario per proteggere l'unica ricchezza di cui Google! dispone: la tecnologia.