Комментарии 51
Важно! Книга Приемы объектно-ориентированного проектирования. Паттерны проектирования в актуальном издании изменила обложку и немного обновила название. Теперь это Паттерны объектно-ориентированного проектирования.
Актуальное издание Мифического человек-месяца так же теперь у нас.
>Данная книга обязательна к прочтению всем разработчикам ПО.
Ну вот уже в который раз… Нет, не всем. Во-первых, не любого уровня — начинающим читать не стоит. А во-вторых, не стоит забывать, что ООП разработка ПО не ограничена. Если вы пишете, условно, на лиспе, вам нафиг не нужна эта книга. В отличие скажем от Брукса.

Но в целом подборка очень понравилась. Процентов на 90 согласен, пожалуй.
Читал давно я эту книгу и могу сказать, что это справочник, и читать его все равно, что русско-корейский разговорник. Нужно проделывать большую работу, параллельно смотреть refactoring.guru (не сочтите за рекламу — там много примеров на разных языках), википедию. Тренироваться, смотреть, как во фреймворках реализованы паттерны эти, и какие проблемы они решают.
Когда я её первый раз читал, мне тоже показалось, что сходу врубиться материал не получается. Зато, после того, как я эти паттерны реализовал у себя в проектах без помощи посторонних ресурсов, я понял, что они запомнились гораздо лучше, чем более разжёванный материал.
Ну, что она сложная — это не значит, что ее читать не стоит вообще. Это уже обсуждалось тут раз пять наверное, ну и почти общее мнение было таково, что во-первых, есть более простые книги не в виде справочника, и начать лучше с них, а во-вторых, все-таки нужен определенный уровень, потому что начинающим совсем я бы вообще не советовал. Нужно немного дозреть до понимания. Ну и опять же, если вы скажем на 1С пишете, или там на PL/SQL (а почему нет?), то вам возможно вообще паттерны ООП без надобности, а если пишете на скажем скале — то там есть другие, свои. Опять же, есть так называемые EIP, которые тоже паттерны, но снова из другой оперы.
Я бы еще работы Эдварта Йордана добавил.
Особенно «Путь камикадзе. Как разработчику программного обеспечения выжить в безнадежном проекте».
По жизни постоянно помогает, хотя непосредственно к алгоритмам и не имеет отношение.
Вспоминаю, как я изучал язык Си по K&R. Книга была самиздатовская, напечатанная на АЦПУ. И только спустя какое-то время я узнал, что "\(" и "\)" в листингах, обозначают фигурные скобки!
Кушниренко А.Г., Лебедев Г.В. Программирование для математиков
Читал во времена, когда доступа к компьютерам практически не было

Сначала удивился почему нет Hacker's Delight, у нас Алгоритмические трюки для программистов от Генри Уоррен-мл, но, как оказалось, первое издание было в 2002г. Но я все же уверен, что эта книга стареть не будет.


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

О да, отличная книга! Мы занимаемся HPC и инженерными расчётами, и ей постоянно кто-то пользуется. И да, она уже из этого века.
Если есть «Мифический человеко-месяц», то почему нет «Как пасти котов»?
Точно, почему-то я решил, что она впервые была издана в 1998.

Драконовая книжка нынче совсем устарела. Очень много времени уделено теоретическим основам компиляторского фронтенда (ДКА, НКА), а всему остальному — мало.


Мои рекомендации по замене (не проверял наличие переводов на русский):


  • 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 года тоже? (Я его не читал, просто знаю, что есть обновлённая редакция)
Чего не хватает: практики. К ней просто напрашивается книга-компаньон, в которой к простому интерпретатору прикручивается проверка типов

Так в TAPL же есть аж целые главы, посвященные реализации той или иной системы типов.

Да, вы правы. Начал перечитывать и увидел, что там действительно есть тайпчекеры на OCaml. И понял, насколько легче читать книгу автора, не получившего в/о, чем учебник профессора информатики.

легче читать книгу автора, не получившего в/о

А это какую?


А то я получил очень большое удовольствие от чтения TAPL и прорёшивания упражнений, и эта книга, наверное, действительно на первом месте среди всех учебников, что я читал.

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

Она про совсем другое, я писал в первом комменте, что TAPL закрывает то, о чём CI не говорит.

но я не нашёл книги, которая подробно рассказывает о различных представлениях кода, удобных для оптимизации (CPS, SSA), учит переводить в них свой код и содержит в себе каталог основных оптимизационных приёмов

  • CPS должен хорошо покрываться Compiling with Continuations. Я её пока не читал, но слышал много хорошего.
  • SSA упоминается и немного разбирается в Engineering: A Compiler, но я от их объяснения не в восторге.

Апдейт: стоит следить за работой Rui Ueyama над chibicc, если вам интересна компиляция в машинные коды. Обещает добавить оптимизационные проходы и написать в итоге книгу.

