it-swarm.it

L'arte della programmazione per computer - Leggere o non leggere?

Ci sono molti libri sulla programmazione là fuori, e sembra che Code Complete sia praticamente in cima all'elenco della maggior parte delle persone di "libri di programmazione da leggere", ma che dire di The Art of Computer Programming di Donald Knuth? Sono una persona impegnata, tra lavoro e una giovane famiglia, non ho un sacco di tempo libero, quindi devo essere pignolo su come lo uso.

Mi chiedo: qualcuno qui ha letto "TAOCP"? In tal caso, vale la pena dedicare del tempo alla lettura o qualche altro libro o una programmazione più approfondita come i progetti per animali domestici o contribuire all'open source sarebbe un uso migliore del mio tempo in termini di sviluppo professionale?

DISCLAIMER - Per quelli di voi che indossano le magliette "Knuth is my homeboy", non fraintendetemi - Voglio leggerlo, ma mi chiedo solo se dovrebbe essere giusto in cima alla mia lista di priorità o se qualcos'altro dovesse venire prima.

65
Zann Anderson

TAOCP è un riferimento assolutamente inestimabile per capire come funzionano le strutture dati e gli algoritmi che utilizziamo ogni giorno e perché il lavoro, ma impegnarsi a leggerlo da copertina a copertina sarebbe un investimento straordinario del tuo tempo.

Da padre di famiglia a un altro, trascorri del tempo con i tuoi figli.

72
Adam Crossland

Sostituisci "l'enciclopedia" nella tua domanda per ogni riferimento a TAOCP, e penso che la risposta dovrebbe essere ovvia. Perché per molti aspetti, questo è TAOCP.

C'è una storia (forse apocrifa) su Steve Jobs che incontra Knuth. La prima cosa che Jobs gli disse fu "È un piacere conoscerti, dottor Knuth. Ho letto tutti i tuoi lavori!". La risposta di Knuth è stata "Sei pieno di merda": http://www.folklore.org/StoryView.py?project=Macintosh&story=Close_Encounters_of_the_Steve_Kind.txt

23
Jason Baker

No, non dovrebbe essere in cima all'elenco delle priorità. Ho un set completo e NON ho letto tutto. L'ho usato (finora) come un buon riferimento su alcuni problemi (è stato inestimabile nella mia comprensione della casualità e nel test dei generatori casuali, per esempio). Ogni volta che emerge un argomento di CS su cui non ho una VERAMENTE buona padronanza, tendo ad afferrare il pezzo rilevante di TAOCP come un buon passo nella mia comprensione.

Se decidi di leggerlo, più potenza per te, e consiglio vivamente di prenderlo in piccoli pezzi. Non aver paura di saltare e guarda prima cosa è più interessante.

22
Michael Kohne

TOACP è una lettura essenziale - ad un certo punto. A seconda di ciò che fai quotidianamente, potrebbe non essere il più urgente.

È uno di quei libri (beh, raccolte di libri) che è bello leggere all'inizio della tua carriera perché ti dà davvero buone intuizioni che normalmente non otterrai fino a dopo, ma non è essenziale per sopravvivere fino a quando non ti laurei in quella parte della tua carriera in cui non ti limiti a programmare, scegli la casella degli strumenti. Questo è il punto in cui vuoi davvero studiare algoritmi, spero che tu comprenda già un po 'il design del linguaggio e che abbia una comprensione molto ampia di quali strumenti, lingue e sistemi ci sono e come ognuno si inserisce nell'ecosistema delle cose che puoi attingere per un particolare progetto.

In altre parole: è l'apprendimento di un grande quadro, quindi se sei ossessivo come me, leggilo ora, se non lo sei, va bene rimandare fino a quando non inizi a desiderare di salire la scala e diventare un ragazzo di grande immagine.

9
HedgeMage

Avendo recentemente intrapreso questo compito, posso dire che il modo in cui scrive è molto divertente e che i problemi sono etichettati (in base alla difficoltà) in modo molto appropriato. Ottieni il primo volume e leggi i capitoli 1 e 2 e vedi come ti piace.

6
sova

TAOCP è un ottimo lavoro, ma leggerlo sarebbe un investimento terribile in termini di tempo per uno sviluppatore di software pratico. Se lo fai, sacrificherai un paio d'anni (ecco quanto tempo ci vorrà) del tuo budget di auto-miglioramento professionale per imparare troppo su troppo poco.

Consiglierei di leggere uno o più libri "definitivi" sugli algoritmi, il mio preferito in quest'area è The Algorithm Design Manual di Steven S. Skiena

Quindi se senti di aver bisogno/desideri di più, passa a Knuth.

