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

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

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

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

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

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

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

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

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

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

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

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

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

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

    ОтветитьУдалить
  4. Дык, тебе шашечки или ехать? :-)

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

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

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

    ОтветитьУдалить
  5. Да. Спасибо за комплимент :-)

    ОтветитьУдалить
  6. 2Lamer:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    ОтветитьУдалить
  12. 2jazzer:

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


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

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

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

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

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

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

    ОтветитьУдалить
  16. >А по теме поста - аналогия просто притянута за уши :)

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

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

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

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

    ОтветитьУдалить
  18. >А самое-то главное, что в оригинале был не vi, а notepad :)

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

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

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

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

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

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

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

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

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

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

    ОтветитьУдалить
  24. >Дык чтобы бороться со сложностью есть рефакторинги

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

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

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

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

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

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

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

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

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

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


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

    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;
    }

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

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

    ОтветитьУдалить