О блоге
Чат
Канал
Toss a coin ♪
 
#attention management
25 Jul 2020

Императивы и декларативы

Введение
Simplicity is hard work. But, there's a huge payoff. — Rich Hickey
Эта статья вдохновлена IT. В ней стили написания кода приведены как метафора для постановки задач.
Существует два вида программирования: императивный и декларативный. В сущности, первый указывает на то, как выполнить задачу, а второй — что ожидается в конечном результате.
С первого взгляда может показаться, что разница незначительная. Я объясню, что использование того или иного подхода играет важную роль.
Зачем
Ты поймёшь почему тяжело выполнять задачи, которые сформулированы как приказы
Ты сможешь ставить задачи так, чтобы их хотелось выполнять
Ты сможешь объяснять как ставить задачи и цели так, чтобы прокрастинация и избегания происходили реже
Почему
Я часто слышу от окружающих или замечаю за собой фразы: «мне надо сделать то-то», «надо было так сделать», «если я не сделаю, то будет плохо». Хочу объяснить и себе, и окружающим почему лучше когда дела это увлекательные игры, а не болючие долги перед надзирателям.
В попытках помочь коллегам и близким я сталкиваюсь с непониманием и даже с противоположными убеждениями.
Вот утрированный пример с планированием задач на спринт:
— Давайте опишем задачу через конечный результат и пока избежим подробностей реализации? Что мы хотим получить? — Но подробности важны и нужно начать с глагола как призыва к действию. Так будет понятно, что нужно сделать.
Кто прав? Совершенно верной точки зрения тут нет, однако далее я объясню, что такое декларативный подход и почему стоит использовать его по-умолчанию.
Примеры
Императивно
Р: Мама, возьми муку, замеси тесто, заготовь начинку, раскатай тесто в круг, выложи начинку слоями: сначала сыр... М: Так, а как заготовить начинку? Р: Нарежь овощи и грибы, отвари куриное мясо, нарежь... ...скрытый от ребёнка процесс... М: Сложно, на тебе кашу
Markdown
Декларативно
Р: Мама, хочу пиццу! ...скрытый от ребёнка процесс... М: На тебе пиццу ...спустя время... Р: Мама, хочу пиццу, но побольше колбасы и сыра! ...скрытый от ребёнка процесс... М: На тебе пиццу
Markdown
В чём разница
Императи́в (лат. imperativus — повелительный, от лат. impero — повелеваю) — форма наклонения, выражающая волеизъявления (приказ, просьбу или совет). Например: «иди туда», «пойдём скорее», «сделать статью».
Императивное описание происходит «снизу вверх», то есть о результате думают в конце. На низком уровне абстракции находятся точные действия. Такой подход в чистом виде сложен, а результат непредсказуем.
Декларатив (лат. dēclārō — чтобы прояснить, от dē- + clārus — “чисто, ясно, чётко”) — форма наклонения, близкая к изъявительному и представляющая процесс как действительный факт. Например: «ты говоришь», «мы идём», «он сделал», «это статья про задачи»
Декларативное подход, напротив, призван идти «сверху вниз». Он начинается с абстракции, а движется к деталям. Как правило на верхнем уровне абстракции лежат представления о конечном результате.
Что проще
Императивность сложнее потому что обязывает удерживать в голове больше деталей на начальном этапе, а это только мешает, ведь мозг имеет ограниченное внимание. Подробности перекрывают друг друга и забываются. Это ограничение мозга называют «Кошельком Миллера».
По сути, разница между описанными подходами лежит во фразе:
«Что» проще чем «Как»
Императивные глаголы
Я считаю, что ставя задачи, стоит избегать императивных глаголов (сделать, исправить, изучить). Да, это контринтуитивное убеждение. Его смысл в том, чтобы ограничить привязку к императивному стилю и вместо этого задуматься о результате.
Конечно, можно в одной формулировке использовать и императивный глагол, и декларативное описание. Но во-первых, это избыточно, а во-вторых повышается шанс, что после вводного глагола пойдут детали реализации и конечный результат будет описан поверхностно.
Ещё можно всё попутать. Императивы легко использовать «сверху вниз», то есть абстрактно. Тогда задача ещё усложняется, а риски увеличиваются, ведь приказ что делать непонятен, а результат слабо описан.
— Скажите, пожалуйста, куда мне отсюда идти? — А куда ты хочешь попасть? — ответил Кот. — Мне все равно — сказала Алиса. — Тогда все равно, куда и идти, — заметил Кот.
В чём польза
Однако, не стоит считать, что императивы — чистое зло, а декларативы — всегда добро. Дело в том, что императивы формируют профессионализм, который достигается за годы обучения и практики.
Императивность связана с процедурной памятью, которая подобна мышечной. Чтобы её выработать стоит повторять действия в различных вариациях и сверять результаты.
Таким образом, императивы становятся неосознанным багажом тех, кто много практиковался в своём деле. И им не нужны инструкции извне, они сами понимают, а точнее чувствуют, что делать если описан конечный результат.
Выше я сказал, что императивный подход непредсказуем, но если цепочка действий уже множество раз проверена, то результат известен заранее. Этого и достигают мастера своего дела.
Сюхари
С другой стороны, новички не имеют почти ничего в области своей профессиональной интуиции и они нуждаются в подробных указаниях. Без императивов они ощущают ступор. И даже если императивы приводят к худшему результату, то для новичка что-то лучше чем ничего. А на основе ошибок происходит дальнешая каллибровка интуции.
Описанная разница укладывается в концепцию из боевых искусств Сюхари. Есть три стадии мастерства:
*Сю* (от яп. 守 — «соблюдать»)
*Ха* (от яп. 破 — «прорываться»)
*Ри* (от яп. 離 — «отделяться»).
Первая ступень заключается в строгом повторении упражнений без отступлений в сторону. Последняя — в свободном использовании практик с нарушением правил ради результата.
Ещё пример и объяснения
«Нормально построить дом» против «Дом...». В первом случае возникает закономерный вопрос: «А как?», во втором: «А какой? А зачем? А когда?».
Тяжело ≠ Сложно
Декларативную задачу поставить тяжелее так как это требует мыслей о результате. Мозг может испытать напряжениие от попытки «заглянуть в будущее», это буквально перегрузит его деталями и возможными сценариями.
Реальность, это сложнейшая система и её будущее состояние зависит от многих факторов. Чем больше факторов, тем неприятнее: кошелёк Миллера переполняется, ресурсы тратятся, фокус теряется и усилия могут уйти впустую. А мозг ненавидит напряжения без награды.
Поэтому хорошие декларативные задачи получаются из подзадач, которые получены после разбиения. Пример: задачу «дом для мамы» тяжелее продумать в деталях, чем задачу «архитектура дома для мамы». В первой задаче сотни или даже тысячи промежуточных шагов, а во второй на порядок меньше. Это как сравнивать просчёт шахматной партии на 10 шагов и на 3 шага вперёд.
Легко ≠ Просто
Архитектура, это лишь этап на пути к дому. В ней относительно меньше сложности, однако на этом не стоит останавливаться. В идеале стоит достичь максимальной редукции задачи, отдавая внимание подготовительным действиям. Не «вышел утром 10 числа на пробежку», а «подготовил форму и кроссовки с утра, да поместил их на выходе».
Задачи со свободой выбора решения — более понятные и гибкие. Людям тяжело доверять практикам, которые они не понимают. К примеру, легко испытать избегание в ответ на фразу «просто сделай факторизацию, премортемы и разбор внутреннего конфликта». Как доверять этим практикам если неизвестно как они работают и чем помогут?
Детальная и структурная сложности
С декларативной постановкой задач появляется потребность в высокой детализации ожиданий. В профессиональной среде это выражается в аналитике, спецификациях, макетах, чертежах и прочих вспомогательных инструментах. Оно того стоит, ведь положительно влияет на результат, потому что позволяет снизить детальную сложность.
С помощью инструментов и абстракций детальная сложность превращается в структурную (сложное становится тяжёлым). Например, вместо 100 сотрудников в компании мы имеем 4 департамента по 5 команд по 5 человек. Такая иерархия сужает область внимания на каждый её элемент.
В контексте задач мне помогают: приоритизация, разбиение на этапы, области ответственности и так далее. Все эти инструменты могут отталкивать и грузить при знакомстве с ними. Однако, их постепенное изучение упрощает процесс и разгружает мозг.
Эффект велосипедного сарая
Закон тривиальности является следствием сложных и тяжёлых задач. Согласно ему, во время коллективных обсуждений в разы больше внимания уделяется лёгким задачам.
К примеру, у комитета стоят задачи «построить атомную электростанцию» и «построить сарай для велосипедов». Вероятнее всего наиболее жаркий и продолжительный спор о реализации вызовет вторая задача.
Большую часть времени участники потратят на обсуждение мелких и простых для понимания вопросов, вроде материалов для строительства сарая, оставляя без внимания конструкцию самой электростанции, — что является гораздо более важным, но одновременно и гораздо более сложным и комплексным вопросом.
Выводы
Задачи и их постановка фундаментально важная проблема. Ведь каждый раз при формулировке планируемого дела происходит описание реальности через модель.
Это похоже на научный метод. Стоит пользоваться критерием опровержимости и отсеивать лишние сущности. Иначе процветает мракобесие и магическое мышление, что может быть и хорошо для интересности процесса, но вредно для достижения результата.
Где применять императивы
Они полезны для новичков в профессиях с интеллектуальной нагрузкой. И они эффективны в профессиях требующих физических нагрузок и с повторяющимися операциями, другой вопрос: полезны ли они? Второй тип профессий постепенно заменят роботы, а дизайном и программированием займутся люди.
Где применять декларативы
По умолчанию, везде. При описании, уточнении и разбиении задач я придерживаюсь следующей модели:
Необязательный пункт. Тут находятся области объединяющие под собой проекты. Это не всегда и не для всех важный шаг. Они позволяют точнее определять соотношения и направления за счёт накопления проектов в них.
На этом уровне у меня есть проекты как цепочки желаемых результатов. Например, эта статья. То есть проекту не обязательно быть масштабным и долгосрочным.
Далее, в каждом проекте описаны результаты (Objectives). Они содержат в себе обоснования, последствия и записи об изучении. Результаты я описываю как реальную сущность вообще без глаголов. О реализации пока не идёт речи.
Каждый ожидаемый результат содержит в себе шаги достижения, возможно примерные и с акцентом на первые действия. Спустя время каждый шаг может уточняться, разбиваться или вовсе помечаются тупиковыми. Они описываются как совершённые действия: «сходил на базар», «купил молоко».
Я не использую такие слова как «надо», «сделай», «должен» так как они абстрактны и как минимум бесполезны. Ещё, лично у меня, да и у многих людей с детства к ним «аллергия».

Ты можешь подписаться

powered by 
boosted by