Декомпозиция как панацея
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)Napoleon
Date: 2005-11-15 03:17 pm (UTC)На русском у меня варианта нет (а по французски я не читаю), но на английском цитата выглядит вроде бы так:
Take time to deliberate, but when the time for action has arrived, stop thinking and go in.
Еще есть цитата приписываемая Мольтке (а после него - Эйзенхауэру, Гудериану и т.д.) - no battle plan ever survives contact with the enemy, из которой тоже конечно можно сделать вывод что "главное ввязаться в бой". Только неправильный это будет вывод ;) - речь и там и там идет о (третья цитата, на сей раз из советского мушкетерского мьюзикла - "если решать, тогда решай, а если решил - за дело" ;)
Re: Napoleon
Date: 2005-11-15 03:30 pm (UTC)А то что ты говоришь, скорее относится к принципу:
Боишься - не делай. Делаешь - не бойся.
Что тоже очень правильно.
Re: Napoleon
Date: 2005-11-15 03:33 pm (UTC)>> Боишься - не делай. Делаешь - не бойся.
Вторую часть я безусловно вижу, хотя бы частично, в приведенных цитатах. А первой части там нет ни в каком виде, даже в виде невидимого текста ;)
P.S. Вот так они - "приписываемые" цитаты - и рождаются ... :)))
Re: Napoleon
Date: 2005-11-15 03:36 pm (UTC)no subject
Date: 2005-11-16 01:06 pm (UTC)Re: Не могу пройти мимо, чтобы ...)))
Date: 2006-06-16 10:35 am (UTC)Re: Не могу пройти мимо, чтобы ...)))
Date: 2006-06-16 12:12 pm (UTC)Re: Napoleon
Date: 2009-03-14 10:14 am (UTC)