понедельник, 29 марта 2010 г.

[work.humour] О менеджерах и выжженном мире Австралии

Слава Костин (пожалуй, самый ответственный из виденных мной проджект менеджеров) опубликовал у себя в блоге выдержки из статьи «101 способ понять, что ваш проект обречён». Одна из них меня не могла не зацепить:

29. Разработчики используют vi в качестве IDE

Я уже было стал придумывать свой “ответ Чемберлену”, но по счастливому стечению обстоятельств, наткнулся на блог http://haritonoff.livejournal.com/, точнее на замеку “Про Сахул; окончание”. Ответ уже был там, да еще какой:

Первые австралийцы же взялись за дело круче и сразу принялись за ландшафт – такие уж у них были методы охоты… они оставались таковыми до последнего времени – загонная охота с поджиганием растительности. Огонь, охватывая обширные территории, выполняет сразу две задачи: он выгоняет животных, которых можно убить, или сам убивает их; и превращает густые кустарниковые заросли в открытые участки, по которым легче передвигаться. Английский исследователь Чеслинг писал: "Юленгоры (племя) поджигают лес во время охоты. Они не могут пройти мимо сухой травы и не поджечь ее. У них вошло в обычай сдирать с деревьев полосу волокнистой коры… скручивать ее в жгут и идти с ним как с тросточкой, поджигая зажженным концом сухую траву вдоль дороги. К октябрю, когда ветер стихает, пожары успевают уничтожить перегной. Теперь жгучее солнце завершает разрушительную работу – страна превращается в груду пепла. В декабре ветер меняет направление; сильно насыщенный влагой, он дует с северо-запада, потоки дождя заливают страну… рыхлая почва, песок, зола, перегной – все смывается в болота или уносится в море".

По ориентировочным оценкам, каждая кочующая группа ежегодно выжигала около 100 км2 лесов, саванн, степей – целенаправленно или невольно. Тысячи таких групп за 20-30 тысячелетий могли многократно – десятки раз! – выжигать растительность на всей территории континента. Влажные леса уступили место кустарникам, саваннам, пустыням. Ничем более не компенсируемые периоды засухи на континенте, потери органики почвами и эрозия не позволили аборигенам самостоятельно освоить сельское хозяйство.

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

Ну а то, что после таких методов со временем образуется пустыня – так пофик, главное проект сдать племя накормить здесь и сейчас.

28 комментариев:

Dmitry Vyukov комментирует...

Ты уже видел Code Bubbles? Чувствую, тебе должно это понравиться :)

http://www.cs.brown.edu/people/acb/codebubbles_site.htm

Dmitry Vyukov комментирует...

Этакий метод охоты с помощью тактического ядерного оружия :)

eao197 комментирует...

Видел. Но это еще не самое страшное. Я давеча неделю на Java программировал, в NetBeans-е. Впечатлений выше крыши. Нужно только найти время чтобы в блоге их зафиксировать.

1 комментирует...

Дык, тебе шашечки или ехать? :-)

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

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

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

1 комментирует...

Да. Спасибо за комплимент :-)

eao197 комментирует...

2Lamer:

>Но он по другому не может - там ВСЕ ЕДУТ на боллидах. И если не будешь ехать хотя бы с той же скоростью (и с той же вероятностью доехать до финиша) - все над твоим геройским заездом на ишаке посмеются один раз, и больше не вспомнят никогда.

Вообще-то любые аналогии ложны :) Но если продолжить твою, то фокус в том, что от старта до финиша можно проехать месте со всеми на болидах по трассе, а можно напрямик, вне трассы :) И если напрямик получается быстрее на ишаке, то пофигу, что ВСЕ ЕДУТ на болидах. Они не там едут :))

1 комментирует...

На ишаке быстрее не приедешь. Полюбэ.

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

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

Повторюсь, если ставить себе цель заработать денег при штате в 50 программистов уровня "выше среднего", а не стремиться сделать одну уникальную вещь силами одного-двух уникальных программеров и потом не знать, куда бы её продать :-)

eao197 комментирует...

>Но Шумахер на ишаке полюбэ медленней, чем он же на боллиде. :-)

Это если по хорошей дороге :)

>Не думаю, что в этом вопросе vi выигрывает у того же Eclipse.

