Хватит о политике, пока меня не посадили. Лучше о книгах.
Давно хотел предостеречь читателей от прочтения «Искусства программирования», которое ошибочно считается хорошей книгой, которую надо прочесть каждому. На мой взгляд — книга отвратительная. Сам я прочел два первых тома, и должен сказать, что это был совершенно пустой труд.
О контенте. Первый том вообще не нужен. Значительная его часть посвящена ассемблеру MIX. Он конечно язык сравнительно простой, но объяснять алгоритмы на примере ассемблерного, а не псевдокода, как-то не правильно на мой взгляд (тем более что современные настоящие ассемблеры даже проще, чем кнутовский). Я лично прочитал про сам MIX, но дальше все, где этот язык фигурировал, пропускал, потому что дикая дурь. Может быть конечно во времена, когда Кнут писал книгу, это и было оправданно, но сегодня это выглядит как крайне неудачный ход.
Еще в первом томе есть немного математики и немного про деревья. Математическая составляющая тоже не особо радует — на 90% это «синтаксическая математика», где все сводится к механическим операциям. Действительно интересных задач почти нет. Да и в общем-то математика там очень детская и какая-то несерьезная. Книга излагает лишь несколько простейших результатов о сочетаниях и сравнениях по модулю на школьном уровне. Из-за этого поверхностного знакомства с математикой многие доказательства оказываются на порядок сложнее, чем они могли бы быть. Даже базовые вещи вроде O-нотации описываются в главах со звездочкой и практически не используются. (Как я понимаю, книга писалась для первого курса и продвинутых школьников).
Про деревья (да и про алгоритмы вообще) тоже в общем ничего хорошего сказать не могу. Очень много внимания уделяется экономии какого-нибудь одного бита в какой-нибудь структуре. Наверное где-то это все существенно — может быть в каких-то специальных контроллерах, например. Или возможно это было существенно раньше. В целом же сегодня о памяти на таком микроуровне никто не будет думать, и поэтому для среднестатистического человека в индустрии все это шаманство совершенно не интересно (особенно учитывая, что оно всегда влияет на быстродействие).
Существенно, что многие алгоритмы даются просто «как есть», а потом уже каким-нибудь формальным методом доказывается (чаще по индукции), что эти алгоритмы работают как надо. Тоже мало приятного, так как идея, которая приводит к алгоритму, не раскрывается, ну а стало быть и понимание принципа алгоритма не может считаться полным.
Более-менее интересно было во втором томе читать о генераторах случайных чисел. У меня была детская мечта понять как компьютер генерит случайные числа и доказать аналитически, что этот алгоритм обладает какими-нибудь хорошими свойствами и вообще выдает равномерное распределение. К сожалению, тут мои надежды рухнули — за исключением пары нехитрых результатов о том как ГСЧ не надо делать, ничего аналитически не доказывается, а хорошие генераторы получаются методом научного тыка. Не совсем то что хотелось, но по крайней мере я теперь это знаю.
Вторая половина второго тома посвящена работе с полиномами. Ну, наверное кому-то оно надо, но не мне.
А третий том я уже читать не стал, хотя вроде как более-менее прикладные вещи начинаются только там. Хотя и тут тоже в современном мире следовало бы больше времени уделить всяким стохастическим методам, а не излагать десять видов деревьев. Это конечно уже не к Кнуту претензия, а просто еще один аргумент против того, чтобы читать книгу.
Дополнительно надо сказать, что и сама манера изложения крайне дурацкая. При том что сложного материала там нет и книгу вполне можно было бы читать в метро, больше половины выкладок вынесены в упражнения, которые опять же все цепляются друг за друга. В результате просто последовательно читать книгу становится невозможно — постоянно приходится куда-то возвращаться, перелистывать и вообще всячески страдать.
В общем, не советую.
Зато очень рекомендую книгу Кнута, Грэхэма и Поташника «Конкретная математика». Книга для детей, подойдет даже для гуманитариев (правда иногда надо брать простые интегралы), но написана чертовски хорошо. Местами нудновата, когда разжевывают совсем примитивные вещи, но вообще книга совершенно прекрасна в качестве легкой зарядки для ума гуманитария, либо для приятного отдыха технаря. И кстати именно такие задачи как там любят спрашивать на собеседованиях во всякие Майкрософты, Яндексы и прочие Гуглы — так что если кто туда хочет, то книга как раз для него.