В этой статье автор предложил написать свои книги, которые относятся к разряду неувядающей классики. Я написал несколько книг в комментариях, а потом решил, что достойных книг гораздо больше, и решил написать статью. Если в оригинальной статье был сделан упор на электронику, то у меня будет упор на разработку программ.
Disclaimer: это мой личный топ из тех книг, которые я лично прочитал, и у которых первое издание было в прошлом веке, даже если она переиздавалась недавно (при условии актуальности именно того издания, которое было в прошлом веке).
В данном топе книги не упорядочены по важности, они все очень хорошие, но есть одна книга, которая равнее других.
Я решил разделить список книг на две части: теоретическая, относящаяся к алгоритмизации и практическая, относящаяся к реализации.
Computer Science aka Теоретическая Информатика
Перефразируя @ne555, законы математики, как и физические законы, нельзя поменять в новых версиях.
Томас Кормен, Чарльз Лейзерсон, Рональд Ривест, Клиффорд Штайн. Алгоритмы: построение и анализ (первое издание 1990г. и ещё без Штайна).
![](https://habrastorage.org/getpro/habr/upload_files/765/a3f/e9a/765a3fe9a65112415dbe73d14882374f.jpg)
Эта книга является первой в моём топе среди всех IT книг (и вообще среди всех нехудожественных книг). Монументальный труд по алгоритмам. Написана очень хорошим и понятным языком. Алгоритмы не только описаны на псевдокоде, но ещё и тщательно разжёваны. А так же в каждой главе есть упражнения для закрепления материала. Книга настолько хороша, что если вы качественно изучите только эту книгу, (сделаете упражнения и самостоятельно реализуете большинство алгоритмов) и не прочитаете больше ни одной книги, то вы будете в программировании лучше большинства выпускников IT-вузов нашей страны (это моё оценочное суждение, основанное на опыте проведения собеседований). Тут недавно проскакивала статья о том, как не надо изучать программирование от @nsnurlan. Так вот, я убеждён, что человек, прочитавший (и понявший!) эту книгу от корки до корки и осиливший самостоятельно реализовать процентов 70 изложенных в ней алгоритмов (ну хорошо, хотя бы половину) на любом понравившемся языке программирования, способен получить работу программистом.
Дональд Кнут. Искусство программирования.
![](https://habrastorage.org/getpro/habr/upload_files/0e8/31d/0eb/0e831d0eb4e1dd5a89d023f5555fc49c.jpg)
Ещё один монументальный труд, который берёт своё начало из шестидесятых годов. Сам труд давно стал классикой, а его автор – живой легендой. Несмотря на то, что она до сих пор пишется и дорабатывается, первые тома абсолютно не потеряли своей актуальности. Следует отметить, что книга имеет высокий порог входа и может отпугнуть некоторых людей. Например, в ней в начале первого тома в качестве упражнения "со звёздочкой" предлагается доказать великую теорему Ферма. Я бы рекомендовал эту книгу тем, кто хочет углубиться в хардкорную информатику так, чтобы мозги закипели.
Иосиф Владимирович Романовский. Дискретный анализ.
![](https://habrastorage.org/getpro/habr/upload_files/106/74c/afd/10674cafd64f5908fda30d7ce34131d8.jpg)
Книга, предназначенная для старшеклассников и студентов 1 курса , регулярно переиздаётся. У меня дома второе издание 2000 года, так что она из прошлого века. Можно сказать, что она является введением в информатику, после неё читать книгу Кормена становится несколько проще.
Альфред Ахо, Моника С. Лам, Рави Сети, Джеффри Ульман. Компиляторы: принципы, технологии и инструменты.
![](https://habrastorage.org/getpro/habr/upload_files/2b3/05e/292/2b305e29211ee4c5b78ee30750db1a0c.jpg)
Классический учебник по компиляторам. Если вы собираетесь всерьёз заняться разработкой компилятора, эта книга, как раз, то, что надо. Но я рекомендовал бы её начать читать только после того, как вы освоите базовые алгоритмы, например, по книге Кормена.
Дэн Гасфилд. строки деревья и последовательности в алгоритмах.
![](https://habrastorage.org/getpro/habr/upload_files/6d4/717/7a3/6d47177a384b81e51598462b57b39210.jpg)
Рано или поздно в любом состоявшемся проекте появляется свой класс строки. Это нормально. Не стесняйтесь этого делать.
Если мне надо что-то вспомнить про строковые алгоритмы, я всегда сначала обращаюсь к этой книге. Если вам потребовался свой класс строки, вы теперь знаете, куда идти.
Фрэнк Харари. Теория графов.
![](https://habrastorage.org/getpro/habr/upload_files/ac9/2c7/bc8/ac92c7bc8baacfc674d30af8b84fffe0.jpg)
Ещё один классический труд, который никогда не устареет. Можно, конечно, сказать, что это книга по чистой математике, и в ней не обсуждаются алгоритмы поиска пути в графе, но математика и теоретическая информатика настолько переплетены, что сложно сказать, где кончается одно и начинается другое. Хотя, на мой взгляд, теоретическая информатика является разделом математики, но это уже философский вопрос. Тем не менее, графы являются важной частью информатики и (программирования в целом), и, порой, в разработке ПО появляются задачи, для решения которых не хватает знаний из книги Кормена.
Григорий Михайлович Фихтенгольц. Основы математического анализа.
![](https://habrastorage.org/getpro/habr/upload_files/59e/e52/8f5/59ee528f5a3d39fe802c457374937b98.jpg)
Куда же без матана.
Математику уже затем учить надо,что она ум в порядок приводит
© Ломоносов
Но причина, почему ты в принципе воспринимаешь мир как-то адекватно, состоит в том, что когда-то ты мог это [взять интеграл] сделать, и твой мозг глубоко математичен.
© математик Алексей Савватеев про экономику и теорию игр, но к программированию тоже применимо.
Борис Павлович Демидович. сборник задач и упражнений по математическому анализу.
![](https://habrastorage.org/getpro/habr/upload_files/c27/f15/ae1/c27f15ae101f4e14981fb698afc4349d.jpg)
Я сейчас очень рад тому, что, когда я учился в университете, у меня не было Wolfram Mathematica (не знаю, умела она тогда аналитически брать интегралы или нет; кажется, не умела, но это не точно) и я все положенные 70 интегралов взял сам.
Разработка
Фредерик Брукс. Мифический человеко-месяц.
![](https://habrastorage.org/getpro/habr/upload_files/8c6/440/8e3/8c64408e3e3d446eefa14cfea2a6eeca.jpg)
Несмотря на то, что IT мир со времени написания этой книги сильно изменился, очень многие мысли из неё актуальны до сих пор. Например, глава "Системный программный продукт": понятно, что сейчас команды разработчиков пишут существенно больше 1000 операторов в год, однако подход к оценке трудозатрат не изменился: программный продукт стоит раза в три дороже просто работающей программы. А также глава, давшая название всей книге и сформулированный в ней закон Брукса:
Если проект не укладывается в сроки, то добавление рабочей силы задержит его еще больше.
Эрих Гамма, Джон Влисидис, Ральф Джонсон, Ричард Хелм, (Они же Gang of Four aka GoF aka «Банда четырёх»). Приемы объектно-ориентированного проектирования. Паттерны проектирования.
В новом издании книга называется Паттерны объектно-ориентированного проектирования.
![](https://habrastorage.org/getpro/habr/upload_files/5c0/bb3/c64/5c0bb3c646930c8eba7e7bb2594c95fd.png)
Как нетрудно догадаться из названия, книга о том, как проектировать ПО. Данная книга обязательна к прочтению всем разработчикам ПО.
Мартин Фаулер. Рефакторинг. Улучшение существующего кода.
![](https://habrastorage.org/getpro/habr/upload_files/052/b03/6f5/052b036f59d5ac807cc87af13721492a.jpg)
Ещё одна книга, которая повлияла на развитие всей отрасли. Вместе с Кентом Беком придумал термин "код с душком"
Если что-то плохо пахнет, это что-то надо поменять
© бабушка Бек.
Книга описывает, что таке рефакторинг, принципы проведения рефакторинга и содержит большой каталог рефакторингов. Помимо этого описаны best practices в разработке ПО (см., например, главу "Рефакторинг и производительность").
Брайан Керниган, Деннис Ритчи. Язык программирования С.
![](https://habrastorage.org/getpro/habr/upload_files/fe0/e2a/b88/fe0e2ab886091d3c30e3619bb37a2363.jpg)
Учебник языка С от его автора. Написан настолько хорошо, что, несмотря на то, что у С несколько раз обновился стандарт, до сих пор является одной из лучших книг для его изучения.
Брайан У. Керниган, Роб Пайк. Практика программирования.
![](https://habrastorage.org/getpro/habr/upload_files/dce/af6/952/dceaf6952ec366f7484b36e189e2fae8.jpg)
Книга о том, что такое хорошо и что такое плохо в программировании для новичков. Написана простым языком и понятным языком. Она затрагивает практически все аспекты программирования, начиная от именования переменных и заканчивая написанием производительных, надёжных и переносимых систем. Все советы из неё обоснованы и подкреплены примерами из практики. Когда я передавал её племяннику, я поймал себя на мысли, что не могу воспроизвести ни строчки из неё. Но, полистав её, я пришёл к выводу, что уже автоматически следую практически всем советам из неё во время работы. Особенно ценно в ней то, что в каждой главе есть раздел "Дополнительная литература", для того, чтобы углубиться в тему. А также из этого раздела я нашёл следующую книгу из данного топа.
Стив Макконнелл. Совершенный код. Практическое руководство по разработке программного обеспечения.
![](https://habrastorage.org/getpro/habr/upload_files/764/9fc/5be/7649fc5be53d7242db5560a444b5b805.jpg)
А это моя любимая книга из данного раздела. Она долго была моей настольной книгой. О ней даже здесь была статья. Невероятно полезная книга, которую просто обязан прочитать каждый новичок. При этом, она будет полезна и для людей с опытом.