Как я могу иметь дело с менеджерами, которые отказываются от использования общих шаблонов проектирования программной инженерии?
Background
Я инженер-программист и практикующий специалист TDD в моей компании. Мой менеджер также отвечает за кодирование (если необходимо) и управление подчиненными инженера.
Недавно у меня возникли горячие споры с моим менеджером по поводу использования шаблонов проектирования программного обеспечения.
Проблема
Часто, когда мне поручают реализовать функцию и код, мой менеджер бросает мне вызов во время просмотра кода на предмет использования общих шаблонов проектирования программного обеспечения. Он думает, что это ненужно, и нужно кодировать как можно более “прямолинейно”. Я ставлю цитаты на простом, потому что мы, кажется, не согласны с тем, какой должна быть сфера применения “функции”. Во многих случаях, функция не настолько “простая”, как думает мой менеджер, и требует использования шаблонов дизайна для разделения обязанностей и минимизации воздействия на (в основном, непроверенные) кодовую базу.
Есть два распространенных варианта использования, которые я буду применять шаблоны дизайна для решения проблемы:
Реализация новых возможностей, которые требуют изменений в непроверенный, унаследованный класс
Решение неопределенности путем взаимодействия неизвестных
Мы получили несколько аргументов в связи с аналогичными встречами дизайна. В одном жарком споре мне даже сказали, что “[он] программирует уже более 20 лет!”, подразумевая, что я не должен даже осмеливаться ставить под сомнение его авторитет.
Что я пытался смягчить эту проблему
- Писал подробные комментарии о некоторых не очень очевидных компонентах, зачем они мне нужны и для чего они нужны
- Пассивно показывал, что мой дизайн гораздо более приспособлен к изменениям
- Компонент, который я построил, имеет значительно меньшее количество багов, чем большинство других компонентов
- Правильно предвидел изменения в требованиях, что привело к минимальному количеству изменений в коде, необходимых для выполнения этого требования
- Обращался к своим опасениям заранее, когда мне бросали вызов, объясняя свой мыслительный процесс и рассуждения
- Тем не менее, мне все еще приписывают выговор за чрезмерно инжиниринговый код.
- Информативно обсудил это с моими коллегами и попросил их высказать свое мнение наедине
- Большинство из них ценят мой хорошо аргументированный подход, а один даже упомянул, что он многому у меня научился. Большинство инженеров любят обсуждать со мной свои проблемы с кодированием, потому что обычно я могу дать им полезный совет или указать на то, что они могли пропустить
- Проведение неформальных презентаций для обучения моих коллег инженеров (и менеджера) о том, почему я применяю шаблон проектирования здесь и там
Я не хочу показаться высокомерным, сказав, что мои навыки кодирования абсолютно лучше, чем у моего менеджера, но у меня действительно кончились идеи, чтобы убедить его, даже после демонстрации, объяснения и объективные результаты, которые ему показывают. С одной стороны, я хотел бы доставить без ошибок, хорошо протестированный и разработанный код. С другой стороны, меня постоянно критикуют за то, что мой дизайн не очень хорошо себя чувствует и, конечно же, “усложняет” мой код, заставляя его “одобряться”.
Как мы можем найти золотую середину?
Обновление
Поскольку я получаю много комментариев, упоминающих о моем догматичном, даже чрезмерно ретивом отношении к следованию принципам программной инженерии, я думаю, я должен прояснить:
Я не пытаюсь быть догматичным или чрезмерно ретивым. Я до забочусь о том, чтобы люди читали и понимали мой код, независимо от того, используют/понимают ли они шаблоны дизайна или нет. Я попросил коллег дать мне отзыв во время просмотра кода, понимают они мой код или нет. Они сказали, что понимают и понимают, почему я проектирую компонент таким образом. В одном случае мое использование шаблонов проектирования помогло централизовать логику поиска конфигурации в одном месте, в отличие от того, чтобы она распространялась в десятках мест, которые приходится часто менять.
Честно говоря, я очень разочарован тем, что увидел так много откликов с сильным стереотипом “Почему вы, инженеры, не можете думать как менеджеры”. В конце концов, каждую вещь можно назвать чрезмерно инженерной: Почему отметьте поля, как private
вместо того, чтобы выставлять все, почему блок-тест, если ни один пользователь не собирается выполнять только один блок, и т.д.
Моя мотивация в использовании шаблона проектирования или на самом деле любой программной инженерии является минимизировать риск и значение для компании (например, за счет сокращения ненужного распространения логики в базе кода, так что они могут быть управляемы в одном месте).
Извините, если это звучит как напыщенная речь. Я ищу ответы на вопросы типа “как найти золотую середину”, а не какие-то снисходительные ответы типа “инженеры думают, что они умны, применяя шаблоны дизайна, которые никто не понимает”.