Как хороший разработчик не может создавать код с низким коэффициентом хита шины?

alt text http://www.metrocouncil.org/Directions/transit/images_transit/GoToBus.jpg

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

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

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

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

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

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

Ответ 1

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

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

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

  • Хорошо продуманный код означает, что ваше намерение написано в коде и устраняет секреты.

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

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

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

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

Ответ 2

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

Ответ 3

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

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

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

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

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

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

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

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

Ответ 4

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

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

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

Ответ 5

В то время как я работал студентом-программистом в моем университете во время моего дебюта, мне очень тесно управлял мой автобус Hit Factor. Я работал над крупными проектами, но моя работа там была только до того дня, когда я закончила учебу. На этом этапе другим программистам в отделе придется подбирать мой проект и управлять им оттуда. Мне это удалось с ведрами документации.

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

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

Ответ 6

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

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

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

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

Ответ 7

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

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

Ответ 8

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

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

Ответ 9

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

Ответ 10

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

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

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

Ответ 11

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

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

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

Ответ 12

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

Ответ 13

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

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

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

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

Ответ 14

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

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

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

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

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

Ответ 15

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

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

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

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

Ответ 16

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

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

Подводя итог:

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

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

Ответ 17

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

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

Ответ 18

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

Ответ 19

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

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

Ответ 20

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

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

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

Попробуйте прокомментировать ваш код и обновите javadoc.

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

Надеюсь, что это поможет.

Ответ 21

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

Ответ 22

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

Ответ 23

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