Говнокод не пишет только тот, кто не пишет код вообще. Все остальные — хоть раз, да оставляли после себя что-то, за что потом стыдно. Сроки, бардак, «пофиг, потом поправим» — и вот ты уже сидишь среди костылей, где любое движение может всё сломать. Разберём, почему так происходит, сколько это стоит и что с этим делать, пока проект ещё жив.
Говнокод есть почти в каждом проекте - в маленьких, средних, больших. Он появляется не потому, что кто-то тупой, а потому что:
- сроки поджимали
- ТЗ не было
- заказчик хотел ещё вчера
- джун кодил как умел
- техлид свалил посреди спринта
- «потом всё обязательно рефакторим».
Спойлер: не рефакторят.
А потом наступает момент, когда даже добавить кнопку — всё равно что вырезать аппендицит без наркоза: больно, долго и с риском убить пациента.
Что происходит в проекте с говнокодом
1. Любое изменение ломает что-то ещё
Починил форму — отвалилась корзина. Обновил библиотеку — лег весь раздел. В итоге разработчики боятся трогать код. Это не трусость, а инстинкт самосохранения.
2. Каждая фича превращается в баг
Код непредсказуемый, держится на костылях и древних if’ах, которые «нельзя трогать, иначе всё рухнет».
3. Никто ничего не понимает — даже автор
Особенно автор. Прошло три месяца — и всё, ты не понимаешь, что сам написал. Документации нет, архитектуры нет — всё на удаче.
Почему это дорого
1. Нет документации — всё методом тыка
Разработчик тратит часы, чтобы понять, откуда берётся $x и почему оно пустое. Каждый новый сотрудник начинает с нуля. Всё, что не задокументировано, умирает с увольнением последнего девелопера.
2. Код не читается — выглядит как преступление
Нет стиля, всё в куче, табы дерутся с пробелами, имена переменных как кошка по клавиатуре: $a, $tmp, $x1. Понять, что делает getData2, проще переписать.
3. Код красивый, но тупой
Форматирование есть — смысла нет. Всё связано жёстко, функции знают слишком много, алгоритмы кривые.
4. База данных — это свалка
Таблицы temp3, old_backup, users__copy2. Поля висят мёртвым грузом. Миграция — как мини-переворот: чем закончится — одному богу известно.
5. Нет бэкапов — живём на удаче
Один сервер на всё: и работает, и падает. Никаких dev-серверов, никаких резервных копий. «Я внёс пару правок — почему всё легло?»
6. Архитектура = анархия
Компоненты зависят друг от друга, как токсичные родственники. Протестировать кусок нельзя — надо поднимать всё. Меняешь одно — ломается пять других.
7. Нет тестов — всё тестирует продакшен
Новые фичи сразу в бой. Пусть пользователи проверят.
8. Нет git — ад для команды
FTP, как в 2007-м. Два программиста затирают код друг друга.
«Ты зачем удалил мою функцию?»
— «Думал, не нужна».
— «Я её только что писал!»
9. Нет таск-трекера — все всё забывают
Баги — устно или в голове. История изменений — миф. Кто что делает — никто не понимает.
Что делать
- Не пытаться лечить всё сразу. Говнокод вытравливают по частям — с самого больного.
- Пиши документацию. Любую. Даже README.md — уже польза.
- Переходи на git. Даже если ты один.
- Заводи трекер задач, dev-окружение, тесты. Это не понты, это спасение.
- Рефакторь по кусочкам. Не переписывай всё с нуля — перепиши хотя бы UserService.
Итог
Говнокод стоит дорого — бизнес платит деньгами, сроками, нервами. Никто не требует идеального кода, но между «идеально» и «невозможно поддерживать» — целая пропасть.
Хочешь, чтобы проект жил — убирай говнокод. Хочешь, чтобы проект умирал — прикрывай костылями. Выбор за тобой.
А кто захочет поддерживать кучу никому неизвестного кода? Правильно, никто. Особенно если это битрикс, так вообще жуть.