15++ классических книг для программиста
Только мастриды, и только проверенные временем — для новичков и профессионалов.
Иллюстрация: Абрикос Абрикосовый для Skillbox Media
Мы выбрали книги, которые не привязаны к конкретным языкам программирования, технологиям или инструментам. Они рассказывают об алгоритмах и структурах данных, шаблонах проектирования и рефакторинге, учат мыслить как программист, готовят к собеседованию и помогают строить успешную карьеру.
Сложность книжек мы оценили смайликами от одного 🤯 (понятно и новичку)
до 🤯 🤯 🤯 🤯 🤯 (без программистского опыта или спецподготовки будет непросто).
Наш шорт-лист:
2. «Чистый код. Создание, анализ и рефакторинг»
3. «Совершенный код. Мастер-класс»
4. «Паттерны объектно-ориентированного проектирования»
6. «Шаблоны корпоративных приложений»
7. «Психбольница в руках пациентов»
8. «Искусство программирования»
9. «Грокаем алгоритмы»
10. «Алгоритмы. Построение и анализ»
11. «Мифический человеко-месяц»
12. «Рефакторинг. Улучшение проекта, существующего кода»
13. «Эффективная работа с унаследованным кодом»
14. «Идеальный программист. Как стать профессионалом разработки ПО»
15. «Думай как программист. Креативный подход к созданию кода. C++ версия»
+1. «Карьера программиста»
Дэвид Томас, Эндрю Хант
Программист-прагматик
Ваш путь к мастерству
(2-е, юбилейное издание к 20-летию выхода книги)
Перевод с английского — И. В. Берштейн
Издательство «Вильямс», 2020 год, 368 с.
Оригинальное название: The Pragmatic Programmer: Your Journey To Mastery, 20th Anniversary Edition (2nd Edition) by David Thomas & Andrew Hunt
Зачем читать: чтобы получить общее представление о работе программистов.
Сложность: 🤯 🤯
Кажется, в этой книге есть всё, что пригодится программисту: от того, как стать ответственным, до анализа ошибок в алгоритмах и шифрования данных.
Если разбирать все эти темы от и до, получился бы неподъёмный труд на 100500 томов, а не 300 страниц «Программиста-прагматика». Так что книга даёт лишь общее представление — как карта без детализации.
Заметки на полях:
«Прагматик» расширяет кругозор, делает человека своим в тусовке разработчиков. В ней много классных цитат и тонкого профессионального юмора, например:
«Есть старый анекдот об американской компании, заказавшей 100 тысяч микросхем у японского производителя. В спецификации на микросхемы было, в частности, указано, что брак должен составлять 1 штуку на 10 тысяч хороших микросхем.
Заказ был доставлен через несколько недель и состоял из одной крупной коробки, содержавшей тысячи микросхем, и другой, мелкой, в которой было всего лишь десять микросхем. К этой коробке была приклеена этикетка, на которой было написано „Бракованные микросхемы“:
Хорошо, если бы и у нас контроль качества был на таком же уровне».
Роберт Мартин
Чистый код
Создание, анализ и рефакторинг
(Библиотека программиста)
Перевод с английского — Е. А. Матвеев
Издательство «Питер», 2021 год, 464 с.
Оригинальное название: Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin
Зачем читать: чтобы научиться замечать типичные ошибки и не делать их самому. Например, не пускать на самотёк именование переменных, подпрограмм и модулей, форматирование кода, обработку граничных условий — то, что по отдельности кажется мелочью, а всё вместе безбожно портит код.
Сложность: 🤯 🤯
Начинающим программистам иногда кажется, что раз программа заработала, то и ладно. Ни к чему с ней дальше возиться: незачем тщательно продумывать структуру классов, обрабатывать все граничные условия и уж тем более заботиться о говорящих именах переменных, полезных комментариях и других «мелочах».
Дядюшка Боб считает, что внимание к деталям, умение отличать хороший код от плохого и привычки чистюли сделают из кодера настоящего программиста.
Мартин и соавторы на примерах показывают, как грамотно проектировать архитектуру приложения и писать чистый код, а в конце перечисляют признаки «дурно пахнущего кода» — типичные ошибки.
В общем, для создания хорошего приложения нужно потрудиться — самим же потом легче будет его сопровождать.
Заметки на полях: если бы каждый разработчик в начале карьеры прочитал эту книгу, мир был бы лучше, а люди — добрее. Большинство советов Мартина актуальны последние лет двадцать — и наверняка будут полезны ещё очень долго.
Стив Макконнелл
Совершенный код
Мастер-класс
Перевод с английского — В. Г. Вшивцев
Издательство «БХВ», 2017 год, 896 с.
Оригинальное название: Code Complete by Steve McConnell
Зачем читать: чтобы узнать, как довести любую программу до совершенства. Ну или хотя бы попытаться :)
Сложность: 🤯 🤯 🤯
Грамотное конструирование — это секрет успеха. Вот основная идея автора книги. Причём в конструирование входит и планирование, и кодирование, и тестирование готовой программы.
Из книги вы узнаете:
- какие бывают методики проектирования;
- как повысить качество методов в коде;
- как отлаживать код и как его улучшать (рефакторить);
- и даже зачем программисту любопытство.
Заметки на полях: если вы дружите с английским, то советую читать книгу в оригинале. Тогда вам не придётся подолгу гадать, о чём вообще говорит переводчик: продираться через трёхъярусный канцелярит, англицизмы и поминать редактора из «БХВ» недобрым словом. Убедитесь сами по цитате из русского издания:
«Общей чертой всех программистов, создающих высококачественное ПО, является использование высококачественных методов, ставящих ударение на качестве ПО в самом начале, середине и конце проекта».
Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес
Паттерны объектно-ориентированного проектирования
Перевод с английского — А. Слинкин
Издательство «Питер», 2021 год, 448 с.
Оригинальное название: Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Ralph Johnson, John Vlissides, Richard Helm
Зачем читать: чтобы узнать про шаблоны программирования из первоисточника.
Сложность: 🤯 🤯 🤯 🤯 🤯
Четвёрка авторов, она же «Банда четырёх», среди программистов известна не меньше, чем «Битлз» во всём мире. И знамениты они как раз тем, что первыми детально описали 23 основных шаблона проектирования — показали, как организовывать взаимодействие классов и объектов, чтобы решать типичные задачи программирования.
Многие считают, что эта книга устарела, — первое издание вышло 25 лет назад, и за это время было написано много других книг о шаблонах. Однако принципы классификации, да и сами шаблоны, до сих пор актуальны.
Заметки на полях: прочитать книгу «Банды» — всё равно что осилить Шекспира в подлиннике: сложновато, но мозг тренирует отлично. К тому же всегда можно осовременить полученные знания книгой попроще и поновее :)
Эрик Фримен, Элизабет Робсон, Кэти Сьерра, Берт Бейтс
Head First. Паттерны проектирования
(обновлённое юбилейное издание)
Перевод с английского — Е. А. Матвеев
Издательство «Питер», 2021 год, 656 с.
Оригинальное название: Head First Design Patterns: A Brain-Friendly Guide by Eric Freeman & Elisabeth Robson / Bert Bates / Kathy Sierra
Зачем читать: чтобы перестать ненавидеть шаблоны и начать, наконец, их применять на практике :)
Сложность: 🤯 🤯
Тот самый случай, когда проще — не значит хуже. В этой книге из серии Head First знаменитого издательства O’Reilly, похоже, достигнут идеальный компромисс между сложностью объясняемых концепций и простотой подачи материала.
Создать программу для работы с данными метеостанции или написать код для расчёта стоимости напитка в кофейне Starbuzz — на таких игровых задачах авторы объясняют, как применять основные паттерны проектирования, и учат достраивать архитектуру грамотно — соблюдая все важные принципы. Например, открывать классы для расширения, но закрывать их для изменений.
Заметки на полях: прочитав эту книгу, вы не просто разберётесь с шаблонами — на какое-то время вы станете их ярым фанатом и будете пугать коллег, пытаясь пропихнуть шаблон даже для самой маленькой задачи :)
Мартин Фаулер
Шаблоны корпоративных приложений
(Signature Series)
Перевод с английского — Издательский дом «Вильямс»
Издательство «Вильямс», 2020 год, 544 с.
Оригинальное название: Patterns of Enterprise Application Architecture by Martin Fowler with contributions from David Rice et al. (Addison-Wesley Signature Series)
Зачем читать: чтобы узнать, как решают проблемы больших и очень больших приложений.
Сложность: 🤯 🤯 🤯 🤯
И снова про шаблоны, но уже про другие — про шаблоны высокого уровня. Корпоративные приложения автоматизируют сложные бизнес-процессы и нередко работают с довольно большими объёмами данных. При этом они, как правило, интегрируются и обмениваются данными с другими системами. Всё это порождает специфические трудности и вопросы.
Из каких слоёв может состоять приложение, как представлены данные в вебе, как управлять состоянием системы — вот несколько из десятков вопросов, на которые отвечает эта книга.
В первой части — беглый обзор типовых проблем, а во второй Фаулер рассказывает, как выбрать архитектурное решение. Автор предлагает более 40 подходов, иллюстрируя их примерами из жизни и фрагментами кода.
Заметки на полях: с первого издания книги прошло больше 10 лет, появились новые инструменты и технологии, но вот типичных проблем у корпоративных приложений не очень-то убавилось — поэтому книга всё ещё актуальна.
Алан Купер
Психбольница в руках пациентов
Алан Купер об интерфейсах
Перевод с английского — Е. Самородских
Издательство «Питер», 2018 год, 384 с.
Оригинальное название: The Inmates Are Running the Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity by Alan Cooper
Зачем читать: чтобы лучше понимать целевую аудиторию, что ей нужно, ну и не ругаться почём зря с коллегами-дизайнерами :)
Сложность: 🤯 🤯
Гибкая архитектура, изящные алгоритмы, паттерны и принципы именования — за всем этим программист порой забывает, что программное обеспечение должно быть не только качественным, но нужным, полезным и понятным для потребителей.
Хорошо, если в компании есть UX/UI-дизайнеры, которые анализируют потребности пользователей, сценарии их работы и проектируют грамотный интерфейс. Но иногда за эту часть работы отвечают те же программисты.
Если отнестись к проектированию слишком легкомысленно, программа может оказаться никому не нужной. Автор подтверждает это множеством историй о провале маленьких фирм и крупных корпораций. Купера стоит читать хотя бы затем, чтобы не оказаться виновником очередной такой неудачи.
Заметки на полях: книга не отнимет много времени, но зато сэкономит его всякий раз, когда нужно сделать работающую форму по краткому ТЗ — без помощи дизайнера и ещё вчера.
Дональд Кнут
Искусство программирования
У третьего (актуального) издания на английском языке семь томов. На русский переведено четыре из них: две части первого тома, второй и третий, а также том 4А.
Перевод с английского — И. В. Красиков, С. Г. Тригуб, Ю. Г. Гордиенко
Издательство «Вильямс», 2020 год, 720 + 160 + 832 + 960 с.
Оригинальное название: The Art of Computer Programming by Donald Knuth
Зачем читать: чтобы прокачаться в вычислительной математике и анализе алгоритмов.
Сложность: 🤯 🤯 🤯 🤯 🤯
Самый классический и самый фундаментальный труд в нашей подборке: многотомник от всемирно признанного гуру в области программирования, автора 19 монографий и более сотни статей.
Труд настолько фундаментален, что в первой книге больше математики, чем программирования: математическая индукция, степени и логарифмы, матрицы и определители — вот это всё. Попадаются задания вроде «докажите утверждение» или «найдите простую замену для сложной формулы» — Кнут считает, что, прежде чем пользоваться готовыми чужими решениями, нужно разобраться в азах.
Далее в этом и последующих томах автор учит анализировать и оценивать алгоритмы, даёт «золотые решения» классических задач (сортировка, поиск, обход деревьев) — и сравнивает, чем хорошо и плохо каждое. Всё это помогает выбирать оптимальные вычислительные стратегии в реальных проектах.
Заметки на полях: читать непросто, но нужно. Тем более что про классику алгоритмизации и вычислительную сложность до сих спрашивают на серьёзных собеседованиях. А первый том «Искусства» даже завершается цитатой Билла Гейтса:
«Если вы смогли дочитать это до конца, то определённо должны отправить мне своё резюме».
Попробуете? :)
Адитья Бхаргава
Грокаем алгоритмы
Иллюстрированное пособие для программистов и любопытствующих
Перевод с английского — Е. А. Матвеев
Издательство «Питер», 2021 год, 288 с.
Оригинальное название: Grokking Algorithms: An illustrated guide for programmers and other curious people by Aditya Y. Bhargava
Зачем читать: чтобы понять, что алгоритмы — это вовсе не скучно. А ещё — разобраться с оценкой их сложности, если вдруг после Кнута вы так и не поняли, как же её определить.
Сложность: 🤯 🤯
Эта книга тоже про алгоритмы, но читается как увлекательный рассказ. Простым языком автор пишет о графах, сортировке и поиске, жадных алгоритмах и динамическом программировании — причём со множеством примеров.
Это интересно! Глагол «грокнуть» (от англ. to grok) означает всецело разобраться, вникнуть в самую суть. А придумал его фантаст Роберт Хайнлайн для романа «Stranger in a strange land» («Чужак в чужой стране») в 1961 году.
Если вам интересно, как устроен рекомендательный алгоритм Netflix или как поисковый бот Google понимает, проиндексирована ли уже веб-страница, — прочитайте эту книгу.
Заметки на полях: осторожно! Читая книгу, можно всерьёз увлечься динамическим программированием, и тогда вам придётся искать работу там, где оно востребовано. Обычное прикладное ПО и многие сферы вроде финансовой останутся за бортом.
Томас Кормен, Чарльз Лейзерсон, Рональд Ривест, Клиффорд Штайн
Алгоритмы. Построение и анализ
Перевод с английского — И. В. Красиков
Издательство «Вильямс», 2020 год, 1328 с.
Оригинальное название: Introduction to Algorithms by Thomas Cormen / Charles Leiserson / Ronald Rivest / Clifford Stein.
Зачем читать: книг об алгоритмах не бывает слишком много :) Алгоритмов и самих немало, и разобраться в них с первого раза (ладно, со второго и третьего тоже) бывает непросто.
Так что лучше черпать из всех источников: одна книга лучше объяснит сортировку, другая — жадные алгоритмы, третья — уложит в вашей голове сложные структуры данных :)
Сложность: 🤯 🤯 🤯
Книга Кормена и сотоварищей почти такая же всеобъемлющая, как труд Кнута — её можно применять как справочник по основным структурам данных и алгоритмам. Только здесь меньше математики и больше практических примеров. И «Алгоритмы» универсальнее, потому что знать конкретный язык программирования не обязательно — примеры написаны на псевдокоде.
Заметки на полях:
С каждым новым изданием авторы обновляют и дополняют материал: например, в третьем появились главы об актуальных ныне многопоточных алгоритмах. Так что ищите самый свежий вариант.
Фредерик Брукс
Мифический человеко-месяц
Перевод с английского — А. В. Логунов
Издательство «Питер», 2020 год, 368 с.
Оригинальное название: The Mythical Man-Month: Essays on Software Engineering, Anniversary Edition (2nd Edition) by Frederick Brooks
Зачем читать: чтобы узнать о жизненном цикле программного проекта — понять, почему в IT так часто срываются сроки и как с этим бороться.
Сложность: 🤯 🤯 🤯
Эта книга будет полезна:
- программисту, которого часто просят оценить сроки (чтобы давал более точную оценку);
- и менеджеру проекта, который мучает программистов подобными вопросами (чтобы составлять адекватные планы).
Но речь в книге не только об оценках. Это руководство попадает в подборки мастридов уже больше 40 лет. Оно учит решать проблемы, которыми проектные команды болеют до сих пор: нереалистичные оценки, сложности из-за разрастания команды и так далее.
Заметки на полях: помните, что книга написана давно (динозавры на обложке явно неспроста). И если вы всерьёз думаете о карьере менеджера проекта — почитайте о гибких методологиях. Тем более автор поменял мнение по некоторым вопросам — что и признаёт в девятнадцатой главе последнего издания.
Мартин Фаулер
Рефакторинг
Улучшение проекта, существующего кода
Перевод с английского — И. В. Красиков
Издательство «Вильямс», 2019 год, 448с.
Оригинальное название: Refactoring. Improving the Design of Existing Code by Martin Fowler
Зачем читать: чтобы разобраться, когда применять рефакторинг, а главное — как это делать и не развалить весь проект.
Сложность: 🤯 🤯 🤯
Рефакторинг — это, по сути, улучшение проекта после того, как код написан. Однако рабочее кредо многих программистов (и их начальников) звучит так: «Работает — не трогай». Они не хотят тратить деньги и время на изменение программы, если результат не виден снаружи. Так и появляются проекты с многочисленными костылями и заплатками в критичных местах, копится технический долг. Со временем всё это становится нежизнеспособным.
Фаулер пишет о типичных проблемах в коде и о том, как их исправить: шаг за шагом, начиная с написания тестов и заканчивая последовательным улучшением исходников.
Заметки на полях: это одна из тех книг, которые формируют сознание разработчика. Вердикт: читать и по возможности перечитывать.
Майкл Физерс
Эффективная работа с унаследованным кодом
Перевод с английского — И. В. Берштейн
Издательство «Вильямс», 2016 год, 400 с.
Оригинальное название: Working Effectively with Legacy Code by Michael C. Feathers
Зачем читать: чтобы исправить чужие ошибки и не наделать своих.
Сложность: 🤯 🤯 🤯 🤯
Прилагательное в заголовке было бы лучше оставить без перевода — legacy-код. Потому что именно в таком виде понятие знакомо любому программисту-профи. Знакомо до боли! В прямом смысле! Вызывает в памяти простыни запутанного кода, мучительные попытки понять, что там происходит, и злобное бессилие, ведь быстро внести правку или добавить фичу при таком бардаке — задачка со звёздочкой. В общем — о бессонных ночах и дёргающемся глазе :)
Если бы авторы «легаси» вовремя проводили рефакторинг по заветам Мартина Фаулера (о его книге мы рассказывали чуть выше), наследникам не пришлось бы заниматься генеральной уборкой на «городской свалке». Но в реальности программистам часто приходиться копаться в чужом коде и менять его. Вот Майкл Физерс и написал книгу о том, как это делать эффективно и с меньшими страданиями.
Заметки на полях: практикам можно читать книгу сразу со второй главы. Она написана в виде ответов на типичные вопросы, возникающие при реорганизации кода:
- как поступить, если класс слишком большой и расширять его дальше уже страшно;
- как ввести новое свойство;
- что делать, когда зависимостей от сторонних библиотек стало убийственно много.
Кроме решений, которые авторы выработали в борьбе со сторонним кодом, в книге описывается, как лучше организовать рефакторинг и зачем вообще нужны все эти изменения.
Роберт Мартин
Идеальный программист
Как стать профессионалом разработки ПО
Перевод с английского — Е. А. Матвеев
Издательство «Питер», 2019 год, 224 с.
Оригинальное название: The Clean Coder: A Code of Conduct for Professional Programmers by Robert C. Martin
Зачем читать: чтобы узнать, какие навыки, помимо технических, нужны программисту и как их развивать.
Сложность: 🤯
Это вторая книга Роберта Мартина в нашей подборке. Многие мысли в ней выглядят банальными. Например, совет «если вы устали или не можете сосредоточиться — не пишите код» или глава о том, что за свои слова и решения нужно отвечать.
Некоторые советы кажутся спорными. Например, «в любой непонятной ситуации практикуйте парное программирование». Другие — вроде утверждения о том, что «каждый программист должен уметь работать с сетями Петри», — просто устарели.
Но эти мелочи не мешают книге служить толковым руководством для программиста-профессионала в ситуациях, когда ему нужно оценить трудоёмкость задачи или найти компромисс с менеджером — объяснить, что нельзя получить проект за день, если на реализацию его нужно две недели.
Заметки на полях: книга основана на историях из жизни дядюшки Боба — причём вполне реальных. Так что читатели узнают, как раньше писали и отлаживали программы: перфокарты, магнитные ленты — вот это вот всё.
Антон Спрол
Думай как программист
Креативный подход к созданию кода. C++ версия
Перевод с английского — Е. А. Матвеев
Издательство «Бомбора», 2018 год, 272 с.
Оригинальное название: Think Like a Programmer: An Introduction to Creative Problem Solving by V. Anton Spraul
Зачем читать: чтобы узнать о простых подходах к решению сложных задач.
Сложность: 🤯
Программировать — это не только выучить пару десятков ключевых слов и научиться их правильно сочетать. Разработчикам нужно уметь мыслить нестандартно, находить решения сложных творческих задач — и только потом воплощать их в коде.
В этой книге множество головоломок с решениями: есть классические вроде переправы волка, козы и капусты через реку, а есть целые группы задач — например, легко решаемых рекурсивно или на типичную обработку массивов.
Спрол учит думать как программист, использовать свои сильные и слабые стороны, находить аналогии и обязательно составлять план — прежде, чем начинать что-то делать.
Заметки на полях: автор много лет преподаёт программирование и, видимо, делает это хорошо. Книга настолько доступно написана, что подойдёт даже ребёнку, который недавно начал изучать программирование.
Гейл Лакман Макдауэлл
Карьера программиста
Перевод с английского — Е. А. Матвеев
Издательство «Питер», 2021 год, 688 с.
Оригинальное название: Cracking the Coding Interview by Gayle Laakmann McDowell
Зачем читать: чтобы подготовиться к собеседованию на позицию разработчика, а заодно систематизировать знания, увидеть и устранить возможные пробелы.
Сложность: 🤯 🤯
Это тот самый «+1» и, возможно, самая практичная книга в нашей подборке. В ней собраны 189 вопросов из тех, что задавали кандидатам на собеседованиях в Google, Microsoft, Amazon и других крупных IT-компаниях. Конечно, с ответами.
Разбираются и соискательские темы:
- Как составить идеальное резюме?
- Как отвечать на поведенческие вопросы: о проблемах, с которыми вы столкнулись, о ваших сильных и слабых сторонах?
- Как себя вести, если вы получили предложение о работе или отказ?
Гейл разбирает типичные ошибки и стратегии подготовки к собеседованию и даже рассказывает о закулисье некоторых компаний — например, сколько и каких этапов должен пройти кандидат.
Заметки на полях: эта книга не поможет разве что при полном отсутствии базовых знаний. В остальных случаях — причешет и принарядит для потенциального работодателя как ваше резюме, так и ваши ответы.
Минутка рефлексии
Всё это лучшие и, несомненно, полезные книги. Но если бы я вдруг вернулась в прошлое, чтобы посоветовать себе самые-самые — это были бы:
- «Чистый код» Мартина;
- «Рефакторинг» Фаулера;
- «Head First. Паттерны проектирования» Фримена и Робсон;
- «Грокаем алгоритмы» Бхагравы
- и «Карьера программиста» Макдауэлл (особенно если бы искала работу).
Эти книги пригодились мне больше всего. Они полны дельных советов, написаны доступным языком и помогают улучшать качество кода на любом языке программирования.
Если пока не читали ничего из нашей подборки — начните с этой пятёрки. И до встречи в комментариях к коду ;)