Никогда не выбрасывать программное обеспечение?
Разве не нормально выбрасывать софт?
Джоэл заключает, что компании никогда не должны выбрасывать программное обеспечение.
Я стараюсь быть хорошим программистом и следую этому правилу. Я пришел в пятилетний проект, которым руководил один человек. Это заполнено анти-образцами и вообще плохого дизайна. Большинство проблем связаны с уровнем данных с встроенным динамическим SQL.
- Плюсы: пользователи знакомы с тем, как работает это приложение, и знакомы с его ошибками. Требования составлены, но есть некоторые основные проблемы, которые заставляют пользователей подвергать сомнению общую надежность приложения.
- Против: Анти-паттерны, интенсивная связь, встроенный SQL, невозможный уровень данных.
Я мог пересобрать требования и собрать, используя OO, шаблоны проектирования и современные методы.NET, чтобы сделать это приложение. управляемый и слаженный.
В небольших приложениях, с такими проблемами, как мы должны следовать совету Джоэла?
Этот вопрос может быть отброшен за субъективность, но я считаю, что это имеет решающее значение для моей работы в качестве программиста.
8 ответов
Джоэл понимает, что если вы выбросите все и начнете с нуля, вы потратите годы работы без какой-либо гарантии, что переписывание будет значительно лучше, чем то, что у вас уже есть.
Вместо того, чтобы сосредоточиться на переписывании, подумайте о целесообразности рефакторинга одного компонента вашего приложения за раз. Вместо встроенного SQL, возможно, стоит подумать о создании нового слоя данных, возможно, на основе "лучшего" подхода, такого как LINQ. Затем вы можете перейти на этот новый слой по одной функции за раз. Таким образом, вы будете продвигаться к своей цели - улучшить кодовую базу без необходимости отбрасывать годы предыдущей работы.
Мой совет будет таким. Если это работает, не связывайтесь с ним до следующего значительного выпуска в вашем приложении. Затем рефакторинг, как вы считаете необходимым. Мы сталкиваемся с той же проблемой в моей компании и обычно решаем проблему так, как я описал.
Не выбрасывать старый код, или плохой код, или уже не релевантный код, IMO, смешно. Если в коде нет ключевых частей, которые просто не могут быть легко воспроизведены.
Большинство проблем связаны с уровнем данных с встроенным динамическим SQL.
Пока существует некоторое различие между пользовательским интерфейсом и данными, это не обязательно проблема. Не наносите ущерба встроенному SQL - пока он параметризован, это вполне работоспособный подход.
Пере вопрос; Я бы задал вопрос, какова техническая причина для его утилизации. Если вы можете обосновать это в реальном выражении (в идеале в $£€¥), тогда отлично. Но не делайте этого только потому, что вам не нравится его внешний вид. Раньше я отказывался от кода, но попытка сделать это без регресса может быть извилистой.
Что касается пользователей; Если все сделано правильно, им не нужно знать, что есть изменение, но даже если вы хотите изменить пользовательский интерфейс - большинство людей достаточно гибки и готовы адаптироваться к новому пользовательскому интерфейсу.
Вместо того, чтобы выбросить все и начать с нуля, я реорганизовал бы его на ходу, внеся небольшие изменения, поддерживаемые модульными тестами. Стоимость переписывания с нуля редко стоит того.
Я сделаю обязательный плагин, чтобы проверить работу Эффективно с Устаревшим Кодексом Майклом Фезерсом. Он убедительно обосновывает необходимость поэтапного рефакторинга, уделяя особое внимание тестированию устаревшего кода. Книга немного устарела, но, опять же, ваш код тоже. Я нашел, что это очень полезно, поскольку это помогло мне сделать концептуальный сдвиг, который изменил способ, которым я подхожу к так называемым проектам "коричневого поля". Если разработчика попросят перестроить дом, он редко будет предлагать бульдозерную конструкцию и начинать все заново; проект просто будет слишком дорогим, и в течение длительного периода времени структура больше не будет использоваться.
Я думаю, что программное обеспечение, которое вы описываете, не является строго выброшенным, но может потребоваться рефакторинг до неузнаваемости, возможно, после того, как вы сначала написали кучу тестов, чтобы убедиться, что ничего не сломалось во время процесса.
В тот момент это было выброшено или нет? Я бы сказал да, хотя окончательное имя EXE и видимая операция могут совпадать. Короче говоря, я думаю, что это может быть скорее вопросом семантики и прагматизма перед лицом реальных ограничений, чем реальной передовой практикой.
Это как раз тот случай, когда вы хотите сохранить старую версию;)
До тех пор, пока вы не скопируете новую систему с точными ошибками старых, пользователи будут требовать возврата старого приложения... Многие пользователи будут видеть некоторые ошибки как функцию (например, "опция быстрого выключения" или любые другие причуды, с которыми вы столкнетесь)
Обычно очень сложно сделать бизнес-обоснование для полного переписывания, когда клиенты "довольны" продуктом. Мой совет заключается в рефакторинге по мере разработки новых функций для постепенного перехода к желаемой архитектуре. Это часто легче сказать, чем сделать, но может иметь смысл для проектов, которые вы описали.