*** ВНИМАНИЕ: Блог переехал на другой адрес - demin.ws ***

среда, 31 марта 2010 г.

Продуктивные программисты

Не секрет, в сфере программирования работает много особей мужского пола. И также не секрет, что настоящие программисты обожают померяться п… знаниями, а конкретно, в плане чья программа круче! Лично я не являюсь крутанским мега крутаном в плане алгоритмов, и мне далеко до бойцов высшей лиги TopCoder’а, Google Code Jam’а и т.д., но алгоритмы люблю и ими интересуюсь.

Но как мне кажется, алгоритмы – это не единственная сфера интересов нашего брата. Есть еще языковеды, которые будучи разбуженные ночью могут сходу правильно написать любой хитрый шаблон в С++ или связку задорных лямбда функций, вместо унылых циклов и условий в Питоне и т.д., так как досконально знают язык во всех мелочах.

Далее есть спецы по различным API – например, им не надо глядеть в man каждый раз при вызове socket (7), чтобы вспомнить, как там правильно подавить появление сигнала SIGPIPE и т.д.

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

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

Может, есть и еще категории (если кто знает, прошу делиться).

К чему я все это веду. Грамотно, когда при собеседовании кандидатов (лично или по телефону) задействуют обычных программистов, причем желательно выбранных случайно, и желательно, чтобы проводящий интервью имел минимум личной информации о кандидате, так как его задача оценить только технический уровень, а всякие темы типа мотиваций и причин оставить на отдел кадров. Идеалистичная картина, но к ней хочется стремиться.

У нас контора весьма крупная. Количество программистов более нескольких сотен. Есть из кого выбирать для интервьюирования. Многие не любят учувствовать в этом, но лично я люблю. По нескольким причинам. Во-первых, постоянно есть возможность глядеть на себя со стороны, так как если человек по телефону как орехи разделал все твои вопросы или поставил тебя в тупик встречным вопросом, то может ты как-то уже профессионально «засахарился»? Или если большинство коллег дали совершенно противоположную твоей оценку, может ты спрашиваешь какую-то ерунду и думаешь, что это важно? А во-вторых, есть появляется возможность быть в курсе, что вообще сейчас на рынке труда.

Теперь совсем к теме. Интересно слушать, как люди проводят интервью по телефону. Что они спрашивают, на чем делают акценты. Тут сразу становится видно, кто какой категории принадлежит человек (алгоритмист, языковед, API’ист, теоретик и т.д.)

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

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

  1. Интервью по телефону? Ололо. Это что за ноу-хау?

    ОтветитьУдалить
  2. "Интервью по телефону" - это 30-40 минутная беседа по телефону с кандидатом, призванная отсеить некоторое количество совсем неадекватных людей и не допустить их до личного интервью, тем самым оставив больше возможностей встретиться лично с реально потенциальными кандидатами.

    ОтветитьУдалить
  3. Вещи, которые волнуют меня (кроме алгоритмов и синтаксиса):
    умение доводить дело до конца
    умение отлаживать код, хотя бы свой собственный
    умение давать временные оценки с не очень большой погрешностью

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

    ОтветитьУдалить
  4. Alena: Важные моменты, факт. Пункты 2 и 3 еще можно как-то попытаться просветить на собеседовании. Но как быть с пунктом 1...

    ОтветитьУдалить
  5. >> это 30-40 минутная беседа по телефону с
    >> кандидатом

    Ого. Это надо быть реально балоболом, я знаю не многих, кто вообще способен говорить по телефону минут десять - это просто реально напрягает.

    Хотя у капиталистов наверно так. Как я понимаю, вы сейчас у них :)

    ОтветитьУдалить
  6. mrbrooks: Ничто не мешает прекратить беседу в любой момент (так и бывает), если очевидно, что продолжать смысла нет. А вот с если все идет нормально, то и 40 минут - это реально мало, и приходиться уже работать по принципу - все, что не успели, идет кандидату с минус.

    ОтветитьУдалить
  7. Надо было сразу все спрашивать:)
    А как вы туда устроились? Как узнали о вакансии, как прошли? Было бы интересно все это узнать=)

    ОтветитьУдалить
  8. Я подавал в Блумберг дважды. Оба раза просто через их сайт ваканский, без каких-либо внутренних реферралов. К счастью, оба раза были в наличии вакансии без требования специализированных знаний по finance, trading systems и т.д., так как у меня таковых не было.

    Оба раза мне весьма оперативно отвечали из внутренного рекрутинга в течение двух недель, и давали ссылку на прохождение Brainbench по C++ Fundamentals, чтобы отсеить явных неформалов (Блумберг сейчас - это жесткий С++ под UNIX. Конечно есть дофига legacy кода на С и Фортране, и в нем порой надо копаться, но новое пишется только на С++ и тут к этому подходят очень серьезно. Например, автор многих книг по С++ John Lakos работает у нас и заведует внутренними плюсовыми библиотеками). Баллов потом не говорят, но я проходил этот тест сам до этого, и знал примерно свои силы. Если с тестом все нормально, устраивается телефонное интервью, как я описал выше. Оба раза я их тоже прошел.

    Но вот на личном интервью в первый раз я облажался по полной программе. Тут как попадешь. В тот раз были господа, которые любили логические задачки вместо программистских, а с ними всегда лотерея, ибо не всегда успеваешь сосредоточиться, въехать с тему и в 5-10 минут ее решить, нервозно все и т.д. В финале, помню, я даже не сумел уже вспомнить и разницу между SEGV и SIGBUS в UNIX'е.

    И в итоге меня не взяли, и я устроился в другое место. Тоже хорошее, что там было ну о-о-о-чень много любителей Явы и старого кода на С, который под эту Яву пытались перетянуть, а за проекты на С++ приходилось биться. Я через два года я решил еще разок заправить резюме в Блумберг. Написал сопроводительное письмо, освежил знания по Brainbench'у, и заслал все снова. И в этот раз на личном интервью все было хорошо. Много, в несколько заходов трясли по С++, С и UNIX'у, multi-threading, алгоритмам, но как-то все прошло удачно, и буквально через пару дней они сказали "да". То есть весь процесс от начала переписки занял около месяца.

    Сразу предупрежу вопросы про визу и разрешение на работу -- у меня они были до, по "семейным обстоятельствам". И именно они являются для граждан России одной из больших проблем при устройстве на работу в Англии, но сейчас, работая в Блумберге, общаясь с нашими рекрутерами и представляя, как это все работает, могу сказать, что если человек хорош -- более 5 лет реального опыта постоянного программирования на С++ и работы с большими проектами (скорее всего попросят рассказать, что, как, почему, какие сложности решались в проектах и т.д.), хорошие результаты собеседований -- то для Блумберга не является проблемой вообще дать человеку визовое спонсорство (фирма большая и интернациональная, поэтому иностранцев работает много). Иногда, когда человек не может просто так легко взять и приехать на личное собеседование (из России, например, просто так не наездишься), то проводят дополнительные собеседования по телефону, что максимально снизить вероятность срыва на личном интервью, хотя именно оно является решающим.

    Не хочу говорить, что это все просто, но это реально.

    ОтветитьУдалить
  9. Из последних десятка постов единственный стоящий.
    Кстати, а где в вашем списке типажей практики? :)
    И последнее, согласен с Алёной.

    ОтветитьУдалить
  10. libc6: А чем именно отличается практик? ;-)

    ОтветитьУдалить
  11. Думается, практик, это такой программист, который досконально изучает некую область (технологию, концепт, фреймворк) и в ней работает, пока это актуально. Близок к API-шнику, но все-таки не он.

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