Sztuka programowania komputerowego - czytać czy nie czytać? [Zamknięte]

63

Istnieje wiele książek na temat programowania i wygląda na to, że Code Complete znajduje się na szczycie listy „obowiązkowych książek programistycznych” większości ludzi, ale co z The Art of Computer Programming Donalda Knutha? Jestem zajętą ​​osobą, między pracą a młodą rodziną. Nie mam dużo wolnego czasu, więc muszę być wybredny, jeśli chodzi o sposób, w jaki go wykorzystuję.

Zastanawiam się - czy ktoś tu czyta „TAOCP”? Jeśli tak, to czy warto poświęcić czas na lekturę, czy może jakaś inna książka lub programowanie na boku, takie jak projekty dla zwierząt, czy wkład w otwarte oprogramowanie byłoby lepszym wykorzystaniem mojego czasu w zakresie rozwoju zawodowego?

OŚWIADCZENIE - Dla tych z was, którzy uprawiają koszulki „Knuth jest moim domowym chłopcem”, nie zrozumcie mnie źle - chcę to przeczytać, ale zastanawiam się, czy powinno znaleźć się na szczycie mojej listy priorytetów lub jeśli coś innego powinno być na pierwszym miejscu.

Zannjaminderson
źródło
Chcę to przeczytać, ale jest piekielnie drogi, więc zdobędę go, kiedy skończę studia i zacznę zarabiać pieniądze. Potrzebuję też dużej półki na książki.
gablin
Zrobiłem to na stronie 3 i uszami. Sprzedałem zestaw na Amazon 6 miesięcy później.
kirk.burleson

Odpowiedzi:

72

TAOCP jest absolutnie nieocenionym źródłem informacji dla zrozumienia, w jaki sposób struktury danych i algorytmy, których używamy na co dzień, i dlaczego praca, ale zobowiązanie się do przeczytania jej od początku do końca byłoby niezwykłą inwestycją twojego czasu.

Jako jeden człowiek w rodzinie spędzaj czas ze swoimi dziećmi.

Adam Crossland
źródło
34
+1 dla dzieci - komputery są bardzo dobre do oczekiwania. Mogą poczekać, aż dzieci będą starsze.
3
+1 dla dzieci, podczas gdy będziesz mógł przeczytać książkę w dowolnym momencie swojego życia, będziesz mógł grać z 4-letnim dzieckiem tylko przez 1 rok. I z twoim 5-letnim dzieckiem też tylko przez 1 rok ...
3
Świetna odpowiedź. Jest mnóstwo rzeczy, które uczyniłyby nas lepszymi programistami, ale musimy być mądrzy w kwestii tego, gdzie inwestujemy nasz czas, a także pamiętać, że życie jest czymś więcej niż tylko byciem świetnym programistą.
Jon Hopkins
5
Nie mam jeszcze dzieci i naprawdę chcę to przeczytać, zanim umrę. Czy nie mam dzieci?
zatonął
1
@ sądzę, że myślisz jak programista ... :)
Angelin Nadar
23

Zastąp „encyklopedię” w swoim pytaniu każdym odniesieniem do TAOCP i myślę, że odpowiedź powinna być oczywista. Ponieważ pod wieloma względami taki właśnie jest TAOCP.

Jest historia (prawdopodobnie apokryficzna) o tym, jak Steve Jobs spotyka Knutha. Pierwszą rzeczą, którą powiedział mu Jobs, było: „Miło mi cię poznać, doktorze Knuth. Przeczytałem wszystkie twoje prace!”. Odpowiedź Knutha brzmiała: „Jesteś pełen gówna”: http://www.folklore.org/StoryView.py?project=Macintosh&story=Close_Encounters_of_the_Steve_Kind.txt

