?

Log in

No account? Create an account
November 2016   01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
cartoon

Инструмент планирования - notepad

Posted on 2011.01.05 at 00:57
Tags:
"- Многих интересует вопрос - какой САПР вы применяли для создания великолепного Cray-1? - спросили Крэя.
- Помню, я использовал карандаш третьего номера и разлинованную квадратной сеткой бумагу.
- Да, но ведь этого мало... - растерялся собеседник.
- Да, чуть не забыл, это важно. Очень помогает писать на оборотной стороне бумаги, чтобы линии разметки не доминировали в чертеже."
?

Какой же САПР подойдет для разработки планов? Под "планом" я имею в виду не невнятную херню для "профессионального" создания впечатления о факте проведенной менеджерской работы, нет.

Речь, конечно же, о _настоящем_ плане. О том, который делается не для галки, не для того, чтобы впечатлить руководство или инвесторов. Который делается не "потому, что так правильно", а для работы - чтобы самому понимать, что, когда, и зачем будет делаться. О плане, который не уплывет при малейшем изменении обстоятельств. Том, который реально _выполнятся_.


Если вы слышали о "декларативном планировании" - это, разумеется, о нем, читайте дальше. Если нет - речь простом способе разработать WBS и сетевой график, не свернув себе шею, и используя мозг. Если вы, конечно, знаете, что и зачем хотите получить в конце.

Если нет - полюбому читайте дальше, все понятно станет. Пример я выбрал доступный.

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

Итак, к делу. Что, собственно, сподвигло меня на написание поста. Мне удалось придумать более-менее годную текстовую [вроде вики] разметку для описания декларативного плана. Я пытался сделать это давно, уже больше года. И наконец, у меня получилось.

Чем это хорошо, и зачем пытаться?
1) Оно нормально кладется в контроль версий, со всеми вытекающими. Например, удобно смотреть диффы. И разницу с "бэйзлайном" - на халаву.
2) Можно применять обкатанные программерские навыки работы с кодом. Например, разбить план на группу файлов-модулей, и работать над ним командой.
3) Его можно разобрать самописной тулзой, и что-нибудь с ним сделать. Например, преобразовать в другой формат, или же - "зашедулить" его, превратив в конкретные даты.

Но все не так просто. Чтобы было удобно, сырая необработанная разметка должна выглядеть максимально читабельно, без какой-либо дополнительной обработки. То есть, не напрягать. Пример вики-разметки, разработанной по данному принципу - markdown.

Итак, к делу. Наш план состоит из событий-целей. Как выглядит цель? Как чеклист. Набор пунктов, которые вы должны проверить, чтобы понять, что цель - достигнута.

|Закуплены продукты к новогоднему столу
|[] Масло 
|[] Икра красная, не имитация
|[] Белый хлеб
|[] Водка


Вот так. Наша цель - событие, что все перечисленное куплено. Пункт чеклиста - это утверждение, допускающее простую проверку, чтобы можно было поставить галку, что он выполнен. Так их и формулируйте. А вот все событие-цель происходит одномоментно - раз - и _все_ куплено, когда везде стоят галки. Так?

Но, допустим, водка у нас продается в другом магазине, и он у нас ближе к дому. Сначала мы зайдем в него. Мы так решили. Что это означает? Что у нас в плане появилась временная связь. Мы отразим это так:

|Закуплены продукты к новогоднему столу
|[] Масло 
|[] Икра красная, не имитация
|[] Белый хлеб
|<-
   |[] Водка


Или так:

|Закуплено спиртное
|[] Водка
=>
|Закуплены прочие продукты
|[] Масло 
|[] Икра красная, не имитация
|[] Белый хлеб


Или так:

|Закуплено спиртное
|[] Водка
|->
   |Закуплены прочие продукты
   |[] Масло 
   |[] Икра красная, не имитация
   |[] Белый хлеб


Все варианты равнозначны. Таков, однако, наш план. Он не учитывает, меж тем, что хлеб лучше покупать в отдельном магазине, который ближе к дому, чем основной.

|Закуплены продукты к новогоднему столу
|[] Масло 
|[] Икра красная, не имитация
|<-
   |[] Белый хлеб
|<-
   |[] Водка


