Как хороший разработчик не создает код с низким коэффициентом попадания шины? [закрытый]


alt текст http://www.metrocouncil.org/Directions/transit/images_transit/GoToBus.jpg

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

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

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

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

Итак, мой вопрос: как хороший разработчик не создает код с низким коэффициентом попадания шины?

и кто несет ответственность за то, чтобы разработчики, привлеченные для поддержания немного кода, смогли его понять?

23 75

23 ответа:

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

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

практики, примерно в порядке приоритета:

  1. хорошо проработанная код означает, что ваше намерение записано в коде и устраняет секреты мастерства.

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

  3. парное программирование, особенно Беспорядочные Спаривания, будет распространять знания над командой разработчиков и раскрывает секреты.

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

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

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

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

Если я знаю ...

  • что программное обеспечение должно (т. е. функциональная спецификация ... Мне не обязательно нужна спецификация дизайна)

  • Как построить, как запустить и (следуя из функциональной спецификации) как проверить существующие программное обеспечение

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

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

и кто несет ответственность за то, чтобы разработчики, привлеченные для поддержания немного кода, смогли его понять?

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

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

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

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

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

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

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

в организации всегда должно быть дублирование знаний.

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

то, что вы называете проблемой "шины", более практично, "что, если Джо уйдет / решит уйти" фактор. Как правило, трудоустройство по желанию, и любой может уйти в любой момент.

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

управление версиями и хорошо продуманный и прокомментированный код являются ключевыми.

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

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

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

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

в вики c2 раньше была статья с именем по строкам "Не доверяйте разработчику в комнате в течение месяца". Ссылка была на планы проектов с такими позициями, как" внедрить систему, Фред, шесть недель", где управление проектами состоит из разговоров, таких как " как это происходит, Фред? Мы все еще в порядке в течение шести недель?"и Фред говорит:" Да, я думаю, что мы на 80% там."

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

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

в порядке важности (очевидно, это мое собственное мнение):

  • ясно названные объекты, переменные и имена функций
  • четкие комментарии
  • Системы Управления Версиями
  • Code Reviews
  • разумное программное обеспечение для отслеживания ошибок, с фактическими заметками о том, что произошло.
  • документация, где это необходимо (но только где это необходимо; слишком много всего делает его трудно найти то, что вы нужно)

и человек, ответственный за это? Ты, конечно.

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

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

объемная документация будет помехой-как для текущего кодера, так и для будущего кодера.

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

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

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

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

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

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

Итак, ответ: Не ожидайте, что чистый бизнес-риск может быть решен волшебным образом с помощью некоторых технологий, инструментов или методологии. Подумайте wanilla business 101. Оцените риск, оцените затраты на его смягчение, сравните цифры, действуйте соответственно.

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

Я думаю, что решение состоит в том, чтобы иметь более чем 1 разработчик проектировать систему с самого начала. ВСЕГДА. Три разработчика лучше (я знаю, что это любимый размер команды Google). Таким образом, более чем один человек понимает эту систему от ее ядра и выше, глубоко, зная, как она работает и почему она была разработана таким образом.

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

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

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

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

To sum вверх:

  • шаблон (Ы) проектирования, гарантирующий, что каждый разработчик соответствует шаблону (вы даже можете использовать правила политики кода в visual studio team foundation для применения этих правил)

  • модульное тестирование, которое охватывает более 80% покрытия кода (что также прокладывает путь для разработки на основе тестирования)

Я нашел это запись в блоге, который содержит некоторые интересные моменты:

  1. сохранить вещи простыми: держите процессы как можно более простыми (но нет ничего проще!). Это гарантирует, что процессы легки для поддержания и поэтому легко учить других. Простота, как правило, сводится к двум вещи: а) используя правильный инструмент для правильная работа, и Б) использование наиболее простой способ добиться того необходимый. Я видел несколько процессов которые напрасно усложняются ненадлежащие технологии или использование технологии. Разработать последнее, процессы над проектированным часто для того, чтобы продемонстрировать сообразительность создатель процесса. Избежать таких Руба Голдберга процессы любой ценой! Важный, связанный с простотой фактор (с точки зрения шины) - это использование технологий, которые знакомы более чем одному человеку в команде. Этот строит в высоком факторе шины от начало.
  2. документ, документ, документ: это без проблем, но люди все еще думаю, что они могут уйти с "делать это сначала и документирование позже." Документация выполнена постфактум часто менее чем полезно, потому что автор забывает включить некоторые (многие?) небольшие детали, которые, конечно же, превращаются из критических времен беда. Какой должен быть процесс документ содержит? Достаточно, чтобы помочь кто-нибудь выяснит, что, как, где, когда-что он делает; как он работает; где он сидит (серверы и т. д.); и когда и как часто это происходит. Этот документация должна также включать некоторые основные сведения по устранению неполадок и ссылки на соответствующие разделы руководства. Еще одним важным моментом является хранить документацию в синхронизации с процесс - т. е. обновить все соответствующие документы, когда процесс модифицируется. Это очень важно потому что документация процесса-это ваша только руководство, когда владелец процесса с коэффициентом шины 1 идет под автобусом вместо того, чтобы сесть на него.
  3. небольшое слово о стиле, возможно, в порядке - процесс документация должна придерживаться 3Cs ясности, лаконичности и понятность. Да, это возможно писать так, чтобы достичь всего три, хотя это не очевидно в мое письмо. Поощрять людей, чтобы выбрать до вторичных навыков: первые два пункты, касающиеся процесса и документация. Однако, в конце концов, это это люди, которые заставляют вещи происходить. Несмотря на хорошо спроектированные и документированные процессы, можно все еще иметь низкий фактор шины, если команда не имеет избыточность навыков. Кто будет присматривать базы данных, когда администратор уходит под (или находится под управлением) автобуса? Этот вопрос не нужно было бы задавать, если бы кто-то прошел перекрестное обучение основные задачи DBA. Насколько это возможно, каждый в команде должен иметь в хотя бы один вторичный навык, который будет дайте им возможность прикрыть кого-то другого.

система управления версиями с комментированными журналами изменений, вероятно, является ключевым компонентом.

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

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

проект должен быть легко проверить и настроить. В нашей компании все проекты-это CVS и Eclipse и Maven, поэтому при оформлении заказа вы делаете "Maven eclipse", и все готово.

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

система отслеживания ошибок-обязательно, и хорошие описания в ошибки являются обязательным.

попробуйте прокомментировать свой код и поддерживать javadoc в актуальном состоянии.

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

надеюсь, что это помогает.

просто имея более одного хорошего разработчика...

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

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