Как вы (частные лица и организации) управляете своим источником, чтобы сделать
проще использовать? Вы специально поддерживаете библиотеку повторного использования? А также
если да, как вы индексируете его, чтобы максимизировать ваш рейтинг попаданий?
У меня нет, и у меня есть здесь, по общему признанию, противоречивое мнение, но я нахожу идею максимизации повторного использования кода контрпродуктивной (я интерпретирую «максимизацию» как расстановку приоритетов над всеми другими вещами, а не считаю, что оба и минусы, чтобы сбалансировать в рассмотрении). Вместо этого я предпочитаю позволять большому количеству избыточных усилий в командах скользить в пользу разделения и лучшей изоляции каждого модуля разработчика. Прежде чем все начнут не соглашаться со мной влево и вправо, я думаю, что мы можем договориться о некоторых вещах:
- Повторное использование глючного кода, которое заставит вас часами отлаживать чужой код, нежелательно.
- Повторное использование кода, который уравновешивает такой широкий спектр разнородных потребностей, что он едва удовлетворяет ваши собственные потребности и требует, чтобы вы перепрыгивали через множество обручей, чтобы в конечном итоге получить неловкое и неэффективное решение, нежелательно.
- Повторное использование кода, который постоянно требует изменений в дизайне и проходит через устаревшие типы, которые потребуют от вас переписывать код, используя его каждые 6 месяцев, нежелательно, если вы могли бы просто внедрить решение самостоятельно за полчаса способами, которые не В будущем не нужно вносить изменения в конструкцию, поскольку она служит только вашим точным потребностям.
- Кодовая база, заполненная чужеродным кодом, нежелательна по сравнению с той, которая использует больше языка и стандартной библиотеки идиоматическими и привычными способами, даже если для этого требуется немного больше кода.
- Разработчики перешагивают через пальцы друг друга, потому что они оба хотят вносить несовместимые изменения в один и тот же дизайн, в то время как сражаться, спорить и вносить изменения, которые вызывают ошибки в реализациях друг друга, нежелательно.
- Бросать кучу зависимостей в незрелые проекты, которые не зарекомендовали себя (не имели тщательного покрытия тестами, не имели времени на то, чтобы действительно звукоизолировать проект и убедиться, что он эффективно удовлетворяет потребности конечного пользователя, не требуя дальнейших изменений дизайна), нежелателен .
- Нежелательно включать / импортировать / связывать множество библиотек и классов / функций с самым сложным сценарием сборки, чтобы написать что-то простое.
- Прежде всего, нежелательно повторное использование кода таким образом, который в краткосрочной и долгосрочной перспективе стоит гораздо больше времени, чем его повторное использование.
Надеюсь, мы хотя бы сможем договориться по этим вопросам. Проблема, с которой я столкнулся при максимизации повторного использования кода от чрезмерно увлеченных коллег, заключалась в том, что это часто приводило к одной или нескольким из указанных выше проблем. Фундаментальной проблемой был не энтузиазм по поводу повторного использования кода, а то, что приоритеты были перекошены в сторону повторного использования кода, а не тестового покрытия, звукоизолирующих конструкций, обеспечения того, чтобы все было достаточно зрелым, прежде чем мы снова используем их как сумасшедшие и т. Д.
Естественно, если весь код, который мы повторно использовали, работал прекрасно, имел тщательное тестовое покрытие, было доказано, что он удовлетворяет потребности всего, используя его, способами, которые были гораздо более продуктивными, чем не повторное его использование, и не должен был проходить какой-либо дизайн Изменения в течение многих лет, я был бы в восторге от повторного использования кода. Но мой опыт часто обнаруживал, что вещи далеко не соответствуют этому идеалу, когда повторное использование кода, вероятно, становится проблемой обслуживания, а не решением.
Как вы (частные лица и организации) управляете своим источником, чтобы сделать
проще использовать? Вы специально поддерживаете библиотеку повторного использования? А также
если да, то как вы индексируете его, чтобы максимизировать рейтинг попаданий?
Итак, опять же, я не стремлюсь «максимизировать» повторное использование кода в проприетарном коде, написанном внутри команды. Я стараюсь убедиться, что команда не тратит огромное количество времени на избыточные усилия, но я позволю вещам немного упасть, если и физики, и ребята, занимающиеся рендерингом, реализуют свой собственный класс ограничивающего прямоугольника, ориентированного по оси, например, Это не обязательно даже так избыточно, так как физик может использовать представления min / max, которые более эффективны для его целей, в то время как разработчик рендеринга может использовать представления центра / половинного размера. Я стараюсь сделать так, чтобы мы по возможности использовали как можно больше стандартной библиотеки, потому что это повторное использование кода, которое практически гарантированно надежно, очень хорошо протестировано и не требует дальнейших изменений в дизайне (другие команды тратят много времени) своего времени, чтобы убедиться в этом).
Вместо этого я переключаю внимание на тестирование. Модуль, дублирующий немного кода здесь, и вполне нормально, если вы спросите меня, прекрасно ли он работает таким образом, который делает пользователей по-настоящему счастливыми, имеет полное тестовое покрытие и не требует бесконечных изменений. Мы допускаем такое дублирование все время, когда мы используем сторонние библиотеки, которые, вероятно, дублируют некоторый код, который мы также имеем в нашей внутренней кодовой базе. Это не проблема, когда избыточность не приводит к избыточным усилиям по обслуживанию.
Поэтому я предлагаю немного ослабить идею максимального повторного использования кода. Но если вы хотите максимально упростить повторное использование действительно надежного, хорошо протестированного, нетривиального кода, то я считаю, что гораздо полезнее организовывать очень специфические библиотеки, такие как «математическая» библиотека, библиотека обработки изображений и т. д. - вместо того, чтобы пытаться объединить их все во что-то вроде «ядра» или «общего». Последние типы склонны склонять разработчиков к добавлению всевозможных эклектичных утилитарных функций, которые едва приносят пользу команде, использующей их, и в большинстве случаев они становятся беспорядочными, когда становится трудно находить что-либо интересное.