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

52

Я наткнулся на эту цитату из Билла Гейтса: «Вы обязательно должны отправить мне резюме, если вы можете прочитать все это». Он говорил о книгах по искусству программирования . Так что мне было довольно любопытно, и я хочу все это прочитать. Но, честно говоря, я этого не понимаю.

Я действительно не настолько интеллектуален. Так что это должно быть причиной, почему я не могу этого понять, но я стремлюсь учиться. В настоящее время я читаю Том 1 о фундаментальных алгоритмах. Существуют ли какие-либо книги, которые были бы полезны новичкам / медлительным людям, таким как я, которые помогли бы укрепить мои знания, чтобы я мог легко читать книгу Кнута в будущем?

ро
источник
Хм, допустим, я бы это понял (и вы тоже, я думаю), но это заняло бы много времени, и сейчас есть более простые книги ..
Нильс
22
Их может быть трудно читать, а книги могут быть проще, но вы все равно должны их прочитать. Я только что прошел через первую книгу, и я не все понимаю в этом! но оно того стоит. Информатика это сложно . Чем раньше вы поймете, что вы недостаточно умны, чтобы понять это, тем быстрее вы начнете учиться тому, как этому учиться.
Майкл К
2
Они склонны к математике для программистов. CS развился в последние годы, и есть множество полезных областей, которые не являются математическими. В каком направлении вы хотите развиваться дальше? Если это алгоритмы и тому подобное, они, вероятно, хорошо читаются, если это другие области, они расширят ваш кругозор, но так же, как и чтение книги по какой-либо теме биологии. Так что, в зависимости от вашей области, они могут быть где угодно, от критических до почти бесполезных.
Кодер
1
С каких это пор программисты считают Билла Гейтса авторитетным?
Джорджио
2
Coursera предлагает 6 бесплатных курсов по алгоритмам (части 1 и 2 алгоритмов, части 1 и 2 разработки и анализа алгоритмов и части 1 и 2 аналитической комбинаторики).
Энтони

Ответы:

39

Даже я думаю, что книга Кнута немного продвинута и трудна для понимания. Эти книги, безусловно, для исследовательских алгоритмистов уровня ИМХО.

Так есть ли какие-нибудь книги, которые являются дружественными для новичков / медлительных людей, как я?

Введение в алгоритмы от CLRS намного проще.

РЕДАКТИРОВАТЬ :

Тем не менее, если вы хотите прочитать книгу Кнута, вы должны сначала пройти конкретную математику . Кнут хочет, чтобы его ученики знали основную математическую часть анализа алгоритмов.

Прасун Саурав
источник
5
Руководство по разработке алгоритмов стало еще проще / доступнее - читать его очень весело
Мартин Беккет,
Введение в алгоритмы - отличная книга. Мы использовали это для нашего первого курса по алгоритмам CSE, и мне это понравилось. Хотя я должен сказать, что провел много итераций, просматривая одни и те же примеры, чтобы действительно сказать, что я их понимаю.
Крис
4
@SidCool: есть третье издание CLRS с десятком новых разделов.
Билл Ящерица
10
Книги Кнута - «Война и мир программирования». Они хороши, но в основном используются, чтобы книжные полки выглядели впечатляюще.
Гаурав
6
«Даже я думаю, что книга Кнута немного продвинута»? скромность
ах
57

Обязательно прочитайте все цитаты Гейтса, включая это:

«Мне потребовалась невероятная дисциплина и несколько месяцев, чтобы прочитать ее. Я изучил 20 страниц, отложил ее на неделю и вернулся еще на 20 страниц. Если кто-то настолько дерзкий, что думает, что знает все, Кнут узнает». помочь им понять, что мир глубокий и сложный ".

Это не простые книги, и они не предназначены для этого. Помните, что одной из целей Кнута было привнести математическую строгость в информатику . Это здорово, если вы хотите что- то доказать в алгоритме, но не так здорово, если вы просто хотите знать, как он работает.

У Майкла Дорфмана есть несколько хороших советов для чтения книг в своем ответе на (теперь удаленный) вопрос о Stackoverflow о том, что я могу получить от чтения лота? , Если у вас нет 10 тыс. Повторений, вы можете просмотреть вопрос и его ответ на машине обратного хода .

Что вы получите от чтения лота? Отличный фундамент в области компьютерных наук. Вы поймете, как работают компьютеры, начиная с логических элементов и заканчивая компиляторами. Вы будете думать о проблемах, о которых вы никогда не знали, то есть о проблемах (т. Е. Каков самый быстрый способ умножения?), И увидите алгоритмические связи между вещами, которые вы никогда не считали связанными (например, русла рек, РНК и вложенные скобки).

