Connect with us

Разработка

Ищите лучших разработчиков с помощью чтения кода

Для выявления талантов некоторые методы работают лучше, чем другие.

Опубликовано

/

     
     

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

По старому

Типичное собеседование по программированию начинается примерно так: «Напишите функцию, которая меняет порядок букв слов в строке на обратный». Затем в течение следующих получаса или более кандидат чертит что-то на белой доске (или в общем текстовом документе, если повезет). Такой подход плох по ряду причин:

  1. Одни и те же вопросы с собеседований распространяются по кругу, и кандидаты часто очень усердно тренируются, чтобы запомнить ответы. Вы проверяете их навыки или их способность запоминать ответы?
  2. Проблемы часто представляют собой «хитрые» задачи, требующие глубокого понимания, чтобы найти O(log (n)) решение. Истинное озарение почти никогда не приходит даже к самым умным кандидатам во время собеседования.
  3. Это смещает баланс сил в пользу интервьюера. Кому нравится неуклюже писать код перед судьей, который будет определять ваши профессиональные перспективы на следующие несколько лет?
  4. Писать код на вайтборде или даже в текстовом документе неестественно и медленно. Никто не рисует код на доске или в блокноте в рамках своей повседневной работы. Что люди действительно делают, так это набрасывают код в IDE с большой помощью Google.

Лучший способ

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

  1. Чтение кода исследует самые фундаментальные навыки. Чтение кода, вероятно, составляет 95% того, что разработчик делает в рамках своей работы. Пишет ли разработчик новый код, исправляет ошибки или создает документацию, он постоянно читает его. Какие способности нужны программисту, чтобы хорошо читать код? Есть пара важных: 1) способность запоминать переменные и расположение стека и 2) способность обобщить фрагмент кода, как только он его понимают. Я могу запомнить вопросы по кодированию на собеседовании, но я не могу подготовиться к тому, что меня впихнут в какой-то случайный код (кроме того, что я буду постоянно писать и читать код). Практически невозможно подделать эти навыки.
  2. Читать код намного эффективнее, чем писать. Кандидат может многое рассказать вам о своих навыках программирования в первые пять минут чтения, потому что чтение легче и на порядок быстрее, чем письмо. На собеседовании с чтением я могу обсудить около полдюжины важных тем за то время, которое потребовалось бы тому же человеку, чтобы написать код для перестановки символов в строке.
  3. Чтение облегчает кандидатам задачу по сравнению с написанием кода. Для интервьюера стресс собеседника — враг, потому что он повышает адреналин, который снижает IQ на несколько пунктов, из-за чего вы пропускаете хороших кандидатов. Кандидаты предпочитают читать код отчасти потому, что им не нужно писать его, а также потому, что интервьюер может легко корректировать вопросы чтения в соответствии с навыками кандидата. (Эта корректировка может включать в себя написание кода, если кандидат этого хочет.)

Как я это делаю на практике

Вот несколько практических моментов в том, как я на самом деле делаю это на собеседованиях:

  • Для каждого нового цикла интервью я создаю набор упражнений с прогнозируемыми результатами, которые начинаются очень легко, а затем усложняются. Мой текущий набор начинается с вызова базовой функции, затем многоуровневых вызовов функций, затем рекурсии, а затем побочных эффектов. Как правило, это «притворные» функции, которые предназначены для того, чтобы дать кандидату быстрый успех и дать мне некоторые подсказки о том, как пройдет остальная часть собеседования. Для более сложных вопросов я извлекаю код из того, что написал. Мои текущие «сложные» вопросы исследуют способность делать абстракции во время чтения, а также следить за асинхронными операциями. (Некоторые другие вещи, которые обуславливают хорошее чтение, — это непомеченные подпрограммы, которые выполняют хорошо известные алгоритмы, такие как сортировка или обход дерева, поиск ошибок по выходным данным об ошибках.)
  • Прежде чем задавать вопросы кандидатам, я сопоставляю свои вопросы с людьми, с которыми работаю, поэтому у меня есть реалистичные ожидания относительно того, как оценить навыки кандидатов. Калибровка вопросов также помогает мне уточнить их и отсеять запутанные.
  • В начале интервью я объясняю:
    • Я НЕ проверяю знание синтаксиса. Относитесь ко мне как к Google с поддержкой ИИ, и я просто скажу вам, что делает какая-то функция или оператор.
    • Я не жду, что вы закончите, потому что этого никто не сделает. Мы просто остановимся через 20 минут.
    • Я не жду от вас правильных ответов. Если ответ неверный, я бы хотел, чтобы вы вернулись и отладили свое мышление. Это так же ценно для меня, как и все остальное.
  • Тест проходит так:
    • Я показываю закомментированную строку кода, которая вызывает некоторую функцию и возвращает значение.
    • Кандидат читает код и предсказывает значение.
    • Я раскомментирую строку и запускаю программу, чтобы он мог увидеть ответ.
    • Если ответ отличается от их прогноза, они возвращаются и объясняют, почему.
  • Я даю кандидату 20 минут, чтобы пройти как можно дальше. Это дает мне дополнительное время, чтобы задать дополнительные вопросы. В отчете об интервью я пишу, как далеко продвинулся человек и какие сильные и слабые стороны он показал.

Очевидно, что эти специальные навыки программирования — не единственное, что нужно проверять на собеседованиях. Знание предметной области и культурное соответствие важны, однако я считаю, что чтение кода отлично справляется с отсеиванием кандидатов, которые не подходят по тому, что важнее всего.

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

Надеюсь это поможет.

Источник

Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Advertisement

Популярное

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: