“Хорошие шутки” в жизни разработчиков

В пятницу подошёл ко мне Иван Ткач, чтобы обсудить предстоящую ему лекцию в ХАИ по “введению в специальность”. Встал вопрос, как показать наиболее важные проблемы нашей отрасли людям, которые ещё ничего вообще не знают… После недолгого обсуждения решили, что самой важной проблемой является несоответствие реализации ожиданиям клиента, про что я уже писал.

Как это продемонстрировать, чтобы: а) нескучно, б) задействовать самих студентов, в) не осталось и тени сомнения, что проблема имеет место быть и важна?

И тут мне пришла в голову идея – один из конкурсов в “хороших шутках” идеально отображает нашу ситуацию: там, где ведущие рисуют рисунок, одному из участников завязывают глаза и ставят перед доской, а второй, глядя на картинку, должен, называя только геометрические термины, давать указания рисующему, дабы повторить рисунок.

В общем случает выглядит это так:
ведущий –> Expectation –> описывающий –> рисующий –> Implementation

Ничего не напоминает? Ну, конечно же напоминает – вот заменяем слова ведущий, описывающий и рисующий на соответствующие роли из нашей повседневной жизни и получаем совершенно такую же картинку.
заказчик –> Expectation –> сейлс / аналитик –> разработчик –> Implementation
На том и порешили – студентам покажем конкурс: не скучно, наглядно и поучительно. А я задумался…

Возникает вопрос – какого хрена так получается? По моему нескромному мнению проблема является следствием широко распространённого мифа про то, что сейлс/аналитик – это человек, который переводит с языка заказчика на язык программиста.

На первый взгляд всё правильно. Ну, действительно, программист (если всё максимально упростить – программист на logo) прекрасно знает, что такое линии и круги, но не знает, что такое человечек, поэтому ему пытаются объяснить человечка в виде графических примитивов. Ситуация усложняется тем, что иногда (часто?) аналитик тоже не знает, что такое человечек и можно легко представить себе такой диалог:

– привет, я аналитик в вашем проекте. Сейчас мы быстро всё выясним, и программисты это сделают в лучшем виде. Итак – что же вам нужно?
– это совсем просто: мне нужен человечек!
– ок. нет проблем, для нас это не ново. только надо выяснить некоторые минорные детали – что такое человечек?
– ну… эээ… хм… ну, типа, кружочек… там под ним идёт вертикальная линия и её пересекает горизонтальная… ага, и внизу ещё 2 диагональные из одной точки – это ноги…
– ноги? впрочем неважно. я всё понял – скоро будет, ждите.

Знакомо? Наверняка до боли…

В этом месте многие поднимут руку, чтобы сказать сакраментальное “ну так заказчик же – идиот!”. Так-то оно так, да не совсем… Если рассмотреть этот диалог со стороны заказчика, то после второго вопроса у заказчика наступает стресс (если не шок!) – он встречает человека, незнакомого с понятиями, без которых заказчик себя не мыслит. В его кругу общения наверняка нет людей, которые не знают, что такое человечек. И он лихорадочно пытается придумать, как донести до нас “очевидные” вещи. Кстати, можно только догадываться, что думает заказчик про нас в этот момент… 🙂 Вы можете поставить себя на место заказчика, попытавшись объяснить воображаемому другу понятие “оператор”, не впадая в лекции по языкам программирования.

Есть ли решение этой проблемы? Конечно есть, вот только не всем оно подходит: хотя бы аналитик (а в идеале и разработчик) должен иметь знания из предметной области – бизнеса клиента. Да, это трудно, но с другой стороны только так и получается действительно хорошее ПО. Другими словами, чтобы переводить с языка заказчика, надо этот язык знать, а лучше, чтобы переводить не надо было.

