Skip to content

Latest commit

 

History

History
77 lines (47 loc) · 9.04 KB

01-preface.md

File metadata and controls

77 lines (47 loc) · 9.04 KB

Предисловие

Эта книжка выросла из моего доклада «Рефакторинг на максималках»1, который я готовил в январе 2022 года. Для этого доклада я собрал различные эвристики и техники рефакторинга, которыми хотел поделиться.

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

Отфильтрованный материал было жалко. В нём оставались детали и уточнения, когда что-то применимо, а когда не очень. Я решил, что будет полезнее не выбрасывать всё, что не вместилось, а изменить формат и выпустить в виде небольшого сборника. Так появилась эта книжка.

На кого это рассчитано

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

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

Я не учитываю специфику низкоуровневой разработки. Часть эвристик могут противоречить хорошим практикам или даже вредить низкоуровневому коду. Если вы пишете близко к железу, будьте аккуратны, читайте на свой страх и риск 😃

Чем этот текст не является

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

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

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

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

Если что-то из книги кажется вам полезным, обсудите это с коллегами и другими разработчиками. Убедитесь, что у вас с командой одинаковое мнение о пользе и издержках выбранной идеи. Не применяйте то, что вызывает в команде споры или разногласия.

Ограничения и применимость

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

Мой опыт накладывает отпечаток на то, как я вижу хороший код. По сути вся книжка — это такой снапшот моего восприятия разработки в 2022 году. Если вы читаете это в будущем (привет!), возможно, моё мнение поменялось, так бывает.

К слову 🐝
Я буду обновлять текст книги по мере изменения мнения, но не могу гарантировать, что буду это делать оперативно и без задержек.

При чтении книги помните о когнитивных искажениях автора. Мысленно сравнивайте техники со своим проектом и думайте об их применимости.

Что хорошо знать перед прочтением

В тексте я подразумеваю, что вы уже знакомы с самим понятием рефакторинга2 и что у вас есть пара лет опыта программирования. Я ожидаю, что вы уже сталкивались с проблемами декомпозиции задач, «протекающих» абстракций, разграничением ответственности между модулями и т.д.

Я рассчитываю, что вы слышали о какой-то части «программистских словечек» из вот этого списка:

  • Разделение ответственности
  • Зацепление и связность
  • Декларативность
  • Слои абстракции
  • Разделение на команды и запросы
  • Ссылочная прозрачность
  • Функциональный пайплайн
  • Функциональное ядро в императивной оболочке
  • Слои архитектуры, порты и адаптеры
  • Направление зависимостей
  • Неизменяемость и отсутствие состояния
  • 12-факторные приложения

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

Зачем нужна ещё одна книга

Книг о рефакторинге много, зачем нужна ещё одна?

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

Мне этот текст нужен в первую очередь самому:

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

Но я подумал, что возможно, это может оказаться полезным кому-то ещё. Так этот проект и появился.

Footnotes

  1. Доклад «Рефакторинг на максималках», https://bespoyasov.ru/talks/refactor-like-a-superhero/

  2. Рефакторинг, Википедия, https://ru.wikipedia.org/wiki/Рефакторинг