Имхо, дело не в том, что кто-то у кого-то выигрывает (это, во многом, субъективно и зависит как от привычек, так и от задач).

А в том, что использование IDEA или Eclipse -- это не гарантия успеха. И даже не фактор, который к успеху приведет. Так же, как vi -- это совсем не неизбежный путь к неудаче.

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

1 комментирует...

Очень не хочется развязывать "holy war". :-)

Давай вернёмся к исходному материалу. Речь шла о полу-шуточных признаках неуспешного проекта.

Такими признаками могут быть факторы, сигнализирующие о том, что взаимодействие В КОМАНДЕ идёт не эффективно, разработка ведётся медленно, либо НЕ КОНТРОЛИРУЕМО. В случае, если команда годами работала под vi, думаю, использование продвинутой IDE только испортит дело. Но справедливо и обратное, грамотное использование опытными программистами всех возможностей по разработке кода и командной работе даёт более предсказуемые и быстрые результаты.

С тем, что при этом сжигаются все поля вокруг, я не согласен, думаю, ты тоже не до конца в это веришь :-)

eao197 комментирует...

>С тем, что при этом сжигаются все поля вокруг, я не согласен, думаю, ты тоже не до конца в это веришь :-)

Конечно нет, не зря же я "humour" в заголовке написал.

Вообще же мне представляется, что есть две крайности -- программисты увлекаются технологиями, менеджеры -- эффективностью, целесообразностью и сроками. В результате либо все программисты сидят в vi, либо не могут написать ничего без IDE. А менеджеры начинают видеть в vi признаки проблем. Все от перегибов :)))

jazzer комментирует...

Бред.
У нас в команде разными разработчиками используются vi, Eclipse, EMacs, NEdit.
У всех С++/Python.
Признаков обреченности не наблюдаю.

A CodeBubbles очень мне напомнила древнюю HP SoftBench, образца аж 1990 года. Там тоже можно было функции в отдельных окошечках редактировать (хотя, конечно, никакой анимации и разноцветных градиентов в 1990-м не было)

eao197 комментирует...

2jazzer:

>У нас в команде разными разработчиками используются vi, Eclipse, EMacs, NEdit.
У всех С++/Python.
Признаков обреченности не наблюдаю.


Если не ошибаюсь, вы ведь софт для собственного потребления пишете?

К тому же, на собственном опыте убедился, что писать в vi на C++ и писать в vi на Java -- это две большие разницы. Java в vi, имхо, гораздо сложнее.

Left комментирует...

Хе, NetBeans
Чтобы понять что такое "человеческая" IDE нужно попрограммировать в IDEA. Мне поначалу не хватало только режима "I'm feeling lucky" - чтобы она автоматом применяла первую же подсказку :)
Вообщем, после такой интеграции с языком возвращаться даже к Visual Studio + Visual Assist (а лучше связки для С++ просто нет) - и то как-то неловко, всё равно что снять кроссовки и обуть кирзачи...

Left комментирует...

А по теме поста - аналогия просто притянута за уши :)
Я понимаю что есть случаи когда хорошие/отличные/блестящие программисты которые педалят в vi. Но это имхо из разряда "изучать C мне некогда, потому что я скоро умру - так что напишу всё на ассемблере" (была такая красивая байка про старого дедушку-программиста). Но рекомендовать vi для старта - просто глупо когда есть куда как более продвинутые средства интегрирующие в себя всё что нужно для программирования.

eao197 комментирует...

>Чтобы понять что такое "человеческая" IDE нужно попрограммировать в IDEA.

Надеюсь, мне не придется программировать на Java настолько серьезных проектов, чтобы потребовалась IDEA. А в простом проекте и NetBeans 6.8 мне за глаза хватало.

eao197 комментирует...

>А по теме поста - аналогия просто притянута за уши :)

Конечно, это была шутка и провокация :)

>Но рекомендовать vi для старта - просто глупо когда есть куда как более продвинутые средства интегрирующие в себя всё что нужно для программирования.

Никогда не порекомендую vi для старта. Программирование без IDE -- это вообще занятие на любителя. Подобные любители вовсе не обязательно хорошие программисты и пр. Но нам так удобнее. И как редактор vim очень и очень даже ничего.

Unknown комментирует...

