Мой топ IT книг из прошлого века, актуальных до сих пор +64




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

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

В данном топе книги не упорядочены по важности, они все очень хорошие, но есть одна книга, которая равнее других.


Я решил разделить список книг на две части: теоретическая, относящаяся к алгоритмизации и практическая, относящаяся к реализации.

Computer Science aka Теоретическая Информатика

Перефразируя @ne555, законы математики, как и физические законы, нельзя поменять в новых версиях.

Томас Кормен, Чарльз Лейзерсон, Рональд Ривест, Клиффорд Штайн. Алгоритмы: построение и анализ (первое издание 1990г. и ещё без Штайна).

Эта книга является первой в моём топе среди всех IT книг (и вообще среди всех нехудожественных книг). Монументальный труд по алгоритмам. Написана очень хорошим и понятным языком. Алгоритмы не только описаны на псевдокоде, но ещё и тщательно разжёваны. А так же в каждой главе есть упражнения для закрепления материала. Книга настолько хороша, что если вы качественно изучите только эту книгу, (сделаете упражнения и самостоятельно реализуете большинство алгоритмов) и не прочитаете больше ни одной книги, то вы будете в программировании лучше большинства выпускников IT-вузов нашей страны (это моё оценочное суждение, основанное на опыте проведения собеседований). Тут недавно проскакивала статья о том, как не надо изучать программирование от @nsnurlan. Так вот, я убеждён, что человек, прочитавший (и понявший!) эту книгу от корки до корки и осиливший самостоятельно реализовать процентов 70 изложенных в ней алгоритмов (ну хорошо, хотя бы половину) на любом понравившемся языке программирования, способен получить работу программистом.

Дональд Кнут. Искусство программирования.

Ещё один монументальный труд, который берёт своё начало из шестидесятых годов. Сам труд давно стал классикой, а его автор – живой легендой. Несмотря на то, что она до сих пор пишется и дорабатывается, первые тома абсолютно не потеряли своей актуальности. Следует отметить, что книга имеет высокий порог входа и может отпугнуть некоторых людей. Например, в ней в начале первого тома в качестве упражнения "со звёздочкой" предлагается доказать великую теорему Ферма. Я бы рекомендовал эту книгу тем, кто хочет углубиться в хардкорную информатику так, чтобы мозги закипели.

Иосиф Владимирович Романовский. Дискретный анализ.

Книга, предназначенная для старшеклассников и студентов 1 курса , регулярно переиздаётся. У меня дома второе издание 2000 года, так что она из прошлого века. Можно сказать, что она является введением в информатику, после неё читать книгу Кормена становится несколько проще.

Альфред Ахо, Моника С. Лам, Рави Сети, Джеффри Ульман. Компиляторы: принципы, технологии и инструменты.

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

Дэн Гасфилд. строки деревья и последовательности в алгоритмах.

Рано или поздно в любом состоявшемся проекте появляется свой класс строки. Это нормально. Не стесняйтесь этого делать.

© @Andrey2008

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

Фрэнк Харари. Теория графов.

Ещё один классический труд, который никогда не устареет. Можно, конечно, сказать, что это книга по чистой математике, и в ней не обсуждаются алгоритмы поиска пути в графе, но математика и теоретическая информатика настолько переплетены, что сложно сказать, где кончается одно и начинается другое. Хотя, на мой взгляд, теоретическая информатика является разделом математики, но это уже философский вопрос. Тем не менее, графы являются важной частью информатики и (программирования в целом), и, порой, в разработке ПО появляются задачи, для решения которых не хватает знаний из книги Кормена.

Григорий Михайлович Фихтенгольц. Основы математического анализа.

Куда же без матана.

Математику уже затем учить надо,что она ум в порядок приводит

© Ломоносов

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

© математик Алексей Савватеев про экономику и теорию игр, но к программированию тоже применимо.

Борис Павлович Демидович. сборник задач и упражнений по математическому анализу.

Я сейчас очень рад тому, что, когда я учился в университете, у меня не было Wolfram Mathematica (не знаю, умела она тогда аналитически брать интегралы или нет; кажется, не умела, но это не точно) и я все положенные 70 интегралов взял сам.

Разработка

Фредерик Брукс. Мифический человеко-месяц.

