Обзор книги "Refactoring: Ruby Edition"
Писать красивый код не просто. Особенно если ты пока что не умеешь писать код вообще и понятия не имеешь почему твой код хуже другого, который выполняет точно такую же работу. С такими ситуациями сталкивается каждый новичок: порой первые код-ревью, которые я провожу своим ученикам сбивают их с толку. Ну правда, что плохого в том, что код бизнес логики останется в контроллере, а код поиска по случайным записям будет повторяться в пяти разных местах? В таких случаях есть два способа справиться с недоумением, растерянностью и конфузом: первый это попросить объяснить в чём проблема более опытного коллегу/ментора/людей из интернета. Второй: прочитать книжку Refactoring: Ruby Edition.
Оригинальное издание этой книги, использующее Java в качестве языка для примеров, вышло аж больше десяти лет назад и популяризиловало практику постоянного рефакторинга кода. Новая версия это не более чем переписанный на Ruby оригинал, с некоторыми специфичными для самого лучшего языка программирования приёмами.
Структура книги
В первых главах читателя знакомят с тем что такое рефакторинг вообще и зачем он нужен. На убедительном примере показаны преимущества от рефакторинга большого уродливого куска кода.
После написанного человеческим языком вступления авторы дают список code smells, к каждому из которых предлагают способы избавления от них. Code smells это когда ты смотришь на код и понимаешь, что он так себе и надо его улучшить.
После списка проблематичных участков кода начинается самая большая глава книги - техники рефакторинга. Каждая занимает от двух до пяти страниц, большая часть которых использована для примеров кода. Изложение построено в любимой мне манере (схожим образом я структурировал Самообразование веб-разработчика):
- Что за техника
- Зачем она нужна
- Пример пошагового использования с кодом "до" и "после"
Таким образом мы получаем настольную книгу, за которой нужно тянуться всякий раз, когда возникает ощущение, что код мог быть лучше (или когда ментор намекает, что он мог бы быть лучше): открываешь список code smells, смотришь какие можно применить техники, ищешь их в книге и применяешь.
Не нужно бояться объема книги, читается она очень быстро за счёт того, что на 40% состоит из листингов.
Теперь о недостатках!
Во-первых, эта книга явно не рассчитана на опытных разработчиков. Мне приходилось пролистывать целые главы просто потому, что всё описанное уже было давным давно известно. Иными словами, если вы уже перестали писать отстойный код, то ценность книги резко падает.
Во-вторых, примеры кода порой вызывали ощущение некоторой нелепости. Об этом говорят и сами авторы: "примеры у нас по сути синтетические и в реальной жизни всё гораздо сложнее". Не то чтобы это было очень важно, но вот при чтении Confident Ruby такого ощущения не возникало. Я в своих статьях обычно стараюсь использовать переработанные примеры реального кода, а не полную импровизацию. Но, повторюсь, не суть важно и с задачей продемонстрировать технику рефакторинга даже синтетические примеры справляются.
В любом случае: must read для новичков и пригодится для опытных разработчиков, столкнувшихся с тонной legacy кода.