В обзорах кода на работе я видел код и шаблоны, которые я считаю «умными», но не обязательно улучшающими общее качество или удобство сопровождения базы кода. Я отмечаю это в своем отзыве и не убежден в контраргументах. Я немного обеспокоен, когда этот код попадает в репозиторий, а затем в производство.
Я хочу сохранить сплоченную команду, поэтому я не хочу создавать напряженность, слишком открыто высказываясь о своих оговорках. Я также хочу создать отличный продукт для наших клиентов, не будучи слишком снисходительным.
Традиционно, у кого есть право вето на то, что проверено и как?
Как может код, который работает, но его слишком сложный / умный, удалить, не наступая на пальцы?
Ответы:
Я люблю эту цитату:
С одной стороны, это утомляет вас от слишком умного кода, поскольку его будет сложно отлаживать и расширять позже.
С другой стороны, умный код, который работает, является отличным способом изучения. Вероятно, для всей команды. Как насчет поощрения автора дать небольшую неформальную беседу о коде своим коллегам? Просто убедитесь, что он действительно работает как задумано, и что он имеет смысл в проекте в целом. Вы не хотите превращать это в бессмысленное соревнование!
Если вы не думаете, что это добавляет ценность, тогда поставьте встречный вопрос с вопросом: «Как вы можете провести рефакторинг этой части (у вас есть тесты на месте, верно?), Чтобы она была более читабельной?» Обязательно укажите, что сложнее сделать умный, читаемый код, чтобы сделать непроницаемые самородки.
источник
Мой совет - играть идиотом, когда его время проверять код, не стесняйтесь сказать, что вы понятия не имеете, как он работает (если ваше эго нуждается в массаже, вы можете сказать, что у вас не было времени, чтобы разобраться с этим. ) и попросите разработчика объяснить это. Когда он закончит, вы можете предложить, чтобы он записал все это в качестве комментария для будущего обслуживания с подразумеваемым намеком на то, что он слишком запутан, чтобы считаться «хорошим» кодом.
Если его хороший код слишком сложен, большинство людей поймут подсказку, не сказав ничего о качестве кода или опыте разработчика.
PS. Очевидно, что большая часть этого кода будет субъективной в любом случае, поэтому невероятно умный код одного человека может быть разумным и, возможно, даже отраслевым стандартом алгоритма для другого разработчика, поэтому вы не можете обвинить кого-либо непосредственно в написании плохого кода (кроме случаев, когда это очевидно как подрядчик, который скопировал байтовый массив в список stl, передал его в процедуру шифрования и затем преобразовал обратно в байтовый массив!)
источник
Мое эмпирическое правило заключается в том, чтобы изменить правила качества кода в пользу сильных личностей разработчиков. Я использую его всегда, когда у меня нет времени копать достаточно глубоко - такая копка, кстати, обычно довольно трудоемка (подробнее об этом ниже).
Это правило основано на личном опыте. Я начал (вероятно, как любой неофит) с фанатичного следования инструкциям и тщательно боролся со всеми отклонениями. Со временем я приобрел достаточно навыков и выучил достаточно трюков, чтобы сравнительно легко выигрывать такие бои, что, в свою очередь, позволило больше сосредоточиться на изучении общего воздействия моих «побед». И влияние, насколько я могу судить, было довольно негативным - парни, которые «проиграли бой», страдали и стали менее продуктивными - и, вы знаете, тот факт, что их код был на 200% совместим с рекомендациями по качеству, не компенсирует это.
Это открытие заставило меня отказаться от большинства боевых действий, что, в свою очередь, привело к тому, что у меня появилось больше времени для анализа проблемных случаев. И я обнаружил, что, когда я копаю достаточно глубоко, обычно где-то позади возникает интересная проблема дизайна, тонкая (или не слишком тонкая) проблема, которая просто скрывается за борьбой личностей.
Такое открытие иногда может быть не очень полезным с точки зрения конечного пользователя (хотя иногда оно может оказать глубокое влияние), но нужно признать, что удовольствие, которое я получаю, когда ломаю такой орех, в любом случае стоит того, чтобы затратить усилия ... и как обледенение на тортике руководящих принципов отклонение также уходит без борьбы. :)
источник
Ваша организация должна иметь руководящие принципы / стандарты по кодированию, которые периодически обновляются при участии команды разработчиков. В этом документе могут быть прописаны такие особенности, как: как называть переменные, как форматировать код и так далее. Документ должен также объяснить ценности, которые организация ожидает от программистов при написании кода, включая относительную важность таких вещей, как удобочитаемость, удобство обслуживания, правильность, эффективность и соблюдение стандартов.
Проверка кода должна проводиться с использованием этого документа по стандартам кодирования. Если стандарты кодирования говорят, что программисты должны предпочесть удобочитаемость краткости, когда они противоречат друг другу, тогда вы будете иметь некоторую поддержку в спорах против «умного» кода. Если стандарты не говорят этого, и вы думаете, что они должны, тогда вы можете поспорить об этом в реферате на встрече стандартов кодирования, а не пытаться выяснить это, когда чье-то эго находится на грани.
В конечном счете, это иногда сводится к суждению, и в этих случаях последнее слово должно быть за лицом, которое в конечном счете отвечает за код и / или продукт. Обычно это кто-то вроде старшего разработчика, технического лидера, менеджера проекта или директора по проектированию. Если вы ответственный сотрудник и чувствуете, что определенный код недостаточно обслуживаем, вам не следует бояться говорить об этом. Вы можете быть дипломатичным об этом:
С другой стороны, если вы не ответственный парень, то лучшее, что вы можете сделать, это четко объяснить свою позицию и попытаться убедить остальных членов команды. Если вы не получаете поддержку от менеджера, то примите, что это не ваш звонок, и двигайтесь дальше.
источник
У вас (а я иногда являюсь одним из тех умников) я бы не стал его удалять, но лично попросил бы остроумного / умного автора хорошо документировать это в комментариях и, если возможно, включить некоторые обсуждения альтернативных и более простые сочинения, которые он мог бы использовать, с примерами.
Я хотел бы подчеркнуть, что это к лучшему, потому что даже он, вероятно, не помнит все биты и качки, которые есть в этих строках за два месяца.
Он, вероятно, отбросит умный код в пользу самого простого, как только он будет вынужден написать его, например.
Почему это работает.
(без этого последнего намека этот вид запроса может быть получен как попытка со стороны компании коммодитизировать программиста , делая его взаимозаменяемым с любой другой обезьяной кода в любое время)
источник
По моему опыту, как правило, очень трудно получить код, удовлетворяющий всем требованиям, из базы кода.
Однако в следующий раз, когда код будет обслуживаться, вы легко сможете поспорить за его замену в качестве будущей меры по снижению затрат, поскольку старый код было сложнее поддерживать.
Что касается права вето, то у руководства, очевидно, есть это.
Иногда это команды или комитеты, отвечающие за качество кода, и в этом случае они также будут иметь эту власть.
Также было бы полезно, если бы вы привели пример «умного» паттерна. Может быть, вы просто слишком остро реагируете ...
«умный» почти никогда не бывает плохим в моей книге, но я могу согласиться с тем, что между умным и запутанным может быть скользкий уклон.
источник
Как и многие другие практики, я думаю, что ответ зависит от этого .
источник
Я могу определенно относиться к этому вопросу. В настоящее время я являюсь техническим руководителем для двух команд, и моя работа заключается в том, чтобы сделать код, который мы создаем, максимально читаемым и поддерживаемым. В то же время я, как известно, производил некоторый «умный» код, и я знаю, что большинству моих товарищей по команде будет очень трудно следовать за ним.
Несколько замечаний, которые я могу предложить:
Ваша команда нуждается в одном лидере, который примет окончательное решение, когда возникнут разногласия. В последнем выпуске я был в команде без руководства, и это было ужасно. Все стало аргументом, и если у вас мало людей с сильными личностями, ни один из них не сдвинется с места. Если у вас есть лидерство, независимо от того, какое решение выбрано, все в команде ДОЛЖНЫ понимать, что говорит лидерство. Вот почему руководство сделало его лидером.
Держать людей счастливыми очень важно. Поэтому, вместо того, чтобы подталкивать всю команду к своей точке зрения, просто подталкивайте их туда. Объясните принципы SOLID, объясните важность небольших и взаимосвязанных классов / методов / интерфейсов и повторяйте эти вещи каждый раз, когда вы видите, что они нарушаются (например, в обзоре кода). В то же время не заставляйте их переписывать каждую вещь, которая вам не нравится. В конце концов, вам нужен баланс между личным самовыражением и соблюдением групповых стандартов. Надеемся, что они сойдутся, поскольку личные предпочтения сместятся в сторону того, как работает группа в целом.
Я считаю, что гораздо важнее иметь чистый, понятный интерфейс классов, чем вообще не иметь «умного» кода. Например, у нас есть класс, который поддерживает список записей, которые ищутся тремя различными способами. В настоящее время он просто использует линейный поиск для всех поисков, который работает в небольшом масштабе, но поскольку этот класс находится на очень низком уровне, я вижу, что он не очень хорошо масштабируется. Я собираюсь заменить его другим классом, который использует контейнеры Boost Intrusive. Каждый элемент будет поддерживать одновременное размещение в каждом из индексов, и весь поиск будет выполнен в O (sqrt (N)). Да, это будет намного сложнее изнутри, и многим людям не понравится Boost, но снаружи останется 3 метода: Добавить, Удалить, Получить. Суть в том, что люди могут писать любой код, который они хотят (в пределах разумного),
Поддерживать идею владения кодом. Хотя иногда это трудно достичь, так как разные люди могут добавлять / изменять некоторый код. Когда код написан, первоначальный разработчик является основным хранителем этого кода. Это не значит, что никто другой не может прикоснуться к нему. Если другие изменяют свой код, это нормально, но в конце дня первоначальный разработчик проверяет его и продолжает нести ответственность за все, что там происходит. Является ли этот код простым или умным, это его ребенок. Если / когда, как вы предсказываете, ошибки начинают накапливаться из-за принятых решений о дизайне / кодировании, вместо того, чтобы просто исправлять эти ошибки по мере их появления, сядьте с этим разработчиком (который, кстати, должен исправить все эти ошибки) и подумать над этими решениями, чтобы увидеть, как они могли быть приняты по-другому.
источник
Я провел много лет, возглавляя и управляя командами разработчиков. По своей природе я немного ОКР с точки зрения кода и очень черно-белый. По опыту я узнал, что выбор ваших сражений - один из самых сложных навыков, которым вы должны научиться руководить командой. Да, стандарты важны. Да, читаемость и ремонтопригодность невероятно важны. Да, мы все должны стремиться писать единый, соответствующий стандартам код. Разработчики - это люди ... но не инструменты генерации кода. У нас есть личности, мнения, нам скучно, и мы хотим изучать новые вещи.
ОК ... так что они не добавляют, но они отвлекают? Мы говорим только о личных предпочтениях в стилях кодирования или код написан совершенно не нужно (например, используя деревья выражений и отражения только потому, что забавно использовать деревья выражений и отражения)? Если это первое, отпустите. Часть удовольствия быть разработчиком - придумывать творческие решения проблем. Может быть (и большинству из нас не нравится это признавать), мы иногда чувствуем себя запуганными подходами, которые не понимаем, и либо не хотим спрашивать, либо не имеем дополнительной энергии для изучения нового подхода.
Теперь, когда креативность приводит к ненужному коду и совершенно неоправданной сложности, тогда во что бы то ни стало говорите и делайте свое дело. Быть командным игроком важно, но так же важно (и привлекать других) к ответственности. Обзоры кода касаются ответственности, а также обеспечения качества и обучения. Вы собираетесь наступить на некоторые пальцы, но если вы чувствуете, что у вас есть веский аргумент, почему нужно потратить усилия (деньги) на переписывание рабочего кода И в процессе должно быть ушиблено эго И вы хотите рискнуть подавить чей-то энтузиазм по поводу своего мастерства тогда не стоит уклоняться от того, чтобы положить его на стол. Если вы лидер команды, это ваша работа. Знайте о воздействии и делайте это. Если вы не являетесь руководителем команды и не обладаете полномочиями, то передайте это команде, чтобы решить.
Лучший способ привить подотчетность в вашей команде - побудить других привлечь вас к ответственности. Если вы непредвзяты и не закрываете людей, когда они предлагают усовершенствовать ваш код, вы можете обнаружить, что они более восприимчивы к вашим предложениям.
источник
Исходя из личного опыта, когда это происходит, я бы попросил разрешения стать добровольным тестировщиком состязательного подразделения для написания тестов, чтобы мучить незнакомую реализацию.
Я очень постараюсь по-настоящему понять, как работает код, а также попытаюсь исследовать его различными способами.
Обратите внимание, что это временное обязательство. Это могут быть часы, десятки часов или даже хорошая часть недели. Оправдано ли это, зависит от того, соответствует ли сложность кода сложности требования.
Если бы я не победил, т. Е. Если код выдержал многие тесты, я бы убедил себя, что, возможно, реализация действительно более понятна, чем я, и я поддержу ее включение в основной продукт.
В зависимости от методологии управления исходным кодом, может потребоваться предварительная фиксация кода в системе контроля версий (возможно, в филиале), прежде чем начнется этот этап тестирования.
Мой ответ окрашен моим опытом использования OpenCV. Есть алгоритмы, которые намного сложнее, чем любой программист может реализовать самостоятельно; даже не доктора наук - может быть, несколько процентов кандидатов наук. Если код настолько хорош, вы должны доверять этому, действуя против своих собственных инстинктов и предубеждений, даже если у вас нет эффективных средств количественной оценки этого уровня доверия.
источник