Программирование • 08 апреля 2024 • 5 мин чтения

Что почитать о коде: 15 книг для программистов

В IT постоянно что-то меняется, но на фундаментальном уровне за последние 20 лет ничего нового не появилось. Мы попросили наших экспертов посоветовать книги, актуальные для программистов и по сей день.

Автор: Роберт Мартин
Английское название: Clean Code. A Handbook of Agile Software Craftsmanship
Уровень: любой

«Чистый код» — это книга о принципах и практиках написания читабельного и поддерживаемого кода. Её автор, Роберт Мартин, — эксперт в области программирования и гибких методологий разработки.

Одна из главных мыслей книги: чистый код — это не просто код, который работает. Важно, чтобы его могли легко читать и понимать другие разработчики. Мартин приводит примеры хорошего кода и рассказывает, как сделать плохой — структурированным и читабельным. Например, использовать подходящие имена переменных и функций, избегать дублирования кода.

Другая важная мысль от Мартина: чистый код невозможно написать за один раз. Для этого нужно время и дисциплина. Автор предлагает попробовать разработку через тестирование. В этом случае системные требования превращают в тестовые сценарии, затем под них пишут функциональность и тестируют. По итогам тестов смотрят, что в коде можно улучшить. Таким образом после каждого цикла «сценарии–функциональность–тестирование–рефакторинг» код становится чище.

В дополнение к книге можно посмотреть лекцию от Роберта Мартина, или Дяди Боба, как его называют разработчики

Авторы: Эрих Гамма, Ричард Хелм, Роберт Джонсон, Джон Влиссидес
Английское название: Design Patterns. Elements of Reusable Object-Oriented Software
Уровень: опытный

Паттерны проектирования — это как рецепты или стратегии для написания кода под разные задачи. Например, чтобы создать только один экземпляр какого-то объекта в программе, можно использовать шаблон проектирования Singleton. Этот паттерн гарантирует, что в программе будет только один экземпляр этого объекта, что экономит ресурсы компьютера и помогает избежать конфликтов в программе.
В книге разбирают известные шаблоны проектирования и объясняют, когда и как их применять, на примерах реальных проектов. Издание 2020 года отличается от предыдущих. Во-первых, названием: прошлые версии перевели как «Приёмы объектно-ориентированного проектирования». Издатели обновили список терминов и используют более современные. Например, «рефакторинг» вместо устаревшей «реорганизации». Стиль изложения тоже изменили на более простой. Теперь книга меньше походит на документацию.

Авторы: Кэти Сьерра, Берт Бэйтс
Английское название: Head First Java
Уровень: новичок

Книга от издательства O'Relly поможет изучить основы Java: переменные, типы данных, условные операторы, циклы и другие ключевые концепции. Темы для более продвинутых программистов тоже найдутся. Например, многопоточность, работа с файлами и сетью.
В Head First Java нетрадиционный подход к обучению. Авторы используют иллюстрации, загадки и задания для проверки, чтобы читателю было интересно и просто учиться. Например, объясняют принципы наследования и полиморфизма с помощью весёлых историй и практических примеров.

Автор: Герберт Шилдт
Уровень: новичок

В книге рассказывается об основах языка — синтаксисе и переменных, и о более сложных темах — многопоточности и сетевых соединениях. В учебнике есть много примеров кода, которые помогают понять концепции Java. Это особенно ценно для тех, кто только начинает кодить на языке.

Авторы: Рауль-Габриэль Урма, Марио Фуско, Алан Майкрофт
Английское название: Modern Java in Action. Lambdas, Streams, Functional and Reactive Programming
Уровень: новичок

Книга поможет освоить новые функции Java 8. Одна из них — лямбда-выражения. Они полезны, когда нужно выполнить какую-то операцию на массиве данных или обработать поток данных. Создавать отдельную функцию для каждой операции не нужно — лямбда-выражения позволяют выполнить операцию прямо в месте ее использования. В итоге код становится более компактным и читаемым.
Новичкам лучше брать более старую редакцию книги, которая вышла под названием «Java 8 в действии: лямбды, потоки и функциональный стиль». В ней меньше материала, поэтому его легче усвоить.

Автор: Роберт Лафоре
Английское название: Data Structures and Algorithms in Java
Уровень: опытный

Автор предлагает изучить структуру данных и алгоритмов на примерах из Java. Он рассматривает основные структуры данных: списки, деревья и хеш-таблицы, а также классические алгоритмы сортировки и поиска. В книге есть советы по выбору подходящей структуры данных или алгоритма для конкретной задачи. В конце каждой главы — упражнения для самопроверки.

В последней главе рассказывают, как использовать знания из предыдущих разделов в одном проекте. Например, какую структуру данных использовать в разных ситуациях

Автор: Дональд Кнут
Английское название: The Art Of Computer Programming
Уровень: опытный

Искусство программирования — серия книг из четырёх томов американского математика Дональда Кнута:

● Том 1. Основные алгоритмы
● Том 2. Получисленные алгоритмы
● Том 3. Сортировка и поиск
● Том 4. Комбинаторные алгоритмы

