Как распознать хорошего программиста? [закрыто]


131

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

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

Изменить: Согласно ответу Маноджа, вот вопрос, связанный с задачей кодирования на собеседовании.


3
<шутка> Чтобы распознать хорошего программиста, я всегда использую Дресс-код программиста в качестве ярда. ;-) </ joke>
Galwegian

7
Мне около 6 ', 185 фунтов., Бритая голова и козлиная бородка. На мне Чак Тейлорс и синяя футболка поверх белого термоблока. Пожалуйста, осторожно проголосуйте за меня - я ответил на вопрос. :)
MusiGenesis

6
Связанные или дублированные: programmers.stackexchange.com/questions/4614/…
Maniero

1
вот еще один взгляд на тему - Как взять интервью у программиста

2
Этот вопрос хорошо подошел для этого сайта в 2008 году, когда его спросили. Пять лет. Пять лет спустя Prog.SE превратился в SO2, дубликат.
Уоррен П

Ответы:


157

Пусть они расскажут о том, что им интересно. Мне еще предстоит встретиться с разработчиком, который действительно увлечен разговорами о программировании, но не может на самом деле писать код. Конечно, они вполне могут существовать - и ваше собеседование также должно проверять компетентность - но страсть - хороший показатель в моем опыте. (Обратите внимание, что это не то же самое, что умение «говорить и говорить» в терминах модных слов.)

Спросите их, что им не нравится в их любимом языке или платформе. Как бы они исправить вещи? Что бы они хотели увидеть в следующей версии? У них есть хобби проекты? Если у них есть блог, прочитайте его. Проверьте их общее присутствие в Интернете.


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

25
Страсть не обязательно означает профессионализм или командную работу. Они могут просто захотеть кодировать то, что круто / весело, а не то, что требует кодирования.

22
@Preston: Хотя это, безусловно, верно в теории, я не встречал ни одного страстного человека, который тоже не был бы рад хрюканью. Я встречал кодировщиков prima donna, которые думают, что они выше всего этого, но в целом они не страстные. Тестирование на профессионализм в любом случае довольно сложно ...
Джон Скит

36
ПРОВЕРЬТЕ

83

Нанимать хороших людей сложно .

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

Я с большим уважением отношусь к вопросам экрана телефона Стива Йегге и использовал это как основу для интервьюирования людей с некоторым успехом.
Я также думаю, что стал лучше проводить собеседования с людьми после прочтения руководства Джоэла по проведению собеседований с партизанами (сейчас в версии 3.0 это опережает версию для Интернета и всего остального, это просто должно быть хорошо).

Есть также 57 других вопросов (по состоянию на 20/11/2008) о разработке программного обеспечения Stackexchange, отмеченных интервью, и некоторые из них выглядят очень актуальными, так что проверьте их.


2
Нанимать хороших людей непросто. :)
конечная причина

7
Вопросы на экране телефона начинаются хорошо, но затем все больше и больше вопросов становятся смешными. Я, например, не думаю, что хороший программист должен знать 2^16наизусть. А ускоренная версия внизу - просто плохая пародия.
Питер

Ссылки SO кажутся неработающими (без результатов или 404).
Stijn Geukens

@StijnGeukens, похоже, этот тег был перенесен в Software Engineering. Я обновил ссылку.
Хэмиш Смит

47

