Jestem studentem CS i szczerze mówiąc, nie rozumiem książek Knutha [zamknięte]

52

Natknąłem się na cytat z Billa Gatesa: „Zdecydowanie powinieneś przesłać mi CV, jeśli możesz przeczytać całość”. Mówił o książkach The Art of Programming . Byłem więc bardzo ciekawy i chcę to wszystko przeczytać. Ale szczerze mówiąc, nie rozumiem tego.

Naprawdę nie jestem aż tak intelektualna. To powinien być powód, dla którego nie mogę tego zrozumieć, ale chętnie się uczę. Obecnie czytam tom 1 o podstawowych algorytmach. Czy są jakieś książki, które są przyjazne dla nowicjuszy / ludzi powolnych, takich jak ja, które pomogłyby mi poszerzyć moją wiedzę, aby w przyszłości z łatwością czytać książkę Knutha?

Rho
źródło
Humm, powiedzmy, że to zrozumiem (i ty też chyba), ale zajęłoby to dużo czasu i są teraz łatwiejsze książki ..
Nils
22
Mogą być trudne do odczytania i książki mogą być łatwiejsze, ale i tak powinieneś je przeczytać. Do tej pory przeczytałem tylko pierwszą książkę i nie rozumiem w tym wszystkiego! ale warto. Informatyka jest trudna . Im szybciej zdasz sobie sprawę, że nie jesteś wystarczająco inteligentny, aby to zrozumieć, tym szybciej możesz zacząć uczyć się, jak się tego nauczyć.
Michael K,
2
Są skłonni do matematyki dla programistów matematyki. CS ewoluowało w ostatnich latach i istnieje mnóstwo korzystnych obszarów, które nie są matematyczne. Który kierunek chcesz dalej rozwijać? Jeśli są to algorytmy i tak dalej, to prawdopodobnie są dobrze czytane, jeśli to inne obszary, poszerzą twój horyzont, ale tak samo jak czytanie książki na jakiś temat biologii. Tak więc, w zależności od obszaru, mogą znajdować się w dowolnym miejscu, od misji krytycznych po prawie bezużyteczne.
Koder
1
Od kiedy programiści uważają Billa Gatesa za autorytatywnego?
Giorgio
2
Coursera ma 6 bezpłatnych kursów na temat algorytmów (algorytmy części 1 i 2, projektowanie i analiza algorytmów części 1 i 2 oraz kombinatoryka analityczna części 1 i 2).
Anthony

Odpowiedzi:

39

Nawet myślę, że książka Knutha jest nieco zaawansowana i trudna do zrozumienia. Te książki są zdecydowanie dla algorytmów na poziomie badawczym IMHO.

Czy są jakieś książki, które są przyjazne dla nowicjuszy / wolnych ludzi takich jak ja?

Wprowadzenie do algorytmów przez CLRS jest znacznie prostsze.

EDYCJA :

Jeśli jednak chcesz przeczytać książkę Knutha, powinieneś najpierw zapoznać się z konkretną matematyką . Knuth chce, aby jego uczniowie byli świadomi podstawowej matematycznej części analizy algorytmów.

Prasoon Saurav
źródło
5
Podręcznik projektowania algorytmów jest jeszcze łatwiejszy / bardziej dostępny - jest prawie zabawny w czytaniu
Martin Beckett
Wprowadzenie do algorytmów to świetna książka. Wykorzystaliśmy to na naszym pierwszym kursie algorytmów CSE i bardzo mi się podobało. Chociaż muszę powiedzieć, że spędziłem wiele iteracji na tych samych przykładach, aby naprawdę powiedzieć, że je rozumiem.
Chris
4
@SidCool: Istnieje trzecia edycja CLRS z kilkunastoma nowymi sekcjami.
Bill the Jaszczurka
10
Książki Knutha to Wojna i pokój programowania. Są dobre, ale najczęściej służą do tego, aby regały wyglądały imponująco.
Gaurav
6
„Nawet myślę, że książka Knutha jest trochę zaawansowana”? skromność eh :)
occulus
57