Вот. В какой же из магазинов мы пойдем сначала - в хлебный, или в винный? А план этого не показывает. Он говорит только лишь, что мы за маслом с икрой пойдем в последнюю очередь. И если этот магазин будет закрыт, или деньги внезапно кончатся - то не судьба. Но главное мы купили, не так-ли? Суровый у нас новый год, правда? :)

С другой стороны, данный план оставляет нам свободу сходить в супермаркет, и купить все разом. Просто все события произойдут одновременно, и все. Там же не написано, куда нам идти, там описан только результат похода, так? А уж как его достичь - наше дело, не так ли?

Но план, очевидно, не полон. Что мы будем делать с этими продуктами? Зачем они нам? Надо бы отразить.

И кроме того, вы отметите очевидную неполноту этого плана. "Лажа какая-то", скажете вы, "ну кто же так встречает новый год?!"

Зрите в корень, друзья. К водке, очевидно, пропущены сало, и черный хлеб. :) Гы-гы :)

Но главное в другом. Главное в том, что глядя на такой план, вы понимаете, что план - говно. Это потому, что я расписал вам его в терминах критериев достижения целей. И именно поэтому, а не почему-либо другому, вы можете его критиковать. А исполнитель - выполнить.

А вот если бы я сделал это в терминах действий, как Gantt-chart какой-нибудь - хрена лысого вы бы это поняли. И кроме того, я бы не оставил исполнителю свободы - идти в супермаркет, или в три гребаных магазина.

Преимущества декларативного планирования показаны понятно? Структура разметки - понятна? Это была база, в следующих постах объясню более продвинутую нотацию.

И эта - с новым годом, друзья!

Comments:


Serguey Zefirov
thesz at 2011-01-04 22:09 (UTC) (Link)
Разборщик пробовал писать?
Gaperton
gaperton at 2011-01-04 22:15 (UTC) (Link)
Уже начал. Обычная двухмерная разметка. Геморрой, однако. :)
Serguey Zefirov
thesz at 2011-01-04 22:51 (UTC) (Link)
Если JSON расширить объявлением массивов прям сразу и именами объектов в одинарных кавычках, то получается вот такое:

'Закуплены продукты к новогоднему столу' [
'Масло'
,'Икра красная, не имитация'
,'Белый хлеб'
,'Водка'
]
'Закуплены продукты к новогоднему столу' [
'Масло' : true
,'Икра красная, не имитация' : false
,['Белый хлеб' : false]
,['Водка' : false]
]

'Закуплены продукты к новогоднему столу' [
'Масло' : true
,'Икра красная, не имитация' : false
,'Белый хлеб' {}
,'Водка' {}
]

'Белый хлеб' []
'Водка' []

Есть неоднозначности, правда. И выглядит по-программистски.
rustler2000 at 2011-01-05 05:54 (UTC) (Link)
docuwiki очень легко расширить и исходные файлы в .txt

мы для него подобную разметку делали правда немного не для составления планов
Gaperton
gaperton at 2011-01-04 22:29 (UTC) (Link)
Как ты ты понимаешь, у целей будут атрибуты, скажем, [due] апрель 2011, и у стрелок - ограничения, вроде 2w-3w/thesz :)
Gaperton
gaperton at 2011-01-04 22:33 (UTC) (Link)
Где первое - диапазон оценок, а второе - имя очереди, из которой время берется. Причем, очередь не обязана быть именем ресурса. Это может быть что-то хитрое.

Но главная фича - параметризуемые планы-шаблоны. Параметризуемые списками. Вот это капец тема.

sdtsdt
sdtsdt at 2011-01-04 22:12 (UTC) (Link)
Отличный заход на новый год
Denis Bugrov
bugroff at 2011-01-04 22:22 (UTC) (Link)
Хм, я примерно такое обычно и пишу в том же прожекте. Ганта вообще не использую никак :-) а вот к табличкам как-то привык за много лет.
aamonster
aamonster at 2011-01-04 22:52 (UTC) (Link)
Ребе, так это ж классический иерархический чеклист, только приоритеты добавлены.
Gaperton
gaperton at 2011-01-05 09:53 (UTC) (Link)
Не совсем :). Классический иерархический чеклист - это описание одной цели. Вот:

|[] hkhkf
|   [] hkhks
|   [] hhdf
|[] ghghd


