среда, 7 сентября 2011 г.

Прекращаем писать код

Это выступление отличается от всех виденных мною ранее. Не знаю как кого, но меня не пугает уместный мат и цитаты с udaff.com (все-таки под одними интернетами ходим). Итак, выступление проводилось в рамках конференции Devpoint 2 (октябрь 2010 года). Это как раз то мероприятие для которого в твиттере искали инвалида-колясочника, чтобы он встал и вышел во время доклада про IE9 :). Докладчик Андрей Аксенов. Разработчик движка для Санитаров подземелий, Kings Bounty, а также кучи никому неизвестных игрушек :). Автор популярного поискового движка Sphinx, который используют Mozilla, WordPress, Slashdot, Хабр и многие другие. В общем и целом этому человеку однозначно есть о чем поведать публике.
Повествует Андрей о следующих вещах (презентация здесь):
0. Для начала он предупреждает слушателей, что выложит весь свой опыт во всю длину на стол, а также то, что доклад ничего нового не откроет и все все уже знают.
1. Затем приводит классификацию программерских психотипов. Идеального программиста в которой само собой не существует. Все косячат и это надо принять за аксиому. Самым важным конечно в этой классификации это откровение о том, что большинство из этих психотипов докладчик уже видел в зеркале.
2. Далее следует рассказ на примерах о том как важно не впадать в крайности. Затрагиваются очень много вопросов: оптимизация, лишний код, проверки в коде, синдром NIH, изобретение велосипедов, тестирование и т.д. Все это преподнесено как набор дуализмов, которые должны показать как важно всегда находить золотую середину.
3. И за всем этим следуют императивы и "прописные истины", услышав которые каждый одобрительно кивает и разводя руками заверяет что-то типа "Ну, это все знают!". Однако при этом в реальной жизни этими правилами как минимум пренебрегает, а то и вовсе не использует.
Теперь о личных впечатлениях. Я смотрел это видео уже два раза (в конце прошлого года и этим летом) и эффект после просмотра был одинаковый: хочется действовать. И не просто чем-то заниматься, а делать свою работу оптимально и эффективно, не бросаясь при этом в крайности. Хочется мыслить трезво и резво, а также делать только то, что действительно важно.
Андрей повторяет не раз мысль о том, что доклад глубоко саморефлексивный. И это действительно так. Мне очень понравилась часть с классификацией типов программистов. Некоторых я сам уже видел в зеркале, а некоторых других уверен еще обязательно увижу.
Конечно, опыт докладчика большим образом относится к геймдеву (все-таки N лет в разработке игр сказываются), но поднимаемые темы выходят далеко за пределы программирования игр. И для меня главная цель выступления кроется в том, чтобы призвать слушателя обратиться к самому себе и побудить его к совершению осознанных поступков.
Отдельно отмечу презентацию: мысли лаконично выражены и разбавлены яркими подходящими иллюстрациями. Еще понравилось то, как прекрасно докладчик работает с аудиторией. Очень быстро затягивает и не отпускает ее внимание до конца доклада. У меня этому одно простое объяснение: потому что программист для программистов.
Ну и как обычно запомнившиеся и не связанные между собой тезисы:
  • Невозможно вот так вот сразу начать писать код правильно. Для начала его нужно ПЕРЕСТАТЬ ПИСАТЬ НЕПРАВИЛЬНО.
  • С наездами в сторону javadoc согласен. Не хочется начинать телегу про самодокументирующийся код, но в реальности в комментариях больше всего нуждаются именно сложные участки кода. Опять же важен здравый подход и умение видеть, где действительно необходимо пояснять и комментировать.
  • Преждевременная оптимизация должна быть востребована. Не стоит зашиваться в мелочах, пока неизвестно как работает сама система и где действительно ее слабые места.
  • Боязнь лишнего кода. Как часто бывает увидев, что несколько строчек дублируются, я начинаю судорожные метания по коду, ввожу по 3-4 дополнительных класса, произвожу обобщения, решаю метапроблемы и... И нахрена я это делаю? Когда можно тупо скопировать 4 строчки кода и продолжить работу. В общем, вовремя остановится - это безумно необходимый навык.
  • Программирование не искусство, а ремесло. Сравнивать с проституцией я думаю слишком радикально, но важно понимание, что это всего лишь инструмент, помогающий решать проблемы.
  • Тесты должны запускаться в один клик. Иначе тестирования нет.
  • Абсолютно согласен с тем, что задействовать мозг на полную приходится всего несколько раз в год, а остальное время достаточно мозжечка и рук, дабы жонглировать уже известным. Это правда. Нечего о себе мнить, что ты решаешь мегасложные задачи, когда только и занят тем что рисуешь формочки для банков. Решать хорошие, на самом деле сложные алгоритмические задачки на производстве выпадает ой как редко. Все больше сил уходит на кодирование очередной формочки; настройку системы, модулей и их взаимосвязей; написание проверок, тестов и прочего. Конечно, архитектурные задачи тоже возникают, но их решение опять же больше зависит от опыта и набитых шишек.
  • И вообще, программист – это небольшая природная склонность и 10-20 лет тренировок.
Резюмируя скажу, что уж очень понравился мне доклад и ненавязчивая, но при этом призывающая рефлексировать, манера исполнения. Теперь думаю даже взять за правило, пересматривать это видео, скажем, раз в год. Потому что реально вправляет мозги и заставляет трезво мыслить.

1 комментарий:

  1. Про формочки метко подмечено :)
    А доклад действительно хороший, выполнен в необычной манере, будто рассказывает на посиделках за кружкой пива. И воды нет :)

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