Jason Baker
źródło
1
W encyklopedii znajduje się ogromna ilość rzeczy, w większości nie tak interesujących lub istotnych dla osób o nawet szerokim spektrum zainteresowań. Zawartość TAOCP jest co najmniej w pewnym stopniu odpowiednia dla każdego programisty.
David Thornley,
4
Re: Historia zatrudnienia: To jest apokryficzna historia. Knuth powiedział to samo podczas rozmowy technologicznej Google'a Randalla Munroe.
greyfade,
4
„Historia” wywołała jednak uśmiech. :)
MetalMikester
Mogę zaświadczyć o humorze doktora Knutha. Wysłałem e-mail na jego opublikowany adres. Byłem zaskoczony, że odpowiedział. Jego odpowiedź była zaznaczoną wersją mojego e-maila, gdy uprzejmie kazał mi przeczytać resztę tego rozdziału w TAOCP. Mój podpis w e-mailu dotyczy tego, że pochodzi z Missouri (pokaż mi), do którego zwrócił uwagę na głupiego polityka MO. Następnie zakończył, mówiąc: „Żartuję, nie obwiniajcie mnie o rząd Schwarzeneggera”.
dbasnett
21

Nie, nie powinien znajdować się na szczycie listy priorytetów. Mam pełny zestaw i NIE przeczytałem całości. Użyłem go (jak dotąd) jako dobrego odniesienia do niektórych problemów (na przykład było to nieocenione w moim zrozumieniu losowości i testowaniu losowych generatorów). Za każdym razem, gdy pojawia się temat CS, na który nie mam NAPRAWDĘ dobrego rozumowania, staram się chwytać odpowiednią część TAOCP jako dobry krok w moim zrozumieniu.

Jeśli zdecydujesz się go przeczytać, zyskasz więcej mocy i zdecydowanie zalecam przyjmowanie go w małych kawałkach. Nie bój się przeskakiwać i patrzeć na to, co jest najbardziej interesujące.

Michael Kohne
źródło
1
Trafiłeś w gwóźdź.
kirk.burleson
9

TOACP jest niezbędną lekturą - w pewnym momencie. W zależności od tego, co robisz codziennie, może nie być to najpilniejsze.

Jest to jedna z tych książek (cóż, zbiory książek), którą warto czytać na początku swojej kariery, ponieważ naprawdę daje dobre spostrzeżenia, do których zwykle nie dotarłbyś później, ale przetrwanie do momentu ukończenia tej części nie jest konieczne. swojej kariery, w której nie tylko kodujesz, wybierasz zestaw narzędzi. To jest miejsce, w którym naprawdę chcesz studiować algorytmy, mam nadzieję, że już trochę rozumiesz projektowanie języka i masz bardzo szerokie zrozumienie, jakie narzędzia, języki i systemy są dostępne i jak każdy z nich pasuje do ekosystemu rzeczy, które możesz skorzystaj z konkretnego projektu.

Innymi słowy: uczenie się na dużym obrazie, więc jeśli masz obsesję, tak jak ja, przeczytaj ją teraz, jeśli nie, możesz odłożyć to na później, aż zaczniesz tęsknić za przejściem po drabinie i zostaniem facetem od dużych zdjęć.

HedgeMage
źródło
6

Po podjęciu tego właśnie zadania mogę powiedzieć, że sposób, w jaki pisze, jest bardzo przyjemny, a problemy są odpowiednio (w zależności od trudności) oznaczane. Zdobądź pierwszy tom i przeczytaj rozdziały 1 i 2 i zobacz, jak ci się podoba.

sova
źródło
6

TAOCP to świetna praca, ale czytanie jej byłoby straszną inwestycją czasową dla praktykującego programisty. Jeśli to zrobisz, poświęcisz kilka lat (tyle to zajmie) swojego budżetu na samodoskonalenie, aby dowiedzieć się zbyt wiele o zbyt małej ilości.

Poleciłbym przejrzeć jedną lub kilka mniej „ostatecznych” książek o algorytmach, moim ulubionym w tej dziedzinie jest Podręcznik projektowania algorytmów autorstwa Stevena S. Skieny

