Imparare a Programmare

just a cute picture

Un Inizio per il Futuro Programmatore

Tutto ebbe inizio nel 2002. Volevo insegnare la programmazione ed ero convinto che Ruby si prestasse benissimo alla didattica. Allora Ruby era ancora un linguaggio molto giovane e tutti ne eravamo entusiasti sia sotto il profilo della potenza che dell'eleganza, ma ad un certo punto realizzai che un corso di Ruby sarebbe stato l'ideale anche per introdurre alla programmazione.

Purtroppo a quel tempo non era disponibile molta documentazione su Ruby adatta a principianti. Alcuni di noi, membri della community, riflettevamo su quanto sarebbe stato utile una guida del tipo "Ruby per il Principiante" e, più in generale, su come insegnare la programmazione. Più ci pensavo e più mi veniva da pensarci (e la cosa mi sorprese alquanto). Finché qualcuno disse "Chris, perché invece di parlarne e basta non ti decidi a scrivere tu un tutorial?" Così lo feci.

All'inizio non era granché. Avevo tutte queste idee che -in teoria- erano buone, ma il compito di scrivere un eccellente tutorial per non programmatori si rivelò molto più difficile di quanto non mi rendessi conto. (Insomma, sembrava buono a me, ma io sapevo già programmare).

Mi salvarono il fatto che resi molto semplice contattarmi e la mia inclinazione ad aiutare le persone quando si trovano bloccate: quando notavo che molte persone rimanevano bloccate nello stesso punto, lo riscrivevo. Era parecchio lavoro, ma lentamente il tutorial migliorò sempre di più.

Un paio di anni dopo era finalmente diventato un buon lavoro. :-) Così buono, in effetti, che ero pronto a dichiararlo finito e passare a qualcos'altro. Proprio in quel momento si presentò l'opportunità di trasformare il tutorial in un libro. Siccome era sostanzialmente finito, pensai che non ci sarebbero stati problemi. Dovevo solo ripulire un paio di punti, aggiungere qualche esercizio in più, magari qualche altro esempio, qualche altro capitolo, farlo rileggere a una cinquantina di revisori in più...

Mi ci volle un altro anno, ma ora penso che sia davvero molto buono, soprattutto grazie alle centinaia di anime impavide che mi hanno aiutato a scriverlo.

Su questo sito si trova il tutorial originale (tradotto in italiano NdT) che è rimasto più o meno invariato dal 2004. La nuova edizione è disponibile come libro.

 

Qualche Pensiero per i Docenti

Ci sono alcuni principi guida cui ho cercato di attenermi. Penso che abbiano reso il processo di apprendimento molto più agevole. Imparare a programmare è già difficile di per sé, quindi se stai guidando qualcuno sulla via degli haker, queste idee potrebbero aiutare anche te.

Innanzitutto ho cercato di separare i concetti il più possibile, in modo tale che gli studenti debbano imparare solo un concetto alla volta. Ciò all'inizio mi risultò parecchio difficile ma perfino troppo facile dopo aver fatto un po' di pratica. Alcune cose vanno insegnate prima di altre ma rimasi stupito di quanta poca gerarchia ci sia effettivamente nel ragionare per precedenze. Alla fine ho dovuto solo scegliere un ordine per poi cercare di sistemare gli argomenti in modo tale che ogni nuova sezione fosse introdotta e motivata dalle precedenti.

Un altro principio che ho tenuto presente è l'insegnare solo un modo di fare qualcosa. E' un ovvio beneficio per un tutorial destinato a persone che non hanno mai programmato prima. Inoltre è più facile imparare un modo di fare qualcosa piuttosto che due. Tuttavia il beneficio forse maggiore sta nel fatto che meno cose s'insegnano a un nuovo programmatore, più creativo questi dovrà essere. Siccome la programmazione è essenzialmente -problem solving- è cruciale incoraggiare il più possibile lo studente in tal senso a ogni occasione.

Ho cercato di riferire i concetti della programmazione a concetti che il nuovo programmatore già possiede; per presentare le nuove idee in modo che sia la loro intuizione a sostenerne il peso, piuttosto che il tutorial. La programmazione orientata agli oggetti si presta piuttosto bene. In questo modo sono stato in grado di riferirmi agli "oggetti" e a differenti "tipi di oggetti" abbastanza presto nel tutorial, lasciando scivolare queste frasi nei momenti più innocenti. Non ho scritto nulla del tipo "tutto in Ruby è un oggetto" o "numeri e stringhe sono tipi di oggetti", perché frasi di questo tipo non significano nulla per il nuovo programmatore. Piuttosto che riferirmi a "oggetti di tipo stringa" mi riferivo semplicemente a "stringhe" e utilizzavo la parola "oggetto" anche solo per indicare qualcosa nel programma. Il fatto che in Ruby ogni cosa è un oggetto ha reso questi espedienti molto più efficaci.

