Libri sulla programmazione

di il
18 risposte

Libri sulla programmazione

Mi potete consigliare qualche libro che un buon programmatore dovrebbe studiare, che vada al di là dell'apprendimento di un singolo linguaggio? Due vengono spesso menzionati:

Introduzione agli algoritmi - Cormen
Concepts of Programming Languages - Sebesta

18 Risposte

  • Re: Libri sulla programmazione

    Oltre ai già citati, potresti leggere Design Patterns: Elements of Reusable Object-Oriented Software della gang of four. Le implementazioni dei paradigmi sono in c++, ma prima vengono spiegati a livello concettuale.
  • Re: Libri sulla programmazione

    Uno e uno solo te lo do come indispensabile (tipo Vangelo per un cattolico)
    Knuth.
    TAOCP.

    Poi tutto il resto che vuoi
  • Re: Libri sulla programmazione

    Ma il TAOCP - indispensabile, come dici, e mi fido delle tue parole - è una serie da studiare da cima a fondo, riga per riga, facendo tutti gli esercizi, o esistono anche approcci alternativi allo studio di una tale opera?
  • Re: Libri sulla programmazione

    Non ci sono esercizi. sono algoritmi
  • Re: Libri sulla programmazione

    I testi che un qualsiasi programmatore non può non avere studiato sono un buon numero. Non conoscendo la tua preparazione pregressa, mi limiterò a quello che viene comunemente ritenuto il minimo indispensabile nel quadro osservativo-sperimentale intersoggettivo nella comunità professionale che frequento. D'altro canto, la domanda è ovviamente molto ricorrente e negli anni abbiamo accumulato una lunga serie di bibliografie sulla base di una lunga esperienza didattica e formativa, che si trovano riportate poi un po' ovunque sul web, spesso distrattamente dimenticando di citarne la fonte e di ringraziare gli autori.

    Sull'algoritmica generale, i primi quattro testi di questa bibliografia essenziale sono davvero Testi Sacri, ognuno per aspetti diversi.

    Il Sebesta è uno dei testi che consiglio più spesso, assieme a "Object Oriented Software Construction" di Bertrand Meyer (Prentice Hall), un testo fondamentale per l'engineering (non solo OO), che tra l'altro introduce i sette criteri adottati nella comunità dei teorici dei linguaggi per caratterizzare gli OOPL. Di Meyer è imperdibile anche sul cosiddetto "agile programming" nel quale gli "eretici" dell'engineering vengono accuratamente cucinati a fuoco lento, raccogliendo in buona parte pareri ed argomentazioni già espresse negli anni dalle più autorevoli voci del mondo del software engineering tradizionale.

    A proposito di software engineering, nessuno che voglia definirsi programmatore può non avere studiato il Pressman ("Software engineering: a practitioner's approach", McGraw-Hill) e il Sommerville ("Software engineering", Pearson), in subordine accompagnati dal Mandrioli-Ghezzi, ma più necessariamente da "The art of software testing" (Wiley) di Glenford Myers et al. - anche se per motivi storici sarebbe molto meglio studiare prima la seconda edizione, e solo in seguito la terza.

    Ci sono almeno due dozzine di altri testi fondamentali in altri campi più specialistici o più teorici (a partire dalle guide di stile e coding standards), ma questi dovrebbero essere sufficienti, per iniziare.


    PS: Studiare il TAoCP from cover to cover, come tutti gli altri testi, non ti farà certo male. Ma temo che avrai qualche difficoltà nel fare tutti gli esercizi: quelli marcati come "M50" e "HM50" sono problemi aperti di ricerca che possono richiedere qualche anno di lavoro, oltre ad almeno un PhD in area logico-matematica.
    Buona parte del valore del testo, oltre alla mole di formule e algoritmi illustrati direttamente, consiste negli esercizi risolti e non: molti dei contenuti più avanzati e recenti sono condensati proprio nelle soluzioni agli esercizi, proposte dallo stesso Knuth e dai lettori.

    Il TAoCP rimane comunque il primo testo da prendere in mano quando si cerca una soluzione ad un problema non ancora affrontato. Anche se non sempre il testo contiene la soluzione cercata (o ne contiene una non ottimale/inapplicabile), la bibliografia farà da guida e le pubblicazioni citate potranno orientare nella ricerca della più recente letteratura in materia sui motori di ricerca accademici.
  • Re: Libri sulla programmazione

    Che dire... fantastico. Grazie infinite per le vostre risposte. Mi metto al lavoro / studio.
  • Re: Libri sulla programmazione

    Vedo che l'argomento è stato già ampiamente discusso in altre sedi, ma voi che ne pensate dell'uso dell'Assembly da parte di Knuth come linguaggio usato nel TAOCP? Ora, comprendo che l'opera è stata iniziata negli anni '60, e che le alternative con linguaggi di maggiore astrazione erano ben poche a quei tempi (forse solo il LISP) ma al giorno d'oggi - in cui usiamo PC e Mac - è possibile implementare o comprendere in senso compiuto parte degli esempi, cioè non limitandosi alle spiegazioni verbali? Non era meglio usare magari il Pascal e / o il C (anni '70) che sono punti saldi anche se avrebbero inevitabilmente risentito dei tempi, ma almeno offrono maggiore comprensibilità a livello di astrazione? Pure la Bibbia è stata tradotta in linguaggi comprensibili agli uomini d'oggi....
  • Re: Libri sulla programmazione

    The Art of Computer Programmin NON SONO testi da prendere in mano per cercare una soluzione ad un problema spicciolo, con relativo codice copia/incolla.

    Sono testi pensati piu' per Computer Scientist, e servono piu' che altro come compendio delle conoscenze relative specifici problemi, con relativi algoritmi, complessita' computazionale, pro e contro di diverse implementazioni.

    Nel senso: se ti serve una specifica implementazione, il TAOCP ti serve solo per avere l'elenco gia' affrontato con un elenco di soluzioni associate a pro e contro, delle problematiche relative a quel particolare problema.

    Per chi e' in grado di leggere (comprendendone il significato ) questi testi, la conversione in uno specifico linguaggio di programmazione e' assolutamente immediata e banale.

    Considera anche che MIX non e' un vero processore, e' la Macchina di Turing di D.E. Knuth .
    Come tale, la sua relazione con un vero linguaggio di programmazione, o con una vera architettura hardware, e' ininfluente.

    https://en.wikipedia.org/wiki/MI


    Scarterei l'idea che questi testi siano per tutti.
    In generale, sono assolutamente inutili per il programmatore medio (quello, cioe' che deve scrivere app, applicazioni web, o semplicemente portare a casa la pagnotta).

    Invece sono testi indispensabili per chi vede nella progettazione di algoritmi l'aspetto interessante del lavoro di programmazione.
  • Re: Libri sulla programmazione

    @migliorabile: Ho capito il concetto che non sono testi divulgativi, sono testi per "computer scientists", allo stesso tempo non si sta cercando "Learn the Art of Computer Programming in a Week-End". Altri testi scritti da computer scientists per computer scientists sono stati ri-scritti in linguaggi più adatti ai tempi, ad es. le varie edizioni di Ronald Mak, Writing Compilers and Interpreters, senza sminuire il valore dell'opera.
  • Re: Libri sulla programmazione

    migliorabile ha scritto:


    In generale, sono assolutamente inutili per il programmatore medio (quello, cioe' che deve scrivere app, applicazioni web, o semplicemente portare a casa la pagnotta).
    Su questo hai ragione, per il programmatore medio DI OGGI basta saper usare google e fare il copia-incolla
    Invece sono testi indispensabili per chi vede nella progettazione di algoritmi l'aspetto interessante del lavoro di programmazione.
    Direi di no, perchè nel 95% dei casi gli algoritmi ottimi (o comunque buoni) per i problemi sono già stati scritti e trovati una 40ina (o decina) di anni fa.
    Nel restante 5% dei casi significa che stai affrontando un problema difficile, e quasi certamente avrai un bagaglio di esperienza almeno ventennale.

    Per il programmatore niubbo medio servono, a mio parere, per "aprire" un mondo che è quello dell'Informatica con la I maiuscola, non cioè il frameworksticazziX per fare non so che scroll di non so che immaginetta durante il caricamento di una paginetta web.

    O il programmello java che viene insegnato all'università come fosse chissà che, e non un banale programmello che "una volta" (neanche tanto tempo fa) neppure si insegnava, perchè veniva dato per scontato o banale (cioè lo studente doveva poterselo fare da solo senza nessun aiuto, altrimenti poteva sempre trasferirsi a giurisprudenza o psicologia).

    Più o meno la differenza tra chi sa "pigi l'interruttore, si accende la luce" (programmatore medio di OGGI) e chi sa cos'è la luce, come si genera, come funziona l'impianto, perchè l'interruttore funziona, come e quando e dove.
    E quando è bene non usarlo, e quando va bene, e che pregi e difetti ha, e che tipi ci sono e così via.

    Che poi il programmatore medio capisca lo 0,1% e ricordi lo 0,0001% di certi testi non è importante: quello 0,1% lo renderà comunque un titano rispetto al programmatore medio odierno. Al 10% sarebbe un guru di livello italiano, e anche oltre.

    Certo, se uno vuol rimanere nella fascia del programmatore medio di OGGI (cioè un operaio, neppure tanto specializzato, praticamente un manovale dell'informatica) allora fa benissimo a rimanere gioiosamente inconsapevole di cosa succede quando pigi l'interruttore.
    Probabilmente lo stipendio (da manovale-operaio) lo porta a casa ugualmente.

    PS la domanda del thread è riferita a "testi sacri" NON specifici di linguaggi o altri argomenti, ce ne sono un milione di utili, e una manciata di molto utili. Nessuno indispensabile

    PS/2 è un po' come, per analogia, un infermiere abituato a fare una certa iniezione di non so quale farmaco, perchè qualcun altro gli dice di farla così e cosa, che poi si va a leggere i testi di medicina che spiegano il perchè e il percome si fa o non fa quell'iniezione del tal farmaco, cosa succede etc.
    Magari poi continuerà a premere lo stantuffo senza tante rimembranze, ma almeno avrà il "vago" ricordo del perchè
  • Re: Libri sulla programmazione

    PS e come puntiglioso di prima categoria, segnalo che l'acronimo canonico è tutto in maiuscole, TAOCP
  • Re: Libri sulla programmazione

    Dato che l'opera in questione è "language-agnostic", cioè deve insegnare a programmare, o perlomeno a risolvere algoritmi (nel senso più nobile ed evoluto del termine, cioè consapevolmente, non da pigiatasti etc. etc.) indipendentemente da un linguaggio, stavo semplicemente chiedendo se non fosse il caso di usare un linguaggio, per gli esempi, in cui l'astrazione fosse un attimino più evidente.

    Con questo, comprendo che l'opera non è assolutamente di carattere divulgativo, nonostante il titolo un pochettino fuorviante, e rivolto a "computer scientists" e super-programmatori.

    La mia domanda riguardava solo il linguaggio usato per gli esempi. Dalle risposte, sembra che gli altri linguaggi, tipo C e Java, siano rivolti ai "programmatori medi".
  • Re: Libri sulla programmazione

    C'è la risposta ufficiale di Knuth a questa VFAQ (VERY).
    La versione brevissima (ti invito a leggere cosa dice l'autore) è del genere...
    soh cavoli tuoi se ti piacerebbe di più un linguaggio "facile", io voglio far vedere come problemi difficili e astratti possono essere risolti con "mattoncini" stile Assembly

    Riguardo ai "programmatori medi", questa è V-OLD (very OLD) school. Se non lo sai, imparalo. Se nessuno te lo spiega, ...zzi tuoi, imparalo lo stesso. Se è difficile pazienza, son sempre .zzzi tuoi, non miei.

    Testi divulgativi (anche ottimi) ne trovi quanti ne vuoi, di ogni fascia, alcuni anche di caratura scientifica analoga.
    Funziona un poco come col Corano: è scritto in arabo, e non si può tradurre (perchè la parola di Dio è stata dettata in arabo).
    Non sai l'arabo? Cavoli tuoi, del Corano non potrai mai capire l'essenza.
    Impara prima l'arabo, poi leggi il Corano.

    Facile, no?
    (questa è U-OLD ultra old school )
  • Re: Libri sulla programmazione

    Comprendo, cioè, cerco di comprendere, il concetto. Quindi secondo una mente eccelsa quale quella di Knuth (senza ironia), il motivo per cui usa l'Assembly, a parte il discorso che ha iniziato negli anni '60, è che ci vuole far vedere più nei dettagli come funziona il tutto?

    PS di "Old School" ne so qualcosa, dato che nel 2011 non sapevo nemmeno scrivere Python, avevo solo una vaga idea sul fatto che fosse un linguaggio di programmazione. A rigor di logica non... lo so ancora, beninteso, ma spero di aver reso l'idea. Nessuno mi ha mai insegnato nulla in questo campo, tutto lo sforzo è di chi cerca di apprendere, con testi, internet, etc. etc.
Devi accedere o registrarti per scrivere nel forum
18 risposte