Jeśli czujesz, że potrzebujesz / chcesz więcej, przejdź do Knutha.

W tym samym czasie możesz kupić jeden lub kilka tomów TAOCP, przejrzyj je, aby zrozumieć, jakie obszary obejmuje Knuth, i przechowuj je w bibliotece na wypadek, gdybyś potrzebował z niego pewnych informacji w codziennym życiu praca. Moje wykształcone przypuszczenie jest takie, że nie zrobiłbyś tego i jest to kolejny powód, dla którego nie radzę próbować czytać. Ale jeśli będziesz odnosić się do niego wystarczająco często, będziesz wiedział, że warto poświęcić czas na przeczytanie go od deski do deski.

kdubinets
źródło
6

Przełomowa praca Knutha jest najpopularniejszym odniesieniem, które programiści zamierzają przeczytać lub zakończyć. Pewnego dnia.

Steven A. Lowe
źródło
2
To jest jak „Krótka historia czasu” Hawkinga dla programistów.
Jon Hopkins
1
Bit I nie czytać ABHIT. Promieniowanie jastrzębie wydaje mi się dziwne. Czarna dziura kurczy się, ponieważ wpada do niej więcej rzeczy? Utrzymuję zachowanie masy i dwie połówki każdej z wirtualnych par, których nigdy nie spotkasz, by zniszczyć, ale pomysł wciąż jest dziwaczny.
Steve314,
@ Steve314: Dziwniejsze jest to, że bardzo małe czarne dziury gwałtownie wybuchają. Teoretycznie
Steven A. Lowe,
2
ABHOT Jest krótki i przeznaczony dla ogółu społeczeństwa. TAOCP nie jest jedną z tych rzeczy.
Sean McMillan
3

+10 za komentarz rodziny / dzieci. Staram się czytać najczęściej, jednocześnie znosząc loty do czerwonych oczu do klientów.

Ale ... tak, bardzo warte przeczytania. Nie ma powodu, aby czytać liniowo, zamiast tego przejrzeć i wybrać kilka interesujących tematów.

Jé Queue
źródło
3

Jestem mocno w obozie ludzi, którzy uważają, że każdy programista powinien w pewnym momencie zainwestować w zdobycie książek (a teraz staje się łatwiejsze, gdy wygląda na to, że są drukowane w miękkiej oprawie ), ale z tego samego powodu, chciałbym trudno też uwierzyć, że ktoś usiądzie i przeczyta je wszystkie od deski do deski.

Najlepszym podejściem do nich - jeśli nie masz dojazdów do pracy, gdzie masz wolny czas, aby usiąść i czytać - jest przeczytanie wystarczającej liczby z nich, aby wiedzieć, gdzie je znaleźć, a następnie przeczytanie pełnego rozdziału, gdy tylko będziesz znajdź je jako podręczniki dla danego problemu. W przypadku Google i Stack Overflow sięganie po książki referencyjne nie jest tak powszechne, ale w niektórych przypadkach może się okazać, że książki dają pewien wgląd, że trzeba będzie poświęcić więcej czasu na poszukiwanie w Internecie.

rjzii
źródło
1
Przeczytaj cały rozdział? To około pół woluminu i nie są to małe wolumeny. Myślę, że możesz mieć na myśli mniejszą jednostkę tekstu.
David Thornley,
3

Nie zapominaj, że na początku Knuth chciał napisać coś o tym, jak napisać kompilator.

Na przykład możesz uzyskać wiele informacji w sieci na przykład z wikipedii, ale jeśli nie jesteś badaczem, po prostu przeczytaj podsumowanie, otrzymasz satysfakcję.

Pierwszy tom wciąż możesz zdobyć, żebyś mógł go przeczytać, gdy się nudzisz ...

żart
źródło
2

