Я студент CS, і якщо чесно, я не розумію книг Кнут [закрито]


52

Я натрапив на цю цитату Білла Гейтса: "Ви обов'язково надішліть мені резюме, якщо зможете прочитати всю справу". Він говорив про книги "Мистецтво програмування" . Тож я був досить цікавий і хочу все це прочитати. Але якщо чесно, я цього не розумію.

Я справді не такий інтелектуал. Тому це повинно бути причиною того, що я не можу цього зрозуміти, але я прагну вчитися. Зараз я читаю Том 1 про основні алгоритми. Чи є там книги, привітні для початківців / повільних людей, як я, які допомогли б наробити свої знання, щоб я міг з легкістю читати книгу Кнут?


Хамм, скажімо, я зрозумів би це (і ви теж гадаю), але це зайняло б багато часу, і сьогодні є простіші книги ...
Нілс

22
Вони можуть бути важкими для читання, і книги можуть бути простішими, але ви все одно повинні читати їх. Я пробився лише першою книжкою до цих пір, і в цьому я не все розумію! але воно того варте того. Інформатика - це важко . Чим раніше ви зрозумієте, що ви недостатньо розумні, щоб зрозуміти це, тим швидше ви зможете почати вчитися, як це навчитися.
Майкл К

2
Вони математичні схильні для математиків-y програмістів. CS розвивався в останні роки, і є тонна корисних областей, які не є математикою. У якому напрямку ви хочете розвиватися далі? Якщо це алгоритми і подібні, вони, ймовірно, добре читаються, якщо це інші області, вони розширять ваш горизонт, але так само, як і читання книги на якусь тему біології. Тож, залежно від вашого району, вони можуть бути де завгодно, від критичної місії до майже марної.
Coder

1
З якого часу програмісти вважають Білла Гейтса авторитетним?
Джорджіо

2
Coursera має 6 безкоштовних курсів з алгоритмів (частини 1 і 2 алгоритмів, частини 1 і 2 проектування та аналізу алгоритмів, частини 1 і 2 аналітичної комбінаторики).
Ентоні

Відповіді:


39

Навіть я вважаю, що книга Кнут трохи передова і її важко зрозуміти. Ці книги безумовно призначені для алгоритмів досліджень рівня ІМХО.

То чи є там книги, привітні для початківців / повільних людей, як я?

Вступ до алгоритмів CLRS набагато простіше.

Редагувати :

Тим не менш, якщо ти хочеш прочитати книгу Кнут, то спочатку слід пройти конкретну математику . Кнут хоче, щоб його учні знали основні математичні частини аналізу алгоритмів.


5
Інструкція з дизайну алгоритму ще простіша / доступніша - вона близька до цікавого для читання
Martin Beckett

Вступ до алгоритмів - чудова книга. Ми використовували це для нашого першого курсу алгоритмів CSE, і мені це сподобалось. Хоча мушу сказати, що я провів багато ітерацій, переглядаючи ті самі приклади, щоб сказати, що я їх розумію.
Кріс

4
@SidCool: Є 3-е видання CLRS з десятком нових розділів.
Білл Ящірка

10
Книги Кнута - це війна і мир програмування. Вони хороші, але в основному використовуються для того, щоб зробити книжкові полички ефектними.
Гаурав

6
"Навіть я думаю, що книга Кнута трохи вдосконалена"? скромність eh :)
окулус

57

Не забудьте прочитати всю цитату Гейтса, включаючи цю:

"Потрібно було неймовірну дисципліну, і кілька місяців я прочитав це. Я вивчив 20 сторінок, відклав його на тиждень і повернувся ще на 20 сторінок. Якщо хтось такий нахабний, що думає, що знає все, Кнут допоможіть їм зрозуміти, що світ глибокий і складний ".

Книги вони непрості і вони не призначені. Пам'ятайте, що однією з цілей Кнута було наближення математичної суворості до інформатики . Це чудово, якщо ви хочете довести щось про алгоритм, але не дуже добре, якщо ви просто хочете знати, як він працює.

Майкл Дорфман має кілька хороших порад щодо читання книг у своїй відповіді на (тепер видалене) запитання щодо Stackoverflow про те, що я можу отримати від читання лота? . Якщо у вас немає 10-ти красного представника, ви все одно можете переглядати питання та його відповідь на зворотній машині .

