Может ли внутренний представитель, голосование и значки поощрять хорошие практики программирования?


17

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

Что-то вроде

  • Вы (или другие лица от вашего имени) можете опубликовать рецензию (может быть фрагмент, один коммит или серию) для рецензирования кода

  • Другие могут прокомментировать это (будет похоже на ответы в SE)

  • Значки могут быть предоставлены / предложены (некоторые были бы хорошими, некоторые были бы плохими как "Пустыня комментария" или некоторые другие)

  • Вы можете голосовать за / против самого кода, а также комментариев и значков (например, если кто-то предложил значок, а вы согласились / не согласились)

Целью такой схемы было бы

  • Добавьте немного веселья, чтобы поощрить использование обзоров кода

  • Улучшение качества (в этой схеме, как рецензент кода, так и рецензенты, вероятно, узнают)

  • Уменьшите вероятность того, что обзоры кода вызовут «войны эго»

  • Дайте некоторые показатели, чтобы помочь измерить индивидуальную производительность

Может ли это работать? Мысли?


2
Только что нашёл этот сайт - StackExchange для обзоров кода - хорошая идея для проектов с открытым исходным кодом / личных проектов, но она общедоступна для многих компаний, но не для начинающих codereview.stackexchange.com
Ryan

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

1
Это сложный вопрос. Я думаю, что жестокая правда в том, что мы часто можем учиться на ошибках (наших и других) больше, чем на успехах. И несмотря на все разговоры о хиппи, справедливые наказания работают. Спросите своих родителей;)
Райан

9
Единственная проблема заключается в том, что Джон Скит всегда будет сидеть на вершине с 100 тыс. Повторений. Джон Скит не работает на вашу компанию? Не имеет значения Он все еще будет там.
Том Андерсон

1
Хороший вопрос - возможно, значок позора «Я зарегистрировал класс без единой строки комментария» должен истечь через какое-то время или быть отозван, когда вы сделали что-то положительное - в противном случае нет никакого стимула для улучшения, как вы уже получил «оценку», и это уже не имеет значения
Райан

Ответы:


20

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

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

Многие эксперты провели исследования по этому вопросу. Вот мои два фаворита:

Даниэль Пинк выступил с великолепной презентацией на TED по теме, которую легко посмотреть и понять.

Альфи Кон , автор книги « Наказанные наградами» , писал на эту тему:

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

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

Остальной сотрудник может опровергнуть правила игры и выйти. Увеличение оборота станет новой проблемой.

Обратите внимание, что в этом сообществе было сделано много предложений о том, как улучшить мотивацию .


2
Пьер, хотя я согласен с некоторыми вашими высказываниями и выводами Даниэля Пинка, я не думаю, что они применимы к решению, как он их описал. Было бы иначе, если бы репутация, значки и т. Д. Были привязаны к денежному вознаграждению, но здесь они используются только для улучшения поведения, имеющего внутреннее значение. В некотором смысле это ничем не отличается от игровых аспектов стека обмена, который, надо сказать, был в целом выгодным. Хотя это сложная проблема, поэтому ее нужно тщательно выполнять
Homde

2
@mko: Деньги - это награда. Значки или репутация это другое. Я считаю, что они имеют точно такой же эффект.

2
Пьер, я должен не согласиться. Эти награды не только сугубо идеалистичны, но и даны вам не вашим вождем, а вашими сверстниками. Их признание является одним из самых важных ориентиров для нас, чтобы измерить наше мастерство и целеустремленность наших действий. Система голосов, значков и репутации только количественно оценивает обратную связь и сокращает цикл. Вот почему SE работает.
back2dos

1
Пьер, я действительно рекомендую вам прочитать книгу Даниэля Пинкса "Драйв", в ней подробно рассматриваются стимулы и мотивация. Есть много примеров, когда денежное вознаграждение было фактически вредным, в то время как внутреннее вознаграждение не было »
Хомде

1
да, но, если значков, рейтинг является хорошей мерой, чем то, что будет служить для выделения и стимулирования поведения к внутренним наградам. Т.е. я , возможно , не все равно , что многое о моей фактической репутации , но я сделать хочу быть хорошим разработчиком. Поэтому представитель может быть хорошим, если не измерить мой абсолютный навык, измерить относительный прогресс и мотивировать меня, чтобы улучшить его и себя. Вещи, которые мы не можем измерить, мы не можем изменить. Сложная часть, конечно, заключается в том, чтобы спроектировать измерение так, чтобы оно действительно имело некоторый смысл и способствовало правильному поведению.
Homde

5

Да, это может

Но только если вы разрабатываете это очень тщательно, иначе это может иметь неприятные последствия. Я сделал несколько комментариев, но подумал, что суммирую свою позицию

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

