Декомпозиция как панацея
Nov. 15th, 2005 01:25 pmВесь мой жизненный опыт, а особенно опыт участия в написании софта привёл меня к интересному выводу:
Простые задачи решаются легко и просто.
Сложные задачи полностью не решаются вообще.
Поэтому единственно верный способ решать [сложные] задачи - это последовательно разбивать сложные задачи на более простые, пока не будет достигнут атомарный уровень простых под-задач. (Ср. с мозговым штурмом - 1,2.)
Простой является задача, которую нет смысла упрощать. Её можно поручить выполнить любому сотруднику - блондинке, индусу или роботу. Простота не гарантирует, что она будет выполнена правильно, а только лишь что мы точно знаем критерий этой правильности выполнения.
Сам процесс декомпозиции по-моему довольно прост. Для каждой задачи фиксируем/выясняем исходную точку и конечную точку (то есть критерий законченности задачи). После этого продумываем шаги достижения цели, получая список под-задач. При необходимости - процесс повторяется.
Кстати - это вообще универсальное правило. Нельзя проектировать самолёт или начинать ремонт, не представляя себе из чего этот процесс состоит. Как минимум это приведёт к неверной оценке сложности задачи. А обычно - приводит к явлению 'мы делаем то, не знаем что', ну или 'не знаем как'.
Есть, правда, и альтернативный этому подход "Сначала - ввяжемся в бой, а там посмотрим!" © Наполеон. Но он подходит только тогда, когда жизненно важна гибкость процесса и при этом либо есть избыточные ресурсы либо не важна эффективность. Пример:
Мне некогда заранее смотреть по карте как добраться от Москвы до паинтбольного лагеря. Так что я на месте сориентируюсь по солнцу или спрошу у местных. И вполне может быть, что я могу опоздать к сбору на несколько часов, оставить где-нибудь по дороге в болоте свои ботинки или получить пиздюлей от тех же местных.
Ключевой момент - как раз понимать, что теряется и что приобретается в процессе декомпозиции и планирования. Потому что первое обычно очевидно, а второе - нет. И получается как в шутке "Никогда нет времени, чтобы сделать правильно, но всегда есть время, чтобы переделать заново". Так что дедуктивное планирование - forever.