Был когда-то на заре моей карьеры популярный анекдот. Программистский анекдот программистской карьеры.
Мол, сидит папа-программист за компьютером, что-то там ковыряет, а к нему подходит сынишка:
— Папа, а почему солнце всходит на востоке, а заходит на западе?
— Всходит на востоке?
— Ага.
— И заходит на западе?
— Ага.
— И так каждый день?
— Ага.
— Сын, работает, значит работает. Ради бога, ничего не трогай.
Вот на это моя карьера теперь и похожа.
Не знаю, это старчески-программисткое, или народная мудрость, но что я, что мои товарищи старпёры, мы все начали тяготеть к простым решениям, люто ненавидеть сложности, и ценить вещи, которые уже и так нормально работают. Что-то в духе Нассима Талеба — теория теорией, но лучшее решение для шатающегося стула — сложенная под ножку газета.
У меня даже пара жизненных примеров есть по такому поводу. Вот хотя бы мой первый проект на собственной конторе. Для теоретического программиста в вакууме — проект-мечта. Берём существующий код, ложим его по контейнерам, закидываем в кластер (kubernetes), вокруг полируем амазон и облако, делаем это всё через автоматизацию… Разве это не сказка? Всё ведь строго по моде, строго по науке.
Да вот не особо. Мы даже пытались отговорить заказчика, мол, зачем вам это, но без шансов. «Все так делают, и мы хотим как все». А по моему скромному мнению, «все» сейчас исключительно хернёй маются.
Взять, например, запрос на контейнеризацию и кластеры. Если к контейнерам, как к сморканию в шторы, мы привыкли безвозвратно, то с кластерами народ решительно поехал кукухой. Зачем вам это??? Оркестраторы контейнеров создавались для огромных масштабируемых приложений и больших команд, типа Гугла или Белшины. Не для интернет-магазинов, которые мы обычно клепаем. Но нет, теперь почти в каждом проекте торчит свой собственный кластер.
И если эстетически кластера контейнеров выглядят красиво, то для бизнеса и денег это просто дно какое-то. Да, развернуть пустой кластер можно за пару минут. Но в средне-долгосрочной перспективе — это чудовищно дорогая забава. По-хорошему ведь, чисто на содержание кластера, который уже стоит денег, нужен хотя бы один выделенный человек, тоже не копеечный. Кластер создаёт море новой работы чисто потому, что он существует. Там нужно поддерживать безопасность, делать обновления, мониторинг, настраивать качественную интеграцию с облаком, учить людей писать дружелюбные кластеру приложения, писать пайплайны как для самого кластера, так и для доставки софта в него. Искать ошибки внутри кластера — тоже особая форма мазохизма. Это реально море работы, которая продолжается всегда, и которая бизнесу не помогает никак.
Мои же заказчики вообще не умели работать ни с контейнерами, ни с кластерами, ни даже с облаком. Проект был маленький, ещё не вышедший на прибыль, перспективы стать вторым гуглом у него напрочь отсутствовали, так что когда ребята потратили все деньги на красивую контейнеризацию, мы собрали ноутбуки и разошлись по домам.
Мой текущий посторонний проект страдает ровно от таких же проблем — сплошной овер-инжиниринг. По размеру, это скромных размеров интернет-магазин. Но когда я залез внутрь, то нашёл:
- Базу данных, что есть неизбежность.
- Фронт-энд на next.js, что, в принципе, неплохо.
- Одиннадцать(!) микросервисов для бэк-энда, написанных на Java, что я до сих пор не могу сказать вслух с серьёзным лицом.
Начать можно хотя бы с того, что третий пункт в этой архитектуре не нужен потому, что уже есть первые два. В Next.js уже «встроен» бэк-энд, поэтому никакой дополнительный ему ни разу не падал. Но поскольку его добавили, и добавили именно Java, на которой пишут люди как-правило связанные с большими корпорациями и специфичной архитектурой ума, то вместо пары тысяч строк серверного кода мы в нагрузку получили целых одиннадцать чрезвычайно-абстрактных сервисов, каждый из которых требовал своего контейнера, кластера, отдельных пайплайнов для сборки, доставки и уймы дорогих процессорных ядер, потому что чего ещё можно было ожидать от enterprise Java.
Большая часть работы на проекте связана с обслуживанием третьего пункта. Когда мы уйдём с продакшен, процентов девяноста расходов на облако, разработку и отладку тоже будут из-за третьего пункта. Дедлайн мы пропустим именно из-за него. Блин, эту фигню даже разрабатывать невозможно на бюджетном компьютере из-за этих долбанных микросервисов и ограничений, которые они вызывают. И ничего из этого для бизнеса не было нужно.
С Java микросервисами, написанными, между прочим, очень красиво и по науке, контрастирует фронт-энд на next.js, написанный, кажется, слепым слесарем за секунду до инсульта. Я не знал, что современный JavaScript может выглядеть хуже, чем ассемблер семидесятых, но неизвестный Мастер покорил и эту вершину. И я этот код обожаю.
Ведь по сравнению с профессионально написанной, но абстрактной и ненужной Java, этот код дешёвый, простой, относительно располагающий к чтению, и легко дорабатываемый. Да, он уродлив, как история просмотров на порнохабе у европейского политика, но он по крайней мере нужен, и с ним можно работать.
Если бы в начале проекта Java программер был на больничном, то серверную часть писали бы на next.js. Не было бы микросервисов, а это значит, что не нужен был бы и кластер. Нет кластера, не нужно и большое облако, пайплайны, контейнеры и даже мерзкая настройка ноутбука под разработку. База данных замечательно ляжет в один облачный сервис, next.js — в другой, и не надо нанимать ни DevOps специалистов, ни облачных архитекторов, ни даже людей, которые знают как пишется слово kubernetes — в системе тупо нет сложных вещей, для которых требуются образованные люди.
Поэтому послушайте старца — не выёживайтесь. Ещё древние нам завещали две аббревиатуры — KISS и YAGNI. «Не усложняй» и «тебе это не понадобится». Мудрецы знали смысл в жизни, потому что, ей-богу, основная часть моей работы связана с тем, что я разгребаю интеллектуальные выделения какого-то супер мозга, который поклялся использовать все доступные инструменты NASA для покраски курятника.
Не надо. Сходите, цветы пожмякайте, или кактус понюхайте — сделайте что-то полезное. Но не надо усложнять себе жизнь без повода.
P.S.: Насчёт заглавной картинки. В начале семидесятых Штаты запустили свою собственную научную станцию в космос, от которой на взлёте отвалилась внешняя термозащита. Уже в космосе оборудование на миллионы долларов начало перегреваться, и миссия оказалась под угрозой. В итоге проблему решили, выставив наружу зонтик от солнца. Гениально, и за копейки.
Обожаю читать твои посты, конечно, Паш. 🙂
Раньше лучше было. Теперь я язык забывать начал
Прекрасный пост. Из-за близости проблематики и едких фразочек захотел оставить тут комментарий 🙂
Возраст как будто реально влияет на желание сделать по-простому и чтобы работало, а не вот это вот всё. Но как же заказчики хотят сложностей, чтобы как у всех, как у больших и успешных.
Вспоминается шуточный дневник про программистов строящих дома — идеи про окна изменяемых размеров и дома соединённые подземными туннелями.
Я даже помню полу-анекдот про программистов и дома: «если бы архитекторы проектировали свои дома так же, как программисты свои программы, то первый же влетевший в окно дятел разрушил бы цивилизацию».
Надеюсь конечно, что корреляция возраста и стремления к простоте — это про зачатки мудрости, а не старости.