Как понудить программистов писать качественный код? Формал. инспекции

nikola1956

В проекте есть программисты (Java которые работают продуктивно, но обладают особенными личностными качествами, излишним чувством своей правоты, и не хотят учиться стандартным методологиям разработки ПО, описанным, например, в книге "Совершенный код" или в книге "Effective Java" (Bloch). В частности, пишут большие методы, не выделяют повторяющиеся фрагменты в отдельные методы, а копипастят, форматируют отступы по разному, на разное число пробелов, мало думают над тем, чтобы код был максимально простым и удобным для чтения, вводят переменные с неграмотными в смысле английского языка названиями, не всегда соблюдают верблюжью нотацию, используют низкоуровневые средства организации многопоточности (Thread) вместо простых стандартных подходов, усложняя код для других, и т.п.
Нужно ввести какой-то регламент, чтобы все его соблюдали. Просто говорить — не пиши говнокод, нельзя. Изучив разные подходы к повышения качества ПО, нашел, что формальные инспекции кода могли бы быть хорошим средством решения этих технико-социальных проблем. Но нужно все организовать так, чтобы свести к нулю споры и взаимные обиды. Как это лучше сделать, у кого был подобный опыт организации контроля качества ПО?

6yrop

в книге "Совершенный код"
В этой книге, как и других подобных, много спорных моментов. Эти книги полезные, но не истина в последней инстанции.

nikola1956

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

Temach

давай премии за качественный код, так же как даются премии за прочитанную литературу например.мож поможет?

jakal222

В проекте есть программисты (Java которые работают продуктивно, но обладают особенными личностными качествами, излишним чувством своей правоты, и не хотят учиться стандартным методологиям разработки ПО, описанным, например, в книге "Совершенный код" или в книге "Effective Java" (Bloch). В частности, пишут большие методы, не выделяют повторяющиеся фрагменты в отдельные методы, а копипастят, форматируют отступы по разному, на разное число пробелов, мало думают над тем, чтобы код был максимально простым и удобным для чтения, вводят переменные с неграмотными в смысле английского языка названиями, не всегда соблюдают верблюжью нотацию, используют низкоуровневые средства организации многопоточности (Thread) вместо простых стандартных подходов, усложняя код для других, и т.п.
Нужно ввести какой-то регламент, чтобы все его соблюдали. Просто говорить — не пиши говнокод, нельзя. Изучив разные подходы к повышения качества ПО, нашел, что формальные инспекции кода могли бы быть хорошим средством решения этих технико-социальных проблем. Но нужно все организовать так, чтобы свести к нулю споры и взаимные обиды. Как это лучше сделать, у кого был подобный опыт организации контроля качества ПО?
Две мысли по поводу такой проблемы:
1) такие программисты должны обучать младших -> возьмите джуниоров
2) такие программисты должны гореть в аду
Да, формальная инспекция кода может помочь в том смысле, что вы выявите явных нарушителей ( уже сделали ) и сможете показать им, что они не правы ( невозможно, потому что они "круты" и горды ) путем давления коллектива или страшилками о том, что может произойти ( или уже произошло ) из-за "такой работы копипасты и остального" и кто будет наказан
Если им дать толковых джуниоров, которые хотят учиться, то возникнет доля ответственности ( коей я не замечаю по вашему описанию проблемы ). И вот такое отцовство сможет натолкнуть этих джедаев на путь силы.
Альтернатива джуниоров - большой ненужный кусок старого кода ( клин клином ) или ненужный большой проект ( псевдоответственность ).
Основная идея, которую я хотел бы донести до них - Вы не только пишете код, но еще и являетесь ответственными за него перед коллективом (!)
Поэтому:
- джуниоры
- ненужный старый код
- ненужный проект
Могу и ошибаться в психологии и поведении коллег

nikola1956

Может и поможет, только начальство не согласится.

6yrop

Разработчики делают лишние копипасты и при этом продуктивно работают? Не стыкуется.

nikola1956

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

kokoc88