А самое-то главное, что в оригинале был не vi, а notepad :)
http://www.codesqueeze.com/101-ways-to-know-your-software-project-is-doomed/

eao197 комментирует...

>А самое-то главное, что в оригинале был не vi, а notepad :)

Да, русский переводчик оказался продвинутым товарищем... :)

У меня еще есть подозрение, что мало кто понимает иронию фразы "You have implemented your own Ruby framework that uses XML configuration files"

1 комментирует...

Вот это засада. Спасибо, пошёл править... :-)

jazzer комментирует...

> Java в vi, имхо, гораздо сложнее.

Ну, когда я писал на Java, это был вообще notepad :)

Left комментирует...

> Надеюсь, мне не придется программировать на Java настолько серьезных проектов, чтобы потребовалась IDEA. А в простом проекте и NetBeans 6.8 мне за глаза хватало.

А зря, кстати
Из всех IDE с которыми приходилось сталкиваться IDEA оставила самое приятное впечатление. И кстати для простых проектов она подходит так же отлично как и для больших ;)
После IDEA начинаешь понимать почему люди пишут на Java - да, сам язык ужасен в плане многословности, но IDE весь этот ужас берёт на себя, в итоге скорость написания и чтения кода очень даже ничего ;)

eao197 комментирует...

>После IDEA начинаешь понимать почему люди пишут на Java - да, сам язык ужасен в плане многословности, но IDE весь этот ужас берёт на себя, в итоге скорость написания и чтения кода очень даже ничего ;)

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

Left комментирует...

Дык чтобы бороться со сложностью есть рефакторинги :) И опять же в плане рефакторингов остальным IDE до IDEA как до Ирака раком ;) В IDEA вырабатывается привычка бить себя по рукам когда пытаешься редактировать текст программы вручную - вместо этого практически всегда проще сделать то же самое через рефакторинги.

eao197 комментирует...

>Дык чтобы бороться со сложностью есть рефакторинги

Есть разные виды сложности:

1. Неудачно написанный код (дублирование, например). Да, для этого есть рефакторинги.

2. Ограничения самого языка. Например, если в C++ я могу получить результат с помощью 4-х функций и массива указателей на них, то в Java мне придется создавать интерфейс, 4-ре его реализации, массив, и объекты для хранения в этом массиве.

Вот во 2-м случае рефакторинги вряд ли помогут.

Left комментирует...

Согласен про разные случаи, но вот сильно сомневаюсь что во 2-м случае размер кода на С++ будет меньше (ну хорошо - существенно меньше) размера кода на джаве :)

eao197 комментирует...

При разумном использовании шаблонов и макросов может быть существенно меньше.

Плюс, насколько я смог понять, в Java почему-то не очень жалуют генерацию кода -- все больше предпочитают в рун-тайме разворачивать сложные конструкции из XML-ей или аннотаций/рефлексии. Тогда как в C++ с этим заморочек сильно меньше.

Left комментирует...

Э...
не очень хорошо представляю как в этой задаче нормально применить макросы - чтобы они не стреляли по ногам.
Зато представляю как применить шаблоны - заюзать бустовые лямбды. Меня при их виде обычно оторопь берёт :)

А насчёт кодогенерации - кодогенераторы бьют под дых рефакторингам. В С++ на это всем плевать потому что их толком всё равно нету. А в Java это убийство священной коровы ;)

eao197 комментирует...

>Э...
не очень хорошо представляю как в этой задаче нормально применить макросы - чтобы они не стреляли по ногам.


Да вот, самый простой пример:

http_logging_cfg_t
tag_http_logging_cfg_t::query_value() const
{
http_logging_cfg_t result;
#define RESULT_ASSIGN(field) result.field = field.is_defined()

RESULT_ASSIGN( m_use_distant_logger );
RESULT_ASSIGN( m_use_local_logger );
RESULT_ASSIGN( m_log_informational_text );
RESULT_ASSIGN( m_log_header_in );
RESULT_ASSIGN( m_log_header_out );
RESULT_ASSIGN( m_log_data_in );
RESULT_ASSIGN( m_log_data_out );

#undef RESULT_ASSIGN

return result;
}

>Зато представляю как применить шаблоны - заюзать бустовые лямбды. Меня при их виде обычно оторопь берёт :)

Бустовые лямбды -- в топку!