Я полностью не согласен с людьми, которые говорят: «Создавайте программное обеспечение, а не читайте о создании программного обеспечения» - между дисциплинами «Разработка программного обеспечения» и «Информатика» есть разница. TAOCP о последнем.

Если вы еще не начали, у меня есть несколько рекомендаций.

Во-первых, вы можете начать с четвертого тома. Это какой-то захватывающий материал, очень современный, и чувство юмора Кнута просвечивает. Кроме того, есть видео (на сайте Stanford SPCD или в Stanford iTunes), где Кнут обсуждает различные разделы. Эти видео очень рекомендуются. Фаслоки 0, 1, 2, 3 и 4 тома 4 доступны в виде отдельных книг в мягкой обложке. Вместе опубликованный материал V4 больше, чем любой из первых 3 томов, но разделен на угощения размером с укус. (Интересно, если бы тома 1-3 казались людям менее пугающими, если бы каждый том был опубликован в виде одной книги в мягкой обложке ...)

В зависимости от вашей математической подготовки, я бы порекомендовал вам сначала прочесть главу 1 и вернуться к ней по мере необходимости. Фактически, вы, вероятно, захотите прочитать каждый раздел (по крайней мере) дважды - быстро в первый раз, просто чтобы понять интуицию и суть аргументов, а затем медленно, осторожно, понять каждый шаг.

Обязательно прочитайте Том 1, Fascicle 1 на MMIX вместо старых разделов на MIX. MMIX лучше во многих отношениях, и вам лучше будет конвертировать MIX в тексте в MMIX, чем пытаться охватить оба мира.

Общее правило: не пропускайте упражнения. В вопросах (и ответах) много хорошего материала. Делайте как можно больше упражнений; но прочитайте их все (и прочитайте ответы после того, как вы попытались решить проблему или решили пройти ее).

Наконец, если вы действительно поймаете ошибку: прочитайте указатель. Много замечательных шуток, спрятанных там.

Естественно, StackOverflow был бы хорошим местом для публикации конкретных вопросов по тексту, если они могут возникнуть ....

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

Корбин Март
источник
Ссылка на SO была сломана, но я нашел пост, который, как мне
кажется,
+1 за оригинальное сообщение о «Путь назад» и список книг из этих университетов
Энтони
+1 за рекомендацию начинать с тома 4, главы 0, 1, 2, 3 и 4, а также за чтение о MMIX вместо MIX. В результате я собираюсь начать с Volumn 1, Fascicle 1, потому что он охватывает MMIX.
Шон Луттин
Как программист на Java / c, я чувствую, что <Data Structures and Algorithm Analysis в Java> очень легко понять и практиковать.
Эрик Ван
29

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

Я даже слышал, что некоторые люди действительно читали части книг Кнута.

Большинство людей просто намерены .

Лично я откладываю их на пенсию

Стивен А. Лоу
источник
22
Вот почему хорошо изношенные использованные копии стоят больше, чем новые!
Мартин Беккет,
13
Если вы понимаете «Искусство войны», вы поймете, что вам нужно только заставить людей думать, что вы понимаете Кнут, когда вы этого не делаете, и наоборот, что вы не понимаете Кнут, когда понимаете. Если нет, то нет. И если вы понимаете книгу 5 Книги Пяти Колец, вам даже не нужно говорить о Кнуте. И если вы прочитали «Искусство программирования Unix» в ESR и поняли коаны, вам даже не понадобится Кнут, потому что вы превзойдете барьер сложности.
Кристофер Махан
20

Книги Кнута навсегда изменили область алгоритмов. Сам он сказал, что «2 страницы в моей книге - это чья-то вся карьера», и что его книги трудно читать. Книга содержит сжатый материал за годы работы в области компьютерных наук.

Вы не должны чувствовать себя плохо, если вы не можете этого понять.

Как сказал Прасун, CLRS - это более простая книга для чтения.

У вас также есть Алгоритмы Раджасекарана, Сахни и др., Которые легко понять.

Арджун Дж Рао
источник
это удивительно слышать .. я думал, что я единственный, у кого проблемы с чтением этой книги .. большое спасибо
Ро
7
@Raymond Ho: я не думаю, что кому-то действительно нравится читать книги Кнута. Я знаю, по крайней мере, одного человека, у которого они лежат на книжной полке ради того, чтобы полка выглядела впечатляюще.
FrustratedWithFormsDesigner
12

Когда я только закончил, я взял первые три тома TAOCP в качестве подарка к выпускному экзамену и попытался прочитать их насквозь. Никогда не удавалось. В эти дни я прошел через, возможно, 1/3 из первых трех томов (не в определенном порядке). Материал определенно плотный, но я выучил три совета, которые мне очень помогли.

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

