Як розпізнати хорошого програміста? [зачинено]


131

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

Отже, чи використовуєте ви будь-які формалізовані тести (чи є такі?)? Як ви розпізнаєте хорошого програміста - і хорошу людину? Чи є прості "добрі" питання, які можуть розкрити майбутні проблеми? ... чи це просто ваше "почуття" до людини (тобто, головним чином, ваш досвід), і випробування його / її?

Редагувати: Відповідно до відповіді Маной, ось питання, пов'язане із завданням кодування на співбесіді.


3
<жарт> Щоб розпізнати хорошого програміста, я завжди використовую дрес-код програмистів як ярдову палицю. ;-) </joke>
голландська

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

6
Пов’язані або дубльовані: programmers.stackexchange.com/questions/4614/…
Maniero

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

2
Це питання добре підходило для цього веб-сайту у 2008 році. П'ять років. П'ять РОКІВ пізніше, Prog.SE перетворився на SO2, дублікат.
Warren P

Відповіді:


157

Запропонуйте їм поговорити про те, що їх цікавить. Я ще повинен зустріти розробника, який дуже пристрасно розмовляє про програмування, але насправді не може кодувати. Вони, звичайно, можуть існувати - і ваше співбесідне повинно перевірити і на компетентність, - але пристрасть є хорошим показником у моєму досвіді. (Зауважте, що це не те саме, що вміти "говорити в розмові" з точки зору мовних слів.)

Запитайте їх, що їм не подобається у їх улюбленій мові чи платформі. Як би вони виправили речі? Що б вони хотіли бачити в наступній версії? У них є хобі-проекти? Якщо у них є щоденник, прочитайте його. Перевірте їх загальну присутність в мережі.


3
Чудові ідеї - особливо хобі проекти та проблеми з улюбленою мовою здаються мені справді хорошими. Це має розкрити більше про їхнє відношення до програмування. Блог - також хороша ідея. На жаль, зазвичай у них немає блогу :-(. Дякую ...

25
Пристрасть не обов'язково перетворюється на професіоналізм чи командну роботу. Вони можуть просто захотіти кодувати те, що цікаво / весело, а не те, що потрібно кодування.

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

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

Щоб визнати хорошого програміста, ти повинен бути хорошим програмістом. Це означає, що ви повинні добре знати програмування, щоб побачити те, про що йдеться і робиться в інтерв'ю, і ви повинні знати, які питання потрібно задавати.

Я бачив, як кандидати давали неправильну відповідь на співбесіді, але їх пояснення показали, що вони знають тему (і тому могли легко отримати правильну відповідь шляхом пошуку в мережі). Щоб побачити це, ви повинні дуже добре знати тему, про яку ви ставите питання.

Інша справа - уникати запитань щодо деталей, які легко можна було б отримати в Google. Ці запитання лише показують, наскільки кандидату добре пам’ятати речі, а не якщо він чи вона справді мають знання та розуміння, яких ви шукаєте.

Моя рекомендація - отримати допомогу від того, хто знає велику кількість програмування та має хороших навичок людей, щоб допомогти в інтерв'ю.

Редагувати: Я також написав коментар про інтерв'ю тут .


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

2
"хтось, хто знає велику кількість програмування та має хороші навички для людей" ... і в цьому проблема - знайти його непросто. Зазвичай у них є лише одна майстерність. Тому я роблю все можливе, щоб покращити обидві галузі :-).

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

7
Гіус: Якщо вам пощастило, ви знайдете програмістів, які розуміють, що люди - це біологічні комп’ютери, і тому їх цікавить, як ми працюємо / думаємо. Вони часто також розвивали навички хороших людей, оскільки вони також зацікавлені в удосконаленні себе в цій галузі.

Егір: Я згоден. Але як хтось тут уже згадував - якщо ти когось знайдеш, ти потрапив у джекпот ;-). Сподіваюся, нам пощастить.

23

