2018-01-09 13:13:19 +0000 2018-01-09 13:13:19 +0000
106
106

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

Background

Я инженер-программист и практикующий специалист TDD в моей компании. Мой менеджер также отвечает за кодирование (если необходимо) и управление подчиненными инженера.

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

Проблема

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

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

  • Реализация новых возможностей, которые требуют изменений в непроверенный, унаследованный класс

  • Решение неопределенности путем взаимодействия неизвестных

Мы получили несколько аргументов в связи с аналогичными встречами дизайна. В одном жарком споре мне даже сказали, что “[он] программирует уже более 20 лет!”, подразумевая, что я не должен даже осмеливаться ставить под сомнение его авторитет.

Что я пытался смягчить эту проблему

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

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

Как мы можем найти золотую середину?

  • Обновление

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

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

Честно говоря, я очень разочарован тем, что увидел так много откликов с сильным стереотипом “Почему вы, инженеры, не можете думать как менеджеры”. В конце концов, каждую вещь можно назвать чрезмерно инженерной: Почему отметьте поля, как private вместо того, чтобы выставлять все, почему блок-тест, если ни один пользователь не собирается выполнять только один блок, и т.д.

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

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

Ответы (11)

235
235
235
2018-01-09 13:48:28 +0000

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

Я собираюсь предположить, что это было. Потренируйся рассказывать эту историю. Она конкретна и реальна. Это не “Х может случиться” или “ты можешь измениться”, но “Давным-давно я делал это так, и вот как это получилось”. Менеджеры (я говорю как один из них) настороженно относятся к тому, чтобы тратить деньги (и поверьте мне, вы пишете более сложный код, который другие не могут понять при первом проходе, это трата денег) на то, что могут произойти. Они не хотят финансировать спекуляции, которые могут быть основаны только на “обучении книге” и последнем причудливом причудливом причудливом причудливом причудливом причудливом причудливом причудливом причудливом причудливом причудливом причудливом причудливом причудливом причудливом причудливом причудливом причудливом причудливом причудливом причудливом причудливом причудливом приличном рассмотрении. Но когда вы опираетесь на свой опыт? Это совсем другая ситуация.

я не большой поклонник фабрик, провайдеров, инжекторов и тому подобное. Обычно они настроены на вещи, которые никогда не произойдут (переход с MS SQL на Oracle) или имеют небольшое влияние, когда они делают (изменение папки, в которой хранятся файлы). Они действительно имеют место в механизмах, которые очень изменчивы, в которых вы, кажется, находитесь. Поэтому вам нужно показать, что у них есть такое место. Вы, кажется, исходите из позиции: “Это нормальный способ делать вещи, и мне нужна причина, чтобы этого не делать”. Ваш менеджер говорит: “Это ненормально; нормально - это просто и просто”. Дайте мне хороший повод, чтобы поставить другой слой на пути". Поработайте над этой причиной. Работайте над историей успеха в прошедшем времени, когда этот дополнительный слой экономил дни или недели работы. Оправдайте свое инженерное дело, иначе оно действительно переборщит с инжинирингом.

157
157
157
2018-01-09 15:37:37 +0000

Эта цитата из одного из ваших комментариев беспокоит меня.:

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

  • Я видел несколько повторений следующего жизненного цикла:

  • Команда опытного программиста придумывает другой подход к программированию.

  • Это рассматривается в течение нескольких лет, вплоть до десятилетия, как нечто, что должно использоваться повсеместно, несмотря на любые недостатки и ограничения. На этом этапе достаточно сказать “Я применяю методологию X”, не анализируя, является ли X чистым преимуществом.

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

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

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

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

52
52
52
2018-01-10 18:53:35 +0000

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

Вот обобщенные аспекты вашей проблемы в том виде, в котором я ее вижу:

  1. Вы работаете в квалифицированной области, которая требует сотрудничества

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

    1. Существуют разногласия по поводу того, как эта совместная работа должна быть выполнена
  3. Один из тех, кто не согласен с этим, - ваш менеджер

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

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

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

23
23
23
2018-01-09 19:58:25 +0000

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

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