А добавлены временные ограничения - эту цель не достигнуть без достижения этой (событие А случится не позже, чем событие Б). Это не то же самое, что простая группировка. И "стрелки" способны на куда большее, чем просто указать приоритеты. :) По выразительной силе это не уступает сетевому графику. Покажу в следующем посте.
Rigidus
rigidus at 2011-01-05 14:40 (UTC) (Link)
Возьму на вооружение этот метод. Я также использую файл для настройки compose вместе с org-mode для маркировки связанных по времени задач - это кстати может существенно помочь в написании парсера

★ Закуплено спиртное
  ✘ Водка (отменено - пить вредно)
  ⟶
   ★ Закуплены прочие продукты
     ✔ Масло 
     ✔ Белый хлеб
     ‣ Икра красная, не имитация (кончилась - делегировано гостям)

Alexei V. Vasilyev aka Comm
sbase at 2011-01-04 23:13 (UTC) (Link)
Самый простой метод обозначения прогресса я делал такой:

-------------------------
закупка еды
+ водка
* масло
- икра
- хлеб
------------------------

+ готово
* в процессе
> тоже в процессе
- в очереди.

без знака - этап работ


так как список действий сам по себе последователен, то и выполнение его обычно последовательное, варианты путей обычно лучше текстом писать нежели значками.

а всякие там "атрибуты" в таком плане настолько вторичная информация что ее имеет смысл вообще писать только в хвосте, например так:

- купить воду // до весны
- еды на завтрак // срочно

Но для совместимости с вики текстом, обычно это все укладывается в список и выглядит примерно так:

закупка еды
* + водка
* / масло
* - икра
* - хлеб


Alexei V. Vasilyev aka Comm
sbase at 2011-01-04 23:32 (UTC) (Link)
(это был комментарий на тему формата записи плана)

Что касается декларативного плана, я правильно понял что просто пишется состояние системы как будто событие уже произошло?

* + Умеем ходить
* / Умеем прыгать
* - умеем летать


А то в моем понимании, событие (как факт) то обязательно это какое-то действие протяженное во времени:
* встретиться в 10-00
* пойти гулять


Gaperton
gaperton at 2011-01-05 09:58 (UTC) (Link)
> Что касается декларативного плана, я правильно понял что просто пишется состояние системы как будто событие уже произошло?

Нет. Декларативный план состоит из набора "майлстонов", связанных зависимостями в граф. Майлстон - это событие или цель, которую надо достичь. Они не протяженны во времени, а одномоментны, задаются условиями наступления. И их последовательность не обязательно линейна.
Alexey Tigarev
t_gra at 2011-01-05 10:11 (UTC) (Link)
Я думаю, что в принципе можно пункты плана писать в виде предписаний "сделать то-то", декларативности плану это не уменьшит.

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

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

То есть если у нас в плане записано "Купить еды", то легко упустить, например, вопросы логистики (еду ещё надо как-то доставить домой). Возникает соблазн просто выполнить предписание.

Например, такой контекст: надо закупить продукты, человек в этот день на работе, а после работы собирается на рок-концерт. Пусть этот день - пятница. Здание конторы закрывается до окончания концерта. Имея задание "купить" человек рискует сделать это в обеденный перерыв, и потом обнаружить, что доставить домой возможности не имеет, так как не будет же он идти с продуктами на концерт. А в худшем случае забудет их на работе и вспомнит только в субботу утром :)

Другое дело, если мы описываем желаемое состояние мира так:
|в субботу утром необходимый набор продуктов надлежащего качества находится у меня дома

То это описывает желаемое состояние полностью. При этом, кстати, такая формулировка исключает вариант "закупить продукты в понедельник и к субботе половина съедена, а другая половина испортилась".

Кроме того, такая формулировка не специфицирует способ достижения этого состояния. Продукты можно не только купить, но и украсть, одолжить, получить в дар, найти на помойке, обнаружить уже имеющиеся в наличии запасы, либо получить из разных источников разные продукты набора.

При желании мы детализируем предполагаемую последовательность промежуточных состояний мира:

|договорились с Иван Иванычем, что он откроет тебе контору в субботу утром
=>
|к концу обеденного перерыва продукты закуплены и лежат в конторском холодильнике
=>
|в субботу утром необходимый набор продуктов надлежащего качества находится у меня дома // заезжаем на работу за сумкой с продуктами

