какие книги прочитать программисту
Топ-10 книг для разработчика
Совершенствоваться в сфере разработки — это не только писать хороший код, но и читать о том, как его писать.
Привет, хабр! Продолжаю делиться полезными подборками. Совсем недавно я опубликовал 2 поста с перечнем Github репозиториев: Часть1 и Часть2. На этот раз предлагаю вашему вниманию подборку полезных книг для разработчиков. Кому интересно — добро пожаловать под кат.
Помимо всех благ современного мира — подкастов, видео, блогов и т. д., чтение хорошей книги — это то, что все еще пользуется спросом. Я прочитал много хороших книг, посвященных технологиям и разработке ПО, и до сих пор читаю, чтобы быть в курсе новых шаблонов и лучших практик.
Найти отличные книги для разработки программного обеспечения — непростая задача, так как экосистема меняется настолько быстро, что многие вещи устаревают в короткие сроки. Особенно это касается тех книг, в которых описана определенная версия языка программирования.
Тем не менее, существуют “вечные” книги: они посвящены мета-темам, шаблонам проектирования или общим представлениям.
Следующая подборка состоит из самых популярных и самых читаемых книг. Книги, которые все еще актуальны сегодня и которые опытные разработчики часто рекомендуют начинающим специалистам. Я знаю, что время драгоценно, особенно для разработчиков. Но если вам удастся прочитать некоторые из этих книг, это определенно поможет вам и вашей карьере. Обратите внимание, что книги из списка не расположены по степени значимости — они все одинаково рекомендованы к прочтению.
1. Cracking the Coding Interview или Карьера программиста
Настоятельно рекомендую эту книгу всем тем, кто хочет основательно подготовиться к интервью. Автор, Г. Лакман Макдауэлл, опытная инженер-программист, была и интервьюером, и кандидатом. Она научит вас находить скрытые детали в вопросах, разбивать проблемы на небольшие куски, а также поможет улучшить навык обучения.
Кроме того, автор предоставляет нам 189 реальных вопросов на интервью и их реальных решений, чтобы вы могли хорошо подготовиться к следующему интервью.
2. Code Complete или Совершенный код
Эта книга Стива Макконнелл — одна из тех книг, которую каждый программист, скорее всего, листал хотя бы раз в жизни.
Это всесторонний анализ проектирования программного обеспечения, хорошо написанный и востребованный в отрасли. В книге освещаются такие темы как дизайн, написание кода, отладка и тестирование.
Эта книга, вероятно, станет самым окупаемым вложением для разработчиков с профессиональным опытом от одного до трех лет. Но я также рекомендую издание и новичкам, так как оно помогает на старте разработки ПО.
Основной вывод: разработчики должны управлять сложностью и писать код, который легко поддерживать и читать как самому себе, так и другим.
3. Clean Code или Чистый код
Книга Роберта Мартина (или дяди Боба) “Чистый код” — одна из самых популярных книг по программированию. Она была написана для обучения инженеров-программистов принципам написания чистого программного кода. Книга содержит множество примеров, показывающих, как выполнять рефакторинг кода с целью сделать его более читабельным и поддерживаемым. Но учитывайте то, что издание ориентировано именно на Java. Хотя некоторые из шаблонов и техник распространяются на общее программирование и на другие языки, основной аудиторией книги являются Java-разработчики.
Следует также отметить, что книга вышла в 2008 году. Некоторая информация, например, форматирование кода, сегодня менее актуальна из-за доступных инструментов и IDE сред. Но все же, это отличная книга.
4. Refactoring или Улучшение проекта существующего кода
Второе издание книги Мартина Фаулера объясняет, что такое рефакторинг на самом деле, впрочем, как и первое издание, выпущенное 20 лет назад. После прочтения книги вы найдете ответы на следующие вопросы:
5. Head First Design Patterns или Паттерны проектирования
Эта книга, у которой сразу 4 автора, учит вас шаблонам проектирования и лучшим практикам, используемым другими разработчиками для создания функционального, повторно используемого, и гибкого ПО. В издании много наглядных представлений, которые помогут вам легче освоить новые концепции.
Если вы хотите узнать о таких вещах, как фабрики, синглтоны, внедрение зависимостей и т.д., эта книга — отличный выбор. Примеры написаны на Java, поэтому было бы неплохо знать этот, либо любой другой объектно-ориентированный язык.
6. Patterns of Enterprise Application Architecture или Шаблоны корпоративных приложений
Еще одна отличная книга Мартина Фаулера, посвященная разработке корпоративных приложений. После краткого руководства Мартин предлагает вам более 40 шаблонов в качестве решения распространенных проблем при разработке корпоративных приложений. В книге вы найдете большое количество UML визуализаций и примеров кода, написанных на Java или C#.
Прочитав книгу, вы сможете разделять корпоративные приложения на уровни, знать основные подходы к организации бизнес-логики, использовать MVC шаблоны для организации веб-приложений и управлять параллельной обработкой нескольких транзакций.
Однако, книга довольно старая, поэтому современные концепции, например REST, cloud или JSON, не упоминаются. Это хороший материал для изучения, но все же будьте к нему критичны.
7. Working Effectively with Legacy Code или Эффективная работа с унаследованным кодом
В книге автор предлагает стратегии для работы с большими, непокрытыми тестами базами legacy-кода. Вы можете подумать: “На дворе 2020 год. Legacy-код больше не проблема, ведь у нас есть чистый, поддерживаемый код и микросервисы.” Позвольте мне заверить вас, что это ошибочное представление. Legacy-код по-прежнему является одной из самых сложных проблем для многих компаний.
Прочитав эту книгу, вы сможете понять общие механизмы изменения программного обеспечения, например: добавление функций, исправление багов, оптимизация производительности и улучшение проектирования. Кроме того, вы узнаете, как подготовить унаследованный код к тестированию и определить, где его необходимо изменить.
В книге приведены примеры, написанные на Java, C ++, C и C #, а также в ней есть советы по работе с legacy-кодом, который не относится к объектно-ориентированному.
8. The Clean Coder или Идеальный программист
Еще одна книга дядюшки Боба, которая учит методам, практикам и инструментам настоящего мастерства в области программного обеспечения. Она содержит практические советы по оценке проектов, написанию кода, рефакторингу и тестированию.
Прочитав эту книгу, вы научитесь справляться с конфликтами, плотным графиком и нерациональностью менеджеров; научитесь бороться с постоянным давлением и избегать выгорания; узнаете, как управлять своим временем, как писать качественный код и способствовать созданию среды, в которой разработчики и команды могут успешно развиваться.
Эта книга довольно популярна, но я думаю, что не все в ней — чистое золото. Она содержит много историй из жизни и гипотетических разговоров, которые в большинстве случаев приводят к выводу, что разработчик в конечном счете несет ответственность за то, что он делает. Иногда такие отрывки заходят слишком далеко: в одном из таких отрывков разработчику, чей код породил ошибку, предлагается компенсировать компании финансовые потери.
Поэтому я советую прочесть эту книгу внимательно и с долей критики.
9. Introduction to Algorithms или Алгоритмы: построение и анализ
Это издание — не что иное, как обязательное руководство к алгоритмам различного типа. Книга очень широкого профиля и подойдет как начинающим, так и профессионалам. Материал изложен четко и раскрывает саму суть вопроса. Но в то же время, книга не совсем простая.
Она охватывает такие темы, как структуры данных, быстрые алгоритмы, полиномиальные алгоритмы для труднорешаемых задач, теория графов, вычислительная геометрия и многое другое. Хотя книга и содержит несколько примеров псевдокода, на мой взгляд, она очень “теоретическая”.
10. The Pragmatic Programmer или Программист-прагматик
Это одна из самых серьезных книг, которые я когда-либо читал. Издание полно как технических, так и профессиональных практических советов, которые помогли мне во многих проектах, а также помогли мне стать лучше как разработчику.
Книга очень актуальна даже в 2020 году, особенно последнее издание. Здесь автор анализирует, что значит быть современным разработчиком, исследуются различные темы: от личной ответственности и карьерного роста до архитектурных приемов.
Прочитав книгу, вы поймете, что такое непрерывное обучение и насколько оно важно; изучите, как писать гибкий, адаптируемый и динамический код, как решать проблемы конкурентности, как стоять на страже безопасности, как тестировать “безжалостно и эффективно”, и многое другое.
Если бы я должен был выбрать только одну книгу, которую вам посоветовать, я бы выбрал именно эту!
Заключение
Это был список одних из самых популярных книг для разработчиков. Лучшая из списка, на мой взгляд, — “Программист-прагматик” Э.Ханта и Д.Томаса. Книги Роберта С. Мартина востребованы и нравятся многим разработчикам, но я бы посоветовал быть критичным при их чтении, так как я не согласен с дядей Бобом во многих вопросах.
Наверняка, многие из этих книг вы уже читали или хотя бы держали их в руках, или хотя бы видели на просторах интернета. Как выразился автор статьи, это “вечные” книги, которые посвящены основам. Если у вас есть чем дополнить список — делитесь в комментах, думаю, всем будет полезно.
📕 25 лучших книг для программистов
В интернете можно найти бесчисленное множество списков «лучших книг о программировании». Однако у каждого своё мнение, и, как говорится, о вкусах не спорят. Саму же процедуру поиска можно попытаться объективизровать, например, использовать критерий цитируемости. Такую попытку предпринял французский разработчик Пьер де Вульф. Ниже мы кратко расскажем о его методологии. Если вам интересен только список книг, переходите к следующему разделу.
Методология составления списка
Для начала Пьер сделал несколько вариаций Google-запроса «Best Programming Books». Пропарсив топ поисковой выдачи и исключив дубликаты списков, Пьер получив 150 подходящих страниц. Далее из них были исключены ветки Quora и Reddit, а также списки, сфокусированные конкретной технологии или платформе, одном конкретном годе или бесплатных онлайн-книгах.
В итоге получилось 110 HTML-файлов, для которых были определены CSS-селекторы с названиями книг. При этом удалось исключить ещё около 40 нерелевантных страниц.
Используя Python, библиотеку BeautifulSoup и найденные CSS-селекторы, Пьер извлёк текст из необходимых DOM-элементов. Получился большой список книг, требующий дополнительной обработки.
Часть списка с книгами после парсинга страниц
Чтобы найти самые цитируемые книги, требовалось нормализовать результаты. Например, названия книг имели разные стили оформления:
Для обработки различных вариантов оформления была написана следующая функция:
После её применения потребовалось немного ручной очистки. Список стал выглядеть так:
Для этого списка было уже легко вычислить наиболее часто рекомендуемые книги. Все данные, которые использовались для обработки, можно найти в GitHub-репозитории.
Для удобства наших читателей мы постарались найти переводные эквиваленты указанных Пьером книг. Стоит оговориться, что не всегда у хороших книг бывают достойные переводы. Поэтому также мы указываем оригинальные названия изданий.
25 самых часто рекомендуемых книг по программированию
25. Хамбл, Фарли. Непрерывное развёртывание ПО (8.8% рекомендаций)
Оригинальное название: Continuous Delivery by Jez Humble & David Farley.
В книге Джеза Хамбла и Дэвида Фарли приведены принципы и практические методы для сборки, автоматизации, тестирования и развёртывания высоконагруженных приложений. Авторы рассказывают о непрерывном интегрировании, разбиении проекта на компоненты и контроле версий. Книга ориентирована на программистов, имеющих опыт в корпоративной разработке. Рассматриваются следующие темы:
24. Уэйн, Седжвик. Алгоритмы на Java (8.8% рекомендаций)
Оригинальное название: Algorithms by Robert Sedgewick & Kevin Wayne.
Книга Седжвика и Уэйна «Алгоритмы на Java» является классическим справочным руководством, содержащим необходимый объём знаний для программиста в области алгоритмов, накопленных за последние несколько десятилетий. Как следует из названия, сами алгоритмы реализованы на Java.
23. Кори Альтхофф. Сам себе программист (8.8% рекомендаций)
Оригинальное название: The Self-Taught Programmer by Cory Althoff.
Кори Альтхофф – профессиональный self-made разработчик, на собственном опыте прошедший путь от новичка до инженера программного обеспечения в компании eBay. Автор поможет пройти сложный путь от создания первой программы на Python до первого собеседования.
Книга состоит из нескольких разделов:
22. Steve McConnell. Rapid Development (8.8% рекомендаций)
Единственное издание, для которого мы не нашли переводного эквивалента на русском языке. В этой книге Стив Макконнелл рассказывает о проблемах, связанных с общими стратегиями, конкретными лучшими практиками и полезными советами, которые помогают сократить и контролировать графики разработки и поддерживать стремительное развитие проектов.
21. Питер Сейбел. Кодеры за работой. Размышления о ремесле программиста (10.2% рекомендаций)
Оригинальное название: Coders at Work by Peter Seibel.
Программисты – люди не очень публичные, многие работают поодиночке или в небольших группах. Самая важная и интересная часть их работы никому не видна, потому что происходит у них в голове.
Питер Сейбел взял интервью у 15профессионалов: Кена Томпсона, создателя UNIX, Берни Козелла, участника первой реализации сети ARPANET, Дональда Кнута, Гая Стила, Джейми Завински, Саймона Пейтон-Джонса, Питера Норвига, Дугласа Крокфорда, Джошуа Блоха, Брендана Айка, Джо Армстронга, Брэда Фицпатрика, создателя Живого Журнала, и других.
Все они «подсели» на программирование ещё в школе. Тогда, на заре зарождения отрасли, лишь в немногих учебных заведениях читались курсы по компьютерным наукам. Поэтому будущим гуру приходилось покорять профессиональные вершины самостоятельно, но всех их отличает творческое горение и полная самоотдача любимому делу. Вы узнаете, что они думают о будущем программирования и как сами научились программировать, как, по их мнению, нужно проектировать ПО, как выбор языка программирования влияет на продуктивность и можно ли облегчить выявление труднонаходимых ошибок.
20. Эрик Эванс. Предметно-ориентированное проектирование. Структуризация сложных программных систем (10.2% рекомендаций)
Оригинальное название: 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.
Приведённые в книге вопросы с интервью являются реальными вопросами с собеседований в различных компаниях. В книге вы найдёте
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 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 году.