среда, мая 02, 2007

Хорошие вопросы

Про вопросы на собеседовании очень многие уже писали. Но мне кажется все писали неправильно :-) Вообще-то я глубоко убеждён в том, что собеседование - процесс практически безнадёжный и что единственный способ понять подходит ли человек для работы - это поработать с ним. Ну поскольку этот способ слишком дорогой, то приходится прибегать к собеседованию.

Все соображения на тему "Как проводить собеседование" напоминают мне одну известную шутку.

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

Так, вот не хочу чтобы так проводились собеседования. На мой вкус самое главное что стоит попробовать проверить - это понимание основ. (Я пишу конечно только про программистов). Просто программист без основ, на мой взгляд, невозможен.

Поэтому я просто приведу примеры вопросов, которые могли бы спровоцировать дискуссию, раскрыть насколько хорошо человек понимает основы (не сгруппированы по тематике):

  1. Что такое порт? (в смысле TCP/IP порт) Зачем он нужен? (В смысле - для чего используется)
  2. Зачем нужна операционная система? (В смысле - для чего используется)
  3. Зачем нужны точки в ip-адресе?
  4. Как определить в какую сторону растёт стек?
  5. Зачем нужен компилятор?
  6. Ведь микропроцессор оперирует исключительно двоичными числами? А как же получаются буквы?
  7. Что такое программа? (компьютерная программа)
  8. Что такое "сложность вычисления"?
  9. Зачем нужны системы управления базами данных? Да и сами базы данных?
  10. Что такое ASP (или JSP, или PHP, или ... )? На самом деле этот вопрос не совсем то, чем кажется. Я вероятно просто не смог его аккуратно сформулировать. В качестве ответа я конечно ожидал бы не расшифровку аббревиатуры и даже не краткое описание самой технологии. Я ожидал бы беседы о том, как работает типичный web-сайт.
Замечание: некоторые из вопросов могут показаться слишком лёгкими или слишком "общими" или даже оскорбительными чтобы задавать их человеку с серьёзным опытом работы. Мне кажется, что это не так.
  1. Вопросы являются лёгкими, если ты знаешь правильные ответы. Это прекрасно!
  2. "Общими" или даже "расплывчатыми" вопросы сделаны специально - чтобы спровоцировать обсуждение.
  3. А насчёт того можно ли задавать человеку с 10-летним опытом работы вопрос "что такое программа"... Ну понимаете, представьте себе на секундочку, что он не ответит.
    (кстати, в качестве ответа на такой вопрос вполне могут послать в края отдалённые и всем известные ... в большинстве случаев я бы считал это правильным ответом :-))

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

Более того, мне хотелось бы надеяться, что эти вопросы полезны сами по себе. Что я имею ввиду? Многие вопросы для собеседований ценны только до тех пор, пока кто-то не прочитал на них ответ. В частности, такой проблемой страдают многие "каверзные" вопросы, такие как задача о взвешиваниях 8 монет, перевозе разных тварей через реку и так далее. В большинстве случаев, при задавании подобных вопросов проверяется не столько "логическое" мышление, сколько слышал раньше человек этот вопрос (и ответ на него) или нет.

Я же надеюсь, что вопросы, подобные тем которые я здесь привёл, не теряют своей ценности после того как человек узнал на них ответ. Если я не знал ответа на вопрос зачем нужна операционная система, не понимал этого для себя, принимал её существование как данность, не задумываясь о причинах, по которым люди решили создать подобную сущность, то обсуждение всего этого меня обучит. А это и есть самое главное. А уж научиться отвечать на вопрос о том как в С++ при помощи шаблонов (templates) посчитать факториал на этапе компиляции я смогу позже. Да и нужно ли это?


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

Iv комментирует...

предлагаю еще один вопрос в копилку :)

Что такое тип данных?

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

Lev Kurts комментирует...

Вопрос отличный! И,на самом деле, очень глубокий. Очень хорошее обсуждение этого вопроса есть в классической работе: У. Дал, Э. Дейкстра, К. Хоар "Структурное программирование", М., "Мир", 1975

Анонимный комментирует...

сайт с вопросами задаваемыми программистам на собеседовании http://odoline.ru/content/view/17/11

Николай Войнов комментирует...

Все эти вопросы наверное больше бред, чем реальность. Об этом говорят например Шведы в "Караоке-капитализм" и "Бизнес в стиле фанк", еще раньше об этом хорошо сказал Фергюса О'Коннел
http://nvoynov.blogspot.com/2007/04/blog-post_2758.html

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

Особенно это проявляется в ИТ, где специализация за горой деревьев не позволяет увидеть леса.

Анонимный комментирует...

Вот еще на этом сайте выкладываются вопросы для собеседований программиста

Alexey комментирует...

К вопросу о хорощих и плохих вопросах,тема и ее проявления не исчерпаемы очередная итерация, причем моментами, как в блоге так и на хобре - довольно прикольная :) http://blogs.gotdotnet.ru/personal/gollum/PermaLink.aspx?guid=f4a1bacb-7ccb-47c6-943e-c045b7c57090