1.3. Imparare *e* programmare#

Come descritto nel paragrafo precedente, introdurrò i concetti affiancandoli, o talvolta precedoli, con esempi pratici. Quando possibile, mostrerò anche delle implementazioni utilizzando un linguaggio relativamente moderno. Userò Python e il relativo data science stack, costituito dalle librerie principalmente utilizzate dalla comunità open source che si concentra sull'analisi dei dati[1] (nel momento in cui questo libro è stato scritto). Per seguire efficacemente il libro, è quindi altamente consigliata una conoscenza di base della programmazione. Il Capitolo 4 fornisce una panoramica a livello medio-alto delle funzionalità di Python che utilizzo nel libro, pensata per consentire a chi sa già programmare, ma non conosce questo linguaggio, di mettersi in pari. La lettura di questo capitolo è comunque consigliata, perché permette di familiarizzare fin da subito con le convenzioni che utilizzo nel codice.

Il libro è scritto utilizzando una tecnologia che permette di inserire contenuti generati dall'esecuzione di codice Python. Ogni volta che guido chi legge a implementare uno o più concetti, il codice viene mostrato esplicitamente. È invece nascosto quando serve solo a produrre elementi come tabelle o grafici, ma un link «Mostra codice» consente di visualizzarlo[2]. Invito caldamente lettrici e lettori a sfruttare questa possibilità: così come leggere passivamente un testo ha poco senso, eseguire questo codice senza riflettere è poco utile. Al contrario, è importante analizzarlo, comprenderlo e modificarlo per capirne meglio il funzionamento—insomma, giocarci in un'ottica hacker, nel senso originale del termine[3]. In ogni caso, alcuni dei contenuti sono interattivi, come mostrato per esempio nel Capitolo 2: la loro manipolazione, che non richiede di analizzare del codice, è pensata proprio per facilitare la comprensione dei concetti introdotti.

Molto spesso guiderò chi legge nell'implementazione pratica degli strumenti fondamentali, soprattutto nella prima parte dedicata alla statistica descrittiva. È importante sottolineare che queste implementazioni non mirano a sostituire le librerie professionali, bensì a permettere di concentrarsi sugli aspetti essenziali di uno o più concetti, al fine di facilitarne la comprensione. Il ragionamento alla base di questo modo di procedere è analogo a quello che prevede che chi sviluppa software abbia imparato a scrivere da zero i principali algoritmi di ordinamento (e, se necessario, sia in grado di farlo), ma che in ambito lavorativo utilizzi le implementazioni disponibili in librerie ottimizzate e rigorosamente validate, in misura difficilmente ottenibile individualmente. In quest'ottica, subito dopo le implementazioni «fai da te», proporrò l'uso di librerie allo stato dell'arte.

Chi non ha esperienza di programmazione può comunque leggere questo libro, saltando semplicemente le parti che contengono, descrivono e discutono il codice. In questo caso, è opportuno essere consapevoli del rischio di non apprendere pienamente i contenuti, dal momento che buona parte della trattazione alterna spiegazioni e codice. In tale situazione, consiglio di prendere in considerazione libri che seguono un approccio più tradizionale, come:

  • Probabilità e Statistica per le scienze e l'ingegneria, di Sheldon Ross [Ross, 2015],

  • Introduzione alla statistica di Marylin K. Pelosi, Theresa M. Sandifer, Paola Cerchiello e Paolo Giudici [Pelosi et al., 2009].

Voglio mettere in guardia chi pensa di usare questo libro per imparare a programmare mentre, nello stesso tempo, impara ad analizzare dati. Questo non è un libro per imparare a programmare, ma piuttosto un libro per imparare usando la programmazione, scrivendo cioè codice per rendere più solido il processo di apprendimento di un'altra materia. Si dice che si è compreso veramente qualcosa solo quando si è in grado di spiegarla alla propria nonna[4]. Io rilancio, dicendo che non si padroneggia davvero un concetto tecnico se non si è in grado di implementarlo scrivendo un programma. Per seguire questa filosofia, però, bisogna già saper scrivere software, e questa è una competenza che richiede tempo, energia e materiali didattici dedicati per essere acquisita. Per chi parte da zero, consiglio alcuni testi di riferimento, più o meno recenti:

Ho scelto libri dedicati a linguaggi diversi, per sottolineare come non conti tanto conoscere i dettagli di un linguaggio in particolare, ma capire bene le basi della programmazione come disciplina a sé stante. Infine, anche se ho citato testi in italiano, vale sempre la pena valutare la versione originale in inglese: spesso è più aggiornata e scritta pensando anche a chi non è madrelingua. Questo aiuta a familiarizzare con il gergo tecnico e a comunicare facilmente sui canali online dedicati alla programmazione, che sono una risorsa preziosa per risolvere problemi.