metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2009-05-03 04:08 pm

Программистское мракобесие

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

А вот оказывается, что так и делают:
К этому моменту я выкинул все свои диаграммы классов, за ненадобностью – зачем на них смотреть, если они давно уже в голове?

[identity profile] gaperton.livejournal.com 2009-05-03 02:45 pm (UTC)(link)
А вообще, всякого рода dоxygen-ы рулят, потому что генерятся из кода. И описания Common Design Principles в виде кратких документов - тоже рулят, хотя бы потому, что их соблюдение может быть проверено на design review, и они редко меняются.

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

[identity profile] gaperton.livejournal.com 2009-05-03 03:03 pm (UTC)(link)
Культ Карго, в общем, косит наши ряды. Меж тем, практика различных open source проектов, в том числе и крупных, скорее подтверждает вышесказанное, чем иллюстрирует декларации CMMI. Разработка ПО не является строго определенным процессом, наподобие линейки по приготовлению гамбургеров макдональдса, где точность соблюдения "технологии" и процесса гарантирует вам качество результата.

У нас зачастую бывает как раз наоборот. Сам IBM PC появился в результате того, что соответствующую группу в IBM освободили от необходимости следовать внутрикорпоративным процессам, "с целью ускорения разработки". Что уж тут говорить :).

[identity profile] russian-sla.livejournal.com 2009-05-04 06:04 pm (UTC)(link)
"наподобие линейки по приготовлению гамбургеров макдональдса" - а чем разработка ПО принципиально отличается, если там тоже есть некоторые типовые работы? Да и отличать надо - инновационные разработки и "повседневные"...

[identity profile] gaperton.livejournal.com 2009-05-04 08:49 pm (UTC)(link)
Тем, что разработка - empiric process, а не defined process. В случае empiric process точность соблюдения технологии и процесса не гарантирует результата в принципе, потому, что какие бы "типовые" работы не были. Потому, что все они сопряжены с решением проблем, способ решения которых повлияет на структуру результата, и результат определяется не соблюдением технологии, а человеческим вкладом и личными качествами исполнителей.

Это, собственно, основы process theory. Еще примеры занятий, где встречается empiric process - разработка новых моделей автомобилей, и военное дело. Нет никакой технологии, точное соблюдение которой позволит выиграть войну, это достаточно очевидно. Хотя бы потому, что вклад боевого духа войск к прочим факторам оценивается многими специалистами как 3 к одному.

Точно также Вы можете посадить кучу идиотов под CMMI Level 5, и не получить на выход ничего ценного. Или получить продукт, вызывающий зевоту на рынке. В этом разница.

[identity profile] russian-sla.livejournal.com 2009-05-05 03:17 pm (UTC)(link)
"разработка новых моделей автомобилей" - так ведь я же написал, что для инновационных проектов (задач) нужен немного свой подход
"военное дело" - т.е. уставы и руководства вообще не имеют право быть в военном деле? все можно выиграть только "силой духа"? :)
"Вы можете посадить кучу идиотов под CMMI Level 5, и не получить на выход ничего ценного" - ну уж я этим заниматься не буду. :) и рекомендовать это делать никому не буду. CMMI я порекмендую применять именно в том объеме и в том виде, которые позволят получать более предсказуемый (по бюджету, качеству и т.д. - тут уж выбор - дело частное) результат

[identity profile] gaperton.livejournal.com 2009-05-05 04:23 pm (UTC)(link)
> так ведь я же написал, что для инновационных проектов (задач) нужен немного свой подход

Любой проект по разработке ПО сопряжен с решением проблем, и является в той или иной степени "инновационным". Проект по внедрению готового ПО - нет.

> "военное дело" - т.е. уставы и руководства вообще не имеют право быть в военном деле? все можно выиграть только "силой духа"? :)

Не понимаю, из каких моих слов можно сделать такой вывод, не подключая фантазии. Уставы и руководства имеют весьма посредственное отношение к содержательной части планирования военных действий, и к выигрышу в войне, так же как и соблюдение coding standard не поможет сделать коммерчески успешный продукт. Речь не о них.

> "Вы можете посадить кучу идиотов под CMMI Level 5, и не получить на выход ничего ценного" ну уж я этим заниматься не буду. :) и рекомендовать это делать никому не буду.

Это я привел для иллюстрации того, чем разработка ПО отличается от изготовления гамбургера. Соблюдение технологии не _гарантирует_ вам успеха. Таких гарантий у вас нет и быть не может.

