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

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

    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 в разработке ПО (см., например, главу "Рефакторинг и производительность").

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

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

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

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

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

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

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 51

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

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

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


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

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

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


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


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

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

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

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

                          0

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

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

                            А это какую?


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

                              0
                              А это какую?

                              Crafting Interpreters.

                                0

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

                                  0

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

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

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

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

                              0

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

                              +2

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

                                +2
                                Почему же в этом списке нет SICP?
                                  0
                                  потому что SICP не попса, а значит неизвестна многим
                                    0
                                    Попса — Popular Song. Популярная песня.
                                    Попса — любая популярная вещь.

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

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

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

                                                            Самое читаемое