Як я можу швидко відмити кодери "скопіювати та вставити"? [зачинено]


15

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

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

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

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

Питання

Як би ви порадили відфільтрувати людей, які мають поганий досвід програмування? Чи можу я це зробити на рівні резюме? Якщо ні, то як це робити під час співбесіди.


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

Відповіді:


47

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

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

Проблема може бути лідерством, а не розробниками копіювання та вставки.


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

Серйозно. Щось сильно AWOL у відділі зв’язку.
МВС

+1: Дітто на коментарі Джорджа Маріана. Дуже добре, Роберт.
Джим Г.

це добре. Сподіваємось, він охопить стільки ж, скільки інтерв'юери, набір менеджерів.
Саар

Здається, існує багато консенсусу щодо цієї відповіді, але не "хлопці" старшого рівня диктують функціональність, і тоді реалізація залишається кодерам, правда? Я маю на увазі, хлопець старшого рівня може сказати: «Ей, не використовуй орду технологій, просто використовуй <ці два>», але все-таки диски для вставки копії збираються робити копіювати пасту! Я помиляюся ?
Чані

13

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

Але я не думаю, що це насправді вирішить вашу проблему.

... в цьому ж проекті ми маємо помилку JSON, AJAX, зворотні дзвінки, ASMX, WCF та поштові бек-коди. Зрозуміло, що не існує послідовності чи логіки, за якою використовується кожна технологія.

ІМО, справжня проблема тут полягає в тому, що ваша команда недостатньо переглядає внутрішній код і не розробляє «ігрову книгу» бажаних рішень відомих проблем. Частково це питання культури, частково питання комунікації, і (ймовірно) частково питання з термінами проекту.

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

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

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

1
Я абсолютно згоден, що письмовий тест під час співбесіди - це єдиний спосіб бути впевненим, що ваші новобранці справді мають хороші навички програмування. Але головна суть моєї відповіді полягає в тому, що лише навички розробника недостатньо для вирішення проблеми ПЗ.
Стівен C

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

10

Наймайте людей на 3 місяці стажування. Стріляйте їх, якщо вони смокчуть.

Якщо ви НЕ ВДАЛИТЕ, ви не можете очікувати. Огляди коду, інструменти аудиту. Сервер CI може запустити їх автоматично.

Задавайте справжні запитання в своїх інтерв'ю, як і в питаннях з реального коду.

Запропонуйте їм написати код на дошці.

Якщо ви нетехнічний менеджер, ви можете це судити.

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

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


ти говориш про досвідченого? Чому варто залишити свою роботу і приєднатися до місця, де їм потрібно 3 місяці, щоб вони / вона смоктали чи ні :) Чому там людський ресурс?
Саар

Я говорю про досвідчених, компетентних людей. Вони з часом дешевші. Кадрові ресурси зупиняють позов до суду за порушення законодавства про працю. Спочатку там робили зворушливі речі для керівників чисельності Генрі Форда. Справжня історія, подивіться. Якщо ви вже знаєте, що людина буде добре працювати, то ви краще в цьому, ніж я. Людина змінить роботу, тому що ви так чудово працюєте, тут є чудове робоче середовище, і після стажування вони отримують жировий бонус. Якщо вони стають зайвими як постійні, ваша компанія виплачує додаткові три місяці. Щось подібне
Тім Вілліскрофт

9

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

Режими відмов включають:

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

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

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

Не задаючи додаткових питань для отримання більш повних специфікацій.

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

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


Ваш досвід звучить цілком нормально.
quickly_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 змушує когось задуматися над проблемою та як найкраще її вирішити. Це не складно, тому слід викрити тих, хто копіює та вставляє, оскільки ті, хто копіює та вставляє, не дізнаються "чому" за речами.
Jetti

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

1
Ну, ти запитаєш мене, а я негайно відходжу. :) ІМО в молодших категоріях це не дуже корисно, оскільки ви будете тренувати хлопців у будь-якому випадку, а в старшій категорії це марно + образливо. ви маєте змогу високими розумними та успішними людьми робити інших способів. Кодування на місцях подібних питань - це вказівка ​​IME для компаній, що займаються неспокійним господарством. Якщо мене дійсно цікавлять навички кодування когось, я даю питання з перегляду коду . І отримуйте всі відповідні відповіді без розчарувань.
Balog Pal

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

2

Я задаю три питання інтерв'ю

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

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


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

Це справедливе питання, особливо для останніх випускників. Якщо ви приділяли якусь увагу або взагалі витрачали програмування, це мало не банально. Я припускаю, що це не повинно бути точним, але досить близько.
Брайан Харрінгтон

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

2

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

Коли на співбесіді, змусьте їх написати код. Це єдиний спосіб визначити, чи можуть вони програмувати реально. Зробіть проблему простою, надайте їм комп’ютер з підключенням до Інтернету, а IDE, який ви використовуєте, встановлений, нехай вони задають будь-яке запитання (крім gimme-hte-codez) і дивіться, як вони працюють.


РЕДАКТИРУВАННЯ. Для післясмертного аналізу виявляється, що PMD має детектор копіювання / вставки, щоб знайти його: http://pmd.sourceforge.net/cpd.html


Я погоджувався з вами, поки "... і IDE, який ви використовуєте". Кодери стосуються наших робочих середовищ і, ймовірно, не знайомі з $ random-IDE. Я кодую вже понад 20 років, і я витрачав перші 10 хвилин, намагаючись зрозуміти, як працювати з IDE, якщо ти кинув на мене. Я використовую редактор (блакитна рибка під час роботи з веб-речами, emacs для всього іншого) та інструменти командного рядка для всього іншого (контроль за редагуванням, компіляція при необхідності тощо). Я не використовую налагоджувачі взагалі. Мене вчили, що якщо вам потрібен налагоджувач, ви робите це неправильно: саме для цього потрібен код налагодження!
HedgeMage

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

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

1
@ Thorbjørn: Дозволено, мої рахунки протягом останніх кількох років оплачувались роботою на інтерпретованих мовах, але навіть у мої дні кодування C я відхилив налагоджувач на користь хорошого коду налагодження. Можливо, це просто забобон з мого боку: я пішов до коледжу з цілою великою кількістю людей, які ніколи не навчились кодувати самі по собі - вони просто щось ляпали разом, а потім виправляли те, про що кричав налагоджувач, поки це "щось не спрацювало". Я не можу витримати такого кодування проколів. Я не мав на увазі, що налагоджувачі - це зло, лише те, що вони та інші функції IDE не належать до всіх робочих процесів.
HedgeMage

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

1

Простий

  • (1) Замкніть їх всередині кімнати + Безкоштовний кисень.
  • (2) Дайте їм ПК з підключенням до Інтернету + IDE за вибором + доступ до продуктів харчування.
  • (3) Мати провідну стрічку або подібний метод реєстрації всього вхідного та вихідного трафіку.
  • (4) Дайте йому середнє завдання.
  • (5) Вивчіть увесь трафік HTTP, завершення призначення після публікації.
  • (6) Якщо суб'єкт скопіював великі фрагменти вихідного коду, припиніть Тему .....

Редагувати:

Як зазначено makerofthings7, на практиці можна зробити відеозйомку (захоплення екрану).


Роман, але в кінцевому рахунку непрактичний.
Роберт Харві

... або просто зробити відеозапис, побачити логічну прогресію. Спостерігайте, як розгортається краса (або хаос).
goodguys_activate

1
припинити Тему? Вилучаючи вільний кисень? Брудний!

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

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

1

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

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


0

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

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