Разработка
November 13

Паттерны ради паттернов

Снова на те же грабли. Приворачивание модных схем и паттернов(тм) без понимания, как конкретно и зачем оно будет работать — лажа и путь вникуда.


Диалог типовой, частый, прекрасный в своей незамутненности.

Снова.

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

Дабл ять. И что, твой паттерн, как конкретно поможет тебе в твоем решении?

— ну он же описан, это же паттерн(тм)…

Повторяю вопрос: твой паттерн, как конкретно поможет тебе в твоем решении?
Как он, сцуко, должен здесь сработать в плюс?

— хорошо, вот этот риск, что с ним произойдет в такой модели, куда он девается?
— ну ты не понимаешь, есть же паттерн(тм)…

Дабл ять. Нет, не понимаю. Потому что проблема никуда не девается, ничем не решается, ничего ей не помогает в таком решении.

А ты предлагаешь проблему обмазать слоями абстракции, навернуть сложности (видимо чтобы потом искать ошибки веселее было), и сделать вид что проблема решена.

— зато у нас будет паттерн(тм)

Нет, это так не работает.
Я под такое не подписываюсь, и вам не советую.


Вопрос не только сугубо технический, проблема общая, логическая.

То, что вы нашли инструмент и он теоретически прикладывается к вашим проблемам — совершенно ни разу не означает, что это полезный инструмент, что он будет работать. И что вы умеете им пользоваться (по постановке вопроса = скорее нет, и это дополнительный риск).

  • вот у нас есть сложная система, и там что-то не работает
  • зато смотри, у нас есть шуруповерт. Все большие специалисты используют шуруповерт. Счас так модно, я читал. Значит, нам нужен шуруповерт.

За-е-бись.

Я не против, если большому мальчику хочется шуруповерт. Детство до 40 лет всегда самое веселое. Но нахрен мне потом на проекте этот шуруповерт, и ты в связи с ним, который собрался пихать его во все подвернувшиеся проблемы? Чтобы я потом еще твои косяки исправлял — ?

Если у вас есть проблема, вы притащили к ней неработающий/неподходящий инструмент и пошли им везде тыкать — теперь у нас две проблемы. Вторая это вы.

Наличие скальпеля в руках совсем не делает вас врачом, наличие фотоаппарата — фотографом, наличие отвертки — слесарем.

++ если недостает матчасти именно по паттернам в IT-проектировании и System Design, можно посмотреть сюда например https://www.geeksforgeeks.org/system-design/system-design-tutorial/.
Но я про любые.

С паттернами и «типовыми практиками» есть беда, имя ей маркетинговый буллшит. Красивые абстракции можно прикольно впаривать. У них, предположим, есть теоретическая польза и ряд типовых задач, которые они решают (могут решать). Но камон, сразу к выводам: потрудитесь убедиться, пожалуйста

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

Если по любому из пунктов ответ «эээ… ну, нам так кажется, мне похуй я так чувствую» — нахрен ушли pls, дверь там. Не в мою смену. Серебряной пилюли не бывает, невзирая на обещания из интернетов.

+ См также пример-сноску в конце.

Беда в том, что даже «разделение ответственности» не спасает. Горе-инноватор же молодец, притащил паттерн, нашел шуруповерт.

А беда то, что у нас теперь две проблемы
1) нерешенная исходная с просранными сроками на «идею», и 
2) долбоеб с шуруповертом, который просто всё дополнительно усложнил и наплодил рисков — это_другое, понимать надо.

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

Естественно, не скажу. Мальчик, отойди от инструментов, поранишься.


К сожалению, если такие штуки не отлавливать на взлёте, не исследовать в деталях, не разбирать по косточкам и не раздавать превентивных пиздюлей — вы гарантированно получите overbloat, переусложненное решение и бродящих вокруг горе-инноваторов.

Свято уверенных, что без их ошеломляющего вклада всё бы давно развалилось, а прикладная команда вредничает, не может разродиться, не ценит их фундаментальный вклад и плохим танцорам опять что-то мешает.

Методики проверки аналогичные описанным тут: про доки. Какая конкретно функция, какая конкретно польза, какой конкретно баланс жесткости/усложнений в противовес полезному действию.

Если нет конкретных ответов, то совершенно далее неважно, ЧТО там кто собрался притащить на проект — цепную пилу, микросервисы, ISO 9000, скрам, финансовые схемы, нейросети, you name it — притащенное отправляется нахрен ДО того, как оно потратит время и всем навредит.

Просто спасибо, уйди, подумай еще разок.

Hope that helps. Но заебало.


Основной плюс от паттернов НЕ в том, что они делают (сюрприз-сюрприз). Работающее решение без паттернов работает так же, как и работающее решение с паттернами. Просто потому что и там, и там работает.

Паттерны и различные типовые связки что дают хорошего:

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

Больше ничего «из коробки» обкладывание паттернами не приносит. И даже этот список «сам по себе» не сработает, и чаще навредит, если собиралось кривыми руками по принципу «счас так модно, все так делают».

Всё остальное — в первую очередь, практическая применимость и профит — зависит не от инструмента (паттерна), а от собранного результата. Если он будет.



Пример-сноска в конце: приходит, описывает дядя проблему.

Проблема «в идеальном виде» не решается, проблематика класса «как нам сделать чтобы заебись в задаче, где может всё пойти не так». Это хорошие задачи люблю их, у них нет 100% идеального решения, потому что энтропию не обманешь, можно только снизить риски.

И следом звучит «но вот смотри, есть же паттерн(тм)».

Название предложенного паттерна (технического) rings some bells, потому что списки именно структурных паттернов заранее известны, это бытовой инструментарий, он на слуху. А тут что-то нечастое.

Открываем, смотрим. Знаете, что там за «паттерн»? Это васяны в интернете придумали решение проблемы (ни фига не идеальное), как им кажется, оно работает чутка лучше в их схеме, помогает ИМ. С рядом условий и допущений.

Придумали своему «паттерну» понравившееся название.

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

Важно здесь то, что я беру «паттерн» и чисто практически задаю те же вопросы к нему, к предложенному решению. В задаче «у нас может всё пойти не так», а конкретно вот тут, чего у нас меняется-то принципиально?

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

Почему? Потому что «сборник паттернов», даже ситуативно не работающих и местами просто вредных, все растащат на цитаты (что и произошло).

Спасибо за буллшит. И необходимость теперь кому-то показывать на пальцах что нет, это не «паттерн» в виде решения, это просто чья-то фантазия и маркетинговый шлак из интернета. Унесите обратно где взяли.