Quale complemento al KR?

di il
10 risposte

Quale complemento al KR?

Ciao. Grazie ai consigli ricevuti sul forum ho deciso di studiare il C usando il testo dell'ideatore (il famoso K&R), tuttavia tra i testi consigliati qui sono indeciso su quale affiancarvi per esercitarmi. In particolare sono indeciso se usare Kernighan & Pike, "Programmazione nella pratica" oppure prendere gli esercizi di Kelley & Pohl, "C - Didattica e programmazione". Reputate uno meglio dell'altro oppure li considerate equivalenti?

10 Risposte

  • Re: Quale complemento al KR?

    Se sei seriamente interessato al linguaggio C dovrai inevitabilmente leggere un numero rilevante di testi (suggerisco anzi la lettura di questo post, tra i tanti), inclusi gli altri menzionati che sono tutti necessari, sebbene ben lungi dall'essere sufficienti.

    In ogni caso, per il momento suggerisco di abbinare all'assolutamente ovvio e ineludibile testo sacro che apre la bibliografia citata il Kernighan & Pike, associando magari anche . Con una importante premessa: gli esercizi proposti in quel PDF accademico sono risolti ad un livello decisamente minimale ed intenzionalmente aperti a numerosi affinamenti da ogni punto di vista. Ciò consente di avviare proficue discussioni sul forum, dalle quali apprendere di volta in volta come ottimizzare il codice, scegliere consapevolmente tra varie alternative (algoritmi, idiomi e funzioni di libreria), migliorare lo stile e l'engineering della soluzione.
  • Re: Quale complemento al KR?

    Io consiglio pure qualcosa per lo studio di algoritmi e strutture dati

    Introduzione agli algoritmi e strutture dati 3/ed
    Di: Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein
    ad esempio.

    In più serve pure una buona conoscenza dei compilatori e della macchina su cui vuoi lavorare, il c non è Java, che basta una virtual machine per funzionare. Il c è legato molto all hardware della macchina su cui si lavora.
    Anchio ho intenzione di approcciarmi al c in modo serio, e il mondo che mi si è aperto davanti è vastissimo.
    La cosa certa è che i migliori testi sono in inglese, quindi inizia con questa premessa.
    Inoltre con M.a.w per l'eserciziario, mi sta piacendo. La pratica è importantissima, e ti lascio con la frase che diceva sempre il mio prof:
    "se un programma funziona entro i primi 5 tentativi, vuol dire l'errore che hai commesso non l'hai trovato, ma sta sicuro che c'è" (per dire sia impossibile riuscire a creare programmi senza errori, sopratutto per chi sta per approcciarsi, quindi la prima cosa è pazienza e volontà di imparare dai propri errori)
  • Re: Quale complemento al KR?

    Anche per l'algoritmica generale ci sono dei testi sacri che chiunque voglia definirsi programmatore non può non avere studiato. In fondo all'elenco, opportunamente ridotto all'osso e anche meno, ho voluto aggiungere un paio di validi testi accademici italiani facilmente reperibili, tanto per gradire.

    Inoltre non sono da trascurare lo Sprankle & Hubbard, già citato, e il , tra i primi acquisti da fare.

    Comunque evitiamo di subissare l'OP di ulteriori consigli blibliografici, ne ha già più che a sufficienza per partire e per proseguire. Se tutti i sedicenti "programmatori" C avessero studiato accuratamente i soli testi fin qui proposti, una buona metà dei thread apparsi sui forum di programmazione nell'ultimo ventennio non sarebbero mai stati lanciati.
  • Re: Quale complemento al KR?

    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.

    A far copia-incolla da google, github e così via c'è sempre tempo.
  • Re: Quale complemento al KR?

    +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.

    A far copia-incolla da google, github e così via c'è sempre tempo.

    concordo, ad esempio io, per pura conoscenza, mi sono creato le mie Strlen, strcpy ecc, e poi le ho controntate col le "vere" anche per capire le differenze che possono esserci tra uno che a stento sa pronunciare "linguaggio c" (vabbe, forse mi sto troppo buttando giù) e qualcuno che sappia programmare in C . Devo dire che l'esperimento ha dato i suoi frutti.
  • Re: Quale complemento al KR?

    Certo, ribadisco che ognuno ha il suo "stile" per insegnare, non ne esiste solo uno che è necessariamente il Togliattesco.
    Mi limito a suggerire il mio
  • Re: Quale complemento al KR?

    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.
  • Re: Quale complemento al KR?

    Ah mi stavo dimenticando una domanda importante, rivolta in particolare a M.A.W. che mi ha fatto venire il dubbio ma anche a chi altri abbia da dire la sua.

    Leggendo i tuoi commenti, mi sembra che i consigli che scrivi sottintendano il fatto che si riferiscono alla preparazione del "programmatore in [nome-del-linguaggio]" (in questo caso il linguaggio C).

    Pensi che professionalmente parlando vada bene specializzarmi sin da subito (ovviamente senza trascurare le esigenze formative generiche necessarie)?
  • Re: Quale complemento al KR?

    In breve: ci sono famosissimi esercizi (risolti e non) anche sul K&R. E per il problem solving generico, lo Sprankle & Hubbard si è dimostrato uno dei più validi.

    La domanda fondamentale, tuttavia, è: cosa vorresti fare da grande? Perché magari, paradossalmente, invece di metterti a scalare tutte le vette del Karakorum alla ricerca del Nirvana del C, e quindi farti prendere la mano ad approfondire l'Assembly, l'ottimizzazione, l'architettura dei sistemi, gli internals di Windows, Linux, MacOs/X, OpenBSD, un pacco di librerie ad altezza d'uomo, un paio di frameworks e molto, molto altro (ché questa, e non altra, è la Via Regia per il C), ti bastano lo Sprankle & Hubbard e un paio di manuali su Python per divertirti, imparare e trovare un lavoro come sviluppatore.
  • Re: Quale complemento al KR?

    Sei stato chiaro e ti ringrazio dei suggerimenti.
    Vorrei ringraziare inoltre sia te che +m+ per avermi convinto ad usare il K&R. Lo stavo proprio scorrendo adesso ed in effetti fa al caso mio, ho visto anche (come mi hai detto) che gli esercizi ci sono e che è proprio nella filosofia degli autori il cercare di insegnare dando esempi e facendo fare a chi legge (almeno a quanto leggo nell'introduzione). La mia mania per i dettagli e l'ossessione per il voler procedere a piccoli passi mi aveva spinto a preferire una guida che comprendesse un'introduzione alla programmazione, cosa inutile nel mio caso (me ne rendo effettivamente conto adesso ) in quanto pur essendo principiante sono già stato iniziato alla programmazione con python e potevo agevolmente studiare sul K&R, che faceva proprio al caso mio ed averlo adottato fin dall'inizio mi avrebbe fatto risparmiare molto tempo... a volte sono eccessivamente cauto .

    Saluti a tutti!
Devi accedere o registrarti per scrivere nel forum
10 risposte