Що ви отримаєте, прочитавши лот? Відмінна основа в галузі інформатики. Ви зрозумієте, як працюють комп’ютери, починаючи від логічної брами до компіляторів. Ви подумаєте про проблеми, про які ви ніколи не знали, що це проблеми (тобто, який найшвидший спосіб розмноження?), І побачите алгоритмічні зв’язки між речами, які ви ніколи не вважали пов'язаними (наприклад, русла, РНК та вкладені дужки, наприклад.)

Я повністю не погоджуюся з людьми, які кажуть "будувати програмне забезпечення замість того, щоб читати про створення програмного забезпечення" - є різниця між дисциплінами програмної інженерії та інформатики. TAOCP стосується останнього.

Якщо ви ще не почали, у мене є кілька рекомендацій.

По-перше, ви можете почати з Тома 4. Це захоплюючий матеріал, дуже сучасний, і почуття гумору Кнут просвічує. Крім того, є відеоролики (на веб-сайті Stanford SPCD або Stanford iTunes), де Кнут обговорює різні розділи. Ці відео дуже рекомендуються. Фасони 0, 1, 2, 3 і 4 в томі 4 доступні як окремі книжки. Разом опублікований матеріал V4 більший, ніж будь-який із перших трьох томів, але розрізаний на частування розміром з укусом. (Цікаво, чи здасться томам 1-3 людям менш страхітливим, якби кожен том був опублікований у вигляді однокласної книги в м'якій обкладинці ...)

Залежно від вашого математичного фону, я б рекомендував вам перший раз проглядати Главу 1 і повертатися до неї за потребою. Насправді, ви, ймовірно, захочете прочитати кожен розділ (принаймні) двічі - швидко перший раз, лише щоб зрозуміти інтуїцію та суть аргументів, а потім повільно, уважно, розуміючи кожен крок.

Не забудьте прочитати том 1, Fascicle 1 на MMIX замість старих розділів на MIX. MMIX є кращим у багатьох відношеннях, і вам буде краще перетворювати MIX у тексті в MMIX, коли ви рухаєтесь разом, ніж намагатися розшарувати обидва світи.

Загальне правило: не пропускайте вправи. У запитаннях (і відповідях) є багато хорошого матеріалу. Виконайте стільки вправ, скільки зможете; але прочитайте їх усіх (і прочитайте відповіді, як тільки ви зняли проблему або вирішили дати пропуск).

Нарешті, якщо ви дійсно зловили помилку: прочитайте індекс. Тут заховано багато чудових жартів.

Звичайно, StackOverflow було б хорошим місцем для розміщення конкретних питань у тексті, якщо вони повинні виникнути ....

Щодо інших ресурсів, я виявив, що перегляд навчальних програм добре оцінених шкіл інформатики є корисним. Наприклад, підручники для початкових класів алгоритмів:


Посилання на SO була зламана, але я знайшов пост , який я представляю себе подібне: stackoverflow.com/questions/1022167 / ...
asjohnson

+1 за оригінальну публікацію на машині «Шлях назад» та список книг із цих університетів
Ентоні,

+1 для того, щоб рекомендувати почати з тома 4, Fascicles 0, 1, 2, 3 і 4, а також для читання про MMIX замість MIX. Як результат, я збираюся розпочати з Тома 1, Fascicle 1, тому що вона охоплює MMIX.
Шон Люттин

Як програміст Java / c, мені здається, що <Структури даних та аналіз алгоритмів на Яві> дуже легко зрозуміти & досить практикувати.
Ерік Ван

29

Кнут - найбільш шанований, процитований, обговорюваний та дуже поважний автор інформатики в історії. Його книги прикрашають книжкові полиці всіх серйозних розробників програмного забезпечення, і до них відносяться з однаковим рівнем поваги, які люди віддають Біблії та Миру війни.

Я навіть чув, що деякі люди насправді читали частини книг Кнут.

Більшість людей просто мають намір це зробити.

Особисто я їх зберігаю на пенсії


22
Ось чому добре зношені використані копії коштують більше, ніж нові!
Мартін Бекетт

13
Якщо ви розумієте «Мистецтво війни», ви зрозумієте, що вам потрібно лише змусити людей подумати, що ви розумієте Кнут, коли цього не зробите, і навпаки, що ви не розумієте Кнут, коли це робите. Якщо ні, то ні. І якщо ви розумієте книгу 5 книги "П'ять кілець", вам навіть не потрібно буде говорити про Кнут. І якщо ви прочитали ESR-програму «Мистецтво Unix» і зрозуміли коани, вам навіть Кнут не знадобиться, тому що ви переступили бар’єр складності.
Крістофер Махан

20

Книги Кнута назавжди змінили поле алгоритмів. Сам він сказав, що "2 сторінки в моїй книзі - це чиясь робота в цілій кар'єрі", і що його книги було важко читати. Книга містить стислий матеріал за роки роботи в галузі інформатики.

Ви не повинні почувати себе погано, якщо не можете цього зрозуміти.

Як сказав Прасон, CLRS - це простіша книга для читання.

Ви також маєте Алгоритми Раджасекаран, Сані та ін, які легко зрозуміти.


це дивовижно почути .. Я думав, що я єдиний, хто має проблеми з читанням цієї книги .. велике спасибі
Rho

7
@Raymond Ho: Я не думаю, що хтось дуже любить читати книги Кнут. Я знаю принаймні одну людину, яка розмістила їх на полиці книжок лише заради того, щоб зробити полицю ефектною.
FrustratedWithFormsDesigner

12

Коли я вперше закінчив, я зібрав перші три томи TAOCP як подарунок на випускний для себе і спробував прочитати їх прямо. Ніколи не вдавалося. Цього дня я пробрав це, можливо, 1/3 перших трьох томів (думав не в певному порядку). Матеріал, безумовно, щільний, але є три поради, які я дізнався, які дуже допомогли.

По-перше, не намагайтеся читати від обкладинки до обкладинки. TAOCP - це дійсно стільки ж довідкової роботи, скільки будь-що, і я знайшов, що найкраще прочитати розділ, коли це стосується проблеми, яку ви намагаєтеся вирішити. Як і багато речей у світі, зрозуміти рішення набагато простіше, коли ви стикаєтеся з проблемами, які вони намагаються вирішити.

Далі, цей блок-схема на передній частині книги, це не просто трохи гумору, а насправді досить корисна порада. Читайте розділи, над якими ви працюєте ітераційно, починаючи спочатку з загальних понять, а потім акуратно заглиблюючись у математику.

Нарешті, збережіть гарний старомодний папір та олівець під рукою для роботи за алгоритмами, як вони описані, та опрацюйте кілька простих проблем. Довгий шлях допоможе відновити те, що ви читаєте.


10

Не хвилюйтесь, більшість людей не розуміють мистецтва комп’ютерного програмування (TAOCP). Тож не вважайте себе повільним чи початківцем, що не розумієте - ви такі ж, як і інші 99,99% із нас, хто цього не розуміє.

Ви дуже амбітні , якщо ви хочете , щоб дістатися до рівня , при якому ви можете прочитати TAOCP з легкістю . Я сам лише переглянув книги, перш ніж їх відкладати. На цій планеті, мабуть, є лише кілька людей, які розуміють TAOCP.

Ознайомтеся з публікацією: Книжкові програмісти насправді не читають Білла Ящірка.

Там перераховано багато інших книг, які є досить читабельними , зрозумілими , і ви можете скористатися ними одразу .

Мені особисто подобається:


8

Я натрапив на цю цитату від Білла Гейтса: "Ви обов'язково надішліть мені резюме, якщо зможете прочитати всю справу". Він говорив про «Мистецтво програмування книг». Тому я був досить цікавий і хотів прочитати це все, але чесно, я його зовсім не розумію .. I'm really not that highly intellectual being.. Тому це повинно бути причиною, чому я не можу його зрозуміти , але я прагну дізнатися .. Зараз я читаю 1-й том про фундаментальне альго. Тож чи є там книги, привітні для початківців / повільних людей, як я? Тож я можу створити себе, і, сподіваюся, в майбутньому я можу легко прочитати книгу Кнут ..

якщо ви визначаєте себе як not a highly intellectual beingтоді, ви налаштовуєте себе на низькі очікування. Ви повинні зламати цей менталітет, якщо хочете зробити щось варте неприємностей. У вас не повинно бути сумнівів, що ви можете чогось досягти. Крім того, її досягнення не означає, що ви цього легко досягнете.

Речі, які варто переслідувати, - це ті, які важко ... і це не кліше. У галузі програмного забезпечення, інженерії, в житті взагалі, якщо ви хочете чогось досягти, ви повинні піти на важкі речі, на те, що люди уникають, а не на найменші загальні знаменники речей.

По-перше, незрозуміло, яким є твій фон CS. Книзі Кнут потрібна ступінь зрілості. Мало хто з ступенем CS може пройти через це з легкістю. Я не очікував, що студент CS, який щойно закінчив свій перший курс алгоритмів, насправді зможе пройти навіть одну книгу Кнута. Зрілості, необхідної для його отримання, просто немає, і це не має нічого спільного з розумовими можливостями студента.

Потрібно мати основні алгоритми, щоб вони були холодними і чіткими, і вам потрібно мати досить багато програмування (робочого та / або схоластичного) під поясом - я б сказав, 40 кредитів на програмування принаймні. Ви також повинні мати свою математику CS на твердій основі.

Ви не можете піти вперед, не розуміючи дискретної математики (і, можливо, теорії обчислень.)

Справа не в тому, що вам знадобляться ці знання, щоб працювати над проблемами Кнута, але вам потрібен зрілість, щоб можна було пройти цей тип матеріалу.

Спочатку виберіть лише одну книгу та одну книгу (книга CLRS, як було запропоновано раніше), і працюйте над нею від початку до кінця. Коли це можливо, робіть програми, що реалізують алгоритми. Не використовуйте Java чи C #, навіть C ++. Перейдіть до голих кісток С і отримайте відчуття, як будувати речі з металевих клаптів голих кісток.

Також отримайте книгу Кнут на тему "Конкретна математика", якщо ви ще не пройшли курс дискретної математики та теорії обчислень. Було б добре, щоб ви також пройшли книгу.

Потім торкніться енциклопедії Кнута, один том, одна глава за раз. Не переходьте до іншої глави, не розуміючи першої.

Я б запропонував вам спершу ознайомитися з томом I (основні алгоритми), потім з томом III (пошук та сортування). Це повинні бути вашими найближчими цілями. Потім, пізніше (значно пізніше), займіться томом IV (комбінаторні алгоритми), а потім томом II (напівчислові алгоритми.)

Не відчувайте себе погано, якщо спочатку ви цього не отримаєте. Я намагався пройти через томи І та ІІІ років (зараз 10 років).

І не варто також наносити на нього стільки ваги. Не робіть цього, щоб довести щось комусь або собі. Зробіть це, тому що ви інтелектуально зацікавлені в цьому. Ви можете бути досвідченими в алгоритмах, просто скориставшись книгою CLRS (або будь-якою з тонких книг на рівні градацій).

Будьте прагматичними і відпочити собі. Ставтесь до книги Кнут як до довготермінової особистої амбіції, а не як до безпосереднього підтвердження того, що ви є матеріалом CS;)

