В возрасте 14 лет Аарон Шварц (Aaron Swartz) участвовал в создании спецификаций для RSS 1.0, а в 17 лет — в разработке формата синдикации Atom. Он также был одним из разработчиков проекта reddit, а сейчас работает в Open Library. Год назад Шварц, воспользовавшись бесплатным доступом к системе PACER, в которой хранятся документы федерального суда США, написал скрипт, который утащил из нее в свободный доступ около 20 млн. страниц. За эту «шалость» ФБР даже завело на него дело.
Представляем вам перевод статьи «How I Hire Programmers» из блога этого необычного программиста. |
Когда вы нанимаете программиста (да и вообще кого-либо, если уж на то пошло), перед вами стоят три вопроса. Умный ли он? Способен ли выполнить то, что нужно? Сможете ли вы с ним работать? Тот, кто умен, но неспособен выполнить задание, может быть вашим другом, но не работником. Вы можете обсуждать с ним свои проблемы, тогда как он будет тянуть с выполнением важной работы. Тот, кто способен выполнять задания, но неумен — тот неэффективен: неумные люди выполняют работу трудоемким способом, работа с ними продвигается медленно и полна разочарований. Ну а с тем, с кем вы не можете работать, вы просто не сможете работать.
Обычная процедура найма программиста состоит из: а) чтения резюме, б) задавания каких-то трудных вопросов по телефону и в) постановки перед ними задачи по программированию при личном общении. Я думаю, что такая система найма людей ужасна. Из резюме можно узнать очень мало, а трудные вопросы во время интервью очень нервируют людей. Программирование — это не та работа, которая выполняется под давлением, поэтому наблюдать за действиями людей, которые нервничают, довольно бессмысленно. А вопросы для интервью обычно подбираются по принципу «чем тяжелее, тем лучше». Думаю, я сносный программист, но я никогда не проходил такие интервью, и сомневаюсь, что вообще смог бы это сделать.
Поэтому, когда я нанимаю кого-то, я просто пытаюсь ответить на три вопроса, описанные выше. Чтобы выяснить, способен ли человек делать нужные вещи, я просто спрашиваю, что он уже сделал. Если человек действительно способен выполнять работу, к этому моменту он уже должен был что-то сделать. Трудно быть хорошим программистом без какого-то опыта работы, а сейчас любой может набраться опыта, приняв участие в каком-то проекте по созданию бесплатной программы. Поэтому я просто прошу у человека пример кода и работающую программу и смотрю, хорошо ли это выглядит. Так действительно можно узнать очень много, потому что ты не наблюдаешь за тем, как он отвечает на надуманный вопрос во время интервью — ты смотришь на код, который он выдает на самом деле. Является ли он лаконичным? понятным? элегантным? практичным? Хотели бы вы иметь что-то такое в своем проекте?
Чтобы выяснить, является ли человек умным, я просто веду с ним неформальную беседу. Я стараюсь сделать все, чтобы снять любое напряжение — назначаю встречу в кафе, поясняю, что это не интервью, делаю все, чтобы быть неофициальным и дружественным. Ни при каких обстоятельствах я не задаю ему стандартных вопросов из интервью — я просто болтаю с ним, как болтал бы с кем-то на вечеринке. (Если на вечеринках вы просите людей назвать их сильные и слабые стороны или вычислить количество настройщиков фортепьяно в Чикаго — у вас большие проблемы.) Думаю, в непринужденной беседе довольно легко выяснить, умен ли человек. Я постоянно оцениваю ум людей, которых встречаю, точно так же, как постоянно оцениваю их привлекательность.
Но если бы пришлось записать признаки того, почему некто кажется мне умным, я бы сделал акцент на трех моментах. Во-первых, насколько глубоки его познания? Спросите, о чем он думал в последнее время, и «прощупайте» его на эту тему. Похоже ли на то, что у него есть детальное понимание предмета? Может ли он понятно объяснить его? (Понятные объяснения — признак подлинного понимания.) Знает ли он о предмете то, чего не знаете вы?
Во-вторых, любопытен ли он? Задает ли он в ответ вопросы о вас? Действительно ли он заинтересован или просто старается быть вежливым? Задает ли он дополнительные вопросы к тому, что вы говорите? Заставляют ли его вопросы вас задуматься?
В-третьих, учится ли он? В какой-то момент разговора вы, возможно, будете что-то ему объяснять. Действительно ли он понимает, что вы говорите, или же просто улыбается и кивает? Существуют люди, которые обладают знаниями в какой-то небольшой области, но не интересуются другими вопросами. И существуют люди, которые любопытны, но не учатся, они задают множество вопросов, но на самом деле не слушают. Вам нужен тот, кто является и тем, и другим, и третьим.
Наконец, я определяю, смогу ли я работать с человеком, просто проведя с ним какое-то время. Многие выдающиеся люди кажутся восхитительными в первый час общения, но через пару часов их эксцентричность начинает раздражать. Поэтому когда вы закончите непринужденную беседу, пригласите его на обед с остальными членами команды или на игру в офисе. Опять же старайтесь, чтобы все было как можно более неформальным. Цель — просто понять, будет ли он действовать вам на нервы.
Если все выглядит неплохо, и я готов нанять человека, здравый смысл говорит о необходимости последней проверки, чтобы убедиться, что меня каким-то образом не надули: я прошу его сделать часть работы. Обычно это означает, что ему следует написать какой-то более-менее независимый кусок кода, который нам нужен. (Если вам в самом деле так уж хочется увидеть, как он работает в напряженных условиях, установите ему срок.) Если необходимо, можете предложить ему оплатить эту работу — хотя я заметил, что большинство программистов не прочь выполнить небольшую задачу, если потом они смогут сделать полученные исходники открытыми. Этот тест не работает сам по себе, но если кто-то прошел первые три испытания, его должно быть достаточно, чтобы доказать, что человек не надул вас, что он в самом деле может выполнять работу.
(Я встречал людей, которые говорят: «Ну, ладно, давай мы попробуем тебя нанять на месяц и посмотрим, как оно пойдет». Не похоже, чтобы это работало. Если вы не можете принять решение по окончании работы над небольшим проектом, вы не сможете сделать этого и через месяц, так что выходит, что вы нанимаете человека, который недостаточно хорош. Лучше просто сказать «нет» и поискать кого-то получше.)
Меня вполне устраивает такой метод. Когда я придерживался его лишь частично, это заканчивалось приемом на работу неподходящих людей, которым со временем приходилось уйти. Но когда я действовал по этому плану, то получал людей, которые настолько мне нравились, что я на самом деле очень сожалею, если мне приходится расставаться с ними. Удивительно, как много компаний вместо этого пользуются другими, глупыми методами найма на работу.
Аарон Шварц (Aaron Swartz)
Перевод «Вебпланета»