Всегда оставляйте за собой место в лучшем виде, чем вы его нашли.
4 Ұнайды
Длительная фаза анализа считается признаком плохой обслуживаемости кода и указывает на необходимость его доработки
4 Ұнайды
Выбирайте композицию вместо наследования
1 Ұнайды
Сначала сделайте изменение простым, а затем уже внесите это простое изменение.
Кент Бек
1 Ұнайды
Позже я узнал, что этот подход повторяет японский принцип сюхари из боевых искусств, он сейчас становится все более популярным. Состоит он из трех частей: «сю» означает полную имитацию, когда повторение производится без вопросов и собственного понимания; «ха» уже подразумевает некоторую вариацию, то есть выполнение изученного в несколько обновленной форме; «ри» же означает оригинальность, то есть полностью свободное применение, отличное от усвоенного автоматически.
Я не могу предоставить универсальные правила для создания хорошего имени, но могу назвать несколько свойств, которыми оно должно обладать:
• оно должно быть правдивым и описывать реальное назначение функции;
• оно должно быть полноценным, то есть охватывать все, что делает функция;
• оно должно быть понятно для работающих в этой области людей, поэтому следует использовать соответствующую терминологию. В качестве дополнительного преимущества это повышает эффективность коммуникации и упрощает обсуждение кода с коллегами или заказчиками.
Но помните, что можно легко перемудрить, стараясь быть умнее, что обычно себя не оправдывает.
Дополнительный проект
Чтобы вы могли лучше понять, как использовать приводимые в книге правила и шаблоны рефакторинга, я придумал дополнительный проект. Этот проект более продвинутый, и готовое решение к нему не прилагается. Всех заинтересованных он будет ждать на GitHub: https://github.com/thedrlambda/bomb-guy. Удачи!
1. Просила каждого повторить эту фразу дословно. На этом этапе чистой имитации мы были вынуждены повторить ее один раз.
2. Задавала каждому вопрос. Вопрос не всегда был понятен, но по интонации было очевидно, что это именно вопрос. Поскольку других вариантов у нас не было, приходилось еще раз повторять фразу. Такое повторение внушало уверенность и предоставляло нам первый пример контекста применения изучаемой фразы. На этом этапе зарождалось понимание.
3. Просила использовать фразу в диалоге. Умение синтезировать нечто новое — это сама цель преподавания, и для этого требуется не только понимание, но и уверенность.
Позже я узнал, что этот подход повторяет японский принцип сюхари из боевых искусств, он сейчас становится все более популярным. Состоит он из трех частей: «сю» означает полную имитацию, когда повторение производится без вопросов и собственного понимания; «ха» уже подразумевает некоторую вариацию, то есть выполнение изученного в несколько обновленной форме; «ри» же означает оригинальность, то есть полностью свободное применение, отличное от усвоенного автоматически.
Содержание части I книги полностью построено по принципу сюхари. Я рекомендую сначала следовать правилам без их понимания. Затем, когда вы осознаете их ценность, сможете придумывать вариации. В завершение же, когда освоите их в совершенстве, сможете переходить к пониманию запахов кода. Что касается шаблонов рефакторинга, я буду показывать, как применять каждый из них в коде, и нужно будет за мной повторять (это имитация). Затем те же шаблоны я буду демонстрировать в иных контекстах (стадия вариации), а в завершение предложу рассмотреть другое применение шаблона, призывая вас использовать его самостоятельно (стадия синтеза).
При этом вы сможете воспользоваться книгой для оценки самого процесса и тегами Git для оценки кода. Если же вы не будете отслеживать изменения кода примера и вникать в них, то все описанные действия будут казаться излишними повторениями одного и того же. Поэтому настоятельно советую в процессе чтения части I все же параллельно прорабатывать приводимые в ней примеры на компьютере.
О коде
Эта книга содержит множество примеров исходного кода, который приводится как в нумерованных листингах, так и в самом тексте. В обоих случаях шрифт кода имеет моноширинныйформат, подобный этому, чтобы отличаться от прочего текста.
Во многих случаях оригинальный исходный код был переформатирован. Например, были добавлены разрывы строк и переработаны отступы, чтобы грамотно вписать все в доступное пространство книги. Помимо этого, во многих случаях, когда код описывался в самом тексте, соответствующие комментарии из него удалялись. В то же время множество листингов снабжено комментариями, подчеркивающими важные моменты.
Код примеров из этой книги доступен для скачивания на сайте издательства Manning (https://www.manning.com/books/five-lines-of-code), а также в моем репозитории на GitHub (https://github.com/thedrlambda/five-lines).
Нет ничего нового под Солнцем.
Книга Екклесиаста
Я не утверждаю, что вложил в книгу много нового, но считаю, что скомпоновал ее содержание не только интересно, но и эффективно. Многие правила были взяты из книги Роберта К. Мартина «Чистый код»1, но при этом изменены для простоты понимания и применения. Многие шаблоны рефакторинга позаимствованы из книги Мартина Фаулера «Рефакторинг»2, но адаптированы под использование компилятора вместо упора на сильные наборы тестов.
Аудитория и план изложения
Книга состоит из двух частей, сильно различающихся по стилю. Часть I закладывает прочный фундамент для выполнения рефакторинга и адресована каждому отдельно взятому разработчику. Не стремясь охватить вообще все стороны рефакторинга, я решил сделать упор на простоту изложения. Эта часть предназначена для тех, кому еще предстоит сформировать устойчивую основу для проведения рефакторинга, например для студентов, для начинающих программистов, в том числе самоучек. Если же, взглянув на исходный код в книге, вы решите, что улучшить его несложно, тогда часть I не для вас.
В части II фокус смещается на контекст применения рефакторинга и адресуется команде разработчиков. Здесь я выбрал наиболее ценные, на мой взгляд, уроки разработки программного обеспечения (ПО) в реальном, а не учебном мире. Некоторые темы состоят в основном из теории, например «Сотрудничайте с компилятором» и «Соблюдайте структуру в коде». Другие же в первую очередь практические, например «Страсть к удалению кода» и «Пусть плохой код выглядит плохо». Таким образом, часть II уже более универсальна, и даже опытные разработчики найдут здесь чему поучиться.
Поскольку во всех главах части I используется один общий пример, они тесно связаны между собой, и предполагается, что читать их будут в предложенной очередности. А вот часть II состоит уже из самостоятельных глав, связанных между собой только некоторыми ссылками из одной на другую. Если у вас нет времени на прочтение всей книги, можете просто выбрать наиболее интересные темы в части II и ознакомиться только с ними.
О преподавании
Я много размышлял о преподавании. Передача знаний и навыков несет в себе много сложностей. Учитель должен стимулировать у студентов интерес, уверенность и отдачу. Но по факту мозг учащегося склонен к сохранению энергии, поэтому постоянно стремится отвлечься от процесса обучения.
Чтобы побороть эту склонность ума, сначала нужно пробудить мотивацию. Для этого я обычно привожу простое с виду упражнение. Когда студенты понимают, что не могут его выполнить, их охватывает естественное любопытство. В этом и состоит цель кода из сквозного примера части I. «Оптимизировать базу кода» — это на первый взгляд так просто. Но при ближайшем рассмотрении код оказывается уже настолько качественным, что многие просто не знают, что еще можно в нем улучшить.
На втором этапе нужно подтолкнуть студентов к уверенному экспериментированию и применению новых знаний. Всю важность этого я осознал во время факультативов по французскому языку. Когда преподавательница хотела научить нас новой фразе, она всегда делала это в три этапа.
