Из моего опыта работы в компании, где я проводил много собеседований, есть большая вероятность, что собеседник не имеет ни малейшего представления о том, как это сделать правильно. Таким образом, они подготовили набор технических вопросов и подсчитали оценку этого и сделали это вашим резюме. Это, однако, имеет много недостатков и не должно быть сделано по следующим причинам:
Вы спрашиваете точку знаний. Если программисту никогда не приходилось что-то делать в этой области, он все равно мог бы быть отличным сотрудником, но просто не знает этого конкретного ответа. Напротив, если кто-то подготовился к собеседованию и нашел ответ на этот конкретный вопрос в сети, вы получите правильный ответ, но этот человек может вообще не иметь никакого представления о актуальной теме.
Люди нервничают на собеседованиях. Мозг обладает этой замечательной возможностью отключать многие области более высокого уровня (например, логику), если они находятся в панике, что означает: если вы нервничаете, вы можете не обеспечить качество ответов, которое было бы в повседневной ситуации. Некоторые люди могут справиться со стрессовой ситуацией, как интервью, многие не могут.
С помощью одного правильного ответа вы проверяете умение людей найти этот конкретный ответ. Это один из многих навыков, в которых нуждается коллега, но не тот, который требуется только. Поэтому одного или двух из этих вопросов должно быть достаточно для проверки этой области знаний, а затем следует запросить другие навыки. Интервью, содержащее только вопросы для решения проблем, снова и снова проверяет один и тот же навык.
Какие вопросы хороших задач программирования?
У этих знаменитых вопросов «Можете ли вы написать короткую программу» есть огромная проблема, заключающаяся в том, что большинство программистов не могут написать ни одной строки кода без помощи IDE. Но это в повседневных рабочих ситуациях вообще не проблема, потому что программисту всегда помогает его IDE. Поэтому, задавая такие вопросы, как «Найди ошибку», «Напиши 50 строк кода, которые делают ...» или даже простые вопросы, необходимо принять во внимание, что у кандидата нет доступных инструментов (IDE, Google).
Например, я могу ответить вам практически на любой вопрос в течение 1 минуты, если мне поможет Google, но без подключения к Интернету я выгляжу беспомощным. Я называю это аутсорсингом памяти, и вместо того, чтобы мешать мне, это очень помогает мне сосредоточиться на том, что действительно важно - понимании основополагающей механики - потому что все остальное можно посмотреть. Но не спрашивайте меня о деталях каких-либо случайных API, потому что я их не знаю, у меня есть Google для этого.
Тем не менее, хороший вопрос задачи программирования не должен фокусироваться на знании API или специальных навыках программирования, если это не является абсолютным требованием для работы. Знания могут быть получены, поэтому лучше узнать, насколько хорош этот человек в получении знаний, чем спрашивать, что он / она уже знает.
Хороший вопрос для задачи программирования должен быть коротким, простым, с возможностью кодирования на каждом языке всего лишь несколькими строками кода, и он - особенно - должен рассказать вам как можно больше о том, как человек работает и находит ответы. Пример:
«Напишите функцию на языке по вашему выбору, которая берет массив целых чисел и переупорядочивает их таким образом, чтобы первое целое число было последним последним, а все остальные смещались соответствующим образом».
Первое, что любой заявитель должен спросить в этот момент: «Извините ... не могли бы вы объяснить задачу?». Потому что ни один программист не получил четкого описания того, что делать когда-либо. Далее следует объяснение, что код в вопросах должен выполнять сдвиг влево содержимого массива с переполнением, добавляемым справа.
Эта задача настолько проста, что любой, кто закончил любой уровень программирования, сможет ответить правильно. При этом учитывается, что программист должен работать без инструментов, а нервозность снижает способность логически мыслить. Тем не менее, он по-прежнему говорит о том, как люди решают проблемы, исходя из того, как сформулирован вопрос, и того, как люди к нему подходят, просто потому, что сдвиг влево противоречит общему инстинкту «слева направо» и заставляет людей думать Второй.
Существует множество возможных ответов на этот вопрос, поэтому важно внимательно посмотреть на то, как разрабатывается код, а не на то, будет ли решение действительно работать. Претендент проверяет на ноль? Как сохраняется переполнение? Используется ли цикл или набор записей? Как заявитель проверяет правильность кода? Этот простой вопрос рассказывает вам всю биографию о том, как работает этот человек.
Каковы хорошие вопросы общего знания?
На хорошие вопросы легко ответить, они позволяют получить большое количество ответов (так называемые «открытые вопросы») и позволяют вам узнать как можно больше о заявителе за короткое время.
Примеры:
(Спрашивая программиста на C ++): «Какие еще языки кроме C ++ вы знаете?»
Это вопросы начального уровня, которые дают заявителю реальную возможность выручить в данный момент, если он ничего не знает о заданной теме. «Нет» в этот момент лучше, чем мучить его / ее еще несколькими вопросами, на которые он / она должен ответить: «Извините, я ничего об этом не знаю».
Кроме того, он говорит вам, прежде всего, о том, какие другие языки знает этот человек, кроме того, вы узнаете, насколько заинтересован этот человек, чтобы получить более широкое представление о мире программирования, или если у вас есть кто-то только с единственным языком (и, следовательно, особенностями / методами). ) Посмотреть.
(Далее, допустим, он знает Java). Каковы три основных отличия между C ++ и Java по вашему мнению? "
Это открытый вопрос, который позволяет получить много ответов, поэтому у заявителя есть хорошие шансы найти как минимум три. Запрашивание (тройка личных мнений) не только ограничивает возможные ответы, но и вынуждает кандидата сортировать по приоритету. Тем не менее, это (или должно быть) легко ответить.
Это простой вопрос, который проверяет много глубоких знаний о разных языках программирования. Насколько глубоко знание этих тем на самом деле? Из этих ответов вы можете многое рассказать о знании и реальном понимании основополагающей механики языков программирования. Сколько этот человек потратил на грязные детали, или если он или она просто кто-то, кто связывает воедино различные функции API, не зная, что происходит под ними.
Эта концепция вопросов начального уровня, за которыми следуют простые вопросы с углубленным знанием, может использоваться и для большинства других тем. Всегда в этой схеме: вопрос спасения, вопрос проверки, углубленный вопрос. Другой пример (из интервью на Java):
- «Как бы вы оценили свой опыт многопоточной разработки?»
- «Назовите, пожалуйста, три наиболее важные вещи, которые следует учитывать при разработке многопоточного приложения».
- «Назовите три класса из Java API, которые могут помочь вам в разработке этих приложений, и кратко опишите, для чего они используются».
Эти три вопроса расскажут вам больше, чем любой технический вопрос, что кандидат действительно знает об этих темах, и в то же время справедливо ответят с учетом точечных знаний и уровня стресса.
Поэтому в следующий раз, когда кто-то задаст вам 20 вопросов по кодированию подряд, вы поймете, что он или она не имеет ни малейшего представления о том, как правильно провести собеседование с кем-либо. ;)