Чистый код. Создание, анализ, рефакторинг

Чистый код. Создание, анализ, рефакторинг
Роберт Мартин
Жанры: Программирование
Год издания: 2010
Год прочтения: 2020
Моя оценка: Хорошая
Количество прочтений: 2
Количество страниц: 466
Конспект (страниц): 0
Первоначальный язык издания: Английский
Переводы на другие языки: Русский, Испанский, Португальский, Китайский

Общая информация

Книга написана популяризатором программирования и опытным разработчиком Робертом Мартином. Это книга о том, как лучше и правильнее писать более чистый и аккуратный код. Рассмотрим бегло книгу.

Краткий обзор глав

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

Далее идет рассказ о том, как лучше именовать переменные: о том, что они должны передавать намерения программиста, и при чтении переменной уже должно быть понятно, что там хранится и какого типа данные. Говорится, что следует избегать абстрактных имён типа List, Data и др. Также бегло затрагивается именование методов и классов — всё же это больше тематика других разделов, и более подробно автор разберёт это ниже. Советов немало, в целом большинство из них вполне логичные и здравые. С одной стороны — банальная и очевидная глава, с другой — возможно, весьма полезная, скажем, для новичков.

Далее идут функции. Здесь уже начинаются наиболее холиварные темы — о том, сколько строк должна быть функция, сколько параметров иметь. Конечно, ответ очевиден: чем меньше и проще функция, тем лучше. Однако на практике так бывает далеко не всегда. Также упоминается вполне логичная и здравая мысль о том, что функция должна выполнять только одно определённое действие. То есть, например, одна функция не должна одновременно и считать среднее арифметическое, и печатать результат на экран. Аля принципы SOLID. Кроме того, в этой главе автор затрагивает и даёт советы, как можно работать с условиями (if, else, switch), циклами, конструкцией try/catch. Конечно же, не обошёл стороной и тематику именования функций и принцип DRY (по возможности не повторять код).

После функций идёт не менее холиварная тема — комментарии: как и где их нужно расставлять, а где, наоборот, они будут лишними. Юридические, журнальные и некоторые другие типы комментариев разобраны автором, показано, когда они действительно уместны.

Если вы думаете, что тема комментариев спорная, то что вы скажете насчёт форматирования? Именно эта небольшая глава идёт после комментариев. И если кажется, что речь пойдёт только о табах и пробелах — то нет. Глава гораздо более информативная. Автор даже прилагает различные графики.

"Работа с объектами и структурами данных" — именно так называется следующая глава. Абстракция, асимметрия данных, закон Деметры, DTO, Active Record и некоторые другие темы разобраны в этой небольшой главе. Разобрано скорее поверхностно, и упор идёт на то, что программист уже знаком с этими понятиями.

Далее идёт глава по разбору ошибок. Многие примеры в книге на Java, так что вы не встретите обработку ошибок в стиле Golang (через if), основное внимание уделяется try/catch. Если пара глав назад шла речь о форматировании, то теперь — о том, когда, где и как использовать обработку исключений.

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

Далее идут "Тесты". Пару слов о TDD, далее — непосредственно о том, как должен выглядеть тест. Глава небольшая и не слишком информативная. Если кому интересна тема тестирования — могу подсказать одну замечательную книгу и, скорее всего, скоро сделаю на неё разбор.

Затем — "Классы". Опять-таки, если рассматривать классы как часть улучшения кода (а именно так делает дядюшка Боб), то материал, отведённый на этот раздел, может оказаться вполне достаточным. Но это при условии, что разработчики уже знакомы с ООП. В противном случае, если хотите изучить объектно-ориентированное программирование глубже — раздел окажется малоинформативным или даже сложным.

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

Далее — глава про многопоточность. Скорее теория, нежели практика: кода не так много, в основном покрыт теоретический материал, и то — поверхностно.

Последующие главы — о рефакторинге кода, на примерах от Роберта Мартина. И вот здесь, в отличие от некоторых предыдущих глав, кода через чур много. Сначала автор рассматривает рефакторинг утилиты командной строки, а далее — ещё пару библиотек / классов для Java от опытных и известных разработчиков. Даже у этих специалистов Мартин находит, к чему придраться — и, как по мне, это скорее придирки, нежели рефакторинг. Ведь даже тот код работал, и его покрытие тестами было высоким. Основной посыл этой главы: мало просто написать рабочий код — его должно быть легко поддерживать, иначе со временем это станет крайне трудной задачей.

Последняя глава — своего рода саммари, состоящее из советов, которые включают всё, о чём шла речь ранее: от пометок в комментариях до работы с функциями и тестами.

Заключение

Плюсы книги

  1. Структура книги хорошо проработана. Она состоит из 17 глав, где каждая следующая — небольшое усложнение предыдущей. Иными словами, изучая любой язык программирования, люди начинают с базовых вещей (переменные, комментарии), а по мере усложнения переходят к функциям, классам, асинхронности и т.д. Примерно этот же принцип выдержан и в книге, что удобно и привычно.
  2. Большинство советов действительно полезные и логичные. Кто-то откроет для себя много нового, кто-то — почти ничего. Здесь всё зависит от индивидуального опыта.
  3. В книге встречаются иллюстрации. Их немного, но даже те, что есть, выдержаны в едином стиле, что уже приятно.

Минусы книги

  1. Не стоит фанатично следовать всем советам. Было как минимум несколько, а может, и немало “советов”, с которыми я не совсем согласен или не согласен вовсе.
  2. Книга сама по себе не маленькая — чуть более 450 страниц. А читать большие книги многим непросто.
  3. Примеры рефакторинга кода (удаление и добавление строк) можно было бы оформить лучше. Сейчас изменения обозначены только жирным (добавленное) и зачёркнутым (удалённое), возможно, оформление в стиле git-клиентов многим было бы привычнее.
  4. В качестве примеров используется Java. Ничего против не имею и не испытывал затруднений в понимании, но для тех, кто не знаком с языком, это может быть минусом.
  5. Мне попалась книга 2010 года издания. Возможно, есть более свежие переиздания. Книга, которую читал я, немного устарела. Её стоило бы не только актуализировать, но и дополнить.

Общий вывод

Эта книга не зря считается бестселлером в области разработки кода. Её стоит хотя бы быстро пролистать, а лучше — внимательно изучить. Если нет времени или желания читать всю книгу, рекомендую ознакомиться с краткими выводами в конце каждой главы и с финальной главой, где даны общие рекомендации. По итогам чтения полезно будет обсудить подходы и советы с коллегами — ведь слепое следование рекомендациям Роберта Мартина может быть не только неуместным, но и ошибочным.

Вверх