Prawdopodobnie ważniejsze jest, abyś robił takie problemy w książce niż tylko ją czytał. To zajmie dużo czasu.

Ma nawet 4 tomy i 5 fascynujących (cokolwiek to jest), więc ukończenie książek byłoby prawdopodobnie lepsze niż kurs uniwersytecki z podstaw informatyki i uczyni cię prawie najlepszym programistą.

Ponieważ masz młodą rodzinę, taką jak ja, dałeś mi całkiem niezły pomysł. Kupowałbym książki pojedynczo i uczyłem je dzieciom.

Peter Turner
źródło
1
„tak więc ukończenie książek byłoby prawdopodobnie lepsze niż kurs uniwersytecki” - tomy 1-3 były używane jako podręczniki w kilku kursach, kiedy uzyskałem tytuł CS, i spędziliśmy cały kurs na zaledwie połowie jednego z tomów np. „Tom 3 Sortowanie i wyszukiwanie” był nauczany jako dwa osobne kursy.
tcrosley,
2
Drobny punkt, ale w tej chwili są tylko trzy opublikowane tomy z czwartym w toku. Fascicles są przedrukiem tego, co stanie się czwartym tomem. www-cs-faculty.stanford.edu/~uno/taocp.html
rjzii
1

Jeśli jesteś ciekawy, zrób to, ale trawienie zajmuje sporo czasu, więc nie spiesz się.

Czy masz dojazdy do pracy, w których możesz czytać - byłoby idealnie.


EDYCJA: Ten podgląd niewielkiej części tomu 4 może Cię zainteresować: http://www-cs-faculty.stanford.edu/~uno/fasc1a.ps.gz

(uwaga: skompresowany PostScript)

1249
źródło
1
Niestety (w tym przypadku - na szczęście BARDZO inaczej) telepracuję się, więc nie ma takiej opcji.
Zannjaminderson
1

To nie jest coś, co większość ludzi będzie chciała usiąść i czytać od deski do deski, nie. Jest to niezwykle nieocenione odniesienie iz pewnością dobrze jest go podnieść, wybrać interesującą sekcję, przeczytać ją i wykonać kilka ćwiczeń. Ale porównania encyklopedii wykonane powyżej są dość trafne ... są duże, obszerne i szczegółowe. Niektóre „ćwiczenia” to problemy badawcze, których rozwiązanie może zająć lata.

Jeśli chcesz tylko lepiej poznać algorytmy niskiego poziomu, lepiej zacząć od książek Roberta Sedgewicka (np. „Algorytmy w C”, „Algorytmy w Javie” itp.).

przestępstwa umysłowe
źródło
1

Jeśli chcesz zmienić świat, przeczytaj go. Jeśli chcesz nauczyć się nowych hacków, nie czytaj tego.

bardzo głupie
źródło
1

TAOCP Knutha to arcydzieło. Ale, podobnie jak każde arcydzieło (takie jak „Illiad”, „Wojna i pokój” lub „W poszukiwaniu straconego czasu” Prousta), nie jest ono przeznaczone dla wszystkich ani na cały czas.

Książka jest bardzo dobrze napisana i bardzo dobrze zbadana. Problemy są świetne, a wyjaśnienie algorytmów jest dobrze zrobione.

Ogromnym problemem tej książki jest to, że Knuth pokazuje kod fikcyjnego języka asemblerowego dla fikcyjnego komputera. Rozumiem, dlaczego to zrobił, ale faktem jest, że jest do bani.

Polecam używać tej książki jako Biblii. W razie potrzeby poszukaj. Znajdziesz odpowiedź. Zdarzyło mi się to nie raz!

Eduardo
źródło
3
Czy pomogłoby to, gdyby użył faktycznego asemblera dla IBM360 lub PDP8?
Martin Beckett
1
Te 50 lat nigdy nie przetrwałoby w niefikcyjnym języku asemblera. Stawia wszystkich w równej niekorzystnej sytuacji!
luser droog