Image

Imagerecoder 😟pessimistic

Listens: Staind - Falling

Categories:

Декомпозиция как панацея

Весь мой жизненный опыт, а особенно опыт участия в написании софта привёл меня к интересному выводу:



Простые задачи решаются легко и просто.

Сложные задачи полностью не решаются вообще.



Поэтому единственно верный способ решать [сложные] задачи - это последовательно разбивать сложные задачи на более простые, пока не будет достигнут атомарный уровень простых под-задач. (Ср. с мозговым штурмом - 1,2.)





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



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



Кстати - это вообще универсальное правило. Нельзя проектировать самолёт или начинать ремонт, не представляя себе из чего этот процесс состоит. Как минимум это приведёт к неверной оценке сложности задачи. А обычно - приводит к явлению 'мы делаем то, не знаем что', ну или 'не знаем как'.



Есть, правда, и альтернативный этому подход "Сначала - ввяжемся в бой, а там посмотрим!" © Наполеон. Но он подходит только тогда, когда жизненно важна гибкость процесса и при этом либо есть избыточные ресурсы либо не важна эффективность. Пример:



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




Ключевой момент - как раз понимать, что теряется и что приобретается в процессе декомпозиции и планирования. Потому что первое обычно очевидно, а второе - нет. И получается как в шутке "Никогда нет времени, чтобы сделать правильно, но всегда есть время, чтобы переделать заново". Так что дедуктивное планирование - forever.

promo Imagerecoder august 1, 2018 12:09 36
Buy for 100 tokens
Не так давно Фейсбук научил меня ещё одной классификации людей, в дополнение к стратегам и тактикам, интерналистам и экстерналистам, и разным морально-политическим приверженцам. Впервые эта классификация описана ещё двадцать лет назад Картером и Сэнджером в книге The Programmer's Stone…