Пам'ятайте, що вміння програмування - це не все. У вас може бути найкращий програміст у світі, який працює на вас, але якщо вони ненавидять працювати з іншими людьми, ви не вважаєте їх дуже корисними.

Особистість програмістів повинна бути вище в списку, ніж здається, що більшість роботодавців займають її рейтинг. На моєму сьогоднішньому робочому місці вони дуже обережно ставляться до найму правильного типу людини.

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


1
Якщо вони зневажають роботу з іншими людьми, як би ви могли їх назвати "найкращим програмістом у світі"? Програмування, безумовно, не стосується лише спілкування з компілятором та скидання коду, більшість завдань програміста / розробника програмного забезпечення дійсно потребують певної співпраці.
Крістофер Кройціг

Я бачу вашу думку, але в цьому контексті "Програмування" - це саме кодування, інакше я вжив би термін "Розробник програмного забезпечення". Терміни "Програміст" та "Розробник ПЗ" не є синонімами.
Лікар Джонс

6
Ні, насправді багато людей не можуть навчитися бути кращими програмістами. І якщо чесно, якщо вони мають 5-10 років досвіду, я б очікував, що вони вже знають, як робити, знаєте, робити свою роботу . Це НЕ відповідь на питання; ви просто говорите: "Ви визначаєте хороших програмістів, не піклуючись про те, чи вони хороші програмісти"
Benubird

1
@Benubird мій погляд на те, що міжособистісні навички можуть бути важливішими, ніж сирий талант програмування, особливо якщо мова йде про роботу в команді. Я не виступаю за найм людей, які не можуть робити свою роботу. Не варто наймати програміста "рок-зірки", якщо вони не будуть працювати добре у вашій команді. Тертя і клопоту не варто.
Лікар Джонс

@DoctorJones і я згоден з вами; ти зовсім не помилився. Просто відповідь, яку ви дали, не є відповіддю на питання "Як розпізнати хорошого програміста?"
Benubird

16

Зробіть їх кодом. Надайте проблему, яку можна вирішити, скажімо, через 4 або 5 годин, і ознайомтесь з кодом щодо документації, стилю кодування, як він планував рішення, перш ніж насправді почати кодувати тощо. Йому не потрібно дійсно вирішувати проблему. І як згадував Джон Скіт, змусьте їх говорити про програмування, мову вибору та подібні речі. Ви можете розпізнати пристрасть у хорошого програміста. Запитайте, скільки сайтів, пов’язаних з програмуванням, вони переглядають, як stackoverflow. Блоги, які вони слідкують за іншими, можуть бути хорошим показником.


