Костыль (картонка под ножкой)
На пальцах
У кухонного стола расшаталась ножка. Хозяин знает, что надо подтянуть болт или заменить ножку — но гости придут вечером, а времени нет. Он подкладывает под ножку сложенный вчетверо кусок картона. Стол стоит ровно, гости ничего не замечают, ужин проходит. Картонка — и есть костыль: работает, рассчитан на пару дней, и ножку всё равно потом придётся чистить.
В коде — та же история: в системе нашлась ошибка, а править её по-настоящему долго или некому. Тогда ставят временную заплатку: проверку, заглушку, хитрый обходной if. Всё работает, баг не виден — но код становится всё менее понятным, и заплатки накапливаются.
Что это
Временное решение в коде, которое обходит причину проблемы, а не устраняет её. Обычно появляется под давлением сроков — починить «как положено» дороже, чем приклеить скотчем. Если костыли копятся, говорят о техническом долге.
Здесь сравнение хромает: картонку под ножкой выбросить легко — вытащил и готово. А костыль в коде часто переплетён с другими кусками, и его страшно убирать: «а вдруг что-то сломается».
Зачем
Например, у интернет-магазина в пятницу вечером сломался расчёт скидок: корзина показывает неправильную цену. Переписывать модуль целиком — только к понедельнику, а заказы уже идут. Разработчик за полчаса добавляет проверку: «если товар участвует в акции — считать по старой формуле». Цены правильные, покупатели ничего не замечают, пятница спасена. Но это заплатка: когда руки дойдут до модуля, её придётся аккуратно снять и переписать кусок нормально.
Ещё с этим понятием связано:
- workaround (обходное решение) — то же самое, только нейтральное название без «привкуса» лени
- hack (хак) — часто синоним, но «удачный хак» может быть не костылём, а находчивым приёмом
- технический долг (technical debt) — то, что накапливается из костылей: каждую следующую правку делать всё дороже
- hotfix (срочный фикс) — обычно временная заплатка на рабочем сервере, очень часто становится костылём