Смотрел я намедни на стену, думал, как то бывает, о природе вещей, и внезапно сообразил, что за этими всеми работами да вселенскими хлопотами я давно живых людей не видел. Надо бы на конференцию какую сходить, ёпты! К счастью этого добра в Канаде хватает, да и контора не прочь мою социализацию поддержать рублём, так что, ткнув пальцем в первый попавшийся календарь, я выбрал себе ближайшую конфу по Кубернетесу и стал работать над логистикой.
Мдя, со времён последнего похода мир, конечно, немного сдвинулся с места. Выбранная мною конференция гордо сообщала, что, наконец, достигла полового разнообразия и репрезентативности, не уточняя, правда, природу влияния оных на облачную инфраструктуру. Но по крайней мере регистрационная форма позволяла ответить «не ваше дело» на обязательный вопрос «какие ваши местоимения (он/его, она/её, и т. п.)». Я мгновенно выбрал протестный вариант ответа и начал вчитываться в программу.
«Что ваш бывший может рассказать о CI/CD пайплайнах»… «Как разговаривать с женщинами»… «eBPF вместо сервис-мешей» — о, значит, конференция всё-таки инженерная! Гуд.
В конференционное утро я выходил из дома, как на праздник. О-о-о-о-о, автобус! Я же когда-то почти каждый день на нём на электричку ездил! О, электричка, я же когда-то в ней дремал по утрам… Вот только разделительных щитов между сидений тогда не было.
Блин, реально, чей-то без сомнений гениальный мозг решил поставить антиковидные разделительные щитки между кресел, но после отмены пандемии забыл убрать их назад. Всё дорогу «туда» и обратно я одним плечом упирался в окно, а другим — в #лядский щиток, хотя в радиусе четырёх метров не было ни души. С ноутбуком я работал как запеленатый младенец — с локтями, плотно прижатыми к рёбрам, и мыслью о том, что раньше было лучше.
Но Торонто был пахуч, солнечен и прекрасен, как всегда. Даже железный дятел на бетонном столбе у конференц-зала был на месте. Скучал я по тебе, большой город! Скучал.
Сама по себе конференция, конечно, скукожилась со временем. В старые добрые времена, ещё при немцах, мы ходили на такие события, дабы затариться халявными флешками, майками, блокнотами и прочими подношениями. Не в этот раз. То ли мировой кризис сказался, то ли я попал на мероприятие меньшего масштаба, но самым распространённым подношением в этом году были наклейки. Те, которые на ноутбук. Те, которые по причине преклонного программерского возраста я перестал клеить ещё во времена большевиков. Зато раздавали плюшевые игрушки, которые взрослых возбуждали не особо, но коими можно было порадовать детей. Ну хоть что-то.
Потоки с «докладами» делились на две группы — для детей младшего школьного возраста и детсадовцев. Но идеологические вставки были равномерно разбросаны и там, и там. Я, как мог, лавировал между ними, но время от времени всё же попадал на микро-доклад об успешном урожае зернобобовых, и количестве задействованных в нём сексуальных меньшинств. Согласно Партии, эта пятилетка рвёт предыдущую, как первый советский трактор — плоть нечерноземья, так что жить вроде стало лучше.
Чёткие технические доклады тоже встречались. Не знаю, почему в этом году, но кубернетес сообщество подсело на eBPF, который, если мне не изменяет память, шумел ещё лет пять назад. Каждый второй из нормальных докладов был именно про него. Один из таких, зачитанный дедушкой лет сорока пяти, мне настолько зашёл, что, к вящему ужасу нас обоих, после доклада я ломанулся к тому общаться. Вроде никто не помер.
Не обошлось и без курьёзов. В первый день конференции, уже часа в четыре дня, нас начали подкармливать пивом. Большая ошибка, скажу я вам, потому что там, где раньше стоило молчать, некоторый из нас теперь начал открывать рот. Рассказывает, значит, один программистской наружности человек о преимуществах языков общего пользования в написании пайплайнов над декларативными. А для меня это как красно-зелёный забор для любителей цветов белорусского флага. Каждую минуту, что он вещал, мой внутренний голос вопил — «Этот человек не есть пророк! Его религия лжива! Его бог — мёртв!». Получив микрофон, я, как мог, облёк свой скепсис в конструктивно поданный вопрос, но все всё равно всё поняли.
Кажется, это была моя первая конференция, на которой я понял, что возрастной поезд ушёл. Ушёл в том плане, что на конференции доминировали двадцати-тридцатилетки, а обормоты вроде меня попадали в область статистической погрешности. Мы пообщались с парой ветеранов — спонсоров конференции, повспоминали технологии прошлого, и угрюмо признали, что большинство присутствующих здесь людей во времена первого дотнэта заканчивали детский сад. Эх, не ожидал я такой подставы от вселенной, не ожидал. Но зато, как показал опыт с лжепророком и пивом, для меня открылся целый новый мир мероприятий, куда можно ходить в качестве старца, задавать неудобные вопросы, ставить людей в неловкое положение, а народ воспримет это с пониманием.
Ну а что, по меркам нашей индустрии, я — дед. Мне теперь можно. Здоровяк! Старикан! СТАРИКААААААН!
Хто я? Дзед-барадзед,
Абышоў белы свет,
А цяпер у цiхi час
Завiтаў да вас
надо на рингтон поставить
I’m too old for this shit!
Я не часто бываю на конференциях, но у нас в Израиле они все-таки довольно технического плана. Если вся эта инклюзивность и присутствует, то в глаза не лезет — нормальные коллеги, толковые или не очень доклады.
А еще я не втыкаю, в чем плюс декларативных языков и языковых конструкций. Императивный код можно дебагировать, а в декларативном не всегда понятно что за чем следует и в каком контексте. Конечно мило, когда достаточно нарисовать пентаграмму для того чтобы запахло серой, но я из тех, кто предпочитает сам купить химикат в магазине, принести, положить в чашку и поднести спичку.
Я за декларативность и DSL ратую потому, что она резко понижает возможность отстрелить себе ноги ввиду своей функциональной ограниченности. Самый классный пример был Gitlab CI когда-то. Ну тяжело там делать ошибки в написании пайплайнов, потому что нечем. Есть условно говоря всего две команды — «сделать всё хорошо», и «сделать всё плохо», и легко делать правильный выбор. В этом плане всякие domain specific languages мне очень нравятся — очень узконаправленные, очень заточенные на конкретные задачи. Только сдизайнить такие языки редко кому удаётся.
А когда подключается императивность и язык общего назначения, духи всех когда-либо написанных проектов взывают ко мне и требуют выпендриться. «Смотри, тут ты мог бы впердолить рекурсию! Все поймут, какой ты умный!». «Хозяин, don’t repeat yourself! Здесь нужно генерализировать параметры функции и перенести её в отдельную библиотеку». «SOLID! SOLID! SOLID!»
Я понял ваш поинт и вынужден согласиться, что когда функциональность строго ограничена и все работает как надо, лаконичность DSL рулит. А вот если что-то начинает итти не так…
Недавно с одним нашим микросервисом случилась неприятность. Код Java, и Rest контроллеры обозначаются с помощью аннотаций @Get @Path и так далее (JAX-RS). Вещь стандартная до безобразия — во всех мне знакомых микросервисах так делают. И вдруг случилась неприятность: рест интерфейс перестал отвечать когда MS запускается под Kubernetes. Локально все работает, а под k8 говорит, нет у вас такого API, получите 404. Мы так и не нашли пока в чем дело, отложили фичер в сторону. Фишка в том, что там некуда вставлять логгинг чтобы отследить где что не срослось. Соответственно, что именно пошло не так напрямую не найти, придется тупо все начинать с нуля, добавлять код по кусочкам и смотреть на каком моменте оно сломается. А может не сломается вовсе.
Если это сам java процесс возвращает 404, то можно выпендриться и натравить на него какой lldb/gdb/jdb и допросить процесс прямо на уровне байткода 🙂
А то часто это ингресс-контроллер на самом деле ругается, потому что где-то прошёл конфигурационный косяк. И это тоже можно дебагить, просматривая iptables правила и соотнося их с линуксовыми неймспейсами, если логи не помогли. Только это жутно непривычный стек для дебаггинга.
Сейчас вообще райское время для низкоуровневого дебаггинга — тулзы повзрослели, версии и их совместимость немного устаканились. Тот же lldb для дотнэта больше не надо выискивать — его вроде прям в .net sdk впаяли
> функциональной ограниченности
Интересно мнение: как относитесь к тому, что по описанию это типичная тьюрингова трясина, в которой можно реализовать что угодно, но за пределами узкого горизонта («запустить и проверить») сложность растет по экспоненте? Спасибо.
«Зависит от обстоятельств©», но в целом экспоненциальный рост сложности при попытке выхода за границы мне видится скорее благом, чем проблемой. Чтобы дробить задачу на куски, иногда требуется весьма нетривиальный навык, и человеки не всегда в нём компетентны. Я, например, регулярно пытаюсь часами решить задачу, прежде чем пойму, что на самом деле это _две разные_ задачи, и решаются они по-разному и разными инструментами. Просто им случилось валяться рядом, и потому я их не сразу различил.
Если инструмент заточен под одну задачу, то нащупать границы задач становится проще. Например, в декларативных деплоймент пайплайнах достаточно тяжело сделать сложную логику и ветвление. Можно, но достаточно быстро она превращается в боль. Для меня это скорее повод подумать, с какого перепуга я начал городить rocket science в пайплайне, и где на самом деле той логике место.
В более нейтральных, «мощных» инструментах линия между задачами менее заметна, и я без каких-либо препятствий вставил бы логику направо и налево. Проблемы бы вылезли намного позже, и с минимальными шансами отследить, почему так получилось.
У меня есть опыт «общения» с императивными инфраструктурными проектами (.NET, PowerShell, Pulumi, Jenkins + Groovy), и декларативными (terraform, ansible, Gitlab/Circle CI, Azure DevOps), и ничего кроме боли из императивных я не помню. С декларативными хотя бы можно было работать.
Спасибо за развернутый ответ! Тезисы интересные и дают пищу для размышлений.
Скорее всего, либо в моем опыте было меньше практики, либо я готовил не совсем правильно.