Примеры на каждом шагу. Приведу те, которые мне ближе :-):

  • программу для расчётов на прочность топливных баков ракеты-носителя “Энергия” писали специалисты по прочности (одним из них был мой отец, в то время работавший в ХАИ на кафедре прочности);
  • во время перестройки спрос на наукоёмкие программы подупал, зато вырос на всякую бухгалтерию. Мой отец сел писать программу всякого учёта (приход, расход, склад, зарплата, налоги и т.д.) и, чтобы написать её он выучил бухгалтерию, т.к. привык делать только то, что понимает. Выучил, кстати, настолько, что впоследствии вместо программирования рулил несколькими бизнесами без нанятого бухгалтера.
  • специалисты по юзабилити создают супер удобные операционные системы, настолько удобные, что программисты не могут их не скопировать :-).

Что же делать? Ну, для обычных фрилансеров и аутсорсеров в общем ответа-то и нет, кроме как “страдать” :-). Или пытаться стать необычными.

Под необычностью я понимаю узкую специализацию – выучивайте что-то одно (ну или два), но досконально, и будет вам счастье. Да, потенциальных заказов будет поменьше (ведь вы искусственно ограничиваете поток клиентов), зато ваш продукт будет выше всяких похвал, и есть надежда, что поток будет постоянным. Отцу до сих пор звонят из ЦАГИ и КБ им.Сухого, просят написать кое-что… вот только денег не предлагают, но это уже совсем другая и грустная история.

Это относится как к маленьким игрокам, так и к большим – например, совсем не маленький DataArt смотрит как раз в нужную сторону. И это правильно.

P.S.: да, кстати, я тут подумал, что есть же и гениальные программисты, которые всё понимают, всё могут, и всё у них получается. Они не просто есть, они наверняка уже вытащили вилы, чтобы поднять на них меня в каментах… но этот постскриптум добавил мне ауру “броня +15”, так что я спокоен 🙂

-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~

Результаты экспериментаUPDATE: понедельник, провели эксперимент по рисованию “проектов” и вот результат:

  1. Оригинал, рисовал я;
  2. Нарисовано с закрытыми глазами, в качестве описания использовались геометрические фигуры. Рисующий знал, что рисует волка;
  3. Нарисовано с закрытыми глазами, в качестве описания использовались геометрические фигуры. Рисующий НЕ знал, что рисует волка;

Выводы несколько не однозначные 🙂

Иван считает, что №2 гораздо лучше (рисовал он) и это доказывает, что знать, что делаешь, нужно. Этот рисунок нарисован при минимуме инструкций с моей стороны, а именно 10. Другими словами, если разработчик знает, что делать, то при минимальном участии менеджера можно получить приемлемый результат.

Насте кажется, что №3 лучше (рисовала она), но для его рисования потребовалось больше контроля (типа “левее, стоп, теперь правее, линия вниз, стоп!” и т.д.). На этот рисунок понадобилось 33 инструкции. То есть, если микроменеджить, то всегда можно получить приемлемый результат.

Моё же мнение такое – судя по работе, у разработчиков руки из задницы, уволить! 🙂 Волков рисовать должны те, кто умеет их рисовать…