Przeczytaj całą ofertę Gatesa, w tym:

„Przeczytanie tego zajęło mi niesamowitą dyscyplinę i kilka miesięcy. Przestudiowałem 20 stron, odłożyłem na tydzień i wróciłem na kolejne 20 stron. Jeśli ktoś jest tak bezczelny, że myśli, że wie wszystko, Knuth pomóc im zrozumieć, że świat jest głęboki i skomplikowany ”.

Nie są to łatwe książki i takie nie są. Pamiętaj, że jednym z celów Knutha było wprowadzenie matematyki do informatyki . To świetnie, jeśli chcesz udowodnić coś o algorytmie, ale nie tak świetne, jeśli chcesz tylko wiedzieć, jak to działa.

Michael Dorfman ma kilka dobrych wskazówek na temat czytania książek w swojej odpowiedzi na (teraz usunięte) pytanie na Stackoverflow o tym, co mogę uzyskać z czytania partii? . Jeśli nie masz 10k powtórzeń, nadal możesz wyświetlić pytanie i jego odpowiedź na maszynie powrotnej .

Co zyskasz, czytając dużo? Doskonały fundament informatyki. Zrozumiesz, jak działają komputery, od bramek logicznych po kompilatory. Pomyślisz o problemach, o których tak naprawdę nigdy nie wiedziałeś, że są problemami (tj. Jaki jest najszybszy sposób pomnożenia?) I zobaczysz algorytmiczne powiązania między rzeczami, o których nigdy nie myślałeś, że są powiązane (na przykład koryto rzeki, RNA i nawiasy zagnieżdżone).

Całkowicie nie zgadzam się z ludźmi, którzy mówią „buduj oprogramowanie zamiast czytać o budowaniu oprogramowania” - istnieje różnica między dyscyplinami inżynierii oprogramowania i informatyki. TAOCP dotyczy tego drugiego.

Jeśli jeszcze się nie zacząłeś, mam kilka rekomendacji.

Po pierwsze, możesz zacząć od tomu 4. To ekscytujący materiał, bardzo aktualny, a poczucie humoru Knutha świeci. Ponadto dostępne są filmy wideo (na stronie Stanford SPCD lub Stanford iTunes), w których Knuth omawia różne sekcje. Te filmy są wysoce zalecane. Fascicles 0, 1, 2, 3 i 4 z tomu 4 są dostępne jako osobne okładki. Razem opublikowany materiał V4 jest większy niż którykolwiek z pierwszych 3 tomów, ale jest podzielony na smakołyki wielkości kęsa. (Zastanawiam się, czy Tomy 1-3 wydawałyby się mniej przerażające dla ludzi, gdyby każdy tom został opublikowany w formie jednego rozdziału w miękkiej okładce ...)

W zależności od twojego tła matematyki, polecam przejrzeć Rozdział 1 za pierwszym razem i powrócić do niego w razie potrzeby. W rzeczywistości prawdopodobnie będziesz chciał przeczytać każdą sekcję (przynajmniej) dwa razy - szybko za pierwszym razem, aby uzyskać intuicję i sedno argumentów, a następnie powoli, ostrożnie, rozumiejąc każdy krok.

Koniecznie przeczytaj Tom 1, Fascicle 1 na MMIX zamiast starych części na MIX. MMIX jest lepszy pod wieloma względami i lepiej byłoby przekonwertować MIX w tekście do MMIX w miarę postępów, niż próbować zmagać się z obydwoma światami.

Ogólna zasada: nie pomijaj ćwiczeń. W pytaniach (i odpowiedziach) jest wiele dobrych materiałów. Wykonuj tyle ćwiczeń, ile możesz; ale przeczytaj je wszystkie (i przeczytaj odpowiedzi, gdy tylko spróbujesz rozwiązać problem lub zdecydujesz się go rozwiązać).

Wreszcie, jeśli naprawdę złapiesz błąd: przeczytaj indeks. Wiele ukrytych tam żartów.

Oczywiście StackOverflow byłby dobrym miejscem do zamieszczania określonych pytań na temat tekstu, gdyby tak się stało ...