Значки, в основном, «забавные», я бы держал их подальше от проблем, связанных с навыками. Т.е. значки вроде "Сова этой недели" или группа "Отправлено! Знак" были бы в порядке. Если у вас есть значки, основанные на навыках, такие как «Исправлено большинство ошибок» или «Сообщено большинство ошибок», очень тщательно продумайте, как это может быть воспринято и использовано. Значки должны быть больше о выделении поведения, чем о продвижении его ИМО. Обязательно иметь как командные, так и индивидуальные значки.

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

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

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

Возможно, это может быть компенсировано либо тем, кто отправляет код самостоятельно, либо кем-то еще, кто может предоставить код определенного возраста. Тем не менее, это может быть сложно, зная, какие последствия будут

В конце концов, я думаю, вам придется попробовать и посмотреть, что работает, а что нет, есть хорошая книга под названием « Разрушенная реальность», которая может быть интересной. Также обязательно прочитайте книгу Даниэля Пинкса "Драйв".


2

На мой взгляд, НЕТ , так как он измеряет не саму хорошую практику, а симптом (если другие считают, что это хорошая практика).

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

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


1
Э-э-э: твой первый пункт - да, но это лучшее, что у нас есть, не так ли? Метрики кода сами по себе не дают достаточно хорошей картины.
Райан

1
Разве это не верно для любого метода анализа кода?
nikie

Проблема заключается не в том, что вы пытаетесь измерить это, а в том, что вы устанавливаете петлю обратной связи между вашими измерениями и, по сути, мотивацией команд. По моему опыту, это быстро приводит к тому, что команда мотивирует «пройти тесты», а не кодировать лучше.
Keppla

1
«Пройти тесты» гораздо более применимо к метрикам, чем ручная проверка кода. Чтобы довести свой первый аргумент до крайности, вы говорите, что нет никакого способа когда-либо решить, что это «хорошо». Что ж, это правда, но на каком-то уровне мы должны признать, что если достаточное количество людей считает, что что-то хорошее, то, вероятно, это хорошо.
Райан

1
+1 за 2-й аргумент, хотя - отличный код может остаться незамеченным.
Райан

1

Идея принесет новую динамику в команду. Если вы чувствуете, что команда находится в колее, то это хороший способ встряхнуть вещи.

Просто помните, что это будут не все единороги и радуги. Некоторым не понравится эта инициатива, поэтому может пострадать общая производительность / качество. Однако этот риск может стоить того. Зависит от вашей ситуации.


1

Я предлагаю использовать внешнюю мотивацию (то, что вы предлагаете, является формой внешней мотивации), чтобы мотивировать людей делать «механические», повторяющиеся и скучные вещи, такие как:

  • Приходить на встречи вовремя
  • Получение расписаний, представленных вовремя
  • Обновление документации
  • Обмен информацией с командой

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

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

Это значит:

  • Пусть люди берут на себя ответственность за свою работу
  • Поощряйте людей говорить друг с другом о том, что работает хорошо, а что нет
  • Показать искреннюю признательность за труд людей

Разве какой-то внутренний SO не выполняет все эти три вещи, я имею в виду, почему люди уделяют так много времени SO? И вопрос о «голосовании» заключается в том, что я думаю, что в такой области, скорее всего, он будет более справедливым, точным и ценным, потому что я полностью согласен - у нас нет хорошего не объективного способа измерения качества.
Райан

0

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


0

Краткий ответ: да, это может сработать.

Немного более длинный ответ: да, это может сработать, но также может иметь неприятные последствия.

В дополнение к тому, чтобы быть профессиональным программистом, я также являюсь любителем-аналитиком поведения.

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

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

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

Если бы вы были моим боссом, вы бы решили, какие последствия (стимулы, подкрепления) предложить мне. Но вы не можете решить, как я их воспринимаю. Например, мой босс может решить предложить специальное парковочное место, если меня выберут «Кодером месяца». Если бы я жил в Сан-Франциско или Нью-Йорке и водил машину, я мог бы быть готов работать для этого. Но там, где я сейчас живу, парковка не проблема, и я могу ходить на работу в любом случае.

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


«Одним из основных результатов современной науки о поведении является то, что на поведение сильно влияют его последствия». Это открытие? В самом деле?? Разве это не то, чему мы все учимся в самом начале нашей жизни? Не прикасайтесь к горячим вещам, потому что это причиняет боль! Имейте в виду, я до сих пор иногда пью слишком много ...
Райан

@ Райан: Вы бы подумали. Но «не трогай горячие вещи, потому что это больно» не делает науку. Показ того, как сделать изменения в поведении измеримыми, повторяемыми, воспроизводимыми и предсказуемыми - вот что делает поведенческую науку наукой.
Майк Шеррилл 'Cat Recall'
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.