Кнут рассматривает темы, начиная с основных структур данных и алгоритмов и заканчивая теорией сложности. В книге много математических формул, алгоритмических размышлений и задач. Такой формат может быть сложным для новичков. Сам автор тоже шутит на тему монументальности своего труда и просит тех, кто всё же выполнит большую часть заданий, написать ему.

Автор: Стив Макконелл
Английское название: Code Complete
Уровень: новичок и middle

Одна из ключевых идей книги — на отладку и чтение кода уходит больше всего времени, поэтому его качество определяет расходы на разработку. Большая часть посвящена эффективному коду: как писать, тестировать и проводить отладку, оптимизировать его. Например, Макконелл подробно разбирает, как использовать подходящие переменные и называть их, какие бывают методики разработки и почему не стоит торопиться оптимизировать код. Внушительный объём книги компенсируют юмор и простое изложение.

Автор: Роберт Мартин
Английское название: Clean Architecture. A Craftsman's Guide to Software Structure and Design)
Уровень: любой

Роберт Мартин объясняет, почему самое важное свойство систем — это их способность изменяться под новые требования и условия. Обеспечить эти изменения помогает подходящая архитектура.

Автор начинает с основ — объясняет, что такое зависимости, поток данных и связанность компонент, как писать чистый код. Затем — переходит к архитектуре, её роли и подходам к её проектированию.
Книга написана простым языком, поэтому будет полезна не только разработчикам и архитекторам, но и всем, кто работает с техническими командами. Например, менеджерам и системным аналитикам.

Авторы: Нил Форд, Марк Ричардс, Прамод Садаладж и Жамак Дехгани
Английское название: Software Architecture. The Hard Parts. Modern Trade-Off Analyses for Distributed Architectures
Уровень: middle

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

Автор: Адди Османи
Уровень: новичок и middle

Автор делится выводами, которые он сделал за 10 лет работы в Google, и даёт обзор на софтскилы, важные для разработчиков. Например, как принимать решения, использовать в разработке навыки из других областей, обучаться через опыт, общаться с другими специалистами. Может стать первой книгой о карьере разработчика в библиотеке.

Книга небольшая — можно прочитать за день

Автор: Эрик Эванс
Английское название: Domain-Driven Design: Tackling Complexity in the Heart of Software
Уровень: опытный

Автор рассказывает о проектировании систем в условиях, когда мало информации о том, какими они должны быть. В реальных проектах действительно не всегда понятно, с чего начать и как действовать. Эванс рассказывает, как бороться с неопределённостью. Он пишет, что тесное сотрудничество разработчиков друг с другом и с бизнесом поможет создавать эффективные и предсказуемые системы. Вот несколько моментов, которые он разбирает:

● Как разработчикам получать информацию от экспертов заказчика.
● Как разделить и изолировать логику предметной области от других частей приложения, чтобы над ним могли без конфликтов работать несколько команд.
● Как помочь новым разработчикам подключиться к проекту, даже если они не понимают всего контекста бизнеса клиента.

Книга подойдёт разработчикам с опытом в реальных проектах. Так будет проще примерить на себя ситуации, которые описывает автор.

Автор: Чед Фаулер
Английское название: Passionate Programmer
Уровень: новичок и опытный

Книга о том, как разработчику развиваться и строить карьеру. Фаулер даёт советы, как не пускать всё на самотек, а ставить и реализовывать карьерные цели более осмысленно.

Авторы: Дэвид Томас и Эндрю Хант
Английское название: The Pragmatic Programmer
Уровень: любой

Если заглянуть на последнюю страницу книги, то можно найти что-то вроде 50 заповедей-советов для программистов. Вокруг них авторы и строят повествование, а каждый совет иллюстрируют историей. Некоторые из советов похожи на общие принципы, другие — подсказывают, как можно изменить мышление и иначе взглянуть на свой код. В книге разбирают и технические вопросы, и темы, связанные с софтскилами. Например, авторы рекомендуют сначала понять, как учиться, а затем поглощать информацию. Так из обучения получится извлечь больше пользы.

Автор: Гейл Лакман Макдауэл
Английское название: Cracking the Coding Interview
Уровень: новичок и middle

Гейл несколько лет проводила интервью в Apple, Google и Microsoft. Потом основала компанию, которая помогает разработчикам готовиться к техническим собеседованиям в IT-гигантах. Книга не о том, как себя вести или какого цвета рубашку выбрать; автор подробно разбирает более 150 вопросов и задач, с которыми можно столкнуться на интервью, и показывает, как их можно решить. Поэтому сборник подойдёт не только тем, кто готовится к техническому собеседованию, но и всем, кому нужна дополнительная практика.

Статью подготовили:
Руслан Посевкин
Яндекс Практикум
Frontend Engineer
Пётр Кушнир
Яндекс Практикум
Автор курса «Java‑разработчик»
Артём Стрельцов
Яндекс Практикум
Разработчик
Яндекс Практикум
Редактор
Полина Овчинникова
Яндекс Практикум
Иллюстратор

Дайджест блога: ежемесячная подборка лучших статей от редакции

Поделиться
Идеи новогодних подарков от нейросети + промокоды на курсы Практикума и акции от партнеров
Fri Aug 23 2024 13:11:22 GMT+0300 (Moscow Standard Time)