Несмотря на то, что IT мир со времени написания этой книги сильно изменился, очень многие мысли из неё актуальны до сих пор. Например, глава "Системный программный продукт": понятно, что сейчас команды разработчиков пишут существенно больше 1000 операторов в год, однако подход к оценке трудозатрат не изменился: программный продукт стоит раза в три дороже просто работающей программы. А также глава, давшая название всей книге и сформулированный в ней закон Брукса:

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

Эрих Гамма, Джон Влисидис, Ральф Джонсон, Ричард Хелм, (Они же Gang of Four aka GoF aka «Банда четырёх»). Приемы объектно-ориентированного проектирования. Паттерны проектирования.

В новом издании книга называется Паттерны объектно-ориентированного проектирования.

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

Мартин Фаулер. Рефакторинг. Улучшение существующего кода.

Ещё одна книга, которая повлияла на развитие всей отрасли. Вместе с Кентом Беком придумал термин "код с душком"

Если что-то плохо пахнет, это что-то надо поменять

© бабушка Бек.

Книга описывает, что таке рефакторинг, принципы проведения рефакторинга и содержит большой каталог рефакторингов. Помимо этого описаны best practices в разработке ПО (см., например, главу "Рефакторинг и производительность").

Брайан Керниган, Деннис Ритчи. Язык программирования С.

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

Брайан У. Керниган, Роб Пайк. Практика программирования.

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

Стив Макконнелл. Совершенный код. Практическое руководство по разработке программного обеспечения.

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