10 comments so far

  1. AntonShevchuk November 2, 2007 22:38

    Мне это напоминает одних моих знакомых программистов, пришлось им поддерживать 1С для своего предприятия – поначалу совершали абсолютно глупые ошибки (с точки зрения бухгалтера), а вот после года работы могли уже читать лекции по бух учету, а не только без проблем поддерживать 1С…

    Так что программист определенно должен понимать, что он делает…

    Гениальным программистом может быть каждый – стоит только посадить его с заказчиком в одной комнате…

  2. The Lex November 3, 2007 17:59

    Ходил я как-то на собеседование в одну известную компанию, предлагающую много-много денег и отличные условия работы программистам, так там одним из тестовых заданий и было как раз “ответить на вопросы, исходя из логических выводов исключительно на базе предоставленной информации, категорически не используя любой имеющийся жизненный или производственный опыт”. Поэтому пункт (2) “считает, что он нарисовал волка, поскольку он думает что а) знает, как выглядит волк; б) знает, как должен быть нарисован волк; в) умеет рисовать – как волка, так и вообще. 🙂 Результат, прямо скажем, налицо!

  3. COTOHA November 3, 2007 19:08

    ну да 🙂 я ж и говорю, что оба рисовать не умеют.

  4. erka November 4, 2007 21:52

    Все так любят рассказывать сказки про других, но никто не хочешь рассказать байку про себя. Антон, мало наличие заказчика рядом, нужно еще умеет понять его, распознать какая идея может подождать, а от которой лучше вообще отказаться. Конечно же, проще сказать: “Я делал, что мне сказали. В чем я виноват?!”

    А по поводу уволить разработчиков, то это как минимум смешно :). Сотона, ты ж этого не успеешь сделать – народ либо сам уходит (привет всем бывшим сотрудника java team), либо становится “священной коровой” (никого не хочу обидеть). Ведь проще на все закрывать глаза и говорить о высоких материях, хотя и знаешь, что нужна и общая картина проекта и микроменеджмент к некоторым его частям.

  5. COTOHA November 5, 2007 00:24

    ты какой-то злой сёдня. менеджеры обижают? но я люблю злые каменты 🙂 видимо я вербальный садомазохист.

    отвечаю по пунктам:
    1. эта байка и так про меня. где тут увидел что-то “про других”? у других всё классно и вообще там хорошо, потому что я не там.
    2. разработчик, если это не робот, действительно должен включать думалку и задавать вопросы, если не клиенту, то менеджеру. с этим согласен на 666% процентов.
    3. про уволить разработчиков, то ты видимо не заценил подтекст. в моём случае волков рисовали _менеджеры_, а у нас по определению руки из задницы, так что я просто сказал, что каждый должен заниматься своим делом.
    4. на что “всё” я закрываю глаза? я понимаю, что мне надо иметь видение проекта в целом, чтобы иметь возможность задавать правильные вопросы и выяснять конкретные детали. я его часто не имею, отсюда и этот пост. возможно я не совсем так выразил мысль… по-сути это я как ПМ рисую хз-что с завязанными глазами и это бесит.

  6. SiRex November 6, 2007 21:44

    imho надеятся на сознательность программера – утопия…
    заставить его понимать проект и предметную область хорошо – нереально.

    Я считаю что путь к качественным проектам и встреченным дедлайнам – хорошие спеки от аналитиков + тестирование

    P.S. Серега, +1. Занес блог в RSS-reader 🙂

  7. COTOHA November 6, 2007 23:43

    Привет, SiRex. рад тебя видеть, но не согласен.

    сознательный програмер – далеко не утопия, просто ты давно програмеров не видел. у тебя ж не програмеры, а арбузы (в смысле зелень) – нет?

    но хорошие спеки и тестирование конечно никто не отменяет. вот тока аналитик не напишет ХОРОШУЮ спеку без знания предметной области. нам просто везёт, что предметной областью сайтов есть интернет, который мы знаем, и это создаёт иллюзию того, что можно писать спеку не разбираясь в предмете.

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

    P.S.: ты на каменты тоже подписывайся 🙂

  8. SiRex November 7, 2007 10:34

    Насчет знания предметной области аналитиками – согласен. Я провожу тренинги по разработке сайтов с ними, они разбираются что такое css, html, php, ajax, wysiwyg, какие у нас есть модули на наш cms, как работает админка и т.д.

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

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

    imho, оставлять программеру место для самодеятельности – путь к заваленному проекту. Есть само собой супер-пупер вменяемые программеры, но много ли их? 🙂

  9. COTOHA November 7, 2007 11:42

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

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

  10. […] Как важно быть on the same line с заказчиком + продолжение Хорошие шутки в жизни разработчиков. […]

Blogroll