Хабрахабр

Безликий код убьет программирование, и ничего мы с этим не сделаем

«В большинстве популярных ЯПов существует очень много разных путей сделать одно и то же. Во время очередного спора знакомый озвучил мысль, которая меня очень сильно задела. А вот в Go всё не так. Это приводит к проблемам. Поэтому их код легко читаем, предсказуем и надежен. Философия языка такова, что на Go разные разработчики решают одинаковые проблемы одинаковым образом. Это достаточно мощный аргумент, над которым нужно как следует поразмыслить, прежде чем опровергать. И поэтому крупный бизнес выбирает Go».

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

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

Так компании будет намного комфортнее. Если меня вышвырнут на улицу, и возьмут на моё место какого-нибудь дурачка, он легко сможет работать с моим кодом. Мысль, что плохое настроение ведущего разраба отнимет у бизнеса кусочек прибыли, не нравится топ-менеджерам. Бизнес не хочет зависеть от случайностей. А мы сейчас живем в то время, когда «хорошо сделанное» и «прибыльное» — разные вещи. Они стали топ-менеджерами, потому что хорошо умеют избегать ситуаций, когда их священный бизнес теряет деньги.

Сейчас объясню, следите за пальцами: И я прекрасно понимаю, как мы к этому пришли.

Что изобретаю, автоматизирую, делаю своим трудом и мозгами жизнь всего человечества лучше, пока всякие мракобесы только мелят языком. Я, как и большинство инженеров, верю, что творю великие вещи. Но потом я вытаскиваю нос из своего редактора кода, и прихожу в ужас от того, как жестоко ошибаюсь.

Что я вообще нахрен делаю?

Вот я разрабатываю VPN-клиент, и что с ним будут делать? Вот я продумываю архитектуру высоконагруженной системы, но в 95% случаев ее будут применять, чтобы быстрее отсортировать на телефоне селфики с узорами и фоточки любимой собаки. Смотреть всякую порнуху и тупые пиратские фильмы?

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

Большинство обслуживает дурацкие потребности, которых раньше просто не существовало, потому что не существовало ИТ. В ИТ делают хорошие вещи, но их процент ничтожно мал. То есть, инженеры не делают великие вещи, инженеры просто поддерживают инфраструктуру перекачки бабла между людьми.

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

Раньше программирование было делом избранных, сейчас любой лох посидит на курсах годик и пойдет писать код. Вместо абстрактного «всеобщего блага» ИТ научилось потакать низменным хотелкам и только за счет этого выросло в гигантскую индустрию, где работают сотни миллионов людей.

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

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

Это все вызывает отторжение. А я думаю — мне это всё нахрен не нужно.

Мой tslint не разрешает добавить мне лишний пробел. Если хорошо присмотреться, мой VSCode набит опасными симптомами. Мой компилятор не будет работать, потому что я не добавил комментарии к публичному методу. Мой код не билдится, если я назвал переменную не с той буквы. Безликий код. Тут все просто — пишите, ребята, одинаковый код. Это вам не роман, какой к чёрту авторский стиль?!

Момент, когда у тебя забирают возможность выбирать, как этот код будет работать — мой самый страшный кошмар. Я в целом согласен, что подобные конвенции — хорошая штука, но только до тех пор, пока они касаются внешнего вида кода. Давай ты сделаешь его попроще, не важно, что работать будет хуже». Представьте кейс: вы написали сложный перфоманс сенситив модуль, а вам говорят: «Послушай, он слишком сложный. Вот так и будет. Звучит абсурдно? Да так уже есть. Серьёзно. Они не добавили дженерики в Go, потому что дженерики — сложные.

Он сам себе противоречит. Go — это бизнес-эффект, а не инженерное решение. Но сложность в индустрии появилась ради надёжности. Вот он хочет надёжности, и за этим уходит от сложности. И да, они довольно сложны. Дженерики существуют именно ради надёжности, чтобы предвосхищать потенциальные баги dev-time.

Хочу иметь огромное число опций, когда дизайню систему. Программируя, я хочу заниматься творчеством. И у меня есть ощущение, что технологии вроде Go — это поиск простых ответов. Мы моделируем реальность в мире машин, а я точно знаю: реальность — это не простая штука, в ней нет правильных и неправильных ответов. Но это же обман! Типа, давайте на каждую задачу будет одно правильное решение. А под давлением того, что у нас нет бюджетов на качественные решения, мы сами убиваем софт, и потом разочаровываемся, что все плохо работает. Пусть он и сработает, но всегда есть решение лучше.

И думая об этом, я прихожу к еще более страшному противоречию. Философия безликого кода хочет сделать из меня машину, которая копипастит бойлерплейт.

Но вот ирония — мой посыл тоже фатален. Я всегда верил, что базовый посыл разработки звучит так: «Все, что может быть автоматизировано, должно быть автоматизировано».

Это нерационально, а меня учили быть рациональным. Я не готов делать что-то, что могла бы делать машина, которую я могу построить. И получается должен быть рад языкам, которые постепенно нас к этому подводят. Но раз я должен все автоматизировать, выходит должен автоматизировать и автоматизацию — то есть разработку. То есть моя профессия, как и большинство других, в идеальном мире существовать не должна.

Но он может идти разными путями, в этом я уверен точно. Прогресс не остановить. Если программирование сейчас свернет на дорожку Go и безликих практик, то мы придем к самой кривой и не оптимизированной автоматизации, какую только можно представить.

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

И чтобы их приоритетом было глубокое совершенствование технологии, свободное от ежедневного потока. Я бы разделил бизнес и ИТ, чтобы программированием могли заниматься только некоммерческие организации. Я бы всеми силами держал порог входа в программирование как можно выше, чтобы инструменты не подстраивались под усредненного разработчика, когда опытный инженер и вчерашний выпускник курсов вынуждены писать одинаковый код. Чтобы требование «выпускаем что есть, иначе прибыль уйдет» было морально недопустимым.

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

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть