Как я могу быстро отсеять «копируй и вставляй» кодеры? [закрыто]


15

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

Конечно, я знаю, что копирование и вставка кода - это часть изучения нового объекта, управления и т. Д. ... но как понять, что это составляет 70% (или более) их карьеры разработчика?

Я встречал некоторых высокопоставленных ребят, возможно, чьи навыки настолько устарели или не имеют отношения к проекту, что все, что они делают, это Google, скопируйте, а затем вставьте некоторый код, не думая о решении в целом. В результате мы получаем неверное сочетание JSON, AJAX, обратных вызовов, ASMX, WCF и обратных передач в одном проекте. Ясно, что нет никакой последовательности или логики, где каждая технология используется.

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

Вопрос

Как бы вы посоветовали мне отфильтровывать людей с плохим опытом программирования? Могу ли я сделать это на уровне резюме? Если нет, то как мне это сделать во время собеседования.


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

Ответы:


47

Я встречал некоторых высокопоставленных ребят, возможно, чьи навыки настолько устарели или не имеют отношения к проекту, что все, что они делают, это Google, скопируйте, а затем вставьте некоторый код, не думая о решении в целом. В результате мы получаем неверное сочетание JSON, AJAX, обратных вызовов, ASMX, WCF и обратных передач в одном проекте. Ясно, что нет никакой последовательности или логики, где каждая технология используется.

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

Лидерство может быть проблемой, а не копировать-вставить разработчиков.


16
+1 Leadership may be the problem, not copy-paste developers. Это была именно моя интерпретация.
Джордж Мариан

Шутки в сторону. Что-то сильно АВОЛ в отделе связи.
МВД

+1: то же самое по комментариям Джорджа Мариана. Очень хорошо сказано, Роберт.
Джим Г.

это хорошо Надеюсь, что это дойдет до столько же, сколько и интервьюеров, набирая менеджеров.
Саар

Кажется, по этому ответу достигнут большой консенсус, но разве «парни» старшего уровня не диктуют функциональность, а затем реализация оставляется на усмотрение программистов? Я имею в виду, что парень из старшего уровня может сказать: «Эй, не используйте множество технологий, просто используйте <эти два>», но все же разработчики копирования вставки будут делать копирование вставки! Я ошибаюсь ?
Чани

13

Способ отсеять программистов, которые не могут программировать, состоит в том, чтобы назначить им практическое упражнение по программированию как часть фазы отбора или фазы интервью. (Последнее, вероятно, лучше, потому что вы можете контролировать окружающую среду, чтобы предотвратить мошенничество.)

Но я не думаю, что это действительно решит вашу проблему.

... у нас есть ошибки из JSON, AJAX, обратных вызовов, ASMX, WCF и обратных передач в одном проекте. Ясно, что нет никакой последовательности или логики, где каждая технология используется.

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

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

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

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

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

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

10

Нанимать людей на 3 месяца условно. Уволить их, если они сосут.

Если вы не ПРОВЕРЬТЕ, вы не можете ОЖИДАТЬ. Обзоры кода, инструменты аудита. Сервер CI может запускать их автоматически.

Задавайте реальные вопросы в своих интервью, как в вопросах из реального кода.

Получите их, чтобы написать код на доске.

Если вы не технический менеджер, вы не можете судить об этом.

Если вы не квалифицированы, найдите авторитетного старшего профессионального консультанта для проведения тестирования. Спросите своих существующих людей и деловых конкурентов, знают ли они 100-кратного продуктивного человека. Заплатите им, чтобы сделать интервью.

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


ты говоришь об опытном? Почему нужно оставить свою работу и присоединиться к месту, где им нужно 3 месяца, чтобы позволить им сосать или нет :) Почему есть человеческие ресурсы?
Саар

Я говорю об опытных, компетентных людях. Они дешевле в долгосрочной перспективе. Кадровые ресурсы не позволяют вам получить иск за нарушение трудового законодательства. Первоначально там, чтобы сделать несерьезный материал для числовых менеджеров Генри Форда. Правдивая история, посмотрите. Если вы уже знаете, что с человеком все будет хорошо, значит, вы лучше, чем я. Человек поменяет работу, потому что на вас так здорово работать, там отличная рабочая среда, и после прохождения испытательного срока они получают жирный бонус. Если они становятся избыточными как постоянные, ваша компания выплачивает дополнительные три месяца. Что-то в этом
роде

9

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

Режимы отказов включают в себя:

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

Не в состоянии изобрести дизайн. Удивительному количеству «опытных» кандидатов нужна спецификация для включения дизайна реализации.

не зная языка программирования, несмотря на опыт работы с резюме.

Не задавая дополнительных вопросов, чтобы извлечь более полные спецификации.

Не в состоянии объяснить проектные решения. Это главный. Если кто-то не может объяснить, почему, то каждый раз он будет делать это по-другому, и последовательность теряется.

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


Ваш опыт звучит довольно нормально.
fast_now

5

Я хотел бы предложить FizzBuzz, который Джефф Этвуд упоминает в посте на http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html .

Напишите программу, которая печатает числа от 1 до 100. Но для кратных трех выведите «Fizz» вместо числа, а для кратных пяти выведите «Buzz». Для чисел, кратных трем и пяти, выведите «FizzBuzz».


9
-1. FizzBuzz обнаруживает всех идиотов. Чтобы копировать и вставлять код, вы не можете быть полным идиотом.
back2dos

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

3
+1. FizzBuzz обнаруживает больше, чем всего идиотов. Он также обнаруживает людей, которые компенсируют нехватку технических навыков превосходящими социальными навыками. Эти люди имеют хорошие шансы пройти первый скрининговый тест. Например, они вполне могут иметь законные степени.
MSalters

1
Ну, вы спрашиваете меня о fizzbuzz, и я немедленно ухожу. :) IMO в младшей категории это не очень полезно, так как вы все равно будете тренировать ребят, а в старшей категории это бесполезно + оскорбительно. Вы должны быть в состоянии вычислить умных и умных людей другими способами. Кодирование на точечных вопросах - это IME-указатель на компании по производству лаковых ферм. Если я действительно заинтересован в навыках кодирования кого-то, я задаю вопрос об обзоре кода . И получите все соответствующие ответы без разочарования.
Балог Пал

@BalogPal: я смеялся и начинал печатать как сумасшедший в течение двух минут, а потом мне было бы стыдно за себя, если он не скомпилируется, не запустится и не сработает в первый раз.
gnasher729

2

Я задаю три вопроса об интервью

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

Я видел, как люди завершили это за 5 минут, и видел, как люди боролись за 30 минут, прежде чем сдаться.


Первое требование должно быть более конкретным. java.util.LinkedList l = new java.util.LinkedList()ничего не импортирует, но, безусловно, использует встроенные коллекции.
Барри Браун

Это справедливый вопрос, особенно для недавних выпускников. Если вы обратили какое-либо внимание или потратили какое-то время на программирование, это должно быть почти тривиально. Я предполагаю, что это не должно быть точным, но достаточно близко.
Брайан Харрингтон

3
@ Брайан, никто еще не пробовал. И мне действительно все равно, если ответ на 100% правильный. Только то, что они понимают проблему и способны грамотно подойти к ней. Наиболее распространенной проблемой является та, где add / remove не будет работать в начале или в конце списка. Я рекомендовал нанимать людей, основываясь на их реакции на меня, указывающей на это.
Sal

2

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

Когда на собеседовании, заставьте их написать код. Это единственный способ узнать, могут ли они программировать по-настоящему. Сделайте задачу проще, дайте им компьютер с подключением к Интернету и установленную вами IDE, позвольте им задать любой вопрос (кроме gimme-hte-codez) и посмотрите, как они работают.


РЕДАКТИРОВАТЬ: Для посмертного анализа кажется, что PMD имеет детектор копирования / вставки, чтобы найти его: http://pmd.sourceforge.net/cpd.html


Я согласился с вами до тех пор, пока «... и IDE вы используете.» Программисты особенно внимательны к нашей рабочей среде и вряд ли знакомы с $ random-IDE. Я занимаюсь программированием более 20 лет, и я потратил первые 10 минут, пытаясь понять, как работать в среде IDE, если бы вы бросили ее мне. Я использую редактор (bluefish при работе в Интернете, emacs для всего остального) и инструменты командной строки для всего остального (контроль версий, компиляция при необходимости и т. Д.). Я вообще не использую отладчики. Меня учили, что если вам нужен отладчик, вы делаете это неправильно: для этого нужен отладочный код!
HedgeMage

@HedgeMage, я не говорил, что им пришлось это использовать ... Видеть, как человек справляется с этой ситуацией, очень показательно. Хватит ли блокнота + javac? Он загружает и устанавливает NetBeans? Будет ли он спрашивать, как сделать X в вашей IDE, взломать немного и спросить Y и Z?

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

1
@ Thorbjørn: Конечно, мои счета были оплачены работой на интерпретируемых языках за последние несколько лет, но даже в мои дни программирования на C я отказался от отладчика в пользу хорошего кода отладки. Возможно, это просто предубеждение с моей стороны: я пошел в колледж с большим количеством людей, которые никогда не учились программировать как таковые - они просто что-то шлепали, а затем исправляли то, о чем кричал отладчик, пока он не «работал». Я терпеть не могу такого рода кодирования. Я не имел в виду, что отладчики - это зло, просто они и другие функции IDE не принадлежат всем рабочим процессам.
HedgeMage

@HedgeMage, я согласен с подходом «отбой, пока он не работает» для отладки, но это плохо, но заключение о том, что отладчики плохие, возможно, слишком широкое заключение.

1

просто

  • (1) Запереть их внутри комнаты + свободный кислород.
  • (2) Дайте им ПК с подключением к Интернету + IDE на выбор + доступ к Food.
  • (3) Имейте Wireshark или подобный метод регистрации всего входящего и исходящего трафика.
  • (4) Дайте ему среднее задание.
  • (5) Изучите весь HTTP-трафик, завершение после назначения.
  • (6) Если субъект скопировал большие куски исходного кода, прекратите тему .....

Редактировать:

Как указывалось выше 7, на практике можно сделать видеозахват (захват экрана).


Роман, но в конечном итоге нецелесообразно.
Роберт Харви

... или просто сделайте захват видео, посмотрите логическую прогрессию. Наблюдайте за красотой (или хаосом).
goodguys_activate

1
прекратить тему? Сняв свободный кислород? Беспорядочный!

@ Thorbjørn: Не так грязно, как стреляют себе в ногу после копирования больших кусков исходного кода.
Джо Д

1
Те, кто не в состоянии использовать Интернет в своих интересах, заперты во вчерашних режимах. Я ВСЕГДА полагаю, что есть несколько хороших примеров, на которые я мог бы посмотреть независимо от того, насколько тривиален вопрос. Я не копирую и не вставляю, я смотрю на хорошие примеры и применяю лучшую технику. Я программист с полным стеком, что означает, что я универсал, а не специалист и полагаюсь на остальной мир. Явно греховный!
Junky

1

Если вы хотите «отсеять» плохих кодеров, вы можете попробовать, например, Matrix Competency Matrix (полезно, но, скорее, это не относится ко всем возможным областям - конечно, вы можете сделать самостоятельно) или codility.com (задачи очень хорошие и это экономит много времени).

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


0

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

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