Sunday, October 10, 2010

15 esercizi per imparare un nuovo linguaggio di programmazione

Alcuni anni fa trovai questa guida rapida ed interessante per imparare velocemente le basi di un linguaggio di programmazione (considerate sempre questo).
L'idea è semplice: 15 esercizi (difficoltà medio-bassa) per tastare le caratteristiche/funzionalità tipiche di un linguaggio.

Una veloce traduzione in italiano è la seguente.

15 esercizi per imparare un nuovo linguaggio di programmazione


Mhatre N. Prashant

Per esperienza di lavoro conosco un gruppo di linguaggi di programmazione, ma il lavoro stesso richiede di imparare nuovi linguaggi spesso in breve tempo.
Invece di leggere manuali/libri di centinaia di pagine, ho subito letto 10-15 pagine di tutorial o primer*. (Come sapete Google è il miglior motore di ricerca per cercare roba del genere). Continuo a stampare copie delle reference card di un linguaggio per tenerle a partata di mano. (Ci sono molte reference card disponibili su Internet. Provare a digitare "linguaggio da imparare" + "reference card" in Google).

Prima di tutto familiarizza col compilatore, le sue opzione, le scorciatoie dell'editor o ambiente di sviluppo integrato (IDE). Inizia con un semplice programma 'Hello world'. Compilalo. Utilizza le funzionalità di base del debugger come la creazione di breaking point, la stampa i valori delle variabili, il passaggio alla posizione successiva o ad una posizione specifica, lo stopping del debugger, ecc..

Per afferrare rapidamente le basi di un nuovo linguaggio di programmazione qui ci sono gli esercizi che uso. Ricorda che alcuni programmi non sono adatti a programmatori principianti.

(1) Stampa a video serie di numeri (1,2,3,4, 5 .... ecc.) in un ciclo infinito. Il programma dovrebbe uscire premendo un tasto specifico (vedi tasto Escape).

(2) Serie di Fibonacci, swapping di due variabili, ricerca del massimo / minimo tra un elenco di numeri.

(3) Accettare da tastiera una serie di numeri, stringhe e ordinarli in senso crescente / decrescente.

(4) Il numero di Reynolds è calcolato usando la formula (D * v * rho) / mu in cui d = diametro, V = velocità, rho = densità, mu = viscosità.
Scrivere un programma che accetti tutti i valori nelle unità di misura appropriate (non preoccuparti per la conversione in diverse unità di misure).
Se il numero è <2100> "flusso laminare". Se il numero è tra 2100 e 4000 stampa a video "flusso di transizione". Se è >4000 stampa "flusso turbolento". (Se, altro, allora...).

(5) Modificare il programma precedente in modo che questo chieda "Vuoi calcolare nuovamente (s/n)?". Se dici 's' chiederà di nuovo i parametri. Se dici 'n' uscirà. (Ciclo do...while).Durante l'esecuzione del programma inserire 0 come valore di mu. Vedere cosa succede. Dà l'errore "Division by zero"? Dà "Segmentation fault .. core dump?". Come gestire questa situazione? C'è qualcosa già pronto nel linguaggio? (Gestione delle eccezioni).

(6) Calcolatrice scientifica con addizione, sottrazione, moltiplicazione, divisione, radice quadrata, quadrato, cubo, sin, cos, tan, fattoriale, inverso, modulo.

(7) Stampare l'output in diversi formati (ad esempio l'arrotondamento fino a 5 cifre decimali, troncando dopo 4 cifre decimali, zeri di padding** a destra e a sinistra, giustificazione a destra ed a sinistra). (Operazioni di input/output).

(8) Aprire un file di testo e convertirlo in file HTML. (File operazioni / Strings)

(9) Data e ora: estrai l'ora di sistema e convertila in diversi formati "DD-MON-YYYY", "mm-gg-aaaa", "dd / mm / aa", ecc.

(10) Crea un file con data e ora aggiunte al nome.

(11) Inserisci in input una tabella HTML, rimuovi tutti i tag e metti i dati in un file separati da virgola/tab.

(12) Estrai le parole in maiuscolo da un file, estrarre parole singole.

(13) Realizza la funzione di word wrapping*** (osserva come funziona nel "Blocco note" di Windows).

(14) Aggiunta / rimozione di elementi all'inizio, in mezzo e alla fine di un array.

(15) Operator overloading, virtual functions, references, pointers ecc., sono caratteristiche supportate dal linguaggio?C'è qualcosa chiamato "namespace" / "package" / "module" supportato dal tuo linguaggio? (Name mangling) cerca informazioni su questo. ****

Autore
Prashant N. Mhatre
prashant_n_mhatre@yahoo.com

Ho sviluppato software principalmente per mercati azionari e industrie chimiche.
Per saperne di più sulla programmazione è possibile consultare la pagina di programmazione che gestisco

http://www.onesmartclick.com/programming/programming.html
e anche la pagina di ingegneria
http://www.onesmartclick.com/engineering/engineering.html.

* Libro di testo introduttivo.
** Il padding è lo spazio tra il bordo o cornice di un elemento e l'elemento stesso; in questo caso si riferisce alla spaziatura a destra e a sinistra di una stringa stampata a video.
*** Il word wrapping è il ritorno a capo automatico.
**** Da en.wikipedia.org:
operator overloading, virtual functions, references, pointers, name mangling.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Applicare questa guida può essere interessante oltre che utile. Per esempio qui è stata "implementata" in dettaglio per il linguaggio Ruby: http://www.rubyrailways.com/implementing-15-exercises-for-learning-a-new-programming-language/

Altri classici e interessanti problemi di programmazione per "smanettare" con nuovi linguaggi sono raccolti in questo PDF.

Infine, sfide interessanti con esercizi facili-medio-difficili sono presenti su Project Euler e Python Challenge.

Link correlati:
Peter Norvig - Teach Yourself Programming in Ten Years
Le risposte al programmatore principiante.

AddToAny