W przypadku innych zasobów odkryłem, że przydatne jest przeglądanie sylabusów cenionych szkół informatycznych. Na przykład podręczniki do rozpoczynania klas algorytmów:

Corbin March
źródło
Link do SO został zerwany, ale znalazłem post, który według mnie jest podobny: stackoverflow.com/questions/1022167/...
asjohnson
+1 za oryginalny post na Way Back Machine i listę książek z tych uniwersytetów
Anthony
+1 za zalecenie rozpoczęcia od tomu 4, Fascicles 0, 1, 2, 3 i 4, a także za czytanie o MMIX zamiast MIX. W rezultacie zamierzam zacząć od Volumn 1, Fascicle 1, ponieważ obejmuje on MMIX.
Shaun Luttin
Jako programista Java / c wydaje mi się, że <Analiza struktur danych i algorytmów w Javie> jest bardzo łatwa do zrozumienia i dość praktyki.
Eric Wang,
29

Knuth jest najbardziej szanowanym, cytowanym, rozmawianym i szanowanym pisarzem informatyki w historii. Jego książki zdobią półki wszystkich poważnych twórców oprogramowania i są przywoływane z takim samym szacunkiem, jakim ludzie obdarzają Biblię i Art of War.

Słyszałem nawet, że niektórzy ludzie rzeczywiście czytali fragmenty książek Knutha.

Większość ludzi po prostu zamierza .

Osobiście oszczędzam je na emeryturę

Steven A. Lowe
źródło
22
Dlatego dobrze zużyte używane kopie są warte więcej niż nowe!
Martin Beckett,
13
Jeśli zrozumiesz The Art of War, zdasz sobie sprawę, że musisz tylko sprawić, aby ludzie myśleli, że rozumiesz Knutha, gdy tego nie rozumiesz, i odwrotnie, że nie rozumiesz Knutha, kiedy to robisz. Jeśli nie, to nie. A jeśli zrozumiesz książkę 5 Księgi Pięciu Pierścieni, nie będziesz musiał nawet mówić o Knuth. A jeśli przeczytałeś ESR The Art of Unix Programming i rozumiesz koany, nie będziesz nawet potrzebował Knutha, ponieważ przekroczysz barierę złożoności.
Christopher Mahan
20

Książki Knutha na zawsze zmieniły pole algorytmów. On sam powiedział, że „2 strony w mojej książce to czyjaś kariera” i że jego książki były trudne do odczytania. Książka zawiera skondensowany materiał z lat pracy w informatyce.

Nie powinieneś czuć się źle, jeśli nie możesz tego zrozumieć.

Jak powiedział Prasoon, CLRS jest prostszą książką do przeczytania.

Masz również algorytmy Rajasekaran, Sahni i in., Które są łatwe do zrozumienia.

Arjun J Rao
źródło
to niesamowite słyszeć .. myślałem, że jestem jedynym, który ma problemy z czytaniem tej książki .. dziękuję bardzo
Rho
7
@Raymond Ho: Nie sądzę, żeby ktokolwiek naprawdę lubił czytać książki Knutha. Znam przynajmniej jedną osobę, która ma je na półce tylko po to, by półka wyglądała imponująco.
FrustratedWithFormsDesigner
12

Kiedy po raz pierwszy ukończyłem szkołę, podarowałem sobie pierwsze trzy tomy TAOCP jako prezent dyplomowy i próbowałem przeczytać je od razu. Nigdy nie dałem rady. W dzisiejszych czasach udało mi się przejrzeć może 1/3 pierwszych trzech tomów (nie ma żadnej konkretnej kolejności). Materiał jest zdecydowanie gęsty, ale nauczyłem się trzech wskazówek, które bardzo pomogły.

Po pierwsze, nie próbuj czytać od deski do deski. TAOCP jest tak samo pracą referencyjną, jak cokolwiek innego, i uważam, że najlepiej jest przeczytać sekcję, która dotyczy problemu, który próbujesz rozwiązać. Jak wiele rzeczy na świecie, zrozumienie rozwiązań jest znacznie łatwiejsze, gdy napotkasz problemy, które próbują rozwiązać.