Такое планирование - в виде целей как описаний состояний мира и таких же описаний состояний мира в качестве промежуточных целей - даёт плану необходимую гибкость. Если некий пункт плана не удалось выполнить (не удалось достичь промежуточной цели), то конечная цель при этом не отменяется и ответственный за её достижение человек волен придумать и осуществить другую цепочку состояний мира, оканчивающуюся тем же самым.
zhacka [blogspot.com] at 2011-01-05 02:12 (UTC) (Link)
Хотя это не совсем об одном и том же, но чем-то напомнило мне emacs org-mode. Хотя, в принципе, возможно декларативное планирование возможное и там. Надо попробовать.
Alex Ott
alexott at 2011-01-05 07:50 (UTC) (Link)
+100500 - там можно делать зависимости между задачами, а также произвольные статусы, а не только стандартные (TODO, STARTED, DONE, etc). плюс можно расписывать правила переходов между этими статусами
P.S. и MobileOrg для него же очень удобно использовать на телефоне/айпаде
Gaperton
gaperton at 2011-01-05 10:02 (UTC) (Link)
Посмотрел. Прикольно.

Еще из подобного - посмотрите TaskJuggler. Это цельный аналог MS Project-а на том же принципе.

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

А декларативное планирование по сути возможно в любом классическом туле. Его можно рассматривать как технику разработки WBS или сетевого графика.
Et ipsa scientia potestas est.
kashnikov at 2011-01-05 12:52 (UTC) (Link)
+100500
А теперь ещё и поддержка шифрования для MobileOrg добавлена. Org-mode развивается довольно шустро.
Alexey Tigarev
t_gra at 2011-01-05 09:31 (UTC) (Link)

Декларативное планирование

Take a look on TaskJuggler.
Это такой инструмент для декларативного планирования с интерпретатором командной строки и с гуи-фронтендом.

Ну да, и в системе контроля версий файлы держать можно.

Имело бы смысл:
- сделать вашу разметку альтернативной к нативной разметке таскджагглера, дописав его
- сделать конвертер из этой разметки в таскджагглеровскую (+возможно, в обратную сторону)

Таким образом, можно на шару получить все фичи таскджагглера и не писать каких-то планировщиков.
Gaperton
gaperton at 2011-01-05 10:08 (UTC) (Link)

Re: Декларативное планирование

Видел и знаю.

- сделать конвертер из этой разметки в таскджагглеровскую (+возможно, в обратную сторону)

Об этом думал. Но:
- пока он linux-only.
- в шедулере у него проблема (сильно разные раскладки leveling-а при небольших изменениях плана), такой шедулер не годится.

Думаю о простом но устойчивом своем шедулере, и в перспективе - привязке к трекерам.
Alexey Tigarev
t_gra at 2011-01-05 10:24 (UTC) (Link)

Re: Декларативное планирование

Кстати, о шедулере в таскджагглере:
к сожалению, с его помощью нельзя выполнить такую задачу:

Есть команда (набор "ресурсов"), набор отэстимейченных приоритетизированных задач на итерацию. Надо заассайнить ресурсы на задачи и определить, когда что начинается-кончается.

Задача не связана с реальным планированием (так как на самом деле так подробно план итерации не детализировался, и уж конечно задачи не ассайнились людям в предложенном машиной порядке) а стояла с целью предоставления отчётности в виде диаграммы Ганта.

Как мне кажется, такое вообще мало кто умеет (вроде бы NP-полная задача).

В результате написали ручками.
elennaa at 2011-01-07 08:20 (UTC) (Link)

Re: Декларативное планирование

"Take a look on TaskJuggler.
Это такой инструмент для декларативного планирования..."
Забавно, что Вы пишите о существующих инструментах для декларативного планирования. :) Дело в том, что сам этот термин и метод придумал Gaperton не так давно (несколько лет назад?), и, соответственно, инструментов для "декларативного планирования", строго говоря, сущесвовать не может :)
Влад - респект, ты придумал штуку, которая воспринимается как стандарт индустрии :)


dutchthemad at 2011-03-18 12:21 (UTC) (Link)
А зачем велосипед изобраетать ?
Есть org mod для емакса, есть taskpaper для MacOs, есть todopaper для Windows.

|||=> - какой смысл в этом непотребстве ? походу, программисты жить не могут без синтаксиса.

Gaperton
gaperton at 2011-03-18 15:58 (UTC) (Link)
Пользуйся org-mod на здоровье.

Будешь пользоваться моим журналом для бессмысленных комментариев - забаню.
Previous Entry  Next Entry