Антипаттерн №2 — Спагетти-код (Spaghetti code)
Когда-то давно, когда компьютеры были большими, а программы маленькими — существовал единственный возможный способ написания кода. При помощи интерпретатора (если повезёт) выполнялась какая-либо вбиваемая программа. Строчка-за-строчкой. Людей, которые писали бы подобные листинги было невероятно мало, мирового опыта и понимания КАК НАДО ещё не было сформировано — ни методологий и никаких правил. Каждый был творцом собственного стиля, т.к. спросить особо не было у кого. Отсутствие функций (процедур, методов etc.), отсутствие ООП парадигм и всего того многообразия вариантов, что есть сейчас — тогда просто не существовало. Мир разработки был молод.
Именно в те доисторические времена зарождался и набирал обороты наш герой — антипаттерн «Спаггети-код«. Будучи чуть ли не единственным вариантом прошлого — сегодня является грубой проектировочной ошибкой. Спаггети-код — это плохо структурированная, запутанная (из-за своего объёма), плохо поддерживаемая программа. Отдельной строкой стоит выделить наличие операторов GOTO
, которые усложняют и без того сложный код. Почему «спаггети» код? Потому что тянется и является таким же длинным по своему естеству. На ряду с «магическим числом» является самый распространённым антипаттерном проектирования и программирования. Уверен, что зачатки подобного стиля можно найти в абсолютно любом проекте.
Хорошим примером спаггети-кода является игровая программа Donkey.bas, которую Билл Гейтс и Нейл Конзин написали на языке Бейсик в 1981 году. Игра носила демонстрационный характер. Исходный код программы размещён на GitHub аккаунте coding-horror, а также есть отдельная статья в английской wiki.
Как вы можете увидеть, это очень длинный список строк буквально со всей игровой логикой и большим количеством операторов GOTO. Чтобы разобраться в этом понадобится не малое время. Можете попробовать 🙂
Обычно спаггети-код возникает естественным образом у молодых и неопытных разработчиков, но, конечно, бывают и исключения. К примеру, если вы что-либо «набрасывали», пробовали, нашли… а потом по какой-либо причине забыли отрефакторить. Или же из-за перманентного дедлайна, когда код пишется по принципу «лишь бы работало, а потом когда-нибудь наведём порядок«. Спаггети вполне допустим в временных temp-проектов, в которых вы проводите какие-то личные исследования или расчёты. Что-то, что будет использоваться только сегодня и только вами.
Ну и, конечно, помните о ставшей уже народной поговорке: «Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете» 🙂