Греция и Рим: две очень разные культуры программирования

Продолжаю публиковать интересные, на мой взгляд, отрывки на тему разработки ПО. На этот раз из книги "Креативное программирование" Р. Гласса. Отрывок взят из главы "Творчество в программирующей организации", и служит предисловием к теме противоборства творческого и дисциплинарного подходов к процессу разработки.
http://it.icmp.ru/postimages/259/6814/thumb/2010-12-15-01-14-29.jpg
Дегрейс описывает условия работы и культуру труда греков и римлян, отмечая большие и, как мне кажется, важные различия между ними. Греки, по его словам, работали как кустари или самостоятельные члены бригад. У них был личный инструмент, который они брали с собой на работу, а потом возвращались с ним домой. Они работали как отдельные независимые подрятчики, предоставляя свои услуги за плату. они были вполне независимы.

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

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

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

Есть, конечно вещи и похуже организации греческого или римского типа. Некоторые менее цивилизованные фирмы, стоящие на низших ступенях организационного развития, вполне можно назвать "варварскими".

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

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


В некотором смысле эти различия предвосхитили дебаты по поводу Agile-программирования и процесса, начавшиеся почти на десять лет позже. Греки хорошо вписались бы в лагерь Agile, римляне усиленно трудились бы над повышением своего уровня CMM, а варвары с негодованием отвергли бы и то и другое!

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

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

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

Первый программист предложил детальное решение со столь же детальными графиками отладки и тестирования. Второй программист предложил простое решение, не связанное с какими-либо проблемами.

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

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

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

Конечно, этот сравнительный анализ Рима и Греции с примесью варварства нельзя назвать историей со счастливым концом. Но он прекрасно отражает некоторые проблемы, рассматриваемые далее в этой книге...
  • 15 декабря 2010, 01:19
  • wchk
  • просмотров: ~2441
  • рейтинг: ?

Комментарии (6)

Вы - anonymous, войти ?

можно использовать bbcode-теги
[b]жирный текст[/b]
[i]курсив[/i]
[u]underline[/u]
[s]зачеркнутый текст[/s]
[size=20px]размер шрифта[/size]
всякие изменения текста
[left][/left]
[right][/right]
[center][/center]
позиционирование элементов: картинки, текст и т.д
[url][/url]
[email][/email]
внутри тега [url] помещайте ссылки, а внутри [email] адрес электронной почты;
так же [url] можно использовать в виде:
[url=http://example.com]пример[/url],
[url=http://test.ru][img]http://flickr.com/givemeimg.png[/img][/url]
[code][/code]
[quote][/quote]
внутри тега [code] можно помещать программный код (подстветка попытается включиться автоматически); для выделения цитат используйте [quote]
также можно напрямую указать язык [code=cpp]int i;[/code]
[list][/list]
создаем списки, каждый элемент пишется после [*].

Можно указывать маркер - [list=marker].
возможные маркеры 1(decimal), i(lower-roman), I(upper-roman), a(lower-alpha), A(upper-alpha). Примеры:

[list][*]1 элемент[*]2 элемент[*]3 элемент[/list]
[list=1][*]1 элемент[*]2 элемент[*]3 элемент[/list]
[list=A][*]1 элемент[*]2 элемент[*]3 элемент[/list]
[table][/table]
оформляем таблицу, используя внутренние теги [tr] и [td].
[tr] - строка, [td] - поле в строке,
[table=100%] - можно задавать ширину в процентах, по-умолчанию ширина 100%
[td=2] - можно задавать сколько столбцов входит в это поле. Пример:

[table=50%][tr][td]столбец 1[/td][td]столбец 2[/td][/tr][tr][td]значение 1[/td][td]значение 2[/td][/tr][tr][td=2]сразу 2 столбца[/td][/tr][/table]
[img][/img]
тег для вставки фото или картинок, мы любим картинки. Примеры использования:

[img]http://ya.ru/logo.png[/img],
[img=100x100px]http://ya.ru/logo.png[/img]
[img=fullimg.url]thumbimg.url[/img],
Пожалуйста загружайте картинки на наш сайт, либо вставляйте с бекбоновских ресурсов.
[video][/video]
Проигрывает видео, внутрь вставляем ссылки на видео, поддерживается Play.Ykt.Ru(нужно вставить ссылку на страницу с видео) и tv.ykt.ru(нужно вставить ссылку на адрес файла)