Слава Костин (пожалуй, самый ответственный из виденных мной проджект менеджеров) опубликовал у себя в блоге выдержки из статьи «101 способ понять, что ваш проект обречён». Одна из них меня не могла не зацепить:
29. Разработчики используют vi в качестве IDE
Я уже было стал придумывать свой “ответ Чемберлену”, но по счастливому стечению обстоятельств, наткнулся на блог http://haritonoff.livejournal.com/, точнее на замеку “Про Сахул; окончание”. Ответ уже был там, да еще какой:
Первые австралийцы же взялись за дело круче и сразу принялись за ландшафт – такие уж у них были методы охоты… они оставались таковыми до последнего времени – загонная охота с поджиганием растительности. Огонь, охватывая обширные территории, выполняет сразу две задачи: он выгоняет животных, которых можно убить, или сам убивает их; и превращает густые кустарниковые заросли в открытые участки, по которым легче передвигаться. Английский исследователь Чеслинг писал: "Юленгоры (племя) поджигают лес во время охоты. Они не могут пройти мимо сухой травы и не поджечь ее. У них вошло в обычай сдирать с деревьев полосу волокнистой коры… скручивать ее в жгут и идти с ним как с тросточкой, поджигая зажженным концом сухую траву вдоль дороги. К октябрю, когда ветер стихает, пожары успевают уничтожить перегной. Теперь жгучее солнце завершает разрушительную работу – страна превращается в груду пепла. В декабре ветер меняет направление; сильно насыщенный влагой, он дует с северо-запада, потоки дождя заливают страну… рыхлая почва, песок, зола, перегной – все смывается в болота или уносится в море".
По ориентировочным оценкам, каждая кочующая группа ежегодно выжигала около 100 км2 лесов, саванн, степей – целенаправленно или невольно. Тысячи таких групп за 20-30 тысячелетий могли многократно – десятки раз! – выжигать растительность на всей территории континента. Влажные леса уступили место кустарникам, саваннам, пустыням. Ничем более не компенсируемые периоды засухи на континенте, потери органики почвами и эрозия не позволили аборигенам самостоятельно освоить сельское хозяйство.
Вот так, в доисторические времена, менеджеры продвинули в жизнь эффективные методы охоты: племя больше не зависело от умения разработчика писать хороший код охотника одолеть сумчатого льва одной лишь рогатиной. Это раньше разработчик охотник был сам по себе – возьмет тестовый редактор рогатину и отправится в лес один, а напишет ли программу вернется ли вообще, а если напишет вернется, то принесет ли добычу к назначенному сроку – это вопрос. Явно не индустриальный подход, рискованный и непредсказуемый. Поэтому нужно поголовно перейти на настоящие, промышленные средства разработки охоты, гарантирующие результат вне зависимости от индивидуальных качеств программистов охотников.
Ну а то, что после таких методов со временем образуется пустыня – так пофик, главное проект сдать племя накормить здесь и сейчас.
28 комментариев:
Ты уже видел Code Bubbles? Чувствую, тебе должно это понравиться :)
http://www.cs.brown.edu/people/acb/codebubbles_site.htm
Этакий метод охоты с помощью тактического ядерного оружия :)
Видел. Но это еще не самое страшное. Я давеча неделю на Java программировал, в NetBeans-е. Впечатлений выше крыши. Нужно только найти время чтобы в блоге их зафиксировать.
Дык, тебе шашечки или ехать? :-)
Ты так можешь Шумахера упрекнуть в том, что он едет на супер-современном боллиде, а не на ишаке. Мол, на боллиде быстрее приедешь, но удовольствия не получишь и погонять ишака пятками не научишься.
Но он по другому не может - там ВСЕ ЕДУТ на боллидах. И если не будешь ехать хотя бы с той же скоростью (и с той же вероятностью доехать до финиша) - все над твоим геройским заездом на ишаке посмеются один раз, и больше не вспомнят никогда.
Может, Михаэль дома тренируется при помощи езды на ишаке - может, это даёт ему возможность не забыть законы физики, ощутить радость движения. Но когда он выступает (зарабатывает деньги) - у него не возникает мысли, что боллид нужен, да не какой-то там, а самый лучший.
Да. Спасибо за комплимент :-)
2Lamer:
>Но он по другому не может - там ВСЕ ЕДУТ на боллидах. И если не будешь ехать хотя бы с той же скоростью (и с той же вероятностью доехать до финиша) - все над твоим геройским заездом на ишаке посмеются один раз, и больше не вспомнят никогда.
Вообще-то любые аналогии ложны :) Но если продолжить твою, то фокус в том, что от старта до финиша можно проехать месте со всеми на болидах по трассе, а можно напрямик, вне трассы :) И если напрямик получается быстрее на ишаке, то пофигу, что ВСЕ ЕДУТ на болидах. Они не там едут :))
На ишаке быстрее не приедешь. Полюбэ.
Твоя аналогия такова, что Шумахер на ишаке по прямой, возможно, приедет быстрее, чем я на боллиде. Но Шумахер на ишаке полюбэ медленней, чем он же на боллиде. :-)
И опять же, ты сам сказал про гарантированность результата и широкозахватность техники охоты. Не думаю, что в этом вопросе vi выигрывает у того же Eclipse.
Повторюсь, если ставить себе цель заработать денег при штате в 50 программистов уровня "выше среднего", а не стремиться сделать одну уникальную вещь силами одного-двух уникальных программеров и потом не знать, куда бы её продать :-)
>Но Шумахер на ишаке полюбэ медленней, чем он же на боллиде. :-)
Это если по хорошей дороге :)
>Не думаю, что в этом вопросе vi выигрывает у того же Eclipse.
Имхо, дело не в том, что кто-то у кого-то выигрывает (это, во многом, субъективно и зависит как от привычек, так и от задач).
А в том, что использование IDEA или Eclipse -- это не гарантия успеха. И даже не фактор, который к успеху приведет. Так же, как vi -- это совсем не неизбежный путь к неудаче.
Что же до "силами одного-двух уникальных программеров", то в любой компании найдется один-два продукта, которые лучше бы разрабатывали один-два уникума, чем десяток "выше среднего".
Очень не хочется развязывать "holy war". :-)
Давай вернёмся к исходному материалу. Речь шла о полу-шуточных признаках неуспешного проекта.
Такими признаками могут быть факторы, сигнализирующие о том, что взаимодействие В КОМАНДЕ идёт не эффективно, разработка ведётся медленно, либо НЕ КОНТРОЛИРУЕМО. В случае, если команда годами работала под vi, думаю, использование продвинутой IDE только испортит дело. Но справедливо и обратное, грамотное использование опытными программистами всех возможностей по разработке кода и командной работе даёт более предсказуемые и быстрые результаты.
С тем, что при этом сжигаются все поля вокруг, я не согласен, думаю, ты тоже не до конца в это веришь :-)
>С тем, что при этом сжигаются все поля вокруг, я не согласен, думаю, ты тоже не до конца в это веришь :-)
Конечно нет, не зря же я "humour" в заголовке написал.
Вообще же мне представляется, что есть две крайности -- программисты увлекаются технологиями, менеджеры -- эффективностью, целесообразностью и сроками. В результате либо все программисты сидят в vi, либо не могут написать ничего без IDE. А менеджеры начинают видеть в vi признаки проблем. Все от перегибов :)))
Бред.
У нас в команде разными разработчиками используются vi, Eclipse, EMacs, NEdit.
У всех С++/Python.
Признаков обреченности не наблюдаю.
A CodeBubbles очень мне напомнила древнюю HP SoftBench, образца аж 1990 года. Там тоже можно было функции в отдельных окошечках редактировать (хотя, конечно, никакой анимации и разноцветных градиентов в 1990-м не было)
2jazzer:
>У нас в команде разными разработчиками используются vi, Eclipse, EMacs, NEdit.
У всех С++/Python.
Признаков обреченности не наблюдаю.
Если не ошибаюсь, вы ведь софт для собственного потребления пишете?
К тому же, на собственном опыте убедился, что писать в vi на C++ и писать в vi на Java -- это две большие разницы. Java в vi, имхо, гораздо сложнее.
Хе, NetBeans
Чтобы понять что такое "человеческая" IDE нужно попрограммировать в IDEA. Мне поначалу не хватало только режима "I'm feeling lucky" - чтобы она автоматом применяла первую же подсказку :)
Вообщем, после такой интеграции с языком возвращаться даже к Visual Studio + Visual Assist (а лучше связки для С++ просто нет) - и то как-то неловко, всё равно что снять кроссовки и обуть кирзачи...
А по теме поста - аналогия просто притянута за уши :)
Я понимаю что есть случаи когда хорошие/отличные/блестящие программисты которые педалят в vi. Но это имхо из разряда "изучать C мне некогда, потому что я скоро умру - так что напишу всё на ассемблере" (была такая красивая байка про старого дедушку-программиста). Но рекомендовать vi для старта - просто глупо когда есть куда как более продвинутые средства интегрирующие в себя всё что нужно для программирования.
>Чтобы понять что такое "человеческая" IDE нужно попрограммировать в IDEA.
Надеюсь, мне не придется программировать на Java настолько серьезных проектов, чтобы потребовалась IDEA. А в простом проекте и NetBeans 6.8 мне за глаза хватало.
>А по теме поста - аналогия просто притянута за уши :)
Конечно, это была шутка и провокация :)
>Но рекомендовать vi для старта - просто глупо когда есть куда как более продвинутые средства интегрирующие в себя всё что нужно для программирования.
Никогда не порекомендую vi для старта. Программирование без IDE -- это вообще занятие на любителя. Подобные любители вовсе не обязательно хорошие программисты и пр. Но нам так удобнее. И как редактор vim очень и очень даже ничего.
А самое-то главное, что в оригинале был не vi, а notepad :)
http://www.codesqueeze.com/101-ways-to-know-your-software-project-is-doomed/
>А самое-то главное, что в оригинале был не vi, а notepad :)
Да, русский переводчик оказался продвинутым товарищем... :)
У меня еще есть подозрение, что мало кто понимает иронию фразы "You have implemented your own Ruby framework that uses XML configuration files"
Вот это засада. Спасибо, пошёл править... :-)
> Java в vi, имхо, гораздо сложнее.
Ну, когда я писал на Java, это был вообще notepad :)
> Надеюсь, мне не придется программировать на Java настолько серьезных проектов, чтобы потребовалась IDEA. А в простом проекте и NetBeans 6.8 мне за глаза хватало.
А зря, кстати
Из всех IDE с которыми приходилось сталкиваться IDEA оставила самое приятное впечатление. И кстати для простых проектов она подходит так же отлично как и для больших ;)
После IDEA начинаешь понимать почему люди пишут на Java - да, сам язык ужасен в плане многословности, но IDE весь этот ужас берёт на себя, в итоге скорость написания и чтения кода очень даже ничего ;)
>После IDEA начинаешь понимать почему люди пишут на Java - да, сам язык ужасен в плане многословности, но IDE весь этот ужас берёт на себя, в итоге скорость написания и чтения кода очень даже ничего ;)
Про скорость написания согласен. Но ведь объем и связанная с ним сложность, никуда не исчезают.
Дык чтобы бороться со сложностью есть рефакторинги :) И опять же в плане рефакторингов остальным IDE до IDEA как до Ирака раком ;) В IDEA вырабатывается привычка бить себя по рукам когда пытаешься редактировать текст программы вручную - вместо этого практически всегда проще сделать то же самое через рефакторинги.
>Дык чтобы бороться со сложностью есть рефакторинги
Есть разные виды сложности:
1. Неудачно написанный код (дублирование, например). Да, для этого есть рефакторинги.
2. Ограничения самого языка. Например, если в C++ я могу получить результат с помощью 4-х функций и массива указателей на них, то в Java мне придется создавать интерфейс, 4-ре его реализации, массив, и объекты для хранения в этом массиве.
Вот во 2-м случае рефакторинги вряд ли помогут.
Согласен про разные случаи, но вот сильно сомневаюсь что во 2-м случае размер кода на С++ будет меньше (ну хорошо - существенно меньше) размера кода на джаве :)
При разумном использовании шаблонов и макросов может быть существенно меньше.
Плюс, насколько я смог понять, в Java почему-то не очень жалуют генерацию кода -- все больше предпочитают в рун-тайме разворачивать сложные конструкции из XML-ей или аннотаций/рефлексии. Тогда как в C++ с этим заморочек сильно меньше.
Э...
не очень хорошо представляю как в этой задаче нормально применить макросы - чтобы они не стреляли по ногам.
Зато представляю как применить шаблоны - заюзать бустовые лямбды. Меня при их виде обычно оторопь берёт :)
А насчёт кодогенерации - кодогенераторы бьют под дых рефакторингам. В С++ на это всем плевать потому что их толком всё равно нету. А в Java это убийство священной коровы ;)
>Э...
не очень хорошо представляю как в этой задаче нормально применить макросы - чтобы они не стреляли по ногам.
Да вот, самый простой пример:
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;
}
>Зато представляю как применить шаблоны - заюзать бустовые лямбды. Меня при их виде обычно оторопь берёт :)
Бустовые лямбды -- в топку!
Отправить комментарий