Feb. 16th, 2023

amarao: (Default)
Есть один анти-паттерн в ПО, который я не люблю особенно. Если я на него натыкаюсь, и не могу обороть, он обещает мне много, много, мучительной медленной отладки.

Суть паттерна: фрагмент отлаживаемого кода является продолжением результата работы очень сложной системы и имеет смысл только в рамках этой системы. Допустим, например, это k=v исполнитель (прочитал/сделал), с небольшими прибабахами.

Чтобы отладить скрипт, нужно поднять "ВСЁ ЭТО", запустить, настроить, запросить, и только тогда скрипт сможет сказать, что кавычки не те.

На удивление, этот анти-паттерн норовит появиться в любой момент, и метод его появления очень простой: мы уже написали ВСЁ ЭТО, теперь к нему нужно дописать вот эту "малюсенькую штуку" в конце, которую человек как-то пишет, с 2-3 попытки отлаживает и коммитит. В этот момент человек испытывает лёгкий дискомфорт (ему нужно ВСЁ ЭТО поднять), но чаще всего оно уже поднято, человек на "ЭТИМ ВСЕМ" работает (и именно там фиксит баги), а "скриптик в конце" ну уж очень тривиальный. Дискомфорт более чем компенсируется количеством сэкономленных мозгов на любое другое решение.

А вот его зловещая сущность сваливается на следующего человека, которому надо этот скриптик поменять. Количество ритуалов для получения хоть какого-то результата зашкаливает, feedback loop time может исчисляться часами и включать в себя множественные этапы борьбы человека с автоматикой (потому что стенд почти продакшен и надо продакшен отрывать). Человек, который дописывает этот скриптик "в конце" имеет очень ограниченное число попыток, а значит, он делает минимум того, что нужно и только. (либо у него хватает силы воли сломать паттерн, но иногда это не возможно по административным причинам). Через несколько итераций такой скрипт превращается в каторгу, на которую отправляют провинившихся.

Как решать эту проблему? Не пытаться строить на вершине предыдущих героических усилий, а писать независимую подсистему (хотя бы и скрипт, но имеющий смысл в отсутствие "большого кода"). В этом случае написание разделяется на две части: собственно, код, и интеграция с "большим кодом". Полную интеграцию, с большой вероятностью, просто не проверить, но хотя бы то, что можно локально писать, лучше писать локально и независимо.

А ещё умнее, продумать причину, почему "большой код" в этом месте такой большой, и нельзя ли сделать его вершинку (откуда прилетают "бесценные данные") независимой, чтобы интеграционные тесты были быстрыми и простыми.
amarao: (Default)
Почему поэт, который говорит "не могу не писать" - это романтично, а программист, который говорит в merge request'е "не могу не писать" - страшновато и хочется попросить "горшочек не вари"?

Profile

amarao: (Default)
amarao

August 2025

S M T W T F S
     12
345 6789
10111213141516
17181920212223
24252627282930
31      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 20th, 2025 12:09 pm
Powered by Dreamwidth Studios