Sebbene volessi evitare il gergo sovrabbondante volevo essere comunque certo che se necessitavano d'imparare una parola, imparassero quella giusta. (Non volevo che dovessero impararla due volte, chiaro?) così ho preferito da subito il termine "stringhe" a "testo". I metodi dovevano essere chiamati in qualche modo, così li ho chiamati da subito "metodi".

Per quanto riguarda gli esercizi, penso di averne creati di buoni, ma non potevo averne troppi. Onestamente penso di aver passato la metà del mio tempo cercando di tirar fuori qualche esercizio che fosse al contempo utile e divertente. Gli esercizi noiosi sono assolutamente capaci di stroncare sul nascere il desiderio di programmare mentre quelli buoni fanno provare al nuovo programmatore il desiderio di saperne sempre di più. In breve, non si può passare troppo tempo cercando di uscirsene con ottimi esercizi.

powered by Ruby

 

Ringraziamenti

Infine, vorrei ringraziare tutti i membri della mailing list ruby-talk per i loro pensieri e incoraggiamento, tutti i miei meravigliosi revisori per il loro aiuto nel rendere il libro molto meglio di quanto avrei potuto fare da solo, la mia cara moglie in particolare per essere il mio principale recensore/tester/cavia/musa, Matz per aver creato il linguaggio favoloso che è Ruby e i Pragmatic Programmers per avermi chiesto di, e poi pubblicato, il mio libro!

 

Il Tutorial Originale [Nota del Traduttore]

Le pagine di questo tutorial (compresa questa) sono state tradotte in italiano a partire da un brillante tutorial originale scritto in inglese da Chris Pine nel quale mi imbattei la prima volta nel 2010. A quel tempo mi stavo affacciando per la prima volta al mondo dell'insegnamento e cercavo disperatamente una risposta alla domanda: idealmente, come si dovrebbe imparare a programmare? da quale linguaggio iniziare? Inutile aggiungere che se mi sono preso la briga di tradurre in italiano questo libricino è proprio perché penso di aver trovato la risposta :-).
Nel seguito della traduzione ti capiterà di trovare alcune mie note (cioè di me medesimo traduttore, che mi chiamo Duccio Armenise e tengo buona parte di questi Corsi di Informatica) contrassegnate dalla dicitura "NdT" (Nota del Traduttore). Ho cercato di ottenere una versione in italiano il più fedele possibile all'originale, tuttavia, per alcuni termini che risultano ovvi a un angolofono ma non a un italiano, ho dovuto inserire delle spiegazioni aggiuntive.

Durante tutto questo lavoro di traduzione il mio scopo è stato quello di eliminare la barriera linguistica per quanti desiderino approcciarsi alla programmazione; permettendo quindi, anche a chi non conosce l'inglese abbastanza bene da poter leggere agevolmente l'originale, la fruizione dei contenuti e di provare l'ebbrezza informatica che ne consegue. Giusto è affrontare una difficoltà alla volta, fermo restando che chi intendesse "fare sul serio" dovrebbe prendere in debita considerazione l'apprendimento della lingua inglese (che è la lingua dell'informatica: non a caso l'autore di Ruby, Matz, pur essendo giapponese ha dato alla luce un linguaggio anglofono). A tal proposito, per quando ti sentirai già più a tuo agio con la programmazione e pronto a fare il salto di qualità successivo, colgo l'occasione di consigliarti questi corsi di inglese a Milano e queste vacanze studio in Inghilterra. Dai, a prescindere da tutto, quella della vacanza studio a Londra è proprio un'esperienza da fare nella vita! Intanto ti segnalo anche due risorse utili a tradurre termini che ti dovessero risultare ostici: la prima è il dizionario multilingua wordreference, e la seconda lo strumento traduzione di Google.

Per contattarmi a proposito di errori di traduzione, suggerimenti e altro, scrivimi pure qui.

Per condividere informazioni con gli altri studenti e lettori di questo corso, per esempio le tue soluzioni agli esercizi, manda un commento col form che troverai in fondo a quasi tutte le pagine.

 

© 2003-2009 Chris Pine
© 2012-2014 Traduzione dall'Inglese a cura di Duccio Armenise, in collaborazione con WorldBridge Traduzioni.