Декомпозиция как панацея
Nov. 15th, 2005 01:25 pmВесь мой жизненный опыт, а особенно опыт участия в написании софта привёл меня к интересному выводу:
Простые задачи решаются легко и просто.
Сложные задачи полностью не решаются вообще.
Поэтому единственно верный способ решать [сложные] задачи - это последовательно разбивать сложные задачи на более простые, пока не будет достигнут атомарный уровень простых под-задач. (Ср. с мозговым штурмом - 1,2.)
Простой является задача, которую нет смысла упрощать. Её можно поручить выполнить любому сотруднику - блондинке, индусу или роботу. Простота не гарантирует, что она будет выполнена правильно, а только лишь что мы точно знаем критерий этой правильности выполнения.
Сам процесс декомпозиции по-моему довольно прост. Для каждой задачи фиксируем/выясняем исходную точку и конечную точку (то есть критерий законченности задачи). После этого продумываем шаги достижения цели, получая список под-задач. При необходимости - процесс повторяется.
Кстати - это вообще универсальное правило. Нельзя проектировать самолёт или начинать ремонт, не представляя себе из чего этот процесс состоит. Как минимум это приведёт к неверной оценке сложности задачи. А обычно - приводит к явлению 'мы делаем то, не знаем что', ну или 'не знаем как'.
Есть, правда, и альтернативный этому подход "Сначала - ввяжемся в бой, а там посмотрим!" © Наполеон. Но он подходит только тогда, когда жизненно важна гибкость процесса и при этом либо есть избыточные ресурсы либо не важна эффективность. Пример:
Мне некогда заранее смотреть по карте как добраться от Москвы до паинтбольного лагеря. Так что я на месте сориентируюсь по солнцу или спрошу у местных. И вполне может быть, что я могу опоздать к сбору на несколько часов, оставить где-нибудь по дороге в болоте свои ботинки или получить пиздюлей от тех же местных.
Ключевой момент - как раз понимать, что теряется и что приобретается в процессе декомпозиции и планирования. Потому что первое обычно очевидно, а второе - нет. И получается как в шутке "Никогда нет времени, чтобы сделать правильно, но всегда есть время, чтобы переделать заново". Так что дедуктивное планирование - forever.
Не могу пройти мимо, чтобы ...)))
Date: 2005-11-15 11:16 am (UTC)А вот интересно существуют ли задачи, которые невозможно разбить на подчасти, поскольку информация "держится" именно на связях между частями? Пример такой "задачи" - человек, он не есть сумма отдельных клеток и кстати, потому не особенно лечится медициной, а эффективней всего "лечится" пиз..лями)). (На самом деле вопрос глубже, в каждой клетке "сидит" информация о всем человеке и даже об его далеких предках..)
Вообщем есть о чем порассуждать))
Re: Не могу пройти мимо, чтобы ...)))
Date: 2005-11-15 12:57 pm (UTC)Но! Когда есть определённый список задач, то во-первых, зафиксирована цель к которой надо стремиться и пытаться выгребать, если что-то идёт не так. А во-вторых, понять что в делах что-то пошло не так можно будет на самой ранней стадии - когда обнаружится, что атомарная задача не решилась. И значит нужно срочно переходить на "Plan B".
А "План Б" тоже хорошо бы иметь. Это только дамам с тонкой душевной организацией можно сесть на поляне и расплакаться, а нам надо добиваться решения конкретной задачи несмотря ни на что! Но надо заметить что разрабатывать лишние планы - это уже роскошь, которая не всегда приемлема.
Re: Не могу пройти мимо, чтобы ...)))
Date: 2005-11-15 01:39 pm (UTC)Re: Не могу пройти мимо, чтобы ...)))
Date: 2006-06-16 10:35 am (UTC)Re: Не могу пройти мимо, чтобы ...)))
Date: 2006-06-16 12:12 pm (UTC)