Искусство компьютерного программирования - читать или не читать? [закрыто]


63

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

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

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ - Для тех из вас, кто носит футболки с надписью «Кнут - мой домой», не поймите меня неправильно - я хочу прочитать это, но мне просто интересно, должно ли оно быть в верхней части моего списка приоритетов или если что-то еще должно прийти первым.


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

Я сделал это к странице 3 и собачьим ушам это. Продал комплект на Амазоне 6 месяцев спустя.
kirk.burleson

Ответы:


72

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

Как один семьянин другому, проводите время со своими детьми.


34
+1 для детей - компьютеры, как известно, хороши для ожидания. Они могут подождать, пока дети постарше.

3
+1 для детей, хотя вы сможете читать книгу в любое время своей жизни, вы сможете играть со своим 4-летним ребенком только в течение 1 года. И с вашим 5-летним ребенком тоже всего 1 год ...

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

5
У меня еще нет детей, и я действительно хочу закончить читать, прежде чем умереть Разве у меня нет детей?
затонул

1
@ sank ты думаешь как программист ... :)
красавица Надар

23

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

Есть (возможно, апокрифическая) история о том, как Стив Джобс встречался с Кнутом. Первое, что Джобс сказал ему: «Приятно познакомиться с вами, доктор Кнут. Я прочитал все ваши работы!». Кнут ответил: «Ты полон дерьма»: http://www.folklore.org/StoryView.py?project=Macintosh&story=Close_Encounters_of_the_Steve_Kind.txt


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

4
Re: рассказ Работа: Это является апокриф. Кнут сказал об этом на техническом выступлении Рэндалла Манро.
Greyfade

4
«История» тем не менее заставила меня улыбнуться. :)
MetalMikester

Я могу засвидетельствовать юмор доктора Кнута. Я отправил письмо на его опубликованный адрес. Я был удивлен, что он ответил. Его ответом была распечатанная копия моего электронного письма, где он вежливо сказал мне прочитать остальную часть раздела TAOCP. Моя электронная подпись о том, что я из Миссури (покажи мне), на что он сделал замечание по поводу глупого политика из МО. В заключение он сказал: «Просто шучу, не вините меня за губернатора Шварценеггера».
dbasnett

21

Нет, он не должен быть в верхней части вашего списка приоритетов. У меня есть полный набор, и я не прочитал все это. Я использовал его (пока) как хороший справочник по некоторым проблемам (например, это было неоценимо в моем понимании случайности и тестировании случайных генераторов). Всякий раз, когда поднимается тема CS, с которой у меня ДЕЙСТВИТЕЛЬНО не получается справиться, я склоняюсь к тому, чтобы воспринимать TAOCP как хороший шаг в моем понимании.

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


1
В точку.
kirk.burleson

9

TOACP является важным чтением - в какой-то момент. В зависимости от того, что вы делаете ежедневно, это может быть не самым срочным.

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

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


6

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


6

TAOCP - отличная работа, но ее чтение станет ужасной инвестицией для практикующего разработчика программного обеспечения. Если вы сделаете это, вы пожертвуете несколькими годами (то есть сколько времени это займет) вашего профессионального бюджета на самосовершенствование, чтобы узнать слишком много о слишком малом.

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

Тогда, если вы чувствуете, что вам нужно / хотите больше, двигайтесь до Кнута.

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


6

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


2
Это как «Краткая история времени» Хокинга для программистов.
Джон Хопкинс

1
Bit Я сделал прочитал ABHIT. Излучение Хокинга мне кажется странным. Черная дыра сжимается, потому что в нее попадают какие-то вещи? Я получаю сохранение массы и две половинки каждой виртуальной пары, которая никогда не встречается, чтобы уничтожить, но идея все еще просто причудлива.
Steve314

@ Steve314: что еще более странно, так это то, что очень маленькие черные дыры яростно взрываются. Теоретически.
Стивен А. Лоу

2
ABHOT является коротким и предназначен для широкой публики. TAOCP не относится ни к одной из этих вещей.
Шон Макмиллан

3

+10 на комментарий семьи / детей. Я стараюсь читать больше, оставаясь при этом на глазах у клиентов.

Но ... да, очень стоит прочитать. Нет смысла читать линейно, вместо этого просматривайте и выбирайте несколько интересующих тем.


3

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

Лучший подход к ним - если у вас нет поездок на работу, где у вас есть свободное время, чтобы сидеть и читать, - это читать их достаточно, чтобы знать, где что-то найти в них, а затем читать полную главу, когда вы используйте их в качестве справочников по данной проблеме. С Google и Stack Overflow не так часто можно найти справочные книги, но в некоторых случаях вы можете обнаружить, что эти книги дают некоторое представление о том, что вам придется отправлять дополнительное время на поиск в Интернете.


1
Читать всю главу? Это примерно половина объема, и они не маленькие объемы. Я думаю, что вы могли бы иметь в виду меньшую единицу текста.
Дэвид Торнли

3

Не забывайте, что в начале Кнут хотел написать кое-что о том, как написать компилятор.

Например, вы можете получить много информации в сети с помощью Википедии, но если вы не какой-то исследователь, просто прочитайте резюме, и вы получите удовлетворение.

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


2

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

Он до нравится 4 тома и 5 (независимо от брошюр тех) , поэтому завершения книги была бы , вероятно , лучше , чем университетский курс основ информатики и сделать вас почти лучший программистом никогда.

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


1
«Таким образом, завершение книг было бы, вероятно, лучше, чем университетский курс» - тома 1-3 использовались в качестве учебников на нескольких курсах еще тогда, когда я получил степень CS, и мы потратили бы весь курс только на половину одного из томов. Например, «Том 3 Сортировка и поиск» преподавался как два отдельных курса.
tcrosley

2
Незначительный момент, но сейчас есть только три опубликованных тома с четвертым в процессе. Эта брошюра является препринтом того, что станет четвертым томом. www-cs-faculty.stanford.edu/~uno/taocp.html
rjzii

1

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

У вас есть поездка на работу, где вы можете читать - это было бы идеально.


РЕДАКТИРОВАТЬ: Вы можете найти этот предварительный просмотр небольшой части тома 4 интересным: http://www-cs-faculty.stanford.edu/~uno/fasc1a.ps.gz

(примечание: сжатый постскриптум)


1
К сожалению (в данном случае - ОЧЕНЬ повезло, в противном случае) я удаленно, так что это не вариант.
Занняминдерсон

1

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

Если вы просто хотите лучше узнать алгоритмы низкого уровня, лучше начать с книг Роберта Седжвика (например, «Алгоритмы на C», «Алгоритмы на Java» и т. Д.).


1

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


1

TAOCP Кнута - шедевр. Но, как и любой шедевр (например, «Иллиада», «Война и мир» или «В поисках утраченного времени» Пруста), он не для всех и не для вечности.

Книга очень хорошо написана и очень хорошо изучена. Проблемы велики, и объяснение алгоритмов сделано хорошо.

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

Я рекомендую использовать эту книгу как библию. Когда нужно, поищите. Вы найдете ответ. Это случалось со мной не раз!


3
Поможет ли это, если бы вы использовали настоящий ассемблер для IBM360 или PDP8?
Мартин Беккет

1
Он никогда не смог бы вынести эти 50 лет с языком ассистентского языка. Это ставит всех в равное положение!
Люсер Дрог
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.