> CMMI я порекмендую применять именно в том объеме и в том виде, которые позволят получать более предсказуемый (по бюджету, качеству и т.д. - тут уж выбор - дело частное) результат

Тезис CMMI про снижение рисков при повышении уровня - как минимум спорен, и многие уважаемые и опытные специалисты его не разделяют, см. аргументацию по этому поводу Тома ДеМарко в Peopleware в качестве примера. Это при том, что те же люди сходятся на том, что критерии зрелости CMMI, в целом, неплохая штука, основанная на best practices.

(Anonymous) 2009-05-06 10:07 am (UTC)(link)
более предсказуемый (по бюджету, качеству и т.д. - тут уж выбор - дело частное) результат

Скажите, это действительно ВЫБОР? Предсказуемость одного измерения результата достигается за счет другого?

Порекомендуете ли Вы CMMI при целевой функции вида "не очень дорого И достаточно качественно"?

[identity profile] metaclass.livejournal.com 2009-05-06 10:23 am (UTC)(link)
"Порекомендуете ли Вы CMMI при целевой функции вида "не очень дорого И достаточно качественно"?"

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

(Anonymous) 2009-05-06 11:21 am (UTC)(link)
"религия денег", ага

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

[identity profile] russian-sla.livejournal.com 2009-05-06 03:05 pm (UTC)(link)
Под "выбором" я имел в виду следующее. Любые изменения (в процессах, вообще в организации дел) должны проводится ради решения конкретных проблем и (или) улучшения имеющегося (в т.ч. предсказуемости каких-либо (!) показателей, примеры которых я и привел). И этот принцип должен действовать независимо от того, что из моделей, методологий вы собираетесь внедрять. Хоть CMMI, хоть Scrum, хоть XP, хоть еще чего.

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

[identity profile] raydac.livejournal.com 2009-05-03 03:24 pm (UTC)(link)
код идет из идеи, а не идея из кода.. если идею правильно задокументить а не тыкаться в кнопки рожая на лету, то пользы гораздо больше.. исходя из опыта

[identity profile] gaperton.livejournal.com 2009-05-03 03:37 pm (UTC)(link)
Запиши идею в коде или комментарии к коммиту. В чем проблема-то? Все равно от нее ничего не останется после пары лет поддержки. Твою изначальную идею изменят еще десять раз, исправляя дефекты и докручивая фичи. А глядя в код, про то, что ты оказывается именно это когда-то описал и задокументировал - просто никто не вспомнит.

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

Это в особенности касается больших проектов. Исходя из опыта.

[identity profile] feorex.livejournal.com 2009-05-03 04:44 pm (UTC)(link)
На предыдущей работе тоже делали систему, очень похожую на вашу: трейдерское приложение для инвестиционного банка. Система развивается с 96 года, вроде, и функционирует до сих пор. Архитектура, конечно, совсем убогая, потому что на этом проекте не было такого талантливого архитектора. Строчек кода -- 2-3 миллиона.
Так вот, основным источником инфы являлись именно комменты к коммитам, коду и тикеты в трекинговой системе. Поэтому я согласен, что в долгоживущих системах информативнее сам код, чем документация по нему

[identity profile] volodymir-k.livejournal.com 2009-05-03 11:15 pm (UTC)(link)
> Все равно от нее ничего не останется после пары лет поддержки. Твою изначальную идею изменят еще десять раз, исправляя дефекты и докручивая фичи.

Микрософт пишет довольно сложные программы. ОС там несколько штук, наборы приложений, офисные пакеты, сервера... Вот интересно, почему у них и дока есть, и актуальная, и программами миллионы пользуются? Магия, не иначе. И даже слухи есть, что некоторые программы даже заранее планируют и описывают интерфейсы! Волшебство, не правда ли?

[identity profile] gaperton.livejournal.com 2009-05-03 11:25 pm (UTC)(link)
Ты понимаешь разницу между пользовательской документацией и проектной? Или для тебя это одно и то же? Когда обратишь внимание на эту разницу, волшебства вдруг не станет.

Ты видел их внутреннюю, проектную документацию? Ну конечно не видел, откуда тебе. А вот знакомые из группы MS SQL мне говорили, что у них при переписывании MS SQL c 6.5 на 7.0 не было даже спецификации. Вместо нее был сам 6.5. Волшебство, не правда-ли?

[identity profile] dragon-j.livejournal.com 2009-05-04 04:18 pm (UTC)(link)
> Ты понимаешь разницу между пользовательской документацией и проектной?