За 10 лет разработки, истинный шаблон стратегии/фабрики требовался всего три раза, два из которых были от рабочих мест:

  • В приложении, которое отображало информацию о продукте, где некоторые из этих продуктов, по сути, были кучей небольших продуктов в коробке, мы использовали стратегию для определения того, какая фабрика нужна для преобразования информации о продукте (запрашиваемой с помощью ключа) в вид. Не очень славно, но это помогло. Если мне позволено сопоставить вашу скромную болтовню об ошибках, то за все время моего пребывания там у нас никогда не было ни одной ошибки! (об одной сообщили после моего ухода, но оказалось, что это ошибка пользователя :)).
  • В приложении, которое показывало пользователям, куда идти на занятия, мы использовали фабрику и абстракцию, чтобы позволить быстрый переход между Bing Maps API и Google Maps API. Это было связано с тем, что и то, и другое имело свои издержки/выгоды, и компания не добивалась прогресса в определении того, что использовать. В конце концов, мы услышали из нашего домашнего офиса, что у нас уже был ключ API для одного из них, и мы смогли повернуть в последнюю секунду к этому API, прямо перед запуском.

И третий - это проект, с которым я шучу, который делает мониторинг серверов для серверов Windows:

  • я использую интерфейс для вывода данных мониторинга и для самих мониторов. Мониторы очень настраиваемые (в зависимости от настроек приложения). Реализация вывода зависит от того, тестирую ли я новый монитор или нет, так что в IOutputInterface есть ConsoleOutput и SqlOutput в качестве реализаций, которые могут меняться.

  • Обратите внимание, что в моем личном проекте паттерны и инверсия управления (IoC) сразу же используются чаще, чем в моих рабочих проектах.

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

9
9
9
2018-01-10 06:54:37 +0000

Простое решение: quit.

Жесткое решение: в любом разногласии, половину вины лежит с вами.

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

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

Если это не работает хорошо, рассмотрим другой роли в команде, другой команде в компании или, наконец, другой компании.

9
9
9
2018-01-10 03:54:04 +0000

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

Опустошите свой разум, будьте бесформенны. Бесформенным, как вода. Если вы положите воду в чашку, она станет чашкой. … Теперь вода может течь или разбиться. - Брюс Ли

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

Как вы видите его, вы увидите себя. Пока вы будете лечить его, вы будете лечить себя. Как вы думаете о нем, вы будете думать о себе. Никогда не забывайте об этом, ибо в нем вы найдете себя или потеряете себя. - Helen Schucman

A Wing Chun Kung Fu мастер будет рисовать своего противника в и закрыть расстояние, прежде чем искать и нападение на центральную линию, где он является наиболее уязвимым. Не спорьте с мелочами только для того, чтобы выиграть, найти центральную линию большой проблемы и сфокусировать давление там.

Я имею дело с инженерами на ежедневной основе, которые отказываются переделывать или изучать новые парадигмы программирования, и мне было дано нечто вроде аргумента “Я был здесь с перфокарт” больше раз, чем я могу сосчитать. По моим подсчётам, я проиграл 80% сражений, но эти 20%…вау…я сделал big изменения. Я могу звучать расплывчато, но сделайте некоторые Google исследования по некоторым из этих ключевых слов, и вы получите то, что я имею в виду.

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

8
8
8
2018-01-09 13:21:09 +0000

Что делать?

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

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

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

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

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

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

5
5
5
2018-01-12 18:58:58 +0000

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

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

3
3
3
2018-01-14 16:40:57 +0000

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

Но он ваш менеджер, и вы не имеете дело с менеджером, вы имеете дело с его отказом делать то, что you думает лучше всего, и настаивает на том, чтобы делать то, что he думает лучше всего. И это нормальное состояние вещей, что ваш менеджер принимает решение. Это также нормальное состояние вещей, что он в конечном счете несет ответственность за успех или неудачу, а не вы. У него есть полномочия. И он прав, вы не должны подвергать сомнению его авторитет. Вы можете сомневаться в его правоте, но не в его авторитете. Таким образом, вы либо имеете дело с ним, либо переходите в компанию, которая делает все по-своему.

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

1
1
1
2018-01-14 20:06:06 +0000

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

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

0
0
0
2018-01-10 10:09:55 +0000

Я бы предложил парное программирование и экспертную оценку. Это поможет вашим коллегам лучше понять ваш код, так как вы должны объяснить why и how как вы это делаете, а не после.

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

Похожие вопросы

19
20
21
19
4