Посмотрите "Modern Compiler Implementation in ML". Оптимизации посвящена немалая часть книги.

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

Попса — Popular Song. Популярная песня.
Попса — любая популярная вещь.

Ваше утверждение звучит как «Она не популярная, поэтому не популярна»
Так вышло, что она мне не попадалась, поэтому, её и нет в топе.

то что вы привели более профессионально, то что написано в той статье больше про хобби

Классика, классикой. Но прогресс не стоит на месте, в том числе прогресс в умении объяснять.

Если меня просят порекомендовать книгу по алгоритмам, сейчас я рекомендую не Кнута, а Стивена Скиену

Забавно, но так получилось, что у меня на столе прямо сейчас 2 тома Кнута (остальные 2,5 на полке) и Скиена. Так что порекомендую обе.

Только вот «Искусства программирования» вышло уже 4 тома, а «Компиляторы» — вышло более свежее издание, чем показанное в материале…

Половина первой книги покрывает 70% каждого собеседования. Но чтобы прочитать, осознать и запомнить конечно надо довольно много времени потратить.

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

Был на собеседованиях в mail.ru, яндексе на первом этапе, в мирантисе и в 2006 году в SWSoft в отдел тестирования и еще в отдел разработки ядра (куда меня не взяли тогда).


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


Меньше читать — довольно рискованно, так как были вопросы на понимание, как работает B-tree, про жадные алгоритмы, хеши и динамическое прогоаммирование. Дальше 18 главы никто не забирался.

В качестве книг по математике я бы порекомедовал В. Зорича «Математический анализ» (в 2-х частях) и Bernst Schroder «Mathematical Analysis: A Concise Introduction». Матанал у них покрыт, по меньшей мере, не слабее, чем у Фихтенгольца, а изложение гораздо более современное.
Когда рекомендуют какую-то неподъемную книгу, вроде Кнута, весьма логичен вопрос о подготовке, тренировке к чтению сего талмуда. «Она очень крутая и мастхевная, но понять её дано лишь избранным». Я встречал ответы типа «поступайте в вуз на, на прикладную математику и только тогда можете попробовать». Оно может и так, но как-то грустно звучит для тех, кто уже давно отучился и кому в ВУЗ позняк. Если кто-то решит пройти сей квест, то круто было предложить список литературы, который готовит читателя. Желательно, чтобы для старта достаточно было школьной программы. Было бы здорово. Сам я на Кнута замахиваться не собираюсь. Но кто знает. Ну, может я и спрашиваю о невозможном, но такая мысль явно приходила в голову многим непосвященным читателям данного обзора книг.

Да Кнута можно и сразу брать. Он не требует очень уж сильных знаний. Возможно, что потребуется малость разобраться в нотации. Да и то — разве что в доказательствах. Однако книжка весьма скучная и, по большому счету, является больше справочником, чем учебником. А справочники читать — всегда скучно. Плюс она писалась в те времена, когда потстулат "байт = 8 бит" еще не был настолько распространен, а 6 и 7 битные байты не были большой редкостью.

Я, ведь, именно что и написал: книга не мастхевная, а для тех кто хочет хардкора. И для таких людей эта книга своей актуальности не потеряла.

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

Насколько я помню, для того, чтобы понять Кнута, достаточно знаний из программы физ-мат школы, там, вроде, для всего, что сверх школьной программы, сначала даётся определение. Ничего не могу сказать про школы другой направленности, потому что я не в курсе их программы. Сам я её читал в 11 классе. Другое дело, что это не значит, что будет легко.
ок, спасибо.
Здорово было бы иметь коррекцию таки для школ другой направленности, но не знаете — так не знаете.
А «Проектирование и конструирование компиляторов», Хантера, забыли?
Этот топ составлен из тех книг, которые я прочитал. Так как IT-отрасль настолько обширная, что её нельзя глубоко объять всю, то я, разумеется, прочитал не все достойные IT книги.
«Программист-прагматик» Ханта и Томаса, первое издание было в 1999 году, так что по форме подходит к теме статьи, а уж по содержанию так и подавно!
Была маленькая книжка Алана Голуба «Правила программирования».
Она как бы про C/C++, но всё, что там написано в 1й части книги, подходит для любых языков.
По какой-то причине здесь не оказалось раздела «Операционные системы», но если бы он был, я бы однозначно рекомендовал в него книгу Алексея Федорчука «Введение в POSIX'ивизм» . Правда, я только сейчас осознал, что она формально не относится к прошлому веку, так как увидела свет в самом начале нынешнего. Тем не менее. Несмотря на то, что она технически довольно сильно устарела, да и написана любетелм, а не профессионалом, она, как никакая другая способна пробудить в читателе тот самый дух хакерства, тягу к знаниям, и вообще всё лучшее, доброе и вечное ) И она очень легко читается.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.