Некоторые идеи:

  • Задайте несколько открытых вопросов с нескольких разных точек зрения:

    • Просмотрите код. Что идентифицировано? Технические ошибки, несоответствия стилей, комментарии, алгоритмы, ремонтопригодность и т. Д.
    • Напишите немного кода. Ищите процесс, пуленепробиваемость, читабельность и т. Д.
    • Создать высокоуровневый дизайн для небольшой системы. Ищите понимание проблемы, подход, коммуникации, полноту, детали.
    • Опишите процесс разработки программного обеспечения. Ищите дизайн, сотрудничество, обзор, тестирование, хорошие / плохие привычки и общий опыт.
  • Выберите что-нибудь - что угодно - кандидат утверждает, что знает хорошо. Задайте простой вопрос, а затем, основываясь на ответе, задайте другой, чуть более подробный, и продолжайте «копать», пока не достигнете предела знаний кандидата. Это дает вам представление о:

    • Честность: знает ли он столько, сколько требовал?
    • Глубина знаний: насколько хорошо он / она изучает вещи?
    • Общение: насколько хорошо он / она объясняет вам что-то незнакомое? Логичен ли мыслительный процесс?
    • Реакция на стрессовые ситуации: насколько усердно он / она работает, чтобы ответить? Он / она притворяется? Является ли неизбежное «я не знаю» легким или трудным?
  • Спросите, как кандидат справлялся с различными ситуациями на предыдущих работах: командная работа, просроченные проекты, отладка и т . Д. Ответы положительные или отрицательные? Страстный? Умный? Высокомерный?

Я нахожу лучших кандидатов восторженными, опытными, уверенными, но вежливыми и, самое главное, настоящим . Вам нужно знать, что внутри кто-то есть. :-)


4
Я помню свое первое собеседование по программированию. Меня попросили просмотреть напечатанный код. В верхней части были некоторые комментарии, которые объясняли, что сделал код. Я подтвердил это, прочитав код, а затем дословно прочитал комментарии, и они сказали: «Очень хорошо!» Я сказал: «Да, это в значительной степени говорит об этом прямо здесь, в блоке комментариев». Они были довольно смущены.
Дастин

@Dustin IMO было довольно небрежно (?) С их стороны просто оставлять комментарии в коде, который кандидат должен просмотреть. Это в основном дает им свободный ответ или путаницу, основанную на том, что содержится в комментарии.
cst1992

39

Чтобы признать хорошего программиста, вы должны быть хорошим программистом. Это означает, что вы должны очень хорошо разбираться в программировании, чтобы понять, что сказано и сделано в интервью, и вы должны знать, какие вопросы задавать.

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

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

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

Редактировать: я также написал комментарий об интервью здесь .


3
Вы абсолютно правы в поиске Google - хорошему программисту не обязательно знать все, но он должен уметь быстро это выяснить.

2
«кто-то, кто знает много программирования и имеет хорошие навыки работы с людьми» ... и в этом проблема - найти его нелегко. Обычно у них есть только один навык из них. Вот почему я делаю все возможное, чтобы улучшить обе ветви :-).

7
Наличие больших навыков людей обычно конфликтует с тем, чтобы быть абстрактным мыслителем. Не быть абстрактным мыслителем обычно конфликтует с тем, чтобы быть хорошим программистом.
Томалак

7
Гиус: Если вам повезет, вы найдете программистов, которые понимают, что люди являются биологическими компьютерами, и поэтому заинтересованы в том, как мы работаем / думаем. У них тоже часто развиваются хорошие навыки общения с людьми, так как они заинтересованы в улучшении себя и в этой области.

Эйгир: Я согласен. Но, как кто-то здесь уже упоминал - если вы найдете кого-то, вы выиграете джекпот ;-). Я надеюсь, что нам повезет.

23

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

Личность программиста должна быть выше в списке, чем большинство работодателей, кажется, оценивают это. На моем нынешнем рабочем месте они очень осторожны при найме правильного человека.

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


1
Если они презирают работу с другими людьми, как вы можете назвать их «лучшим программистом в мире»? Программирование, конечно, не просто говорит с компилятором и разбивает код на части, большинство задач программиста / разработчика программного обеспечения требуют определенного сотрудничества.
Кристофер Кройциг

Я понимаю вашу точку зрения, но в этом контексте «Программирование» - это просто кодирование, иначе я бы использовал термин «Разработчик программного обеспечения». Термины «Программист» и «Разработчик программного обеспечения» не являются синонимами.
Доктор Джонс