Комментарии (47):

  1. IMnEpaTOP
    /#22130000

    Важно! Книга Приемы объектно-ориентированного проектирования. Паттерны проектирования в актуальном издании изменила обложку и немного обновила название. Теперь это Паттерны объектно-ориентированного проектирования.
    Актуальное издание Мифического человек-месяца так же теперь у нас.

    • Ktator
      /#22130660

      Обновил название.

      • sshikov
        /#22132158

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

        Но в целом подборка очень понравилась. Процентов на 90 согласен, пожалуй.

        • khrnsb4y
          /#22134034 / +1

          Читал давно я эту книгу и могу сказать, что это справочник, и читать его все равно, что русско-корейский разговорник. Нужно проделывать большую работу, параллельно смотреть refactoring.guru (не сочтите за рекламу — там много примеров на разных языках), википедию. Тренироваться, смотреть, как во фреймворках реализованы паттерны эти, и какие проблемы они решают.

          • Ktator
            /#22135270

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

          • sshikov
            /#22136444

            Ну, что она сложная — это не значит, что ее читать не стоит вообще. Это уже обсуждалось тут раз пять наверное, ну и почти общее мнение было таково, что во-первых, есть более простые книги не в виде справочника, и начать лучше с них, а во-вторых, все-таки нужен определенный уровень, потому что начинающим совсем я бы вообще не советовал. Нужно немного дозреть до понимания. Ну и опять же, если вы скажем на 1С пишете, или там на PL/SQL (а почему нет?), то вам возможно вообще паттерны ООП без надобности, а если пишете на скажем скале — то там есть другие, свои. Опять же, есть так называемые EIP, которые тоже паттерны, но снова из другой оперы.

  2. rinace
    /#22130078

    Я бы еще работы Эдварта Йордана добавил.
    Особенно «Путь камикадзе. Как разработчику программного обеспечения выжить в безнадежном проекте».
    По жизни постоянно помогает, хотя непосредственно к алгоритмам и не имеет отношение.

  3. Engenigger
    /#22130318 / +1

    Вспоминаю, как я изучал язык Си по K&R. Книга была самиздатовская, напечатанная на АЦПУ. И только спустя какое-то время я узнал, что "\(" и "\)" в листингах, обозначают фигурные скобки!

  4. vlad_bravo
    /#22130448

    Кушниренко А.Г., Лебедев Г.В. Программирование для математиков
    Читал во времена, когда доступа к компьютерам практически не было

  5. masyaman
    /#22131034

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


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

    • Ktator
      /#22132970

      О да, отличная книга! Мы занимаемся HPC и инженерными расчётами, и ей постоянно кто-то пользуется. И да, она уже из этого века.

  6. Tujh
    /#22131226

    Если есть «Мифический человеко-месяц», то почему нет «Как пасти котов»?

    • Ktator
      /#22132946

      Она же 2002 года, вроде?

      • Tujh
        /#22134514

        Точно, почему-то я решил, что она впервые была издана в 1998.

  7. orthoxerox
    /#22131244

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


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


    • 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, который глупо не использовать в качестве бэкенда, если вам действительно нужен свой компилятор не для саморазвития, а для решения практических задач

    • Tujh
      /#22131350

      Драконовая книжка нынче совсем устарела.
      Второе мздание 2006 года тоже? (Я его не читал, просто знаю, что есть обновлённая редакция)

      • orthoxerox
        /#22134430

        Я тоже не читал, у меня с красным драконом.

    • 0xd34df00d
      /#22131876

      Чего не хватает: практики. К ней просто напрашивается книга-компаньон, в которой к простому интерпретатору прикручивается проверка типов

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

      • orthoxerox
        /#22149728

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

        • 0xd34df00d
          /#22150178

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

          А это какую?


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

    • roman_kashitsyn
      /#22133266

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

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

    • orthoxerox
      /#22133314

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

  8. ArtemKaravaev
    /#22131446

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

  9. gorodnev
    /#22132024

    Почему же в этом списке нет SICP?

    • Legomegger
      /#22132546

      потому что SICP не попса, а значит неизвестна многим

      • AllexIn
        /#22133536

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

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

    • Ktator
      /#22135298

      Так вышло, что она мне не попадалась, поэтому, её и нет в топе.

  10. rshinov
    /#22132454

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

  11. kmmbvnr
    /#22133588

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

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

    • speshuric
      /#22133790

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

  12. disputant
    /#22134220

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

  13. guryanov
    /#22134330

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

    • ivanovdev
      /#22135694

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

      • guryanov
        /#22135836

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


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


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

  14. Stoneface
    /#22135278

    В качестве книг по математике я бы порекомедовал В. Зорича «Математический анализ» (в 2-х частях) и Bernst Schroder «Mathematical Analysis: A Concise Introduction». Матанал у них покрыт, по меньшей мере, не слабее, чем у Фихтенгольца, а изложение гораздо более современное.

  15. MisterN
    /#22137118

    Когда рекомендуют какую-то неподъемную книгу, вроде Кнута, весьма логичен вопрос о подготовке, тренировке к чтению сего талмуда. «Она очень крутая и мастхевная, но понять её дано лишь избранным». Я встречал ответы типа «поступайте в вуз на, на прикладную математику и только тогда можете попробовать». Оно может и так, но как-то грустно звучит для тех, кто уже давно отучился и кому в ВУЗ позняк. Если кто-то решит пройти сей квест, то круто было предложить список литературы, который готовит читателя. Желательно, чтобы для старта достаточно было школьной программы. Было бы здорово. Сам я на Кнута замахиваться не собираюсь. Но кто знает. Ну, может я и спрашиваю о невозможном, но такая мысль явно приходила в голову многим непосвященным читателям данного обзора книг.

    • alexxz
      /#22137346

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

    • Ktator
      /#22137524

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

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

    • Ktator
      /#22137570

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

      Насколько я помню, для того, чтобы понять Кнута, достаточно знаний из программы физ-мат школы, там, вроде, для всего, что сверх школьной программы, сначала даётся определение. Ничего не могу сказать про школы другой направленности, потому что я не в курсе их программы. Сам я её читал в 11 классе. Другое дело, что это не значит, что будет легко.

      • MisterN
        /#22138408

        ок, спасибо.
        Здорово было бы иметь коррекцию таки для школ другой направленности, но не знаете — так не знаете.

  16. ClimberAM
    /#22146490

    А «Проектирование и конструирование компиляторов», Хантера, забыли?

    • Ktator
      /#22146500

      Этот топ составлен из тех книг, которые я прочитал. Так как IT-отрасль настолько обширная, что её нельзя глубоко объять всю, то я, разумеется, прочитал не все достойные IT книги.

  17. VYudachev
    /#22149438

    «Программист-прагматик» Ханта и Томаса, первое издание было в 1999 году, так что по форме подходит к теме статьи, а уж по содержанию так и подавно!

  18. vadiml
    /#22149518

    Была маленькая книжка Алана Голуба «Правила программирования».
    Она как бы про C/C++, но всё, что там написано в 1й части книги, подходит для любых языков.