Отсутствие похвалы за способности
прекращает соревнование

Отказ от присвоения имущества
положит конец воровству

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

Инженер помогает актерам потерять все,
они знают, все, чего ожидают,

и препятствует тому, чтобы информированный
что-либо делал.

Практикуйте неделание,
все в порядке.

Мы говорили об использовании инструментов, которые следуют дао - теперь мы говорим о построении систем, которые следуют дао.

Лао-цзы выделил два основных элемента в создаваемой нами системе - «актеров», которые имеют пустой ум, и «информированные», которые конкретно * не * действующие лица, поскольку им запрещено делать что-либо .

Параллели с двумя вещами, о которых мы узнали в главе 1 - именованными вещами и безымянным дао - очевидны и преднамерены. Чтобы наша система следовала дао, она должна быть построена таким же образом.

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

Выводы здесь довольно просты и имеют большой смысл:

Функции (актеры)

Очистите их разум.

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

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

Удовлетворение их потребностей.

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

Ограничение их объема.

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

Укрепите решимость.

Функции должны быть усилены, вы должны без сомнения знать, что возвращенная информация верна.

Помогите ‹functions› потерять все, что они знают, все, чего ожидают.

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

Данные (информированные)

Лао-цзы говорит нам не позволять данным выполнять какие-либо действия. Совершенно осмысленно, дао действует, названные вещи являются проявлением проделанной работы.

Когда функция добавляется к данным, вы получаете функцию, которая нарушает не-разум. Вы не знаете, пуст ли горшок, и, что еще хуже, вы не знаете, что в банке - и, следовательно, вы не можете доверять тому, что горшок делает то, что вы ожидаете! Если вам когда-нибудь понадобится проверить (или установить) локальные переменные внутри функции перед ее выполнением, у вас проблема.

Многие языки сценариев смешивают данные и функции вместе. Эти системы быстро становятся общеизвестно сложными в обслуживании по мере их масштабирования - просто посмотрите на все, что написано на Perl или PHP. Если вам действительно нужно использовать язык сценариев, найдите время, чтобы разбить данные и функции. Лучшие (сложные) сценарии bash имеют отдельные файлы конфигурации.

Дизайн высшего уровня

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

Окончание конкурса.

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

Прекращение кражи.

Вы знаете тот синглтон, через который проходит каждая транзакция? В нем есть что-то важное. Сделайте это неважным.

Неделание

Опять неделание. В этом отрывке это означает несколько вещей.

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

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

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

… Или, если есть, по крайней мере, их легко идентифицировать и четко содержать :)

Не только системный дизайн

Все это находит применение в организационных структурах, управлении проектами и даже управлении на личном уровне. Наш инженер из Главы 2 становится эффективным, когда не владеет им и расчищает путь для дао. Вот как обстоят дела, есть пустые актеры, которые работают с дао, внутренне производя и возвращая названные проявления, которые мы все видим. Когда эти актеры пытаются сохранить эти проявления, все разваливается.

Это часть серии Tao Te Dev, прочтите об этом (и найдите другие статьи) здесь.