YAGNI и младшие разработчики

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

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

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

Кто-нибудь из вас имел опыт решения подобных проблем? Как ты это решил?

7 ответов

Я бы порекомендовал обзоры кода или парное программирование. Это дает вам возможность обучить ваших коллег-разработчиков и повысить общее качество.

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

Обзор кода и парное программирование - прекрасные идеи. Они особенно хороши, потому что они не "только для младших людей" - я делаю оба с одним из моих близких коллег; нам вместе почти 100 лет, и у нас более 70 лет опыта программирования:-)

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

Я бы посоветовал вам определить методологию, которая, по вашему мнению, будет полезна вашим младшим партнерам. Конкретная методология, вероятно, не имеет значения (ересь!); Я имел успех с составным / структурированным дизайном, объектно-ориентированным дизайном, алгебраической спецификацией (!) И экстремальным программированием. Но

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

  • Чтобы показать, что это вкусно, вам может потребоваться съесть собачью еду самостоятельно. Выберите то, с чем вы можете жить и быть продуктивным.

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

Удачи!

Есть причина, по которой они младше, а вы старше.

Способность понять, когда изменение дизайна необходимо, является одним из них.

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

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

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

Затем рефакторинг. Знание того, что нужно искать при рефакторинге, требует немного практики. Начать с

  • Есть ли в коде, который мы только что написали, дублирование, которое мы можем устранить?
  • Есть ли дублирование между тем, что мы только что написали, и уже существующим кодом?
  • Код, который мы только что написали, затрагивает слишком много вещей? (То есть, мы должны вывести коллаборационистов?)

Повторите это несколько десятков раз, и вам станет легче.

Другой взгляд на YAGNI заключается в том, что любые изменения в коде должны быть обоснованы.

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

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

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

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

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

Другие вопросы по тегам