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


63

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 sfoggiano t-shirt "Knuth is my homeboy", non fraintendetemi - Voglio leggerlo, ma mi chiedo solo se dovrebbe essere in cima alla mia lista di priorità o se qualcos'altro dovesse venire prima.


Voglio leggerlo, ma è costoso da morire, quindi lo avrò quando ho finito l'università e ho iniziato a guadagnare qualcosa. Inoltre, ho bisogno di una grande libreria.
gablin,

Sono arrivato a pagina 3 e l'ho sentito dalle orecchie di cane. Venduto il set su Amazon 6 mesi dopo.
kirk.burleson,

Risposte:


72

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.


34
+1 per i bambini: i computer sono notoriamente buoni per l'attesa. Possono aspettare che i bambini siano più grandi.

3
+1 per i bambini, mentre sarai in grado di leggere il libro in qualsiasi momento della tua vita, sarai in grado di giocare con il tuo bambino di 4 anni solo per 1 anno. E con il tuo bambino di 5 anni anche solo per 1 anno ...

3
Bella risposta. Ci sono un sacco di cose che ci renderebbero programmatori migliori, ma dobbiamo essere intelligenti su dove investiamo il nostro tempo e anche ricordare che c'è di più nella vita che essere un grande programmatore.
Jon Hopkins,

5
Non ho ancora figli e voglio davvero finire di leggerlo prima di morire. Non avrò figli?
affondò il

1
@Sank stai pensando come un programmatore ... :)
Angelin Nadar il

23

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


1
L'enciclopedia contiene un'enorme quantità di cose, per lo più non così interessanti o rilevanti per le persone con anche una vasta gamma di interessi. I contenuti di TAOCP sono almeno in qualche modo rilevanti per qualsiasi sviluppatore di software.
David Thornley,

4
Ri: la storia di Jobs: è una storia apocrifa. Knuth ha detto lo stesso al discorso sulla tecnologia di Google di Randall Munroe.
greyfade,

4
La "storia" mi ha fatto sorridere. :)
MetalMikester

Posso attestare l'umorismo del Dr. Knuth. Ho inviato un'email al suo indirizzo pubblicato. Sono stato sorpreso che abbia risposto. La sua risposta è stata una copia stampata della mia e-mail, se mi ha cortesemente detto di leggere il resto della sezione su TAOCP. La mia firma e-mail riguarda il Missouri (mostrami), a cui ha fatto un'osservazione su un politico MO sciocco. Ha quindi concluso dicendo "Sto solo scherzando, non incolparmi per il Governatore Schwarzenegger".
dbasnett,

21

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


1
Hai colpito il chiodo sulla testa.
kirk.burleson,

9

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.


6

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

TAOCP è un ottimo lavoro, ma leggerlo sarebbe un investimento terribile 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 ritieni di aver bisogno / desideri di più, vai su 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

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


2
È come "A Brief History of Time" di Hawking per i programmatori.
Jon Hopkins,

1
Bit ho fatto leggere ABHIT. Le radiazioni Hawking mi sembrano strane. Un buco nero si restringe perché ci cadono altre cose? Ottengo la conservazione della massa e le due metà di ciascuna coppia virtuale che non può mai incontrarsi per distruggere, ma l'idea è ancora strana.
Steve314,

@ Steve314: ciò che è ancora più strano è che minuscoli buchi neri esplodono violentemente. Teoricamente.
Steven A. Lowe,

2
ABHOT è breve e destinato al grande pubblico. TAOCP non è nessuna di queste cose.
Sean McMillan,

3

+10 sul commento famiglia / figli. Cerco di leggere la maggior parte di tutto mentre volo sui voli per 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

Sono fermamente nel campo di persone che pensano che ogni sviluppatore dovrebbe fare l'investimento per ottenere i libri ad un certo punto (e sta diventando più facile ora che sembra che vengano ristampati in brossura ) ma allo stesso modo, lo farei è anche difficile credere che qualcuno si sieda e legga tutti da una copertina all'altra.

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.


1
Leggi un capitolo completo? Sono circa mezzo volume e non sono piccoli volumi. Penso che potresti voler dire un'unità di testo più piccola.
David Thornley,

3

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


2

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 completare i libri sarebbe probabilmente meglio di un corso universitario sui fondamenti dell'informatica e renderti 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.


1
"quindi completare i libri sarebbe probabilmente meglio di un corso universitario" - I volumi 1-3 sono stati usati come libri di testo in diversi corsi quando ho conseguito la laurea in CS, e passeremmo un intero corso su solo la metà di uno dei volumi ad es. "Ordinamento e ricerca del volume 3" è stato insegnato come due corsi separati.
Tcrosley,

2
Punto minore, ma in questo momento ci sono solo tre volumi pubblicati con il quarto in corso. I fascicoli sono una prestampa di quello che diventerà il quarto volume. www-cs-faculty.stanford.edu/~uno/taocp.html
rjzii

1

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: questa anteprima di una piccola parte del volume 4 potrebbe essere interessante: http://www-cs-faculty.stanford.edu/~uno/fasc1a.ps.gz

(nota: Postscript compresso)


1
Sfortunatamente (in questo caso - MOLTO fortunato altrimenti) telelavoro, quindi non è un'opzione.
Zannjaminderson,

1

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

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


1

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 di assemblaggio immaginario 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!


3
Sarebbe d'aiuto se avesse utilizzato l'assemblatore effettivo per IBM360 o PDP8?
Martin Beckett,

1
Non avrebbe mai potuto sopportare questi 50 anni con un linguaggio assembleare non ufficiale. Mette tutti in pari svantaggio!
Luser droog,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.