Per gran parte della mia carriera sono stato un programmatore client/server specializzato nel .NET Framework e in tutto quel gira intorno all’ecosistema Microsoft. Un paio di anni fa ho deciso di uscire dalla mia comfort zone professionale, guardarmi attorno e, per citare qualcun’altro, andare a vedere quanto è profonda la tana del Bianconiglio.
Tempo libero a disposizione non ce n’era. A quarant’anni tra lavoro, famiglia e attività agonistica mi rimaneva solo la via del furto: rubare ore al sonno per dedicarmi allo studio di nuovi linguaggi e piattaforme. Prima è stato il turno di JavaScript, poi di Python, Django, Ruby e infine Node e MongoDB. Ora mi considero un programmatore poliglotta, capace di scrivere codice in una moltitudine di linguaggi.
Eppure in passato sono sempre stato convinto che fosse più produttivo concentrarsi su una sola piattaforma per conoscerla fino in fondo e sfruttarne al meglio le possibilità. Sulle ragioni che mi hanno indotto a prendere quella decisione potrei scrivere una decina di articoli, e magari lo farò prima o poi, ma quel che desidero condividere oggi sono le lezioni che questa esperienza mi ha insegnato.
A dire il vero ci ho già provato una volta, buttando giù appunti e abbozzando un articolo poi miseramente abbandonato. Per fortuna qualche giorno fa sono incappato in Advantages of Being a Polyglot Programmer, stupefacente articolo di Davy Brion. Il suo è precisamente il pezzo che io non riuscivo a scrivere, parola per parola. Davy elenca quelli che secondo lui sono i cinque principali vantaggi del programmatore poliglotta. Io ne aggiungo uno e ve li propongo – fate conto che sia io a parlare attraverso lui, o viceversa.
Quali sono i vantaggi del programmatore poliglotta?
Espandere i propri orizzonti
Nell’imparare un nuovo linguaggio c’è molto più che apprenderne la sintassi. Si scoprono nuove tecniche, nuove librerie e nuovi modi di affrontare e risolvere i problemi. Assorbiamo una conoscenza già diffusa nella comunità che si è raccolta attorno al linguaggio, e tuttavia nuova per noi. A seconda del nostro background può capitare di imparare tanto, oppure solo qualcosa qui e là. Se già conosciamo un linguaggio dinamico a oggetti, per esempio, impararne uno nuovo non aggiungerà granché al nostro bagaglio. Se al contrario conosciamo solo linguaggi statici, scoprirne uno dinamico sarà un’esperienza davvero arricchente. E’ proprio questa miscela di paradigmi e conoscenze nuove, grandi e piccole, che influenzerà in modo determinante il nostro modo di risolvere i problemi in futuro.
imparare più facilmente
La pratica rende perfetti. Dedicarsi con costanza all’apprendimento rende più semplice l’atto stesso di apprendere. Tanti hanno difficoltà ad accettare novità che sembrano in conflitto con quel che conoscono. Studiare un linguaggio che si basa su nuovi paradigmi (pensate alla programmazione funzionale) è difficoltoso perché ci costringe a ragionare al di fuori di strutture e regole che ci sono familiari. La seconda volta sarà già più facile, perché l’esperienza precedente ci avrà insegnato a non lasciarci condizionare da ciò che sappiamo. La terza volta sarà ancora più semplice, e così via. Tutti noi impariamo a imparare imparando.
rinnovare la passione per la programmazione
Quando ero programmatore C# / VB.NET mi capitava ogni tanto di non divertirmi più. In quei momenti scrivere codice era solo lavoro, non più gioia e tanto meno passione. Quei periodi potevano durare un paio di settimane, a volte un mese o due. Da quando mi sono dedicato a nuovi linguaggi non mi è più capitato di annoiarmi. Imparare di continuo cose nuove rende tutto più interessante, divertente e senz’altro impegnativo.
RIDurre la dipendenza dagli strumenti quotidiani e introdurne di nuovi
Fino a due anni fa non prendevo nemmeno in considerazione l’idea di scrivere codice senza usare qualche tipo di IDE. Ero dipendente da Visual Studio: IntelliSense, completamento automatico, navigazione, debugger integrato… tutte feature alle quali non credevo di poter rinunciare. Oggi preferisco scrivere codice in un semplice text editor per programmatori (nel mio caso Sublime Text 2), con una finestra terminale in cui lanciare i miei test. Fare a meno del debugger non solo è possibile, ma addirittura proficuo. Si procede a piccoli passi, facendo spesso test focalizzati che permettono di isolare e risolvere rapidamente i bug. Per motivi di lavoro ancora oggi uso e apprezzo Visual Studio ogni giorno, ma preferisco senz’altro lavorare in maniera spartana: text editor e terminale sono tutto quello che mi serve.
Lavorare così comporta una conseguenza importante. Si rende necessario (ri)diventare provetti nell’uso della finestra terminale, della linea di comando e, in alcune occasioni, addirittura di sistemi operativi diversi. Per imparare Ruby o Node spesso è meglio installare una distribuzione Linux (o lavorare su OS X se avete un Mac) piuttosto che tentare di far girare il tutto sotto Windows. In ogni caso conoscere la shell e i tool *NIX, specialmente di questi tempi, aggiungerà una freccia potente al nostro arco.
ridurre il legame col linguaggio prediletto
Coloro che lavorano esclusivamente con una piattaforma tendono a sviluppare con essa un vero e proprio legame emotivo. Lo so per certo perché è capitato anche a me (e diverse volte) nel corso degli anni. Se siamo legati emotivamente a un linguaggio ci diventa difficile rimanere equilibrati nel corso di una discussione, o restare calmi se percepiamo che il nostro prediletto è sotto minaccia (pensiamo a quel che sta succedendo a Silverlight proprio in queste ore). Praticando più linguaggi e piattaforme scopriamo che le nostre conoscenze e capacità sono trasferibili; che siamo programmatori a prescindere dagli strumenti che utilizziamo. Qualunque sia il destino della nostra piattaforma prediletta, noi non abbiamo nulla da temere.
migliorare e ampliare il network professionale
Studiare nuovi linguaggi e nuove piattaforme mi ha portato a conoscere molta più gente in due anni di quanta non ne abbia conosciuta nei venti precedenti. Quando si lavora a lungo nello stesso ambiente con gli stessi strumenti arriva il momento in cui non si ha (o non si sente) più bisogno di confrontarsi, informarsi e… imparare. Si acquisisce l’esperienza sufficiente a portare a casa il risultato, qualunque esso sia. Le stesse comunità di sviluppatori, per quanto ampie, tendono a chiudersi e diventare presto auto referenziali: stesse persone, stessi contributi, stesse domande e risposte. Aprirsi a comunità diverse illuminando la propria mente con idee che provengono dalle fonti più disparate è una esperienza esaltante. Soprattutto dopo anni di programmazione a testa bassa.
Una riduzione di questo articolo è stata oggetto di un mio Ignite (relazione lampo in cinque minuti) presentato il 8.10.2011 al KnowCamp 2011. Le slides e il video sono disponibili online.