Następnie, ten schemat blokowy na początku książki, to nie tylko trochę humoru, ale właściwie całkiem przydatna wskazówka. Przeczytaj sekcje, nad którymi pracujesz iteracyjnie, zaczynając od nadrzędnych koncepcji, a następnie delikatnie zagłębiając się w matematykę.

Na koniec trzymaj pod ręką dobry, staroświecki papier i ołówek, aby przejrzeć algorytmy w sposób, w jaki zostały opisane, i rozwiązać kilka prostych problemów. Pomaga wzmocnić to, co czytasz.

Cercerilla
źródło
10

Nie martw się, większość ludzi nie rozumie sztuki programowania komputerowego (TAOCP). Więc nie myśl, że jesteś powolny lub nowicjusz z powodu niezrozumienia - jesteś jak 99,99% z nas, którzy go nie rozumieją.

Jesteś dość ambitny, jeśli chcesz dostać się na poziom, na którym możesz z łatwością czytać TAOCP . Ja tylko przeglądałem książki, zanim je odłożyłem. Prawdopodobnie tylko garstka ludzi na tej planecie rozumie TAOCP.

Sprawdź post: Książki Programiści naprawdę nie czytają Billa jaszczurki.

Jest tam wiele innych książek, które są dość czytelne , zrozumiałe i możesz od razu z nich skorzystać .

Osobiście lubię:

gąbka
źródło
8

Natknąłem się na ten cytat z Billa Gatesa: „Zdecydowanie powinieneś wysłać mi CV, jeśli możesz przeczytać całość”. Mówił o książkach o sztuce programowania. Byłem więc bardzo ciekawy i chciałbym to wszystko przeczytać, ale szczerze mówiąc, zupełnie tego nie rozumiem I'm really not that highly intellectual being.. Więc to powinien być powód, dla którego nie mogę tego zrozumieć , ale chętnie się uczę .. Obecnie czytam tom 1 o podstawowym algo .. Więc czy są jakieś książki, które są przyjazne początkującym / powolnym ludziom takim jak ja? Więc mogę się rozwinąć i mam nadzieję, że w przyszłości będę mógł swobodnie czytać książkę Knutha.

jeśli zdefiniujesz się jako taki, not a highly intellectual beingwówczas stawiasz sobie niskie oczekiwania. Musisz przełamać tę mentalność, jeśli chcesz zrobić coś wartościowego. Nie powinno być wątpliwości, że można coś osiągnąć. Również osiągnięcie tego nie oznacza, że ​​łatwo to osiągniesz.

Rzeczy, które warto realizować, są trudne ... i to nie jest banał. W oprogramowaniu, inżynierii i ogólnie w życiu, jeśli chcesz coś osiągnąć, musisz wybierać rzeczy trudne, rzeczy, których ludzie unikają, a nie zadowalać się najniższymi wspólnymi mianownikami rzeczy.

Po pierwsze, nie jest jasne, jakie jest twoje tło CS. Książka Knutha wymaga pewnego stopnia dojrzałości. Niewiele osób z dyplomem CS może z łatwością przejść przez to. Nie spodziewałbym się, że student CS, który właśnie ukończył swój pierwszy kurs z algorytmów, byłby w stanie przejść choćby jedną książkę Knutha. Dojrzałości potrzebnej do jej osiągnięcia po prostu nie ma, a to nie ma nic wspólnego ze zdolnościami umysłowymi ucznia.

Musisz mieć podstawowe algorytmy na niskim poziomie i jasne, i musisz mieć spory zasób programowania (pracy i / lub scholastyki) pod swoim pasem - powiedziałbym, że przynajmniej 40 punktów za programowanie. Musisz także mieć matematykę CS na twardym gruncie.

Nie możesz posunąć się daleko, nie mając dobrego zrozumienia matematyki dyskretnej (i ewentualnie teorii obliczeń).

