Код
#статьи

15++ классических книг для программиста

Только мастриды, и только проверенные временем — для новичков и профессионалов.

Иллюстрация: Абрикос Абрикосовый для Skillbox Media

Мы выбрали книги, которые не привязаны к конкретным языкам программирования, технологиям или инструментам. Они рассказывают об алгоритмах и структурах данных, шаблонах проектирования и рефакторинге, учат мыслить как программист, готовят к собеседованию и помогают строить успешную карьеру.

Сложность книжек мы оценили смайликами от одного 🤯 (понятно и новичку)
до 🤯 🤯 🤯 🤯 🤯 (без программистского опыта или спецподготовки будет непросто).

Наш шорт-лист:


Дэвид Томас, Эндрю Хант

Программист-прагматик

Ваш путь к мастерству

 (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. Паттерны проектирования» Фримена и Робсон;
  • «Грокаем алгоритмы» Бхагравы
  • и «Карьера программиста» Макдауэлл (особенно если бы искала работу).

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

Если пока не читали ничего из нашей подборки — начните с этой пятёрки. И до встречи в комментариях к коду ;)




Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Научитесь: Профессия Python-разработчик Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована