Newsgroup: it.comp.programmare
Titolo: Libro per imparare le tecniche di programmazione?

Ciauz,
Esistono e, se sì, potreste consigliarmi dei buoni libri -- l'inglese
non è un problema -- che spieghino nel dettaglio le tecniche di
programmazione e in particolare la programmazione strutturata? Per
"tecniche di programmazione" intendo le strategie adottate da un
programmatore per risolvere tutti i problemi legati alla progettazione e
implementazione di software ex novo -- problem solving, in breve.
Sono uno studente al primo anno di ingegneria delle tlc, dunque alle
prese principalmente col C, con poche conoscenze in merito -- leggasi:
poco più di quello che stiamo facendo a lezione -- ma molta voglia di
fare ;), per cui preferirei un libro con un buon livello di
approfondimento a uno troppo semplicistico.
Grazie!
-- 
We've all heard that a million monkeys banging on a million typewriters
will eventually reproduce the entire works of Shakespeare. Now, thanks
to the internet, we know this is not true.      -- Robert Silensky
~> 
http://scriverefantascienza.blogspot.com/


Il SICP (Structure and Interpretation of Computer Programs) che puoi
acquistare su amazon o scaricare liberamente è utilizzato da molte
università americane e dal MIT per il corso (6001) del primo anno in
CS.[1]
A me il sicp ha insegnato molto. Richiede uno studio un pò scolastico
ma gia` con le prime 100 pagine puoi ritenerti molto soddisfatto dello
sforzo. Insegna quali sono gli strumenti concettuali per costruire
astrazioni di dati e procedure, combinarle, gestire il problema dello
stato di un programma e più in generale gestire la complessità che
emerge nello sviluppo di un software. È technology-independent, quindi
non usa esempi che richiederebbero un particolare OS/libreria. Btw tra
gli esempi c'e` un simulatore di circuiti e esempi semplici di
signal-processing.
Un altro che pare sia molto consigliato è HTDP (How to Design Program)
anch'esso liberamente scaricabile o acquistabile su amazon
(
http://www.htdp.org
) ma non l'ho mai letto.
Entrambi usano scheme come linguaggio di insegnamento ma i concetti
insegnati non dipendono da scheme. Trovi le motivazioni della scelta
nelle prefazioni. Entrambi non insegnano solo la programmazione
strutturata. 
Footnotes: 
[1]  
http://mitpress.mit.edu/sicp/full-text/book/book.html
     qui puoi trovare altro materiale (dispense, esercizi, etc.) allegato:
 
http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-001Spring-2005/CourseHome/index.htm
     Sul webcast di berkeley puoi addirittura seguire/scaricare il corso
     (video e audio podcast) che si rifa allo stesso testo, e btw inizia
     oggi:
 
http://webcast.berkeley.edu/course_details.php?seriesid=1906978389
     Lezioni del 2006:
 
http://webcast.berkeley.edu/courses/archive.php?seriesid=1906978342
-- 
Matley

 CS.[1]
[...]
Grazie mille! Sto leggendo ora le prime pagine per valutare se posso già
acquistarlo o se è meglio iniziare da qualcosa di più soft. Per chi
fosse interessato, il pdf del SICP è scaricabile qui:
http://twb.ath.cx/~twb/canon/sicp/SICP.pdf
Putroppo però non ho trovato il pdf di HTDP se non su Google Books (da
dove però non si riesce a scaricare). Se qualcuno ce l'ha o lo trova,
può fare un fischio?
Il TAOCP (Knuth) invece me lo consigliereste dopo questi due? E' davvero
così pesante come leggo? Si capisce anche senza conoscere bene
l'Assembler? :)
ciao!



La tua richiesta riguardava l'apprendimento di tecniche di
programmazione e di design in generale. Chiaro che puoi corredare
queste letture con altre che riguardano aspetti
implementativi/algoritmici di alcuni problemi specifici. Io non te lo
consiglio cmq, soprattutto se sei alle prime armi (a meno che tu non
sia appassionato di aspetti teorici o tendi verso un tipo di studio
molto accademico).
il taocp raccoglie algoritmi e strutture dati (scritti in un assembler
immaginario) per problemi classici (generazione numeri casuali,
ricerca, ordinamento) e ci sono lunghe trattazioni matematiche sulla
correttezza, le prestazioni e le proprietà di questi [1].
Se vuoi imparare a programmare potresti anche evitare di leggerti
libri tipo taocp (sono anche faticosi) e dedicare il tempo a scrivere
(e leggere) codice che è molto più utile imho.
Ciao
Footnotes:
[1] 
Su questi argomenti imho è più didattico (e semplice) "Introductions
to Algorithms" di Cormen et al. Ti presenta gli algoritmi e le
strutture dati classiche (liste, hash, etc.) e non (red-black tree,
algoritmi greedy, shortest-path, FFT) con esempi scritti in uno pseudo
linguaggio di alto livello. Forse c'è una traduzione in italiano.
Un'altra cosa a cui potresti dare un'occhiata è Compilers (detto il
Dragon Book) che tratta dei problemi del parsing, automi a stati
finiti, type checking, generazione di codice) con esempi in C.
È chiaro che questi libri hanno un certo valore per chi è interessato
agli aspetti teorici dell'informatica, ma ne hanno anche uno pratico
(capita di dover scrivere una FSM, un parser, o affrontare problemi
sui grafi o di resource-planning) ed uno educativo (leggere e vedere
commentati dei sorgenti scritti bene per problemi non banali è
istruttivo imho).
P.S. Mi sono accorto su amazon or ora (non me lo ricordavo) che questi
testi hanno un costo non piccolo ma nella libreria della tua
università sicuramente non mancheranno.