Chi mi segue da tempo sa che l’educazione è un argomento che mi sta particolarmente a cuore ed è forse per questo motivo che spesso le persone mi chiedono consigli su come imparare a programmare. Gli articoli più letti di questo sito sono senz’altro le guide alla programmazione; Impara Python in 10 minuti e la serie sulle Regular Expression sono vere e proprie Hit, ma certo non sono adatte ai principianti. L’ultima mail è di pochi giorni fa: Mirko chiedeva qual’è il modo migliore per avvicinarsi all’affascinante mondo della programmazione.
Una domanda facile da formulare, che presuppone un’altrettanto facile risposta. Ahimè non é così semplice, perlomeno non nel mio caso. Certo, ci sono dozzine di fonti di ottima qualità, ma penso che per poter fornire un consiglio valido dovrei conoscere meglio chi pone la domanda. Il tuo background è scientifico o umanistico? Sai l’inglese? La gran parte delle fonti che consiglierei sono inglesi. Qual’è la tua età? Sono tanti i fattori da considerare, soprattutto se ci si impunta a voler rispondere con cura.
In tempi non troppo lontani programmare significava conoscere il funzionamento dei computer; comprendere a fondo la loro teoria e la loro struttura. Ora è tutto cambiato. Ormai Assembly e Linguaggio Macchina sono domini riservati a pochissimi super-specialisti; la gran parte dei programmatori più giovani li ha solo sentiti nominare. I linguaggi ad alto livello ci permettono di concentrarci sulla soluzione dei problemi (gli algoritmi) delegando al compilatore la creazione delle istruzioni di basso livello.
E’ una buona notizia. Per diventare programmatori non è indispensabile essere particolarmente dotati, né seguire chissà quali corsi accademici. Buona volontà, curiosità, passione e un pizzico di intraprendenza sono tutto quel che serve per buttarsi. Se son rose fioriranno, come si suol dire.
Pensare da Informatico
Se mi avete seguito fin qui grazie per la pazienza. Vi ricompenso con lo stesso consiglio che ho dato a Mirko l’altro giorno: Pensare da Informatico. Ma come direte, dopo tutte queste chiacchiere ci spiattelli un’altra astrattezza da quattro soldi? Al contrario! Sto parlando di un libro vero e proprio. Pensare da Informatico (Versione Python) è l’unico testo che mi sento di consigliare davvero ai principianti. E’ gratuito ed è ottimamente tradotto da Alessandro Pocaterra. L’edizione originale è giunta da poco alla terza edizione (novembre 2011), mentre credo che l’italiana sia ferma alla seconda, che va benissimo comunque.
Nella Prefazione Jeff Elkner racconta che era alla ricerca di un testo adatto all’insegnamento della programmazione nelle scoule americane. Il grande Richard Stallman gli consigliò di dare una occhiata a How to Think Like a Computer Scientist:
Quando lessi quel libro seppi immediatamente che volevo usarlo nelle mie lezioni. Era il testo di informatica più chiaro ed utile che avessi visto: il libro enfatizzava il processo di pensiero coinvolto nella programmazione piuttosto che le caratteristiche di un particolare linguaggio. Il solo fatto di leggerlo mi rese un insegnante migliore.
Mica male come premessa no? Python è il inguaggio scelto dagli autori (e in proposito vi consiglio di leggere introduzione e prefazione) ma davvero non è il linguaggio quel che conta. Leggete questo testo con attenzione e soprattutto senza fretta. Non passate al capitolo successivo se non siete sicuri di aver afferrato per bene ciò che avete appena letto. Si procede passo per passo affrontando tutti i principali temi della programmazione moderna. Vi assicuro che alla fine di questa esperienza saprete programmare a dovere, a prescindere dai linguaggi che in futuro vorrete studiare (e magari nel frattempo vi innamorerete pure di Python).
Fatemi sapere come è andata. Ci tengo molto.
Aggiornamento del 9.3.2012 – Ho scovato per caso una versione PDF, ben fatta, di Pensare da Informatico
Ottimo articolo!!! veramente utile. Si capisce chiaro un miglio che lei ha un’esperienza ventennale in campo informatico. Io ho 35 anni, mi sono avvicinato al mondo dell’informatica nel lontano 1984 con il mio primo Commodore-64 che mi regalo mio padre per natale. Anche se ero un bimbo mi sono subito appassionato! non solo ai videogiochi, ma anche al vecchio Basic. Mi ricordo che a scuola mi prendevano tutti per un mostro alieno perchè distribuivo cassette con programmi scritti da me in Basic da caricare sul C-64 e all’epoca se parlavi di variabili, costanti etc. il 99% dell’umanità non ci capiva un cavolo! successivamente entrai in possesso del mio primo Commodore Amiga 500 (poi la 1200, 2000, CDTV, e infine Amiga CD) con l’Amiga mi ero imparato ad usare l’Amos che era un linguaggio per realizzare videogiochi (anche molto potente per l’epoca devo dire) mi piaceva moltissimo e mi ha permesso di passare in seguito al linguaggio Pascal (il mio primo Pc 386) con l’avvento del Pc e del DOS (che dio lo benedica) ho passato almeno 2 annetti a smanettare col QBasic. Dato che avevo già delle buone basi di Basic acquisite con l’amato C-64 la cosa non fù affatto complessa. Per farla breve… ad oggi ho provato tutti i principali linguaggi di programmazione e l’unico che mi regala soddisfazione, divertimento, e velocità di esecuzione è indubbiamente il Python! Il linguaggio Python ha molte analogie con il Basic (forse per via della sintassi?) di fatto è il miglior linguaggio esistente per imparare, realizzare prototipi di applicazioni, senza contare che come linguaggio script credo sia il più usato in senso assoluto oggi (persino nei videogiochi commerciali ne fanno largo uso). Ringrazio l’autore di questo articolo e mi scuso per il messaggio kilometrico
per quanto riguarda il Python mi piacerebbe leggere un bell’articolo riguardante la nuova versione 3.x cosi da comprendere meglio le varie differenze. Seguo con interesse lo sviluppo del nuovo progetto “Ninja-IDE” è un progetto nuovo e ancora poco stabile ma trovo che come Editor/IDE sia la soluzione migliore per scrivere script o piccoli progetti in Python senza dover sbattere la testa con roba come Eclipse (che è vergognosamente pesante forse perchè è scritto in Java?). A presto.