Мені подобається ідея фактично дати їм завдання кодування (можна виконати перед інтерв'ю), а потім використовувати код як предмет на співбесіді.

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

Список їх улюблених блогів був би чудовим показником!

6
У мене було інтерв'ю з кодування. Інтерв'юер наполягав на тому, щоб я поговорив з ним своє рішення. Я б висунув ідею, він запропонував би способи її провалу. Таким чином він дізнався, як я працюю через проблему. Це було найскладніше і найчесніше інтерв'ю, яке я коли-небудь мав.

@gius - я думаю, вам слід задати це питання.
Маной

16

Мені подобається пристрасть відповідь. Я вважаю, що ви повинні бути пристрасними до того, з чим працюєте, щоб насправді бути дуже добрим у цьому.

Хороший програміст, окрім роботи (хоча б раз у раз). Він / вона любить вирішувати проблеми програмування. І коли він / вона не зможе знайти вдома програму, яка вирішує конкретну потребу, він зазвичай намагатиметься вирішити її самостійно.

Але є кілька типів програмістів.

  • У вас є ті, хто любить документування. Особисто я ненавиджу документування. Але документування того, що зроблено, може бути важливим.
  • У вас є "хакери". Ті, хто пекла на вирішенні складної головоломки, де, якби ти, де її гуглити, напевно, не знайшов би рішення. Вони можуть вирішити "будь-яку" проблему до тих пір, поки отримали необхідні інструменти.
  • У вас є ті, хто виховує себе програмістами лише тому, що ринок був хорошим для того, щоб прийняти на роботу для програмування. Вони, як правило, посередні, бо їм не вистачає пристрасті.
  • У вас є ті, хто чудово спілкується, і вони "можуть вирішити що завгодно", але як тільки вони отримують роботу, вони зависають над усіма іншими, щоб отримати допомогу у вирішенні проблеми.

Якщо ви зможете знайти «хакера», який також дуже добре документує і має чудові навички спілкування, я вважаю, що ви потрапили в джекпот.

О, і останнє. Напевно, ви не хочете, щоб програміст мав амбіції лідера, оскільки для запуску він буде використовувати лише програмування. Це означає, що ви рано чи пізно втратите цей ресурс.

Питання, яке я б задав при прийнятті на роботу програміста, було б: "Чому ви виховували себе як програміста?". Це було б мертвим піддаванням, якщо вони там вагаються.

Це моя думка.


2
Надихаюче питання - "Чому ви виховували себе програмістом?"

5
Рано чи пізно ми втрачаємо всі ресурси. Тільки скелі назавжди.
Карл Манастер

1
Трохи недалекоглядний. "Schlubladendenken"

6
Я би проголосував за це, якби не "Ви, мабуть, не хочете програміста, який має амбіції лідера". Співробітники, які хочуть взяти на себе відповідальність, є життєво важливими, і ви повинні знайти способи їх просування в організації.
Danny Varod

5
Ви маєте інше визначення для "хакера", ніж я. "Хакер" для мене - це той, хто "зламає" речі разом якомога швидше, поки вони не отримають результат (свого роду), але залишили після себе слід руйнування та жаху, оскільки не дотримувались жодної найкращої практики. "Хакер" непрофесійний.
Девід Мастерс

7

Мій друг працює у компанії, де у них є додатковий крок у процесі найму: після первинного обстеження та співбесіди, заявник повинен "перевірити роботу" протягом декількох днів. Він сказав мені , що навіть якщо один кандидат мав кожен навик і талант потрібен, вони не наймав його , тому що він був такий а нехороша людина , щоб працювати.


Це чудова ідея, і я хотів би, щоб це було стандартною практикою. Оскільки той, кого звільнили з кількох робочих місць за те, що він не відповідає культурі компанії, або через неправильну оцінку рівня кваліфікації, я хотів би спочатку перевірити воду.
DarenW

20
Проблема в цьому полягає в тому, що якщо хтось уже має роботу, він навряд чи може зняти тиждень, щоб перейти на роботу до іншої компанії, щоб дізнатися, чи справді вони отримали роботу.
Cercerilla

@Cercerilla Право! досить важко навіть знайти час на співбесіду, не кажучи вже про те, щоб пройти роботу над ними протягом тижня.
eaglei22

6

Дуже важко розпізнати програміста на основі співбесіди.

Деякі речі, які вирішують, що хтось є хорошим програмістом, це:

  • вміти працювати в команді
  • пише хороший код, зрозумілий і корисний
  • вміє дізнаватися про нові технології

Отже, у вас є кілька невеликих підказок, про які можна дізнатися в інтерв'ю:

  • Чи знає кандидат одна технологія / мова програмування чи він знає кілька? Якщо він знає різні мови, він, здається, може навчитися новому, і, можливо, він знає про недоліки його поточної вподобаної технології / мови. Тож вимагайте знань, окрім технології, яку ви використовуєте у своїй компанії.
  • Запитуйте проекти, в яких він уже працював, особливо хобі-проекти та відкритий код. Хобі-проекти показують, що він любить програмування та займається цим навіть у вільний час (і це покращує його навички). У проекті з відкритим кодом ви можете шукати написаний ним код. Якщо в проекті бере участь більше однієї людини, ви можете отримати підказки про його командні навички. В ОС-проекті ви можете знайти архіви списків розсилки, щоб знати більше.

3

Ви можете зробити тест в інтерв'ю.

Але багато разів виникає проблема і з самим робочим середовищем. Напевно, це не може бути у вашій організації, але в галузі програмного забезпечення досить поширеним є той факт, що технологічний борг стає занадто великим. Тоді, коли ви наймаєте нових людей, це не дуже допоможе, хороші вони чи ні, через борг. Максимізація читабельності та зрозумілості програмного коду допомагає новачкам почати працювати.

Також багато людей такі, що можуть співпрацювати, але іноді немає можливості співпрацювати. Наприклад, якщо всі люди є розробниками, вони повинні виконувати свою роботу. Що ж, вони роблять. Але чи є у вас архітектор, який керує проектом розробки та проводить зустрічі? Звичайні розробники можуть відчути, що вони не мають необхідного мандату для початку зустрічей, і вони можуть подумати, що перешкоджати іншим часом і тоді не спосіб.

Спілкування один з одним не повинно бути кінцевою метою. Чим менше потрібно спілкування, тим краще, але лише якщо можливо менше. Менше стає можливим, якщо у вас є архітектор. Загальний обсяг спілкування може залишатися на хорошому рівні, але ви отримуєте більше результатів за той самий обсяг зв’язку.


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

3

По-перше, я розпочну з звичайних матеріалів інтерв'ю, я вважаю дуже важливим зрозуміти, чи є людина, що переді мною щось вартує, і визначити її / її вміння та знання.

Після цього я використовую пару техніки в галузі Java, як обговорюю деякі принципи, в основному взяті з Ефективної Java.

На цьому етапі, коли я думаю, що в мене може бути хороший програміст, я даю йому фрагмент коду для перегляду коду. Що я хочу побачити, це те, що він може точно визначити небезпечні частини коду, дати деякі вказівки на вдосконалення, знайти підводні камені щодо виконання багаторазового нарізання І що він може розрізняти важливі зауваження та "смакові зауваження". Все це допомагає мені знайти більш досвідченого працівника.

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


2

Я знаю, що це не відповідає тому, що ви просите, але рекомендую: закони, які дозволяють, завжди наймаються на тимчасовій основі спочатку (два тижні або місяць, залежно від роботи). Якщо людина стоїть своєї солі, він не буде заперечувати, до того ж це є гарантією для вас обох (ви можете відпустити його, і він, можливо, не сподобається роботі і піде).


1
Ви абсолютно праві, але якщо він для вас не добрий, ви все одно втрачаєте одну-дві міль, його зарплату та роботу людей, що вступають у вас у проект. Тож було б добре уникати цієї ситуації.

3
Проблема полягає в тому, що хороші програмісти мають, мабуть, інші пропозиції роботи, і якщо ви запропонуєте їм лише тимчасову роботу на початку, вони можуть обрати когось іншого ...

@Rexxar: Вони все одно вийдуть, якщо їм це не сподобається. Це просто більш чесно і наперед запропонувати це саме так, IMO. Принаймні, для мене це був би плюс, а не мінус (враховуючи, що короткий тимчасовий контракт і що в кінці він стає або постійним, або прощається).
Вінко Врсалович

3
Мені потрібно продовжувати сплачувати рахунки, я ніколи не задумувався взяти на роботу лише омонт і відмовитися від постійної роботи. Якщо ви безробітні або маєте багатого подружжя, це може спрацювати. Інші мудрі, ви втрачаєте багато хороших кандидатів, тому що вони не можуть дозволити собі ризикнути, що ви не брешите їм про те, щоб вони стали постійними.
HLGEM

4
"Якщо людина стоїть своєї солі, він не буде заперечувати" - ну, цей розробник тут би сказав "ебать це" і знайти кращу роботу.
gnasher729
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.