Allo stesso tempo puoi acquistare uno o più volumi di TAOCP, esaminarlo per capire quali aree sono coperte da Knuth e tenerlo nella tua biblioteca nel caso in cui avessi effettivamente bisogno di alcune informazioni nel tuo quotidiano lavoro. La mia ipotesi educata è che non lo faresti e questo è un altro motivo per cui non consiglio di provare a leggere. Ma se ti ritrovi a riferirti abbastanza spesso, allora saprai che vale la pena dedicare del tempo a leggerlo dall'inizio alla fine.

6
kdubinets

Il lavoro fondamentale di Knuth è il riferimento più popolare che i programmatori intendono leggere o terminare di leggere. Un giorno.

6
Steven A. Lowe

+10 sul commento famiglia/figli. Cerco di leggere la maggior parte di tutto mentre volo con gli occhi rossi ai clienti.

Ma ... sì, vale davvero la pena leggere. Nessun motivo per leggere in modo lineare, invece scremare e scegliere alcuni argomenti di interesse.

3
Jé Queue

Non dimenticare che all'inizio Knuth voleva scrivere qualcosa su come scrivere un compilatore.

Puoi ottenere molte informazioni in rete con Wikipedia, ad esempio, ma se non sei un tipo di ricercatore, leggi semplicemente il sommario, otterrai soddisfazione.

Puoi ancora ottenere il primo tomo in modo da poterlo leggere quando sei annoiato però ...

3
jokoon

Sono fermamente nel campo di persone che pensano che ogni sviluppatore dovrebbe fare l'investimento per ottenere i libri a un certo punto (e sta diventando più facile ora che sembra che siano ristampato in tascabile ) ma allo stesso modo, avrei anche difficoltà a credere che qualcuno si sarebbe seduto e avrebbe letto tutto da capo a capo.

L'approccio migliore a loro - se non hai un pendolarismo per lavorare dove hai tempo libero per sederti e leggere - è leggere abbastanza da loro per sapere dove trovare le cose in loro e poi leggere un capitolo completo quando mai ti ritrovi a usarli come libri di consultazione per un determinato problema. Con Google e Stack Overflow non è così comune cercare libri di riferimento, ma in alcuni casi potresti scoprire che i libri forniscono alcune informazioni che dovresti inviare del tempo extra che cerchi su Internet.

3
rjzii

Probabilmente è più importante che tu faccia questi problemi nel libro di quanto tu abbia appena letto. Ciò richiederà molto tempo.

Sta amando 4 volumi e 5 fascicoli (qualunque essi siano) quindi completando i libri sarebbero probabilmente meglio di un corso universitario sui fondamenti dell'informatica e ti renderebbero quasi il miglior programmatore di sempre.

Dal momento che hai una giovane famiglia, come me, mi hai dato una bella idea. Comprerei i libri uno alla volta e li insegnerei ai tuoi figli.

2
Peter Turner

Se vuoi cambiare il mondo, allora leggilo. Se vuoi imparare nuovi hack, allora non leggerlo.

1
veryfoolish

Se sei curioso, fallo, ma ci vuole un po 'di tempo per digerire, quindi devi prenderti il ​​tuo tempo.

Hai un pendolarismo dove poter leggere - sarebbe perfetto.


EDIT: Potresti trovare interessante questa anteprima di una piccola parte del Volume 4: http://www-cs-faculty.stanford.edu/~uno/fasc1a.ps.gz

(nota: Postscript compresso)

1
user1249

Non è qualcosa che la maggior parte delle persone vorrà sedersi e leggere da copertina a copertina, no. È un riferimento incredibilmente inestimabile, ed è certamente buono raccoglierlo, scegliere una sezione interessante, leggere sopra e fare alcuni esercizi. Ma i confronti dell'enciclopedia fatti sopra sono abbastanza adatti ... è grande, ampio e dettagliato. E alcuni degli "esercizi" sono problemi di ricerca che potrebbero richiedere anni per risolversi.

Se vuoi solo una migliore conoscenza degli algoritmi di basso livello, potrebbe essere meglio iniziare con i libri di Robert Sedgewick (ad es. "Algorithms in C", "Algorithms in Java", ecc.).

1
mindcrime

Knuth's TAOCP è un capolavoro. Ma, proprio come qualsiasi capolavoro (come "Illiad", "War and Peace" o "Alla ricerca del tempo perduto" di Proust), non è per tutti o per gli straordinari.

Il libro è molto ben scritto e molto ben studiato. I problemi sono grandi e la spiegazione degli algoritmi è ben fatta.

Il grande problema del libro è il fatto che Knuth mostra il codice per un linguaggio immaginario dell'Assemblea per un computer immaginario. Capisco perché lo ha fatto, ma il fatto è che fa schifo.

Consiglio di usare questo libro come una bibbia. Quando è nel bisogno, cercalo. Troverai la risposta. Mi è successo più di una volta!

1
Eduardo