Как съесть слона: искусство дробить огромную задачу на крошечные
«Сделать приложение» — задача, от которой опускаются руки. «Нарисовать кнопку входа» — задача на пятнадцать минут. Разбираемся, как декомпозиция превращает невозможное в просто длинный список.
«Как съесть слона? По кусочку за раз» — старая шутка, которая на самом деле описывает главный навык любого инженера.
Большая задача не сложная — она просто большая. Сложной её делает то, что мозг пытается удержать её целиком.
Откройте задачу «написать свой мессенджер» — и почувствуете лёгкий паралич. Откройте задачу «сделать так, чтобы при нажатии Enter текст из поля выводился в консоль» — и руки сами тянутся к клавиатуре. Разница не в сложности. Разница в размере. Большая задача перегружает рабочую память, а перегруженный мозг защищается прокрастинацией.
Почему мозг боится больших задач
У человека крайне ограниченная рабочая память — то самое «оперативное» пространство, где мы держим то, о чём думаем прямо сейчас. В неё помещается всего несколько объектов. Когда задача огромна и не разбита, мозг пытается охватить её целиком, не справляется и выдаёт ощущение тревоги: «это слишком, я не знаю, с чего начать». Это не лень. Это переполнение буфера.
Декомпозиция — это операция разгрузки. Вы выписываете шаги наружу, на бумагу или в трекер, и освобождаете голову. Теперь в рабочей памяти держится только один маленький шаг, а не весь слон.
Правило: дроби, пока не станет скучно
Есть простой критерий, до какого размера дробить. Шаг достаточно мелкий, если, глядя на него, вы точно знаете, что именно сделать в первую минуту, и эта мысль не вызывает тревоги. Если шаг всё ещё пугает — он слишком большой, дробите дальше.
Хороший признак правильной декомпозиции: финальные шаги выглядят почти оскорбительно простыми. «Создать файл». «Подключить библиотеку». «Вывести строку на экран». Кажется, что это несерьёзно — но именно из таких несерьёзных шагов и собирается серьёзный проект.
Пример: «сделать список дел»
Звучит как проект на неделю. Разложим:
- Показать на странице заголовок и пустое поле ввода.
- Сделать так, чтобы введённый текст появлялся списком ниже.
- Добавить рядом с каждым пунктом кнопку «удалить».
- Сохранять список, чтобы он не пропадал при перезагрузке.
- Добавить отметку «выполнено».
Каждый пункт — это уже не страшный «проект», а понятная задачка на полчаса. А пункт 1 можно при желании раздробить ещё мельче. Слон внезапно оказался стопкой котлет.
Декомпозиция сверху вниз и снизу вверх
Есть два направления движения, и опытные инженеры используют оба.
Сверху вниз — начинаете с цели и режете её на крупные части, потом каждую часть на части помельче, как ветви дерева. Хорошо, когда задача более-менее ясна.
Снизу вверх — начинаете с того маленького кусочка, который точно понятен, делаете его, и от него прорастает понимание следующего шага. Хорошо, когда вы вообще не представляете, с чего начать: просто сделайте хоть что-то работающее, и дальше станет яснее.
Бонус: маленькие шаги дают дофамин
У дробления есть приятный побочный эффект. Каждый завершённый микрошаг — это маленькая победа, и мозг выдаёт за неё порцию удовольствия. Большая неразбитая задача не даёт побед месяцами, и мотивация гаснет. Декомпозированная задача кормит вас десятками маленьких «получилось!» в день — и тащит вперёд почти сама.
Связь с настоящей разработкой
Это не просто учебный приём. Так устроена вся индустрия: гигантские продукты пилятся на эпики, эпики на задачи, задачи на подзадачи, а коммиты в Git стараются делать маленькими и атомарными именно потому, что маленькое легче проверить, откатить и понять. Навык дробления — это, пожалуй, самый переносимый навык программиста: он одинаково работает и для кода, и для переезда, и для написания диплома.
Так что когда в следующий раз задача покажется неподъёмной, не пытайтесь поднять её целиком. Спросите себя: «А какой самый маленький первый шаг я могу сделать прямо сейчас?» — и сделайте только его.