В интернете можно найти бесчисленное множество списков «лучших книг о программировании». Однако у каждого своё мнение, и, как говорится, о вкусах не спорят. Саму же процедуру поиска можно попытаться объективизровать, например, использовать критерий цитируемости. Такую попытку предпринял французский разработчик Пьер де Вульф. Ниже мы кратко расскажем о его методологии. Если вам интересен только список книг, переходите к следующему разделу.
Для начала Пьер сделал несколько вариаций Google-запроса «Best Programming Books». Пропарсив топ поисковой выдачи и исключив дубликаты списков, Пьер получив 150 подходящих страниц. Далее из них были исключены ветки Quora и Reddit, а также списки, сфокусированные конкретной технологии или платформе, одном конкретном годе или бесплатных онлайн-книгах.
В итоге получилось 110 HTML-файлов, для которых были определены CSS-селекторы с названиями книг. При этом удалось исключить ещё около 40 нерелевантных страниц.
Используя Python, библиотеку BeautifulSoup и найденные CSS-селекторы, Пьер извлёк текст из необходимых DOM-элементов. Получился большой список книг, требующий дополнительной обработки.
Часть списка с книгами после парсинга страниц
Чтобы найти самые цитируемые книги, требовалось нормализовать результаты. Например, названия книг имели разные стили оформления:
- by
, - –
, - : ,
- ,
- или всё подряд, включая даже номер издания.
Для обработки различных вариантов оформления была написана следующая функция:
После её применения потребовалось немного ручной очистки. Список стал выглядеть так:
Хамбл, Фарли. Непрерывное развёртывание ПО
Оригинальное название: Continuous Delivery by Jez Humble & David Farley.
В книге Джеза Хамбла и Дэвида Фарли приведены принципы и практические методы для сборки, автоматизации, тестирования и развёртывания высоконагруженных приложений. Авторы рассказывают о непрерывном интегрировании, разбиении проекта на компоненты и контроле версий. Книга ориентирована на программистов, имеющих опыт в корпоративной разработке. Рассматриваются следующие темы:
- автоматизация сборки, интеграции, тестирования и развертывания программного обеспечения;
- реализация конвейера развертывания на уровне команд и организаций;
- взаимодействие разработчиков, тестировщиков и администраторов;
- стратегии инкрементной разработки программных средств большими распределенными командами;
- эффективные стратегии управления конфигурациями;
- автоматизация приемочного тестирования – от анализа требований до реализации процессов.
24. Уэйн, Седжвик. Алгоритмы на Java (8.8% рекомендаций)
Уэйн, Седжвик. Алгоритмы на Java
Оригинальное название: Algorithms by Robert Sedgewick & Kevin Wayne.
Книга Седжвика и Уэйна «Алгоритмы на Java» является классическим справочным руководством, содержащим необходимый объём знаний для программиста в области алгоритмов, накопленных за последние несколько десятилетий. Как следует из названия, сами алгоритмы реализованы на Java.
23. Кори Альтхофф. Сам себе программист (8.8% рекомендаций)
Кори Альтхофф. Сам себе программист
Оригинальное название: The Self-Taught Programmer by Cory Althoff.
Кори Альтхофф – профессиональный self-made разработчик, на собственном опыте прошедший путь от новичка до инженера программного обеспечения в компании eBay. Автор поможет пройти сложный путь от создания первой программы на Python до первого собеседования.
Книга состоит из нескольких разделов:
- основы Python 3 и разработка первых программ;
- основы объектно-ориентированного программирования;
- Git, Bash, регулярные выражения и базы данных. Использование приобретённых прежде навыков для разработки веб-скрапера;
- основы Computer Science, алгоритмов и структур данных;
- советы о работе в команде и получении первой работы.
22. Steve McConnell. Rapid Development (8.8% рекомендаций)
Steve McConnell. Rapid Development
Единственное издание, для которого мы не нашли переводного эквивалента на русском языке. В этой книге Стив Макконнелл рассказывает о проблемах, связанных с общими стратегиями, конкретными лучшими практиками и полезными советами, которые помогают сократить и контролировать графики разработки и поддерживать стремительное развитие проектов.
21. Питер Сейбел. Кодеры за работой. Размышления о ремесле программиста (10.2% рекомендаций)
Питер Сейбел. Кодеры за работой. Размышления о ремесле программиста
Оригинальное название: Coders at Work by Peter Seibel.
Программисты – люди не очень публичные, многие работают поодиночке или в небольших группах. Самая важная и интересная часть их работы никому не видна, потому что происходит у них в голове.
Питер Сейбел взял интервью у 15профессионалов: Кена Томпсона, создателя UNIX, Берни Козелла, участника первой реализации сети ARPANET, Дональда Кнута, Гая Стила, Джейми Завински, Саймона Пейтон-Джонса, Питера Норвига, Дугласа Крокфорда, Джошуа Блоха, Брендана Айка, Джо Армстронга, Брэда Фицпатрика, создателя Живого Журнала, и других.
Все они «подсели» на программирование ещё в школе. Тогда, на заре зарождения отрасли, лишь в немногих учебных заведениях читались курсы по компьютерным наукам. Поэтому будущим гуру приходилось покорять профессиональные вершины самостоятельно, но всех их отличает творческое горение и полная самоотдача любимому делу. Вы узнаете, что они думают о будущем программирования и как сами научились программировать, как, по их мнению, нужно проектировать ПО, как выбор языка программирования влияет на продуктивность и можно ли облегчить выявление труднонаходимых ошибок.
20. Эрик Эванс. Предметно-ориентированное проектирование. Структуризация сложных программных систем (10.2% рекомендаций)
Эрик Эванс. Предметно-ориентированное проектирование (DDD). Структуризация сложных программных систем
Оригинальное название: Domain-Driven Design by Eric Evans.
Классическая книга Эрика Эванса освещает наиболее общий, стратегический круг вопросов, связанных с объектно-ориентированной разработкой программного обеспечения. Подход автора строится на динамичном рефакторинге модели. Это позволяет достигнуть высокой степени гармонии между логикой предметной области и кодом программы, а также достаточной гибкости программной архитектуры для удобной доработки и интеграции программного обеспечения. Книга насыщена практическими примерами из реальных проектов.
19. Дональд Кнут. Искусство программирования (10.2% рекомендаций)
Дональд Кнут. Искусство программирования
Оригинальное название: The Art of Computer Programming by Donald E. Knuth.
Фундаментальная монография известного американского математика и специалиста в области компьютерных наук Дональда Кнута, посвящённая рассмотрению и анализу важнейших алгоритмов, используемых в информатике. В 1999 году книга была признана одной из двенадцати лучших физико-математических монографий столетия.
18. Абельсон, Сассман. Структура и интерпретация компьютерных программ (13.2% рекомендаций)
Структура и интерпретация компьютерных программ
Оригинальное название: Structure and Interpretation of Computer Programs by Harold Abelson / Gerald Jay Sussman / Julie Sussman.
Классическая книга Харольда Абельсона и Джеральда Сассмана о программировании. В Массачусетском технологическом институте использовалась как учебник для начального курса программирования. Помимо этого, книгу используют во многих американских учебных заведениях, имеющих курсы, так или иначе связанные с языком Scheme. Используя Scheme (диалект языка LISP), авторы описали основные концепции программирования, включая абстракцию (данных и исполнения), рекурсию и метаязыковую абстракцию.
17. Мартин Фаулер. Шаблоны корпоративных приложений (14.7% рекомендаций)
Мартин Фаулер. Шаблоны корпоративных приложений
Оригинальное название: Patterns of Enterprise Application Architecture by Martin Fowler.
Автор, известный специалист в области объектно-ориентированного программирования, заметил, что с развитием технологий принципы проектирования и решения общих проблем остаются неизменными, и выделил более 40 наиболее употребительных подходов, оформив их в виде типовых решений.
16. Джон Бентли. Жемчужины программирования (16.1% рекомендаций)
Джон Бентли. Жемчужины программирования
Оригинальное название: Programming Pearls by Jon Bentley
Как настоящие жемчужины растут из песчинок, попавших внутрь раковины и раздражают моллюска, так жемчужины творчества программистов произрастают из задач, с которыми те сталкиваются. Книга предполагает наличие у читателя опыта программирования. Рассматриваются:
- методы разработки алгоритмов;
- методы оценки производительности;
- методы оптимизации программ и экономии памяти;
- задачи сортировки, выборки, поиска.
15. ДеМарко, Листер. Человеческий фактор. Успешные проекты и команды (17.6% рекомендаций)
ДеМарко, Листер. Человеческий фактор. Успешные проекты и команды
Оригинальное название: Peopleware by Tom DeMarco & Tim Lister.
С юмором и мудростью, обретенной за годы руководства и консультирования, Демарко и Листер демонстрируют, что сложнейшие проблемы разработки программного обеспечения имеют человеческую, а не техническую природу. Авторы дают непростые – но подкрёпленные научными исследованиями – советы. Издание предназначено в первую очередь для руководителей проектов, хотя будет полезно и рядовым программистам.
14. Кормен и др. Алгоритмы. Построение и анализ (17.6% рекомендаций)
Алгоритмы. Построение и анализ
Оригинальное название: Introduction to Algorithms by Thomas H. Cormen / Charles E. Leiserson / Ronald L. Rivest / Clifford Stein.
В книге «Алгоритмы. Построение и анализ» описаны самые разнообразные алгоритмы, сочетается широкий диапазон тем с глубиной и полнотой изложения; при этом изложение доступно для читателей самого разного уровня подготовки. Каждая глава книги относительно самодостаточна и может использоваться в качестве отдельной темы для изучения.
13. Чарльз Петцольд. Код: тайный язык информатики (19.1% рекомендаций)
Чарльз Петцольд. Код: тайный язык информатики
Оригинальное название: Code by Charles Petzold.
Код – книга об эволюции компьютера, истории появления и становления вычислительных систем. Каждая глава наполнена необходимыми примерами и понятными иллюстрациями. Автор последовательно переходит от одной темы к другой, подробно рассказывая о принципах работы компьютера, элементарной физике, системах счисления и многом другом, так что даже у самых любопытных не остаётся никаких вопросов.
12. Стив Круг. Не заставляйте меня думать. Веб-юзабилити и здравый смысл (19.1% рекомендаций)
Стив Круг. Не заставляйте меня думать. Веб-юзабилити и здравый смысл
Оригинальное название: Don’t Make Me Think by Steve Krug.
Книга посвящена юзабилити веб-сайтов и мобильных приложений. Автор популярно, с примерами и иллюстрациями, объясняет, как сделать сайт или мобильное приложение, которым будет удобно пользоваться всем.
11. Джон Сонмез. Путь программиста (22.0% рекомендаций)
Джон Сонмез. Путь программиста
Оригинальное название: Soft Skills by John Sonmez.
Для большинства разработчиков программного обеспечения самое интересное – кодинг, а самое сложное – иметь дело с клиентами, коллегами и менеджерами и оставаться продуктивными, достигать финансовой безопасности и поддерживать себя в форме.
Эта книга показывает, что требуется для выстраивания успешной карьеры программиста, помогает IT-специалистам лучше понять свою профессию и коллег, всегда оставаться востребованным на рынке труда, целенаправленно и результативно развиваться, а также получать от любимой работы подлинное удовольствие.
10. Г. Л. Макдауэлл. Карьера програмиста (22.0% рекомендаций)
Г. Л. Макдауэлл. Карьера програмиста
Оригинальное название: Cracking the Coding Interview by Gayle Laakmann McDowell.
Приведённые в книге вопросы с интервью являются реальными вопросами с собеседований в различных компаниях. В книге вы найдёте
- советы о том, как решить каждый из 189 вопросов;
- пять проверенных стратегий для решения вопросов по алгоритмам;
- широкий охват основных тем: производительность, структуры данных, основные алгоритмы и др.
9. Приемы объектно-ориентированного проектирования. Паттерны проектирования (25.0% рекомендаций)
Приемы объектно-ориентированного проектирования. Паттерны проектирования
Оригинальное название: Design Patterns by Erich Gamma / Richard Helm / Ralph Johnson / John Vlissides.
Простые и изящные решения типичных задач, возникающих в объектно-ориентированном проектировании. Демонстрируется роль паттернов в создании архитектуры сложных систем.
Издание предназначено как для профессиональных разработчиков, так и для программистов, осваивающих объектно-ориентированное проектирование.
8. Майкл Физерс. Эффективная работа с унаследованным кодом (26.4% рекомендаций)
Майкл Физерс. Эффективная работа с унаследованным кодом
Оригинальное название: Working Effectively with Legacy Code by Michael Feathers.
В деятельность программиста входит не только создание собственных приложений и программ, но и работа с чужим кодом. Часто такая работа приносит только страдания. Поскольку стандарты написания кода в разных компаниях отличаются, понять чужой код бывает непросто, а развивать уже существующий проект бывает ещё сложнее. Автор книги научит, как работать с унаследованными системами, как их развивать и поддерживать. Вы познакомитесь с эффективными приёмами и стратегиями работы с крупными проектами.
В книге рассматриваются следующие темы:
- внутренний механизм изменений в коде;
- инструменты тестирования;
- виды неправильных зависимостей;
- использование преимуществ ООП;
- методы разрыва зависимостей и многое другое.
7. Роберт Мартин. Идеальный программист (27.9% рекомендаций)
Роберт Мартин. Чистая архитектура
Оригинальное название: The Clean Coder by Robert Martin.
В этой книге легендарный эксперт Роберт Мартин (более известный в сообществе как «Дядюшка Боб»), автор бестселлера «Чистый код», рассказывает о том, что значит «быть профессиональным программистом», описывая методы, инструменты и подходы для разработки «идеального ПО». Книга насыщена практическими советами в отношении всех аспектов программирования: от оценки проекта и написания кода до рефакторинга и тестирования.
6. Фредерик Брукс. Мифический человеко-месяц, или Как создаются программные системы (27.9% рекомендаций)
Фредерик Брукс. Мифический человеко-месяц, или Как создаются программные системы
Оригинальное название: The Mythical Man-Month by Frederick P. Brooks Jr.
Книга Ф. Брукса представляет собой сборник очерков, в которых последовательно обсуждаются узловые проблемы разработки крупных программных проектов: повышение производительности труда программистов, организация коллективной работы, планирование и выполнение графика реализации. Одной из главных тем книги стала идея, получившая впоследствии название «закон Брукса», о том что привнесение в проект новых сил на поздних стадиях разработки лишь отодвигает срок сдачи проекта.
Англоязычный журнал PC World поместил книгу Брукса на первое место в списке «Десять IT-книг, которые стыдно признать, что не читал» (Top Ten IT Books Never To Admit You Haven’t Read).
5. Фримен, Робсон. Head First. Паттерны проектирования (29.4% рекомендаций)
Фримен, Робсон. Head First. Паттерны проектирования
Оригинальное название: Head First Design Patterns by Eric Freeman / Bert Bates / Kathy Sierra / Elisabeth Robson.
В мире постоянно кто-то сталкивается с такими же проблемами программирования, которые возникают и у вас. Многие разработчики решают совершенно идентичные задачи и находят похожие решения. Если вы не хотите изобретать велосипед, используйте готовые шаблоны проектирования.
Паттерны появились, потому что многие разработчики искали пути повышения гибкости и степени повторного использования своих программ. Найденные решения воплощены в краткой и легко применимой на практике форме.
4. Фаулер, Кент. Рефакторинг. Улучшение проекта существующего кода (35% рекомендаций)
Фаулер, Кент. Рефакторинг. Улучшение проекта существующего кода
Оригинальное название: Refactoring by Martin Fowler.
Программирование привлекает множество людей своими большими возможностями в создании и распространении собственных программ и приложений. В то же время это привело к появлению большого числа плохо спроектированных программ, развитие которых трудно поддерживать из-за неудобочитаемого кода и плохой архитектуры. Мартин Фаулер описывает процесс рефакторинга, приводит замечания и показывает, где чаще всего можно найти возможности для оптимизации проекта.
3. Стив Макконелл. Совершенный код (42% рекомендаций)
Стив Макконелл. Совершенный код
Оригинальное название: Code Complete by Steve McConnell.
Фундаментальная книга, в которой собраны наиболее эффективные методики и принципы проектирования программного обеспечения, а также уникальный практический и академический опыт самого автора.
2. Роберт Мартин. Чистый код (66% рекомендаций)
Роберт Мартин. Чистый код
Оригинальное название: Clean Code by Robert C. Martin.
Даже плохой программный код может работать. Но если код не является «чистым», это всегда будет мешать развитию проекта и компании-разработчика, отнимая значительные ресурсы на его поддержку и «укрощение».
Эта книга посвящена хорошему программированию. Она полна реальных примеров кода. Прочитав книгу, вы узнаете много нового о коде. Более того, вы научитесь отличать хороший код от плохого.
1. Томас, Хант. Программист-прагматик (67% рекомендаций)
Томас, Хант. Программист-прагматик
Оригинальное название: The Pragmatic Programmer by David Thomas & Andrew Hunt.
Книга абстрагируется от возрастающей специализации и технических тонкостей разработки программ, чтобы исследовать суть процесса – требования к работоспособной и поддерживаемой программе, приводящей пользователей в восторг.
Книга охватывает различные темы – от личной ответственности и карьерного роста до архитектурных методик, придающих программам гибкость и простоту в адаптации и повторном использовании.
Конечно, даже такой подход к выборке статей не позволяет включить все достойные книги. Поделитесь в комментариях, какие издания вам особенно помогли на пути становления программистом.
Если вам понравилась подборка, у нас также есть списки книг по отдельным языкам и технологиям с отзывами читателей: Data Science, Python, C++, C# и JavaScript. Все они были подготовлены в 2020 году.