• Основна думка цієї статті: переписуйте з нуля працює і впроваджений проект тільки під дулом пістолета.
    Далі, уявімо, що ви працюєте один, і ні з ким не діліться печеньками.
    Ситуэйшн №1: маленький проект
    Уявіть, що ви студент. Пишіть ваш перший студентський проект - більше, ніж лабораторна, але менше, ніж реальний комерційний проект. Розмір приблизно 1000 рядків коду.
    Ви написали його і захотіли поліпшити. Але раптом виявили, що в архітектурі у вас помилка, і виправлення проблемно. Переписали. Потім ще раз. Чи Станете ви переписувати його в четвертий раз? Можливо.

    Невеликі проекти можна переписувати нескінченно, поки вони не будуть доведені до досконалості. Але от проблема: де ця грань між досконалістю і божевіллям?Я думаю, що хоч трохи середній проект не можна довести до досконалості, адже сьогодні вам здається, що досконалі одні методи, а завтра - інші. А час буде втрачено. В кінці кінців ви можете здати полурабочий проект, який застряг на стадії третього переписування (адже ви студент, і в першому проекті вирішили не використовувати VCS, адже це мейнстрім).
    Ситуэйшн №2: вільне плавання
    Тепер ви вже просунутий студент, і захотіли пофрілансіть. А може просто створити свій проект, свою гру, свій аукціон з блекджеком і… ну ви зрозуміли.
    Є відмінна ідея, ви описали, запрограмували, зробили, оптимізували. Дали протесту тестерам. Здавалося б, ніщо не віщувало біди.
    Але ви виявляєте, що вбудовувати нові можливості вам все складніше, а десь у глибині душі вас гризе черв'як переписування.
    Подумайте, чи ви цінуєте свій час і результати своєї роботи, щоб переписати ваш чудовий проект розміром 5000 рядків коду. Якщо не цінуєте, то будь ласка, починайте з чистого аркуша. Пам'ятайте, що в цьому випадку, ваш проект навряд чи буде закінчено.
    Ситуэйшн №3: чужий код

    Це самий небезпечний шлях, слизька, мерзенна і брудні доріжка. Отже, уявіть, що свій студентський проект ви якось здали свій особистий проект закинули (вибачте, звичайно ж відклали, щоб повернутися, коли буде час!).
    І ось, до вас потрапляє чужий код в 10-15 тисяч рядків. Говнокод. За вашим уявленням. Впровадження оновлень рівносильно пострілу собі в ногу.
    Переписуємо?
    Не поспішайте. Спочатку визначте свої можливості. Скільки часу вам потрібно, щоб це переписати? Як це буде сплачено? Закладено чи потрібний час?
    Переписування чужого коду загрожує кількома проблемами.
    Перша проблема: код, швидше за все, вже впроваджено і працює. У цьому випадку, вам не потрібно буде заново розробити весь його функціонал, але і врахувати всі милиці, на які натрапив колишній говнокодер.
    Друга проблема: ви можете не потягнути проект, почати прокрастинировать, і в остаточному підсумку, остаточно завалите проект.
    Третя проблема: чому ви так упевнені, що ви самі не напишіть такий же говнокод?
    Ситуэйшн №4: застарілий проект або специфічні інструменти
    Можливо, це єдине часткове виправдання повного переписування проекту.
    Відомо, що зараз багато працюють програми старі, як лайно мамонта, але люди продовжують ними користуватися. Тому що вони працюють, налагоджені, і помилки в них виникають відомо де. Такий проект дійсно можна переписати з нуля, при обліку жорстко і чітко сформульованих вимог, моря тестів і багатьох годин налагодження.
    Проте пам'ятайте, що навіть у цьому випадку немає гарантій, що проект запрацює відразу, як потрібно. Можливо тому до цих пір існують програми, старі як… ну ви зрозуміли.

    Отже, коли не треба переписувати проект:
    1) Коли ви дорожите своїм часом, і часом інших людей, що вони вклали в проект;
    2) Коли ви не впевнені, що зможете точно повторити функціонал проекту;
    3) Коли ви не до кінця розібралися з проектом, не знаєте його особливостей;
    4) Коли ви говнокодер;
    5) Коли ніхто не загрожує вашій коханій хом'ячку.
    6) Розмір проекту перевищує 10000 коду, без урахування інструментів і фреймворків. Навіть цього буде багато щоб оцінити, чи варта шкурка вичинки.
    Коли, можливо, варто переписати проект:
    1) Коли впровадження доопрацювань займає дуже багато часу і/або дуже багато коштів з-за надмірної складності системи;
    2) Коли ви вивчили проект досконально і знаєте кожну деталь;
    3) Коли вам приносить задоволення в п'ятдесятий раз переписувати свій улюблений калькулятор;
    4) Коли замовник прийшов до вас додому і наполегливо стверджує, що ваш або чийсь чужий говнокод дуже погано працює, і він хоче, щоб ви зробили все чудово з першого разу;
    5) Коли вам пропонують неймовірну купу грошей за невеликий проект.
    І ще пам'ятаєте, що серйозні люди вважають, що переписування проектів з нуля - це ознака непрофесіоналізму. Удачі.