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

четверг, 8 апреля 2010 г.

Задачи на интервью

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

Например, задача, часто применяемая (не мной) на интервью.

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

Задача для средней школы. Хотя лично мне будет без разницы, решит ее человек или нет. Ибо есть гораздо более конкретные вопросы и задачи, чтобы понять, что человек знает, умеет и любит делать. Обычно использование подобных задач призвано потешить самолюбие самого интервьюера типа «ну я то это решил в свое время!», но вот только не уточняется, за какое время.

В плане именно вопросов-задач, куда полезнее попросить написать небольшой код для обхода дерева (например, для поиска медианы в BST), или поиска кратчайшего пути в графе, или придумать на месте хеш-функцию для каких-то данных, или, например, спросить: до N какого порядка реально решать задачи с O(N^2), а O(N^3), а на кластере? и т.д. Подобные вопросы дают реальный выхлоп, который применим в жизни.

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

Интервью – это не бенефис интервьюера. Это решение конкретной задачи поиска человека, максимально подходящего вашим требованиям (а неужели у кого-то в требованиях написано «должен уметь решать задачи школьной программы»? если да, это наем учителя средних классов, а не программиста).

Update: В комментариях подсказали полезную ссылку по теме.

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

  1. Вот и Джоэл Спольски о том же говорит: http://local.joelonsoftware.com/wiki/Искусство_проведения_интервью

    ОтветитьУдалить
  2. Вам, для полной гармонии, надо работать не с людьми, а с роботами. lol.

    ОтветитьУдалить
  3. mrbrooks наверно религиозен? или лирик-историк!

    ОтветитьУдалить
  4. Согласен. Далеко не каждый может сесть и решить подобную задачу, да и нет смылса в этом. Программист это уже давно не математик.

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