Какие методы вы используете для максимизации повторного использования кода?
Несколько лет назад мне рассказывали об исследовании повторного использования кода. По-видимому, было обнаружено, что в среднем программисты имеют 7-минутное окно при поиске кода для повторного использования. Если они не найдут код, который соответствует их потребностям в этом окне, они сами напишут.
Это было представлено в контексте необходимости тщательного управления кодом для повторного использования, чтобы убедиться, что вы можете найти то, что вам нужно в окне.
Как вы (отдельные лица и организации) управляете своим источником, чтобы упростить его повторное использование?
Вы специально поддерживаете библиотеку повторного использования? И если да, то как вы индексируете его, чтобы максимизировать свою скорость?
Ответы
Ответ 1
Сложный вопрос:
-
Некоторые части кода могут быть обобщены как библиотеки или API. У нас есть общая библиотека, которая постоянно обновляется с решениями общих проблем. Обычно: проверка, кеширование, классы доступа к данным, ведение журнала и т.д.
-
Некоторые части являются специфичными для приложения. Они не могут быть легко обобщены. Мы конвертируем их в HowTos и даем внутренние презентации. Код также перерабатывается с помощью легко просматриваемого SCM (в нашем случае SVN).
-
У нас также есть инструменты, которые генерируют код, который одна рука не может быть переработана, а с другой - всегда схожи (подумайте, чтобы вызвать хранимую процедуру).
-
Паровое программирование также является полезным способом распространения знаний о существующих решениях. Мы используем это, когда это возможно или целесообразно.
-
Последний способ - обучение. Каждый кодер имеет наставника, к которому можно обратиться. Поскольку преподавателей мало, между ними много обмена, и эти знания могут быть рассеяны сверху вниз.
Ответ 2
Рефтор безжалостно и надеемся на лучшее.
Обновление (спустя 4 года и, надеюсь, мудрее)
- Как и комментарий С.Лотта говорит: Обратите внимание на Именование. Распространите слово всем "коммиттерам" в команде. Хорошие имена делают вещи доступными для поиска и тем самым уменьшают дублирование.
- У вас есть один способ сделать что-то и сохранить его ДОСТУПНЫМ И ПОИСКОМ.
- Введите код для среднего программиста (L.C.D.). Не будьте умны, где простого будет достаточно. (Это включает в себя дизайн-образцовое прикосновение к ужасу и связанные с ним расстройства).
- Принять общий набор условностей, стилей, руководств, стандартов, et.all раньше. Обеспечьте бай-ин и тем самым соблюдение в команде. (Это означает, что каждый использует вкладки (или пробелы)!). Неважно, что вы выбираете - цель состоит в том, чтобы код выглядел последовательным.
- Имейте привратника (уважаемого командой), который видит все отметки для красных флагов.
- Введите код test-first/outside-in. Обычно это гарантирует, что ваш код можно использовать несколькими клиентами. (См. Марку GOOS о независимости контекста)
Ответ 3
-
Поддерживайте активную поддержку.
-
Знайте существующую базу кода/заставьте других разработчиков знать базу кода. Если ваша группа/компания достаточно велика, имейте кого-то, кто знает базу кода и может попросить совета.
-
Документ, документ, документ. Недокументированный код бесполезен для повторного использования, потому что он слишком долго разбирается в его внутренней работе.
-
Имеют хорошие интерфейсы. Легкие типы, простые структуры или классы. Чем сложнее что-то, тем меньше он будет использоваться в другом проекте.
-
Оптимизировать и отлаживать код многократного использования. Разработчики, которые испытывают ошибки в коде других людей в течение n-го времени, начнут кодировать уже существующий код заново.
Ответ 4
Попробуйте использовать TDD, если вы еще не являетесь моим первоначальным ответом.
Я думаю, что использование TDD - отличный способ сохранить связь кода с другими преимуществами. Хотя это по сути не предотвращает реализацию одного и того же поведения в два раза, это делает его намного проще, когда вы определяете область, в которой вы можете удалить дублирование.
Еще одно преимущество, TDD имеет шаг для удаления дублирования (рефакторинг) в рамках цикла.
Кроме того, тесты составляют часть вашей документации по кодам, что упрощает идентификацию повторяющегося поведения.
Ответ 5
Организация является ключевым. Если доступны пространства имен и intellisense, правая функция может быть сужена и, в конечном счете, найдена. Если они не находят то, что хотят, они могут найти что-то близкое или связанное. Код, который просто смят в одной огромной группе, позволяет легко найти, но люди никогда не найдут способ, который они хотят достаточно быстро.
Консистенция также имеет решающее значение, как с указанием имени и местоположения. Если вы решите изменить свой стиль в какой-то момент во время проекта, вернитесь и измените все, чтобы соответствовать этому стилю. Это может быть очень долгий и скучный процесс, но это лучше, чем пытаться использовать несогласованную библиотеку.
Ответ 6
Профиль всего приложения и начало рефакторинга из более тяжелого раздела кода.
(80% времени, затраченного на 20% от всего использованного кода)
Используйте инструмент профилирования, который имеет возможность идентифицировать утечки памяти, повторные вызовы,
длинные вызовы, незакрепленная память, нераспределенные ресурсы и т.д.
По правилу Новый код всегда использует наилучшую практику.