среда, 4 июня 2014 г.

переписывать ли приложения с нуля

http://habrahabr.ru/post/219651/
Действительно, переписывать с нуля зачастую неоправдано вообще никак, и в большинстве случаев нужен просто рефакторинг, иногда очень глубокий и сложный, а иногда действительно лучше переписать. Но надо понимать, что было в старом коде. Да, неизбежно появляются костыли, в том числе для совместимости, и чем дальше, тем будет больше кода "для совместимости", но удачные участки можно и из старого кода взять.
А чтобы не терять позиции, придётся тянуть 2 ветки -- старую и новую, то есть расходы сразу удваиваются. И быть готовым к тому, чтобы новую версию просто выкинуть, если вдруг стало понятно что "не взлетит". Просто забросить старую версию, пока пишется и отлаживается новая версия -- обычно значит, что компания(продукт) умрёт.

http://bash.im/quote/420672

khim,#
Вы забыли один важный момент, а он, в общем-то критичен: да, вы бы получили что-то, что было бы, скорее всего, ничуть не лучше, чем Windows Phone 7, но при этом вы бы сохранили лояльных пользователей, нормальные отношения с OEM'ами и операторами.

Если бы для победы в войне операционок было бы достаточно технического совершенства, то всякие BB10 и webOS'ы были бы ещё с нами и были бы претендентами на победу. Про «битву эко-систем» в 2010м вопил не кто-нибудь, а бывший Microsoft'овец Элоп — а Microsoft как раз перед этим эту самую свою экосистему своими же руками задушил.

Не нравится Джоэл — посмотрите в другую сторону. «Великий и Ужасный» Стив Джобс в своё время славно потоптался по этим граблям при создании Apple III, Apple Lisa и Apple Macintosh. До такой степени, что в тот раз это чуть не привело к гибели Apple и его пришлось выпереть, чтобы хоть что-нибудь сохранить. В своё «второе пришествие» имея за плечами полный коммерческий провал технически очень качественной NeXTSTEP он уже этой ошибки не совершил: переход от MacOS Classic к MacOS X занял несколько лет, был придуман способ поставить на один раздел и MacOS 8/9 и MacOS X (причём в первый год MacOS 8/9 грузилась по умолчанию!), были разработаны способы запускать старый софт и в MacOS X — в общем было сделано всё, чтобы сохранить экосистему. И в это же время Microsoft, совершивший очень похожий переход на ядро Windows NT (разве что «две OS по цене одной» он не предлагал) решил не использовать свой собственный опыт, а вместо этого повторить ранние ошибки Джобса и выпустить себе в ноги два рожка из автомата. Ну как так можно-то?
AllexIn,#
Переписывание «с нуля» — важная часть развития проекта.
Проект в процессе эволюции обрастает огромным количеством кода, который не лечит баги, а тупо обеспечивает обратную совместимость.
Код проектов поддерживающих обратную совместимость становятся очень страшным.
Я сам писал редактор 3Д сцен, который поддерживал 60 версий форматов файлов вплоть до самой первой. И это было оправданно. И мало поддерживать загрузку 60 версий. Еще надо поддерживать работу разных алгоритмов. Если первые сцены делали с учетом хабагованного алгоритма, то значит при работе с первыми версиями нужно чтобы алгоритм работал с теми же багами! Ведь нужно воспроизвести сцену так как ее создавали. А новые версии файлов нужно воспроизводить уже корректно.
И таким образом код превращается в страшную ересь.
И можно только переписать все заново, потому что корректно убрать все костыли практически невозможно.
И ладно просто страшный код. Его практически невозможно расширять так, чтобы ничего не сломать.
Поэтому редактор переписывается с нуля. Хотя это и не ноль. Ведь многие куски кода не содержат костылей и вполне могут корректно использоваться в новой версии. Загрузка текстур, например. Работа со звуком и т.п.
Плюс пишется отдельный конвертер, который 60 версий файлов конвертирует в новый формат с учетом всех нюансов.
Конвертер пишется один раз и поддержка его не нужна в будущем. Поэтому какие в нем костыли и код — совершенно не важно.
А новый редактор чистый и красивый. Да, через 5 лет он тоже превратится в монстра. Но эти 5 лет он будет развиваться, потому что ему больше не мешают костыли.
А через 5 лет — новая итерация. Еще один конвертер старых файлов…
Конечно, надо останавливаться себя от переписывания, когда это не актуально. Но часто это более чем актуально.
Alik_Kirillovich,#
Считаю нужным добавить, что два года спустя Джоэл все-же признал, что переписывание кода с нуля в некоторых случаях бывает оправдано:
… Наконец, с .NET поставляются замечательные библиотеки классов. Было переработано все — от доступа к данным и веб-разработки до GUI, поэтому создалось редкостное единообразие, сверху до низу. <...> Да, я согласен: .NET нарушает закон «никогда не переписывай с чистого листа». Microsoft это сошло с рук по двум причинам. Во-первых, у них был лучший в мире конструктор языков, человек, которому имы обязаны 90% прироста эффективности разработки программ за последние 20 лет, Андерс Гейльзберг, давший нам Turbo Pascal (спасибо!), Delphi (спасибо!), WFC (отлично!) и теперь .NET (сногсшибательно). ВО-вторых, они посадили за эту работу тьму инженеров на целых три года, в какой-то мере ослабив на это время свое участие в конкурентной борьбе. Запомните: если Microsoft может что-то себе позволить, это не значит, что то же самое можете вы.

Джоэл Спольски. Джоэл о программировании, 2006. Глава 44. Наша стратегия .NET. Стр. 321-322.

Оригинал: Joel Spolsky. Our .NET Strategy, 11 April 2002.