6
Нет, на самом деле, многие люди не могут научиться быть лучшими программистами. И, честно говоря, если у них 5-10 лет опыта, я бы ожидал, что они уже знают, как, вы знаете, выполнять свою работу . Это НЕ ответ на вопрос; вы просто говорите: «Вы идентифицируете хороших программистов, не заботясь о том, являются ли они хорошими программистами»
Benubird

1
@Benubird моя точка зрения заключалась в том, что навыки межличностного общения могут быть более важными, чем талантливые программисты, особенно когда речь идет о работе в команде. Я не сторонник найма людей, которые не могут выполнять свою работу. Не стоит нанимать программиста «рок-звезды», если они не будут хорошо работать в вашей команде. Это не стоит трения и хлопот.
Доктор Джонс

@DoctorJones и я с тобой согласен; Вы не ошибаетесь вообще. Просто ответ, который вы дали, не является ответом на вопрос «Как узнать хорошего программиста?»
Benubird

16

Сделай им код. Дайте проблему, которую можно решить, скажем, через 4 или 5 часов, и проверьте код на предмет документации, стиля кодирования, того, как он планировал решение, прежде чем приступить к кодированию и т. Д. Ему не нужно фактически решать проблему. И, как упоминал Джон Скит, заставьте их говорить о программировании, о своем языке выбора и тому подобных вещах. Вы можете распознать страсть у хорошего программиста. Спросите, сколько сайтов, связанных с программированием, они используют, как stackoverflow. Блоги, за которыми они следят, могут быть хорошим индикатором.


Мне нравится идея дать им задание по кодированию (это можно сделать перед собеседованием), а затем использовать код в качестве предмета на собеседовании. Заставьте их объяснить, почему они выбирают разные решения и так далее ...

Вообще, идея о задаче кодирования очень хорошая. Но я боюсь, что создать задачу, которая действительно показала бы, что в них, довольно сложно - и хорошая тема для другого довольно долгого (но очень интересного!) Обсуждения. ... мы должны задать вопрос об этом здесь? ;-)

Список их любимых блогов станет отличным индикатором!

6
У меня было интервью по кодированию. Интервьюер настоял, чтобы я обсудил с ним свое решение. Я бы выдвинул идею, он предложил бы способы, которыми она может потерпеть неудачу. Таким образом, он узнал, как я работаю над проблемой. Это было самое трудное и самое справедливое интервью, которое я когда-либо имел.

@gius - думаю, тебе стоит задать этот вопрос.
Маной

16

Мне нравится страстный ответ. Я считаю, что вы должны быть увлечены тем, с чем работаете, чтобы на самом деле быть очень хорошими в этом.

Хороший программист на стороне программы помимо работы (время от времени, по крайней мере). Он / она любит решать проблемы программирования. И когда он / она не может найти программу, которая решает конкретную проблему дома, он обычно пытается решить ее сам.

Но есть несколько типов программистов.

  • У вас есть те, кто любит документирование. Лично я ненавижу документирование. Но документирование того, что сделано, может быть важным.
  • У вас есть "хакеры". Те, кто одержим решением сложной головоломки, где, если вы, где искать Google, вероятно, не найдут решение. Они могут решить «любую» проблему, если у них есть необходимые инструменты.
  • У вас есть те, кто обучается программистам только потому, что рынок был хорош для найма на программирование. Они обычно посредственные, потому что им не хватает страсти.
  • У вас есть те, кто превосходен в общении, и они «могут решить все», но как только они получают работу, они вешают всех остальных, чтобы получить помощь в решении проблемы, которую они решают.

Если вы сможете найти «хакера», который также отлично документирует и обладает превосходными коммуникативными навыками, я думаю, вы выиграли джекпот.

Ох, и последнее. Вы, вероятно, не хотите, чтобы у программиста были амбиции лидера, поскольку он будет использовать только программирование для запуска. Это означает, что вы потеряете этот ресурс рано или поздно.

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

Это мое мнение.


2
Вдохновляющий вопрос - «Почему ты воспитал себя программистом?»