Как это лучше сделать, у кого был подобный опыт организации контроля качества ПО?
Я сделал три проекта с одинаковым стилем кода в достаточно больших командах. По моему опыту здесь только два варианта. Или тимлид с полномочиями на постановку задач на переписывание и рефакторинг кода с наивысшим приоритетом. Или уже созданная общая атмосфера в коллективе (вроде бы, такой коллектив есть в Google когда от нового разработчика требуют соблюдать стиль кодирования, не обращая внимание на его "обиды". Ввести хорошую практику в командах, где среди разработчиков полностью отсутствует вертикаль, практически нереально. Тем более, если усложнить эту задачу попытками всех удовлетворить и никого не обидеть.
Метрики и примеры из книжек, как и другая аппеляция к третьим лицам - это хорошо. Но работает только тогда, когда разработчики согласны так договариваться. А это само по себе большая редкость.

Whoman-in-white

По-моему, это только сверху можно ввести. Надо сверху принять coding style и регламент проведения ревью кода

svetaslav212

Неужели угроза тем, что их бог покарает, не работает? :smirk:

Anna551

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

Whoman-in-white

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

smit1

В проекте есть программисты (Java которые работают продуктивно, но обладают особенными личностными качествами, излишним чувством своей правоты, и не хотят учиться стандартным методологиям разработки ПО, описанным, например, в книге "Совершенный код" или в книге "Effective Java" (Bloch). В частности, пишут большие методы, не выделяют повторяющиеся фрагменты в отдельные методы, а копипастят, форматируют отступы по разному, на разное число пробелов, мало думают над тем, чтобы код был максимально простым и удобным для чтения, вводят переменные с неграмотными в смысле английского языка названиями, не всегда соблюдают верблюжью нотацию, используют низкоуровневые средства организации многопоточности (Thread) вместо простых стандартных подходов, усложняя код для других, и т.п.
Ответ зависит от того, какую роль данные люди играют в компании.
Если эти люди незаменимы, т.е. делают что-то реально сложное, но забивают при этом на культуру разработки, то пусть кто-нибудь менее умный занимается рефакторингом / причёсыванием их кода.
Если же они не являются выдающимися и незаменимыми работниками, можно их просто уволить.

psm-home

Но нужно все организовать так, чтобы свести к нулю споры и взаимные обиды.
Очень хорошо помогает диктатура лида + некоторое количество уважаемых разработчиков, на которых лид может опереться. Тогда остальных можно приучить делать все по-человечески. Не очень понятно, зачем ты хочешь все формализовать, кмк только спровоцируешь буквоедство в духе "я буду так делать, потому что в правилах не прописали, что так делать нельзя ."

Вообще, из того что ты перечислил в списке проблем только размер метода выглядит для меня дискуссионным, все остальное с моей точки зрения любой нормальный java-кодер должен принимать и практиковать без разговоров. Нарушение code style, свой особый размер отступа (в тяжелом случае подобные существа еще и переформатируют чужой код под свои привычки прямое использование Thread - все это выглядит очень плохо.
У вас там крутые олимпиадники или наоборот выходцы из НИИГиТ?

nikola1956

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

nikola1956

У вас там крутые олимпиадники или наоборот выходцы из НИИГиТ?

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

Andr163

А реально собрать всех и выработать единый code style, который зафиксировать потом на уровне pre-commit hook-ов?
Заодно в workflow разработки можно внедрить успешно пройденный code review, как необходимое условие попадания кода в мастер.

marat7256

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

и!

Anna551

Да, нужно будет сначала попробовать договориться с разработчиками, убедить их, что практика инспекций кода активизирует обмен опытом между программистами, а потом поговорить с начальством.
А прежде чем принуждать какую-то команду - у вас у самих эти практики есть? А работают так как хотите?
Если такие практики работают, это вполне можно делать на уровне полиси - merge в мастер невозможен без двух ревью-аппрувов. Не успеваешь сдать таск из-за ревью? Сам себе злобный буратино

pilot

1) такие программисты должны обучать младших -> возьмите джуниоров
:facepalm:

luna89

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

6yrop

тимлид с полномочиями на постановку задач
Все задачи проходят через голову одного человека? Как такой подход масштабируется по количеству задач? Этот человек не вникает в детали задач?

PooH

как лид вывел для себя два принципа, которых стараюсь придерживаться:
1. На стадии обсуждения все могут предлагать способы улучшения, концепции и т.п.
Окончательное решение принимается лидом, также на него сваливается вся ответственность за принятое решение.
2. Решение окончательное и обязательное к исполнению. На этом этапе несогласные пиздятся ногами вплоть до административных санкций. Могут быть исключения, но только при наличии объективных факторов (невозможность реализации из-за неучтенных особенностей и т.п.)
вообще для продуктивной работы команды лиду надо в первую очередь составить правила работы: оформление кода, политика работы с VCS, зоны ответственности и т.д..

PooH

в случае большой команды надо вводить мини-лидов по модулям

6yrop

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

PooH

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

6yrop

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

6yrop

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

PooH

Чтобы вынести правильный вердикт нужно вникать в детали (дьявол в деталях). Это плохо масштабируется по количеству задач.
ты что-нибудь про делегирование слышал?
лиду не нужно вникать большинство задач, ему нужно вникать в наиболее важные из них и создавать политики
к примеру,
мини-лиды берут на себя 80% работы лида по модулям, остальные 20% твои
как пример, я не занимаюсь разработкой UI, но я отвечаю за проект в целом. Я не вникаю в каждую задачу по UI, но я слежу за кодом и метриками (потребление памяти, производительность, предупреждения компилятора, предупреждения статического анализа).
При необходимости делаю полный ревью и анализ проблемного кода (обычно по фидбэку от тестеров) по результатам которого и видно, что надо раздать: пиздюли или пряники.

Maurog

Я сделал три проекта с одинаковым стилем кода в достаточно больших командах.
а ты случайно не сделал пару проектов с разными стилями кода? вот тут ты бы прокачался серьезно :grin:

Maurog

Изучив разные подходы к повышения качества ПО, нашел, что формальные инспекции кода могли бы быть хорошим средством решения
нашел? если это самое точное слово, то в данном конкретном случае оно не поможет, т.к. в коллективе чувствуются проблемы с компромиссами.
формальный coding style может решить часть проблем
у меня есть опыт внедрения как кодинг стиля, так и код ревью. последний не прижился (или еще точнее, не внедрился) в коллективе (речь о плюсовиках первый удалось продавить, но нелегко. сначала я составил документ, потом спорные моменты утверждали голосованием. опять же использовался местный авторитет (это не я) для продавливания самого факта существования документа
при составлении самого документа пришлось учитывать местную специфику, чтобы людям не надо было сильно перестраиваться, ведь главная цель документа была выработать единый стиль, а не навязывать некое абсолютное добро.
на данный момент остается куча легаси в старом формате, люди далеко не все пункты стандарта соблюдают. вот так и живем
кстати, очередным толчком для принятия формального документа явилось увольнение одного из новичков (он был на испытательном сроке который сильно выделялся (в плане кода) от корифеев. на копромисс тяжело шел (точнее мы все шли вопросы дизайна тоже плохо обсуждались. с другой стороны, не уверен, что даже если бы документ уже существовал, то этот индивид не выделялся бы. некоторые главы в стандарте пришлось писать по его примерам кода, уж слишком специфическими они были :grin:

Anna551

у меня есть опыт внедрения как кодинг стиля, так и код ревью. последний не прижился
На самом деле немножко странно, что coding guide заработал отдельно от код-ревью - они, обычно, неплохо дополняют друг-друга.
Ну и еще - половина боли от coding style решается как правило одним потраченным вечером на настройку Uncrustify или чего-нибудь аналогичногО, после чего 90 процентов проблем форматирования решаются одним хоткеем, а об именовании переменных/методов обычно люди проще договариваются, чем о фигурных скобочках :-)

pilot

Но цель в мягком воздействии на авторов кода, чтобы люди делали выводы сами и продолжали разработку приложения, но более качественно с точки зрения его текста.
По-хорошему делать долго, дорого и нужны полномочия.
По-плохому:
1. Разбивать задачи на куски, которые можно переписать целиком в случае пропажи программиста.
2. Следить чтобы не было кусков кода, которые знает только один программист (а если они есть см п.1).

schipuchka1

Нужно ввести какой-то регламент, чтобы все его соблюдали. Просто говорить — не пиши говнокод, нельзя. Изучив разные подходы к повышения качества ПО, нашел, что формальные инспекции кода могли бы быть хорошим средством решения этих технико-социальных проблем. Но нужно все организовать так, чтобы свести к нулю споры и взаимные обиды. Как это лучше сделать, у кого был подобный опыт организации контроля качества ПО?
Это очень жёстко. Для начала хотя бы сделай процесс с обязательным код ревью и покрытием тестами

lord2476

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

6yrop

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

pilot

Тут "знать" = "читал, понял и правил".

Maurog

странно, что coding guide заработал отдельно от код-ревью
кодинг стайл надо прочитать
код-ревью - надо по-другому работать (другой рабочий процесс)
не все готовы отказываться от многолетнего ритма
какие преимущества у uncrustify перед студийным (MS VS) форматированием (разработка под винду интересует)?

6yrop

Тут "знать" = "читал, понял и правил".
Если у кода хорошая читаемость, то читать, понимать и править можно по требованию. Возникла такая потребность, берешь и делаешь. Почему у вас не так?

pilot

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

6yrop

Ясно. Вместо текстовых файлов с кодом храните информацию в головах программистов.

pilot

Ясно. Вместо текстовых файлов с кодом храните информацию в головах программистов.
:facepalm:

6yrop

даже резервные копии делаете:
2. Следить чтобы не было кусков кода, которые знает только один программист (а если они есть см п.1).

kokoc88

Почему все говорят о хорошей читаемости когда и тут же пишут "программист должен знать код", "должен помнить"? Всегда же можно прочитать.
Я правильно понимаю, что если ты участвуешь в проекте с объёмом кода от 10мб, то для решения каждой задачи ты читаешь этот код заново, с нуля, все файлы подряд, разыскивая за линейное время первое место, от которого можно начинать твою любимую "навигацию"?

jakal222


Почему все говорят о хорошей читаемости когда и тут же пишут "программист должен знать код", "должен помнить"? Всегда же можно прочитать.
Я правильно понимаю, что если ты участвуешь в проекте с объёмом кода от 10мб, то для решения каждой задачи ты читаешь этот код заново, с нуля, все файлы подряд, разыскивая за линейное время первое место, от которого можно начинать твою любимую "навигацию"?
- Siri, найди мне тот кусок кода, который нужно исправить.
- Извините, не могу прочитать ваш код, попробую поискать в интернете
Оставить комментарий
Имя или ник:
Комментарий: