Как вы утверждаете за «высокие ноты», истинный код класса производства? - PullRequest
3 голосов
/ 10 февраля 2009

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

Я бы хотел затронуть эту тему на более общем уровне дизайна.

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

Иногда я просто говорю: «Поверь мне, я видел, к чему это ведет, мы делаем это по-другому», иногда я пытаюсь изложить сценарий, в котором определенный набор вариантов создает проблемы и т. Д. Большинство я чувствую, что не могу связаться с человеком, с которым разговариваю. С таким же успехом я мог бы сказать «поверь мне».

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

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

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

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

Заранее спасибо!

Ответы [ 9 ]

10 голосов
/ 10 февраля 2009

Вы пробовали аргумент Технический долг ? Цитирую ссылку (с сайта Мартина Фаулера):

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

8 голосов
/ 10 февраля 2009

Вот мой циничный ответ:

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

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

Одно слово предостережения - всегда задавайте себе всегда важный вопрос, который все пуристы (включая меня) всегда должны задавать всякий раз, когда сталкиваются с противодействием «правильному пути»:

Я делаю этот "правильный путь" ради себя самого?

Если ответ «да», то вам, вероятно, нужно отступить.

2 голосов
/ 10 февраля 2009

Два очка:

  1. Если вы не можете высказать свое обоснование другим, вполне вероятно, что вы сами не поймете это достаточно. Поэтому попытка сделать его доступным для других часто может пролить свет на ваши собственные предположения, которые могут быть ошибочными. Поэтому, независимо от того, насколько это сложно (и я знаю, что это так), я бы посоветовал вам приложить активные усилия, чтобы кристаллизовать свои идеи для других. Запишите вещи, сделайте диаграммы - что угодно. Даже если вам все еще не удается общаться, вы действительно можете увидеть ошибку в своем суждении.
  2. Возможно, люди, с которыми вы разговариваете, не очень знакомы с разработкой программного обеспечения. В этом случае вместо того, чтобы продвигать идеи высокого уровня, вы, возможно, захотите пройти их по первым принципам только один раз. Создайте своего рода презентацию (снова с диаграммами и всем), объясняющую ключевые идеи, от которых зависит ваше мышление, и проведите сеанс. Возможно, вам придется немного поработать для этого начального сеанса. Однако, если они получат его, на всю оставшуюся жизнь вам, возможно, будет намного легче.
1 голос
/ 10 февраля 2009

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

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

1 голос
/ 10 февраля 2009

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

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

Позвольте мне привести конкретный пример. Мне была назначена функция для добавления к коду кода, который берет коллекцию изображений и генерирует PDF из изображений. Существующий кодекс был кратким и лаконичным и был написан для удовлетворения потребностей клиентов - но он не был создан, чтобы расти. Я мог и сделал добавление функции, используя существующий код, и зарегистрировал ее, но это было некрасиво, и каждая последующая функция становилась все хуже. Затем я потратил еще две недели на написание полнофункциональной модели генеративного PDF, созданной для того, чтобы также быть потребителем. После того, как я закончил, потребовалось несколько часов, чтобы переопределить весь генератор PDF в новой модели. Я мог бы очень кратко объяснить, что построение модели, хотя и не является строго необходимым, создало стимулирующую технологию и удешевило бы добавление дополнительных функций в существующий код. Теперь у нас есть четыре основных продукта или набора функций, которые полностью основаны на этой технологии и нацелены на большее. Slam Dunk.

1 голос
/ 10 февраля 2009

Возможно, вам не следует спорить о технических решениях со средним руководством: это обсуждалось бы на неправильном уровне абстракции. Например, вместо того, чтобы ответить «для реализации новой функции потребуется X дней рефакторинга, а затем Y дней», просто скажите «это займет (X + Y) дней».

Что касается споров с младшими разработчиками, вы, кажется, спрашиваете о риторике или "как спорить"; это огромная тема, например, одним из многих методов является «обращение к власти», например скажите «Я читал об этой технике в < этой хорошей книге уважаемого автора >» ... или, даже если вы не можете что-то доказать, спорьте на том основании, что это снижает риск. ..

Большинство важно, однако, слушайте : выясните, почему они хотят спорить что-то еще, и укажите их аргумент . Например, может быть, они хотят сделать это «неправильным» способом, потому что они хотят этого быстро, потому что они находятся под некоторым временным давлением со стороны кого-то другого: если это так, адрес , который касается *1018*.

1 голос
/ 10 февраля 2009

Как правило, я обнаружил, что если мне нужно использовать аргумент «Доверься мне. Я знаю, о чем говорю», мне нужно вернуться назад и пересмотреть то, что я пытаюсь объяснить и реализовать. Иногда у меня возникает чувство, что что-то хорошее или плохое, но это показатель того, что мне нужно пересмотреть это, поскольку у меня нет конкретной причины, почему я должен или не должен что-то делать.

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

1 голос
/ 10 февраля 2009

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

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

0 голосов
/ 10 февраля 2009

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

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

...