для некоторых систем этой разницы нет

[identity profile] volodymir-k.livejournal.com 2009-05-05 11:23 pm (UTC)(link)
> Ты видел их внутреннюю, проектную документацию? Ну конечно не видел, откуда тебе.

1. Давайте на "Вы".
2. Я говорю про MSDN. Очень сомневаюсь, что его пишут после программеров отдельные писатели, анализируя код. Таки писателей в общем-то не найти.
3. О подобной проектной документации есть описания.

[identity profile] gaperton.livejournal.com 2009-05-03 11:48 pm (UTC)(link)
Кроме того, хочу обратить твое внимание на маленькую деталь. Я говорю о продукте на этапе поддержки и развития, когда ему уже лет 5. И о проблемах поддержания документации в актуальном состоянии. Сложно этого не заметить, цитируя фразу
> Все равно от нее ничего не останется после пары лет поддержки.
Или если очень хочется, то можно?

[identity profile] volodymir-k.livejournal.com 2009-05-10 05:09 pm (UTC)(link)
А ты в курсе, что микрософтовские оси и продукты немного постарше будут? Что новые обычно поддерживают старые интерфейсы? Ты почитай что-нибудь про WinXP, википедию хотя бы. Книжку купи какую-нибудь. Узнаешь, что кроме оси, у них офис и сервера уже лет 15 как развиваются. И они их документируют. Разговоры "какой-то друг-уборщик из микрософт сказал, что у них нету" это конечно пять.

Я тут тебе ещё нашёл ссылки про микрософт:
http://msdn.microsoft.com/en-us/library/ms978007.aspx
http://msdn.microsoft.com/en-us/architecture/bb469938.aspx
Английский-то хоть знаешь, не надо переводить?



(Имитирую patronizing style. Не нравится небось, а? А не надо было использовать -- я мог бы нормально поговорить.)

[identity profile] gaperton.livejournal.com 2009-05-10 06:20 pm (UTC)(link)
(Имитирую patronizing style. Не нравится небось, а? А не надо было использовать -- я мог бы нормально поговорить.)

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

[identity profile] volodymir-k.livejournal.com 2009-05-15 11:52 pm (UTC)(link)
Я привёл пример технической документации МС. Я показал ссылки на процесс дизайна и архитектуры в МС. Что я увидел в ответ? Гнутые пальцы, хамство и общие философские рассуждения. "Мы живы, и это доказывает, что иначе жить невозможно." Маловато будет.

Ваш взгляд на чтение кода подходит:
1. В случае очень компетентных и дорогих программистов
2. Бешеной смены кода под заказчика-финансиста-трейдера
3. Очень узкой математизированной предметной области.
Да, в ЭТОМ случае действительно выгоднее не документировать.

В остальных случаях получится очередной Нетскейп Навигатор. Там тоже пионеры пальцы гнули-гнули, а потом само всё загнило. Сколько в Мозилле от НН? Процентов 5 есть?

У Вас мне непонятно, что раньше будет -- загниёт код или контора развалится. Думаю, всё-таки код. Выбросите и перепишете на каком-нибудь Хаскелле или что там модно будет.

(no subject)

[identity profile] gaperton.livejournal.com - 2009-05-16 09:00 (UTC) - Expand

[identity profile] metaclass.livejournal.com 2009-05-04 04:30 am (UTC)(link)
Микрософт может себе это позволить, я думаю, у них система допиливается в реалтайме только для особо важных клиентов, а до этого никто никуда не спешит в стиле "некогда документировать - код писать надо" :)

[identity profile] volodymir-k.livejournal.com 2009-05-05 11:27 pm (UTC)(link)
> а до этого никто никуда не спешит в стиле "некогда документировать - код писать надо"

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

[identity profile] metaclass.livejournal.com 2009-05-06 06:01 am (UTC)(link)
У меня периодически бывает, что "срочно надо писать". Но это особенности клиентов, которые могут за пару дней до сдачи налоговой декларации прислать ее новую форму, да и вообще бардака местного, когда по самой сути нормальная организация труда означает удорожание проекта в несколько раз, после чего он становится никому не нужен.

[identity profile] metaclass.livejournal.com 2009-05-03 04:57 pm (UTC)(link)
Так и есть. Но я документирую идею только в виде кратких заметок и ровно до тех пор, пока код не придет в production-ready состояние, потому что после того уже обычно документирование будет отнимать слишком много времени и толком ничего не принесет. Или будет отставать от кода сильно.