Є й інші важливіші речі (для кар’єри), за що потрібно вбити себе;)


2
Примітка: Ви посилаєтесь на Том III двічі, а ніколи на ІІ том, називаючи Том ІІ двома різними іменами.
альтернатива

Дякую, що повідомили мені (+1). Я мав на увазі такий порядок: спочатку том I (основні алгоритми), потім том 3 (пошук і сортування), потім том IV (комбінаторні алгоритми), а потім том 2 (напівчислові алгоритми)
luis.espinal

6
+1 Ми не наважуємось на те, що важкі речі; це тому, що ми не наважуємось, що їм важко. - Seneca
mouviciel

4

Перш ніж навіть стартувати на Кнут, мені довелося пройти шлях через чотири різні книги. Перші дві - це книги Седжевіка про алгоритми. Ці огляди більшості алгоритмів та структур даних у реально реалізованій формі, тож ви можете побачити, що вони бувають та як вони працюють. Ці книги надходять у різних мовних версіях - я читав ці на C, але iirc вони спочатку були написані на мові Pascal, а там є версії C ++ та Java.

Після цього я опрацював хорошу частину книги «Кормен» про алгоритми і використав « Вступ Седжевіка та Флайолета до аналізу алгоритмів» як безкоштовний текст, оскільки це більше в жилах математичної суворості Кнута, ніж книга Кормена. Я все ще маю закінчити будь-яку з цих, в основному, вибираючи вишні частини, які я відчуваю, що мені потрібно.

Прочитавши їх, і отримавши ступінь математики, я можу прочитати деякі TAOCP, але це важко читати. Це не означає, що це не корисно. TAOCP - це одне з найбільших довідників щодо алгоритму, але думати, що ти можеш використовувати їх, щоб "повністю" зрозуміти що-небудь, є дещо проблематичним.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.