5
Мы теряем все ресурсы рано или поздно. Только камни навсегда.
Карл Манастер

1
Немного недальновиден. "Schlubladendenken"

6
Я бы проголосовал за это, если бы не «Вы, вероятно, не хотите программиста с амбициями лидера». Сотрудники, которые хотят взять на себя ответственность, жизненно важны, и вы должны найти способы продвинуть их в своей организации.
Дэнни Варод

5
У вас есть другое определение "хакера", чем у меня. «Хакер» для меня - это тот, кто «взламывает» вещи как можно быстрее, пока не получит результат (своего рода), но оставил после себя следы разрушений и ужасов, потому что они не следовали ни одной лучшей практике. «Хакер» непрофессионально.
Дэвид Мастерс

7

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


Это отличная идея, и я бы хотел, чтобы она была стандартной практикой. Как тот, кто был уволен с нескольких должностей за то, что не соответствовал культуре компании, или из-за неправильного определения уровня квалификации, я хотел бы сначала проверить воду.
ДаренW

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

@Cercerilla Правильно! Достаточно сложно даже найти время для интервью, не говоря уже о том, чтобы практиковать работу на них в течение недели.
eaglei22

6

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

Некоторые вещи, которые решают, что кто-то является хорошим программистом:

  • способен работать в команде
  • пишет хороший код, понятный и понятный
  • умеет узнавать о новых технологиях

Итак, у вас есть несколько небольших советов, о которых вы можете узнать в интервью:

  • Знает ли кандидат одну технологию / язык программирования или знает несколько? Если он знает разные языки, он, кажется, может изучать новые вещи и, возможно, он знает о недостатках своей текущей предпочтительной технологии / языка. Поэтому просите знаний помимо технологий, которые вы используете в своей компании.
  • Спросите о проектах, в которых он уже работал, особенно хобби-проекты и open-source. Хобби-проекты показывают вам, что он любит программировать и делает это даже в свободное время (и таким образом улучшает свои навыки). В проекте с открытым исходным кодом вы можете посмотреть написанный им код. Если в проекте участвует более одного человека, вы можете получить подсказки о его командных навыках. В OS-проекте вы можете посмотреть архив рассылки, чтобы узнать больше.

3

Вы могли бы провести тест на собеседовании.

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

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

Общение друг с другом не должно быть конечной целью. Чем меньше нужно общения, тем лучше, но только если меньше возможно. Меньше становится возможным, если у вас есть архитектор. Общий объем общения может оставаться на хорошем уровне, но вы получите больше результатов за тот же объем общения.


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

3

Сначала я начинаю с обычного материала для собеседования. Я считаю очень важным выяснить, стоит ли человеку передо мной чего-то и определить его / ее навыки и знания.

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

На этом этапе, когда я думаю, что передо мной может быть хороший программист, я даю ему кусок кода для проверки кода. Что я хочу видеть, так это то, что он может точно определить опасные части кода, дать некоторые подсказки по улучшениям, найти недостатки в производительности многопоточности и то, что он может отличить важные замечания от «вкусовых замечаний». Все это помогает мне найти более опытного сотрудника.

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


2

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


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

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

@Rexxar: Они все равно уйдут, если им это не понравится. Просто честнее и честнее предлагать это таким образом, ИМО. По крайней мере, для меня это было бы плюсом, а не минусом (учитывая, что это короткий временный контракт и что в конце он становится либо постоянным, либо прощается).
Винко Врсалович

3
Мне нужно продолжать оплачивать свои счета, я никогда не буду думать о том, чтобы устроиться на работу только на месяц и бросить постоянную работу за нее. Если вы безработный или у вас богатый супруг, это может сработать. С другой стороны, вы теряете много хороших кандидатов, потому что они не могут позволить себе рискнуть, что вы не лжете им о том, что они стали постоянными.
HLGEM

4
«Если человек стоит своей соли, он не будет возражать», - ну, этот разработчик сказал бы «трахни это» и найди лучшую работу.
gnasher729
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.