Comments 55
Актуальное издание Мифического человек-месяца так же теперь у нас.
Ну вот уже в который раз… Нет, не всем. Во-первых, не любого уровня — начинающим читать не стоит. А во-вторых, не стоит забывать, что ООП разработка ПО не ограничена. Если вы пишете, условно, на лиспе, вам нафиг не нужна эта книга. В отличие скажем от Брукса.
Но в целом подборка очень понравилась. Процентов на 90 согласен, пожалуй.
Особенно «Путь камикадзе. Как разработчику программного обеспечения выжить в безнадежном проекте».
По жизни постоянно помогает, хотя непосредственно к алгоритмам и не имеет отношение.
Читал во времена, когда доступа к компьютерам практически не было
Сначала удивился почему нет Hacker's Delight
, у нас Алгоритмические трюки для программистов
от Генри Уоррен-мл, но, как оказалось, первое издание было в 2002г. Но я все же уверен, что эта книга стареть не будет.
Книга очень необычная и по-своему интересная, хоть и малополезная в повседневном использовании. В ней огромное количество алгоритмов с применением "битовой магии" (например, посчитать количество единичных битов или найти определенную битовую последовательность). Прочтение лично у меня несколько раз вызывало удивление "а что, так можно было?". В общем рекомендую, с книгой прияно выделить часок времени, открыть любую главу и узнать что-то новое.
Драконовая книжка нынче совсем устарела. Очень много времени уделено теоретическим основам компиляторского фронтенда (ДКА, НКА), а всему остальному — мало.
Мои рекомендации по замене (не проверял наличие переводов на русский):
- Bob Nystrom. Handcrafting Interpreters. Отличная книга, в которой дважды с нуля собирается настоящий интерпретатор, сначала простой на Яве, а потом хардкорный на Си: со сборщиком мусора, с замыканиями и пр. Полученных знаний хватит для написания умеренно-быстрого DSL. Чего будет не хватать после прочтения: типизации, оптимизации, компиляции в машинные коды. Точно пока нет русского перевода.
- Benjamin C. Pierce. Types and Programming Languages. Серьёзная книга про системы типов. Чего не хватает: практики. К ней просто напрашивается книга-компаньон, в которой к простому интерпретатору прикручивается проверка типов
- Eli Bendersky. Adventures in JIT compilation. Несколько блогпостов о JIT-компиляции Brainfuck. Даёт хорошее представление о том, что такое компиляция в машинные коды, как работают простейшие оптимизации в компиляторе
Каких книг не хватает (буду рад рекомендациям), от важных к менее важным:
- Дизайн фронтенда для интеграции с IDE. Парсер правильных программ написать несложно. Парсер неправильных программ написать гораздо сложнее (кто пишет в Экселе на VBA, тот понимает, о чём я). Можно читать исходники компиляторов C# (Roslyn), Elm. Сугубо практическая тема, которой брезгают заниматься профессора CS, но очень необходимая.
- Оптимизация. Все знают, что компиляторы умеют оптимизировать код, но я не нашёл книги, которая подробно рассказывает о различных представлениях кода, удобных для оптимизации (CPS, SSA), учит переводить в них свой код и содержит в себе каталог основных оптимизационных приёмов
- Компиляция в машинные коды и линкование. Совсем редкая дисциплина, потому что
- это не теория, а сугубая практика, зависящая от платформы и ОС
- есть готовые ассемблеры и линкеры
- есть "слон в комнате" LLVM, который глупо не использовать в качестве бэкенда, если вам действительно нужен свой компилятор не для саморазвития, а для решения практических задач
Драконовая книжка нынче совсем устарела.Второе мздание 2006 года тоже? (Я его не читал, просто знаю, что есть обновлённая редакция)
Да, вы правы. Начал перечитывать и увидел, что там действительно есть тайпчекеры на OCaml. И понял, насколько легче читать книгу автора, не получившего в/о, чем учебник профессора информатики.
но я не нашёл книги, которая подробно рассказывает о различных представлениях кода, удобных для оптимизации (CPS, SSA), учит переводить в них свой код и содержит в себе каталог основных оптимизационных приёмов
- CPS должен хорошо покрываться Compiling with Continuations. Я её пока не читал, но слышал много хорошего.
- SSA упоминается и немного разбирается в Engineering: A Compiler, но я от их объяснения не в восторге.
Апдейт: стоит следить за работой Rui Ueyama над chibicc, если вам интересна компиляция в машинные коды. Обещает добавить оптимизационные проходы и написать в итоге книгу.
Посмотрите "Modern Compiler Implementation in ML". Оптимизации посвящена немалая часть книги.
Благодарю за подборку, я даже как-то прослезился слегка от ностальгии. Демидовича увидел и совсем разрыдался :) Но это было волшебное время...
то что вы привели более профессионально, то что написано в той статье больше про хобби
Если меня просят порекомендовать книгу по алгоритмам, сейчас я рекомендую не Кнута, а Стивена Скиену
Половина первой книги покрывает 70% каждого собеседования. Но чтобы прочитать, осознать и запомнить конечно надо довольно много времени потратить.
Был на собеседованиях в mail.ru, яндексе на первом этапе, в мирантисе и в 2006 году в SWSoft в отдел тестирования и еще в отдел разработки ядра (куда меня не взяли тогда).
Везде были вопросы разобранные в первой половине этой книги. Так что сделал вывод, что после изучения половины можно легко пройти часть собеседования про алгоритмы.
Меньше читать — довольно рискованно, так как были вопросы на понимание, как работает B-tree, про жадные алгоритмы, хеши и динамическое прогоаммирование. Дальше 18 главы никто не забирался.
Да Кнута можно и сразу брать. Он не требует очень уж сильных знаний. Возможно, что потребуется малость разобраться в нотации. Да и то — разве что в доказательствах. Однако книжка весьма скучная и, по большому счету, является больше справочником, чем учебником. А справочники читать — всегда скучно. Плюс она писалась в те времена, когда потстулат "байт = 8 бит" еще не был настолько распространен, а 6 и 7 битные байты не были большой редкостью.
Лично для меня чтение хардкорных книг и статей сродни походу в тренажёрный зал для мозгов.
Если кто-то решит пройти сей квест, то круто было предложить список литературы, который готовит читателя. Желательно, чтобы для старта достаточно было школьной программы.
Насколько я помню, для того, чтобы понять Кнута, достаточно знаний из программы физ-мат школы, там, вроде, для всего, что сверх школьной программы, сначала даётся определение. Ничего не могу сказать про школы другой направленности, потому что я не в курсе их программы. Сам я её читал в 11 классе. Другое дело, что это не значит, что будет легко.
Есть еще вот такая отличная книжка Хопкрофта и Улльмана: Введение в теорию автоматов, языков и вычислений
Она как бы про C/C++, но всё, что там написано в 1й части книги, подходит для любых языков.
Везде и всюду Брукса навязывают, как попугаи слепо повторя мантру о полезности труда. А если открыть глаза, то человек провалил огромный проект (os/360) и после этого всю жизнь учит других, как надо, блин, разрабатывать проекты. Абсурд чистой воды. Не говоря о том, что в книге (я читал) речь идёт о крупных проектах, и всё описанное практически неприменимо к остальным 99.9%.
Не, я не против книги как таковой, но её ценность сильно преувеличена, imho.
Вот как раз потому, что он провалил проект, этот труд и полезный. Успешный крупный проект – это стечение многих обстоятельств, и не факт, что из него можно подчерпнуть что-то для обучения других. А вот проваленный проект для умного человека – это практически всегда источник ценного опыта.
Да, речь идет о крупных проектах, но всё описанное применимо для средних проектов в том числе (конечно, если вы фрилансер-одиночка, то полезного там будет гораздо меньше).
Я против того, чтобы считать книгу откровением: на сегодняшний день, многие вещи, там изложенные, очевидны и общеприняты. Но (или как раз поэтому) прочитать ее я бы однозначно рекомендовал. Для инженера уровня миддла и выше, работающего в команде (а уж тем более для Engineering Manager'а) – это ж как стихи Пушкина из школьной программы – если вы ни одного не читали, люди будут сомневаться в вашей образванности.
Еще раз: я не против этой книги, как таковой, она полезна в общем. Но ставить её в один ряд с тем же Кнутом — незаслуженно на мой взгляд.
Ну и да, чтение Пушкина не коррелирует с образованностью.
С Кнутом по степени упоротости (исключительно в хорошем смысле) вообще мало что в одном ряду может стоять. Но в "топ IT книг из прошлого века, актуальных до сих пор" обе эти книги вписываются. А, например, в "топ книг, которые я настоятельно рекомендую прочитать каждому программисту" я бы скорее включил Брукса, чем Кнута – там более приземленные и практически полезные вещи объясняются.
Ну и да, чтение Пушкина не коррелирует с образованностью.
Вот как раз корреляция (не причинность), на мой взгляд, присутствует.
Мой топ IT книг из прошлого века, актуальных до сих пор