Nie chodzi o to, że będziesz potrzebować tej wiedzy, aby pracować nad problemami Knutha, ale potrzebujesz dojrzałości, aby móc przejść przez ten rodzaj materiału.

Najpierw wybierz jedną książkę i tylko jedną książkę (książka CLRS, jak wcześniej sugerowano) i pracuj od początku do końca. Jeśli to możliwe, wykonaj programy wdrażające algorytmy. Nie używaj Java ani C #, nawet C ++. Idź do gołych kości C i poczuj się jak budowanie rzeczy z metalowych skrawków.

Zdobądź także książkę Knutha na temat „Matematyki konkretnej”, jeśli nie zrobiłeś kursu matematyki dyskretnej i teorii obliczeń. Dobrze byłoby, gdybyś również przejrzał tę książkę.

Następnie zajmij się encyklopedią Knutha, jedną księgę, jeden rozdział na raz. Nie przechodź do następnego rozdziału bez dobrego zrozumienia pierwszego.

Proponuję najpierw przejrzeć tom I (podstawowe algorytmy), a następnie tom III (wyszukiwanie i sortowanie). To powinny być twoje bezpośrednie cele. Następnie, później (znacznie później), zmierzyć się z tomem IV (algorytmy kombinatoryczne), a następnie z tomem II (algorytmy półnumeryczne).

Nie czuj się źle, jeśli na początku tego nie dostaniesz. Próbowałem przejść przez tom I i III od lat (teraz 10 lat).

I nie powinieneś też przykładać do tego zbyt dużej wagi. Nie rób tego, aby udowodnić coś komuś lub sobie. Zrób to, ponieważ jesteś do tego intelektualnie zainteresowany. Możesz uzyskać biegłość w zakresie algorytmów, po prostu korzystając z książki CLRS (lub dowolnej z dostępnych tam dobrych książek).

Bądź pragmatyczny i daj sobie spokój. Traktuj przeglądanie książki Knutha jako długoterminową osobistą ambicję, a nie bezpośredni dowód, że jesteś materiałem CS;)

Są inne ważniejsze rzeczy (z punktu widzenia kariery), za które trzeba się zabić;)

luis.espinal
źródło
2
Uwaga: Odwołujesz się do tomu III dwukrotnie, a nigdy do tomu II, nazywając tom III dwiema różnymi nazwami.
alternatywny
Dziękujemy za poinformowanie mnie (+1). Kolejność, o której mówiłem, była następująca: najpierw tom I (podstawowe algorytmy), następnie tom III (wyszukiwanie i sortowanie), następnie tom IV (algorytmy kombinatoryczne), a następnie tom II (algorytmy pół-numeryczne)
luis.spinal
6
+1 Nie dlatego, że nie mamy odwagi; to dlatego, że nie odważamy się, że są trudne. - Seneca
mouviciel
4

Zanim zacząłem czytać w Knuth, musiałem przemierzać cztery różne książki. Pierwsze dwa to książki Sedgewicka na temat algorytmów. Przeglądają one większość algorytmów i struktur danych w rzeczywistej zaimplementowanej formie, dzięki czemu można zobaczyć, jakie są i jak działają. Te książki są dostępne w różnych wersjach językowych - czytam te w C, ale iirc zostały pierwotnie napisane w Pascal, a istnieją wersje C ++ i Java.

Potem przepracowałem sporą część książki Cormen o algorytmach i wykorzystałem Wprowadzenie Sedgewicka i Flajoleta do analizy algorytmów jako tekst uzupełniający, ponieważ bardziej przypomina on rygor matematyczny Knutha niż książkę Cormen. Nadal nie ukończyłem żadnego z nich, głównie wybierając części, które według mnie są potrzebne.

Po ich przeczytaniu i uzyskaniu dyplomu z matematyki mogę przeczytać niektóre z TAOCP, ale jest to trudna lektura. To nie znaczy, że to nie jest przydatne. TAOCP to jedne z najlepszych podręczników do algorytmów, ale myślenie, że możesz ich użyć do „pełnego” zrozumienia czegokolwiek, jest nieco problematyczne.

Justin Hamilton
źródło