Grazie a tutti per i consigli.
Per gli altri argomenti inerenti l'informatica e la programmazione, non è che mi manchi la conoscenza di bibliografia, anzi con tutti i consigli che ci sono in giro su forum, blog e quant'altro (non solo italiani) ne ho in abbondanza, tant'è che poi il difficile è fare la scelta giusta (e mi fido più degli italiani per i consigli, non per amor di patria ma perchè siamo più esigenti sulla formazione di base). Tra l'altro conosco i piani di studio e gli esami delle università, quindi
a grandi linee un'idea di quello che dovrei affrontare ce l'ho già (anche se l'intenzione è quella di dare precedenza agli argomenti più pratici). Insomma, ora è il momento di fare, quando poi avrò chiuso questa parentesi ne aprirò un'altra.
Ho dato un'occhiata al Kernighan & Pike. Sinceramente credevo contenesse qualche esercizietto, per questo l'avevo nominato. Se non s'era capito, la mia intenzione era di evitare di studiare l'intera sintassi del linguaggio tutta d'un fiato per passare alla pratica solo alla fine, per questo mi piaceva l'approccio delle guide contenenti esercizi di fine capitolo (al di là della qualità del testo, s'intende, mi riferivo solo all'approccio didattico). Ma tant'è, sempre meglio studiare tutta la teoria su un testo valido per poi passare alla pratica in un secondo momento anzichè usare un pessimo testo (che didatticamente parlando usa un approccio che ritengo indubbiamente migliore). In realtà potrei usare ugualmente K&R e man mano fare gli esercizi del Kelley, ma questo forse mi richiederebbe più sbattimento che studiare tutta la teoria a parte, visto che non è la stessa cosa che avere una guida bella e pronta.
Comunque per essere chiari visto che non mi sono spiegato bene, quando parlo di esercizi mi riferisco ad uno scopo più banale di quello inteso da voi. Semplicemente ritengo infinitamente superiore come approccio didattico l'uso pratico delle regole e degli strumenti man mano che si progredisce con lo studio. Per uso pratico non intendo esercizi che richiedano grandi capacità di problem solving, ma semplicemente che richiedano la scrittura di codice che fa uso degli elementi e delle regole sintattiche studiate. Per fare un semplice esempio, quando ho studiato i vettori in teoria sapevo benissimo che i vettori a dimensione variabile non vanno inizializzati, ma quando poi in un esercizio ne ho fatto uso per la prima volta c'ho schiaffato un bell'inizializzatore per azzerarlo. Conoscere la teoria della grammatica non implica che la si usi correttamente in maniera automatica (sia per i linguaggi umani che di programmazione), ma la soluzione migliore è (oltre allo studio teorico):
1) leggere codice di qualità (nello stile e nella sintassi);
2) scrivere codice tenendo come punto di riferimento codice di qualità (e magari ricevere consigli)
L'allenamento delle capacità di problem solving è ben altra cosa che scrivere qualche riga di codice per automatizzare la sintassi.
+m+ ha scritto:
Come ho scritto in altro post, per quanto mi riguarda avere una (discreta) comprensione di K&R è condizione sufficiente, e per certi versi necessaria, per superare gran parte dei "normali" (intendo "da forum") ""programmatori"" (doppie virgolette).
Riguardo agli eserciziari banali, personalmente, sono contrario, perchè è troppo facile andare a leggere le soluzioni.
Decisamente più utile e formativo, almeno per la mia prassi didattica, l'autoformazione.
Un po' come nuotare con il giubbotto di salvataggio, o senza.
Per imparare bene, abituandosi a contare sulle proprie forze, meglio senza.
Con la premessa che il tipo di esercizi cui mi riferivo sono di un altro tipo, credo di aver capito cosa intendi e sono d'accordo con te sul concetto di fondo, ma faccio una considerazione molto diversa sul valore delle soluzioni degli esercizi (questa volta intesi come veri e propri esercizi di programmazione, non della sintassi), che non reputo dannose in sè, ma dipende dall'uso che se ne fa.
Il concetto di autoformazione a cui tu fai riferimento immagino sia molto vicino a quello del cosiddetto "insight", ossia quell'approccio personale e creativo alla risoluzione di un problema, che ti fa sentire quel "click", che ti da quella sensazione di aver raggiunto la soluzione con intuizione o ad aver compreso un concetto in profondità. Questo è un fattore molto importante nell'apprendimento, ma ha anche i suoi limiti e va invece sostenuto e completato con l'insegnamento formale.
Immagina di non riuscire a risolvere un problema, c'hai sbattuto la testa per molto tempo, l'hai abbandonato per un po' e ci sei tornato su, ma niente. Potresti tranquillamente non arrivare mai alla soluzione. A quel punto (per usare la tua metafora) stai affogando. Avere la soluzione invece può essere un opportunità o meno, dipende dall'uso che se ne fa: se la leggi e basta tanto per dire che "hai trovato la soluzione" è un conto, se ne capisci il ragionamento, ti segni il problema e magari a distanza di tempo te lo riproponi per vedere se hai imparato qualcosa da quell'esperienza è un altro paio di maniche. Allo stesso modo può aiutare un forum, che può essere ancora più istruttivo visto che persone più esperte possono spiegarti il perchè di una certa soluzione, rendendo più probabile il fatto che quel problema diventi un motivo di apprendimento.
Portato all'estremo il concetto di autoformazione (ma non credo ti riferissi a questo) si può rigirare anche con un'accezione negativa: potrebbe portare ogni volta alla riscoperta della ruota (il che è sicuramente ottimo se lo scopo è quello di allenare le capacità di problem solving); ad esempio non servirebbe più lo studio degli algoritmi, cosa che invece sappiamo essere utilissima, o magari vi immaginate che per studiare matematica fosse obbligatorio creare da soli tutti i teoremi esistenti( brrr mi vengono i brividi)? Nessun genio potrebbe da solo inventare tutto quello che è stato inventato in centinaia di anni. Intesa in questa maniera, l'autoformazione è solo un limite. So che non ti riferivi a questo, avevo però voglia di approfondire questo concetto.