Я проводил собеседование с кандидатом на должность программиста. Он недавний выпускник колледжа в области компьютерных наук.
Он получил отличную рекомендацию от своего руководителя, когда проходил стажировку по программированию, и во время учебы в университете у него за плечами была цепочка побочных проектов по программированию. Не очень сложные проекты, но определенно автономные и удобные веб-сайты/мобильные приложения. Судя по резюме, он выглядит идеально.
Единственная проблема заключается в том, что когда я дал ему бумажный тест — в основном ему приходилось использовать ручку и бумагу, чтобы ответить на некоторые вопросы по программированию, он боролся и не мог ответить ни на один правильный ответ. Все мои вопросы — это очень простые вопросы по программированию — где-то на уровне шумихи, сопоставление элемента в массиве — такие вопросы, на которые может легко ответить тот, кто прошел один семестр курса программирования начального уровня.
И я уже упоминал, что меня совершенно не волнует синтаксис/язык. Мне достаточно псевдокода
Он попросил забрать вопросы для ответов, на что я согласился. На следующий день он прислал мне полностью исправленные решения. Он выполнял задания в среде IDE и сумел правильно ответить на все вопросы.
Меня это озадачивает: если он так хорош, как предполагает его рекомендация, почему он не может справиться с бумажным тестом? Возможно ли, что есть люди, которые могут хорошо программировать перед экраном компьютера, но когда дело доходит до написания программных решений на бумаге, у них возникают проблемы?
Редактировать:
for
, if
... вообще ничего о вызовах эзотерических библиотек. Все, что требует практических знаний в определенных рамках, считается небазовым. Поэтому я не прошу испытуемого запоминать любые вызовы http
метода.Является ли это возможным? Конечно. Люди могут настолько привыкнуть к IDE с автозаполнением синтаксиса и подсветкой синтаксиса, что у них возникнет ментальный блок, если они попытаются написать код на бумаге или на доске.
Возможно ли, что он поручил кому-то другому сделать эту работу? Конечно.
Почему бы не попросить его вернуться и решить тот же набор задач на компьютере с любой IDE, которую вы хотите установить. Если он может создавать качественный код в среде, которая намного ближе к реальному рабочему месту, отлично. В будущем вы могли бы предложить кандидатам выбор между использованием IDE или предварительным заданием вопросов на бумаге, если у людей есть умственный блок с бумажными тестами.
Эта ссылка из комментариев https://blog.codinghorror.com/why-cant-programmers-program/ публикует интересную проблему, которую откровенно неприятно писать на бумаге.
Почему?
Вот требования в тексте:
Напишите программу, которая печатает числа от 1 до 100. Но для числа, кратного трем, вместо числа печатайте «Шизз», а для числа, кратного пяти, печатайте «Жужжание». Для чисел, кратных как трем, так и пяти, выведите «FizzBuzz».
Вот требования как шаги
Здесь он разваливается. Программисты не думают, как сделать все 4 шага сразу, они делают шаг за шагом. На компьютере это легко, напишите первый шаг, потом редактируйте второй, потом редактируйте третий, проверьте, сработал ли 4-й.
Но на бумаге вам пришлось бы написать это 3+ раза, либо на бумаге, либо в голове. Это занимает огромное количество времени, потому что это не то, как программисты учились думать. И любая маленькая ошибка — это очередная переписка.
Программирование — это искусство быстро совершать сотни мелких ошибок и исправлять их. Дублирование этого в письменной форме занимает смехотворно много времени. Старший разработчик, занимающий 15 минут, вполне разумен.
Это также большой стресс, который накапливается во время обычного стресса на собеседовании, что обычно уже сложно для программистов. Так они замерзают.
LOOP 100 TIMES
затем с отступом: CHECK MODULO 3
и с отступом IF TRUE PRINT "Fizz"
и т. д. Синтаксис в Python, например, позволяет это без перезаписи даже на бумаге :)Я написал свои первые программы в 1967 году, а в 1970 году получил работу программиста. Первые несколько лет своей карьеры я писал свои программы на листах кодирования.
Между тогда и сейчас есть три существенных различия, любое из которых может стать проблемой для программиста, имеющего только опыт работы с IDE:
Если вам действительно не нужна возможность программировать без IDE, вам следует настроить среду программирования для своих тестов.
если он так хорош, как предполагает его рекомендация, почему он не может справиться с бумажным тестом?
Потому что нет необходимости запоминать все, что можно быстро найти в Google. Я нахожу вопросы о сложности алгоритма, поиске элементов массива или сортировке и т. д. пугающими и непрофессиональными. Это вещи, о которых вы можете прочитать очень быстро, если они вам понадобятся.
Возможно ли, что есть люди, которые могут хорошо программировать перед экраном компьютера, но когда дело доходит до написания программных решений на бумаге, у них возникают проблемы?
Да, это возможно, потому что гораздо важнее иметь общее представление о том, что вы делаете, и уметь мыслить абстрактно, смотреть вдаль или видеть общую картину и быть в состоянии найти необходимую информацию, когда это необходимо, чем знать наизусть. сердце каждый алгоритм. Чистые энциклопедические знания ничего не стоят, когда люди не умеют их правильно применять.
Слишком много интервью сосредоточено на таких вещах, как то, знаете ли вы, насколько быстро происходит сортировка определенных вещей (что вы можете найти в течение нескольких секунд), а не на оценке того, как люди думают.
если он так хорош, как предполагает его рекомендательная рекомендация
Это потому, что ваши ожидания слишком высоки как для кандидата, так и для руководителя. Рекомендательное письмо, если оно непредвзятое, просто означает, что уровень кандидата является удовлетворительным по сравнению с человеком, написавшим письмо. Это не означает, что кандидат обладает навыками по сравнению с вашими стандартами .
Например, 14-летний ребенок, который может составить программу приветствия, может произвести впечатление на свою бабушку, но не на вас.
Вы, вероятно, обладаете лучшими техническими знаниями, чем руководитель, или, по крайней мере, кто-то, кто возлагает большие надежды на превосходство.
Возможно ли, что есть люди, которые могут хорошо программировать перед экраном компьютера, но когда дело доходит до написания программных решений на бумаге, у них возникают проблемы?
Возможны все виды вещей, от умственного блока до мошенничества. Но ни один из них не может быть известен наверняка, и ни один из них не применим к тому, что вам нужно делать, а именно к оценке компетентности и пригодности. При прочих равных условиях резюме этого кандидата должно быть в самом низу списка.
Рекомендации — это всего лишь бумага, это лучше, чем ничего, но на них нельзя полностью полагаться. Я видел восторженные рекомендации, данные людям, которых рекомендатель почти не знает или не знает вообще.
Бумажный тест неплох и в значительной степени является стандартным для отрасли в той области, из которой я родом. Мое предложение состояло бы в том, чтобы попросить кандидата писать алгоритмы, а не реальный код. Я могу купить, что кандидат не знает точного синтаксиса. Но они должны быть в состоянии предоставить алгоритмы/псевдокод.
Возможны две проблемы
Кандидат на самом деле может обманывать.
Кандидату потребуется больше времени для выполнения задания, чем обычно, а это значит, что он тратит свое время на чтение поста с заданной задачей.
Это сводится к тому, как вас ухаживали. В наши дни большое внимание уделялось алгоритмам, и нас учили писать алгоритмы на бумаге. До появления IDE нам приходилось писать код в блокноте, что делало наше владение синтаксисом намного сильнее, чем у тех, кто изучал IDE. Правильный синтаксис не очень важен, но если кандидат борется до такой степени, что не может ответить ни на один вопрос, на мой взгляд, кандидату нужно работать над основами программирования. Скорее всего, они будут бороться, и им потребуется гораздо больше времени, чтобы выполнить задание, чем обычно ожидается.
«Возможно ли, что есть люди, которые могут хорошо программировать перед экраном компьютера, но когда дело доходит до написания программных решений на бумаге, у них возникают проблемы?»
Абсолютно возможно. Разные люди работают по-разному. Их мозг работает по-разному. А у некоторых просто проблемы с записью от руки.
Я могу печатать что-то, вообще не думая о процессе набора текста, он идет прямо из моего мозга на экран. Писать на бумаге сложнее. (Говорить намного сложнее, преобразование мыслей в речь требует большого процента мощности вашего мозга).
Поэтому, если вы хотите наблюдать за людьми, вы наблюдаете за ними с помощью инструментов, к которым они привыкли, и там вы видите, насколько хорошо они могут работать. Если кто-то плохо пишет на бумаге и хорошо использует IDE, наймите его. Наоборот, не надо.
Все, что заявитель мог сделать без вашего надзора, не имеет более или менее нулевого значения, когда дело доходит до оценки его работы. Все, что вы не контролируете, может быть использовано для мошенничества. В частности, вы дали ему домой тест, и он его прошел. В промежутке между тем, когда он уходил из вашего офиса, и когда он возвращался, у вас не было никакого контроля над тем, что он делал. Сказать, что «он, возможно, погуглил ответы», на самом деле наименьшая из ваших проблем; он мог бы просто дать тест своему приятелю и попросить его написать все ответы для него, насколько вы знаете.
Вот несколько вариантов того, что вы можете сделать, если вы заинтересованы в этом кандидате:
Пусть он проведет правильный тест по программированию в реальной среде программирования. Вы настраиваете ноутбук, настраиваете среду, настраиваете IDE, он пишет код. Он получает полный доступ к автозаполнению, если он этого хочет, компилятору, если он ему нужен, и т. д. Тогда вы можете увидеть, может ли он на самом деле кодировать (а не писать на бумаге). В реальной жизни все используют эффективность, которую обеспечивают современные IDE, поэтому нет причин не делать этого на собеседовании.
Пригласите кандидата вернуться и подчеркните, что он может использовать псевдокод; если они пишут «List.append» вместо «List.add» или даже «добавить X в список», это нормально. Опять же, в реальной ситуации на работе у них будет доступ к вещам, которые сделают это за них. Возможно, кандидат зациклен на вопросе «правильно ли я понял синтаксис?» и не может дать вам то, что вы на самом деле хотите. Если вы скажете, что синтаксис не имеет значения, вы можете получить то, что хотите.
Задавайте наводящие вопросы. «Напишите FizzBuzz» на самом деле мало что вам говорит; это просто говорит вам, запомнил ли он решение FizzBuzz. «Объясните мне, как бы вы написали программу для выполнения X» говорит вам гораздо больше. В частности, он говорит вам, обладает ли этот человек умственными способностями для разработки решения проблемы, которое он, возможно, видел или не видел раньше. Если они даже не могут сказать вам простыми словами (а «сказать» — это рабочее слово, это должно быть словесным упражнением, чтобы избежать таких проблем, как дисграфия или дислексия), каков первый шаг к решению проблемы, это красный флаг, который вы ищете, чтобы отправить их домой.
У него могла быть ДИЗГРАФИЯ, как у меня. Или аутизм, или что-то еще, что может вызвать проблемы с записью.
Кроме того, если вы не хотите, чтобы люди программировали папку с тремя кольцами, откажитесь от бумажных тестов. Возьмите запасной ноутбук и попросите соискателя выполнить на нем программу/тест.
Кроме того, мы не в те дни, когда вам приходилось рыться в книгах и руководствах и запоминать все наизусть. Языки программирования стали гораздо более сложными, нюансированными и многословными, чем во времена COBOL.
Может быть, парень очень хорошо обращается со своими инструментами и очень плохо без них. Или может быть, что парень просто мошенник, ворует на чужой работе и просто собирает все, что может найти, без особого понимания.
В конце концов, каким бы ни был ответ, все сводится к вашим конкретным потребностям. вам нужен кто-то в своей тарелке с любыми инструментами? Кто-то, способный закодировать алгоритм на COBOL, даже если он никогда не встречался с этим языком, и ненавидит процедурное кодирование? Тогда каким бы хорошим ни был этот парень, он не подходит.
Вам нужен кто-то, кто занимается сборкой кода, потому что большая часть тяжелой работы в вашем магазине выполняется с помощью API, а самая сложная часть — найти умные API и эффективно их использовать? Тогда этот парень, каким бы плохим он ни был, на самом деле хорошо подходит.
Определитесь со своими потребностями. Решите, почему бумажный тест актуален или нет. Решите, почему домашний тест (с возможностью поиска решений в Интернете) актуален или нет. Вот ответ. Для многих должностей достаточно того, кто задает правильные вопросы в Интернете и достаточно опытен, чтобы осмысленно собирать ответы. Для некоторых других должностей тот же самый парень — просто помеха.
Подумайте о том, что вам действительно нужно, и примите соответствующее решение.
Он попросил забрать вопросы для ответов, на что я согласился. На следующий день он прислал мне полностью исправленные решения. Он выполнял задания в среде IDE и сумел правильно ответить на все вопросы.
Вероятно, произошло две вещи:
Я согласен с ответом Ertai87 в том, что лучший способ - дать им реальный тест. В конце концов, цель теста FizzBuzz состоит в том, чтобы определить, по крайней мере, они умеют программировать, но это не то же самое, что получение реальной работы, погружение в код и введение правильного решения.
Лично я программирую неплохо (как мне кажется); но я никогда не был хорош в терминах или концепциях или объяснял людям, когда им задавали вопросы о программировании. Может быть, это как-то связано с тем, как я учился или как я думаю, я не знаю. Но это не значит, что я плохой программист.
С другой стороны, я видел много программистов, которые могут объяснить все концепции, знают все термины и кажутся вполне законными, пока не переходят к кодированию, и оказывается, что у них это довольно плохо получается.
Какого программиста вы бы хотели, того, кто умеет хорошо программировать, или того, кто может хорошо говорить о кодировании?
Кроме того, я не могу вспомнить дерьмо без intellisense. Неужели люди действительно думают, что программисты могут запомнить каждый метод каждого типа каждого языка, с которым они должны работать?
К тому же тесты тупые. FizzBuzz тупой. Дайте мне задание, которое я могу выполнить в IDE, например, как бы я работал, если бы работал... и на самом деле не имеет значения, как я это сделаю, если я верну его вам, и это то, что вы хотите. Я могу использовать google, переполнение стека, угол C # ... какое это имеет значение? Непрограммист не может программировать, глядя на переполнение стека. Непрограммист даже не знает, какие вопросы нужно задавать, чтобы получить ответы, которые он ищет.
Вы действительно должны просто довериться своему чутью, которое, я уверен, подсказывает вам нанять его.
Есть вероятность, что он жульничал в университете, и во время стажировки он работал на друга семьи на высоком посту. Я знаю одну подругу, которая получает хорошую стажировку, сколько бы она ни хотела, в неделю из-за связей ее матери. Я также знаю кого-то, кто обманным путем поступил в университет, а затем один из лет в университете отучился у кого-то другого.
Я был бы очень осторожен здесь, предоставив еще один тест с ограничением по времени по электронной почте и сообщив ему, что он получит это в определенное время и у него есть столько времени, чтобы закончить его. Если она/он действительно все это, они могли бы также сделать что-то гораздо более сложное, чем программирование начального уровня.
Дайте ему еще несколько тестов, но на этот раз используйте доску, чтобы она не сильно отличалась от IDE. Если он все еще не может этого сделать, откажитесь от него.
Бумажные тесты просто проверяют на избыточное обучение — способность быстро вспоминать факты, которые вы запомнили, так что они обычно находятся в вашей рабочей памяти. Если вы хорошо разбираетесь в разработке, нет причин знать больше, чем мотивы, потому что любые дополнительные знания, которые вам нужны, можно просто найти в Документах. Вы должны тратить свои умственные способности на изучение новых технологий, а не синтаксиса и базовых вещей, которые вы просто не используете. Многие разработчики, с которыми я разговаривал, не касались таких вещей, как алгоритмы сортировки, со времен колледжа. Бумажные тесты должны оставаться в колледже, где им и место.
Шум на доске решить намного проще, потому что вы можете просто стирать и вносить коррективы на лету. Вы не всегда можете сделать это с бумагой. Спецификации дизайна также сильно меняются. Возможно, вы хотите увидеть, как ваш разработчик делает что-то еще, или, возможно, ваш разработчик буквально сделал самое простое, что только можно было сделать. На бумаге вам придется принять решение о точках стыковки. На доске вы можете просто изменить требования к ним и посмотреть, как они реагируют, не беспокоясь ни о чем.
есть шанс, что он умный программист :)
https://www.hanselman.com/blog/AmIReallyADeveloperOrJustAGoodGoogler.aspx
Джейн С
Уэсли Лонг
пользователь1602
Дэнни Куломб
ДэйвГ
Гравитон
П. Хопкинсон
Тревор
Тревор
Гравитон
Мирв - Мэтт
Гравитон