Далее, эта блок-схема в начале книги, это не просто юмор, а полезный совет. Прочитайте разделы, над которыми вы работаете итеративно, начиная сначала с общих понятий, а затем осторожно углубляясь в математику.

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

Cercerilla
источник
10

Не волнуйтесь, большинство людей не понимают Искусство компьютерного программирования (TAOCP). Так что не думайте, что вы медлительны или новичок в том, что не понимаете - вы, как и другие 99,99% из нас, не понимаете этого.

Вы довольно амбициозны, если хотите дойти до уровня, на котором вы можете с легкостью читать TAOCP . Я сам только пролистал книги, прежде чем убрать их. Вероятно, на этой планете есть всего несколько человек, которые понимают TAOCP.

Проверьте почту: Книги Программисты не Читают Действительно Биллом Ящерицей.

Есть много других книг, перечисленных там, которые вполне читабельны , понятны , и вы можете извлечь выгоду прямо сейчас .

Мне лично нравится:

Spong
источник
8

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

если вы определяете себя как not a highly intellectual beingто, тогда вы устанавливаете себе низкие ожидания. Ты должен сломать этот менталитет, если хочешь сделать что-то стоящее. Не должно быть никаких сомнений в том, что вы можете чего-то достичь. Кроме того, достижение этого не означает, что вы достигнете этого легко.

Вещи, которые стоит преследовать, это те, которые трудны ... и это не клише. В программировании, в разработке, в жизни вообще, если вы хотите чего-то достичь, вы должны идти на то, что трудно, на то, чего избегают люди, и не соглашаться на наименьшие общие знаменатели вещей.

Во-первых, не ясно, какой у вас опыт работы с CS. Книга Кнута требует определенной степени зрелости. Немногие люди со степенью CS могут пройти через это легко. Я не ожидал бы, что студент CS, который только что закончил свой первый курс по алгоритмам, действительно сможет пройти хотя бы одну книгу Кнута. Зрелости, необходимой для ее достижения, просто нет, и это никак не связано с умственными способностями ученика.

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

Вы не можете идти далеко вперед, не разбираясь в дискретной математике (и, возможно, в теории вычислений).

Это не значит, что вам понадобятся эти знания для работы над проблемами Кнута, но вам нужна зрелость, чтобы пройти через этот тип материала.

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

Также получите книгу Кнута «Конкретная математика», если вы еще не прошли курс по дискретной математике и теории вычислений. Было бы хорошо, если бы вы прочитали и эту книгу.

Затем изучите энциклопедию Кнута, один том, одну главу за раз. Не переходите к другой главе, не разбираясь в первой.

Я бы посоветовал вам сначала пройти том I (фундаментальные алгоритмы), а затем том III (поиск и сортировка). Это должно быть вашей непосредственной целью. Затем, позже (намного позже), рассмотрим том IV (Комбинаторные алгоритмы), а затем Том II (Получисленные алгоритмы).

Не расстраивайся, если сначала не получишь. Я пытался пройти том I и III в течение многих лет (сейчас 10 лет).

И вы не должны придавать этому слишком большой вес. Не делайте этого, чтобы что-то доказать кому-то или себе. Делайте это, потому что вы интеллектуально заинтересованы в этом. Вы можете стать опытным в алгоритмах, просто используя книгу CLRS (или любую из прекрасных книг уровня подготовки).

Будьте прагматичны и дайте себе отдохнуть. Рассматривайте прохождение книги Кнута как долгосрочную личную амбицию, а не как непосредственное доказательство того, что вы материал CS;)

Есть и другие более важные вещи (с точки зрения карьеры), ради которых нужно убивать себя;)

luis.espinal
источник
2
Примечание: вы ссылаетесь на том III дважды, а не том II, называя том III двумя разными именами.
альтернатива
Спасибо, что сообщили мне (+1). Порядок, который я имел в виду, был следующим: сначала том I (фундаментальные алгоритмы), затем том III (поиск и сортировка), затем том IV (комбинаторные алгоритмы) и затем том II (
полуколичественные
6
+1 Не потому, что все сложно, мы не решаемся; это потому, что мы не смеем, что они сложны. - Сенека
mouviciel
4

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

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

После прочтения и получения степени по математике я могу прочитать некоторые из TAOCP, но это трудно читать. Это не значит, что это бесполезно. TAOCP - одни из величайших справочных руководств по алгоритмам, но думать, что вы можете использовать их для «полного» понимания чего-либо, несколько проблематично.

Джастин Гамильтон
источник