@Quilin
Full-stack разработчик

Что делать, если в проекте много плохого кода?

Пришел на новый проект. Меня предупреждали, что там все плохо, но глаза если честно уже вторую неделю застилают слезы боли. Контроллеры на 2к строк, написанный школьником js, индусская копипаста, хранимки с селектом и адские джойны в EF - в соседних файлах.

Очень падает мотивация, когда на такое глядишь. Особенно, когда новые задачи ставятся в виде "сделай, чтоб работало вчера, не трогай старый код, он работает и так".

Как справиться с легаси-депрессией? Уходить с проекта, конечно, вариант, но последний, в этом духе ответов не нужно.
  • Вопрос задан
  • 1295 просмотров
Решения вопроса 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Как справиться с легаси-депрессией?


Перестаньте воспринимать свою работу как "работа с легаси кодом" и почувствуйте себя разработчиком. Написать проект с нуля каждый дурак сможет, у большинства по прошевствии года разработки выйдет примерно то что вы и описываете. Тут много ума не нужно, что бы делать проект с каждым днем все хуже и хуже.

У вас же есть возможность получить более интересный опыт - ежедненное улучшение, каждый новый день - чуть меньше говнокода, анализ и исправление чужих ошибок (это очень полезный опыт в плане развития самого себя, ибо в чужом коде проще искать недостатки а зная их мы не будем так делать у себя в коде).

Контроллеры на 2к строк


Так это же замечательно! Это значит что вам попалась категория говнокода из разряда "просто тупое дублирование". Такой код весьма легко рефакторить, а значит уже не нужно плакать. В идеале перед рефакторингом было бы неплохо покрыть изменяемый код тестами уровня приложения, просто e2e тест который будет за вас автоматически проверять не сломали ли вы чего-нибудь.

А далее, начинаем со структурных изменений (выносим дублирование в приватные методы, потом в сервисы), не меняя код, потом начинаем аккуратненько добавлять тестов и делать код чище. Причем все это можно разнести по времени, закладывая 30% времени разработки на устранение технического долга. типа по 2 часа в день на то что бы сделать код лучше. Конечно же вы должны еще владельцам проекта эту мысль донести, что мол инвестировав сейчас n% времени мы получим в долгосрочной перспективе профит в виде сокращения количества багов и как следствие улучшении процессов, предсказуемости и т.д.

написанный школьником js


А вот это уже не конструктивно. Если там просто куча jquery-лапши, то это тоже рефакторится. Опять же начинаем со структурных изменений а там уже не так больно.

хранимки с селектом и адские джойны

А вот базу рефакторить будет чуть сложнее. Я бы для начала избавился бы от прямой работы с базой и спрятал бы весь sql и вызовы всех хранимок в коде нашего приложения (table gateway, row gateway или даже лучше data mapper, зависит от текущей ситуации). А затем уже можно опять же постепенно улучшать структуру базы данных, избавляться от хранимок и т.д.
Ответ написан
Casper-SC
@Casper-SC
Программист (.NET)
Если возможно, просто возьми проект домой и пили его там, чтобы он в итоге оставался в рабочем виде, то есть ты мог показав изменения доказать, что оно по прежнему работает. Ну и напиши покрытие тестами. Скажи, что делал в свободное время. Можно даже привести очень много конкретных кусков кода с объяснением их минусов. Объясни, что со временем поддерживать проект станет ещё сложнее. Расскажи о демотивации, скажи, что это реальность и ты не один такой, что в скором им сложнее будет найти человека, у которого будет желанием этим адом заниматься и разбираться в нём. Проработай посыл. Распиши всё, что хочешь сказать. Да можешь в итоге эту писанину и отправить, так как написать всегда можно лучше, чем сказать.
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
petermzg
@petermzg
Самый лучший программист
Диверсия в виде тайных правок старого кода.
А иногда можно и в открытую. "Чтобы вот это новое заработало, надо этот старый блок кода переписать" ))
Ответ написан
@JuniorNoobie
Сижу в поддержке, пишу мелкие проекты
Если есть свободное время и силы, то однозначно переписывать. Но скорее всего у вас не будет времени, поэтому костыли, костыли, костыли... Или самому в нерабочее время, но никто вам за это не заплатит.
Ответ написан
Комментировать
AlexZaharow
@AlexZaharow
O Keep Clear O
"Пришел на новый проект. Меня предупреждали, что там все плохо" - так а вы заранее посмотрели бы на эти 2килострок на контроллер? От вас скрывали исходники?
Если будете "успешно" поддерживать проект, то на вас сядут надолго и ничего интересного в будущем не дадут, пока проект не заглохнет или вы его не вытащите на хороший уровень. Я бы посоветовал узнать подробности развития проекта, необходимость его применения, откуда он вообще взялся и решить для себя - надо ли вам вообще участие в этом проекте? Хотя читать чужой код иногда полезно.
Ответ написан
@evgeniy_lm
А переписать все с нуля не вариант?
Ответ написан
dmitriylanets
@dmitriylanets
веб-разработчик
Разбейте систему на модули (пакеты, компоненты) , и производите рефакторинг постепенно модуль за модулем, желательно покрывая тестами, тогда и процесс работы будет виден и соответственно желание не отпадает.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы