[О блоге] [наверх] [пред] [2026-01-11 22:02:11+03:00] [d77a4c36db19e704ef1ed9e81720389e65efe916]

Спор с современным программистом

https://www.ariel.com.au/jokes/The_Evolution_of_a_Programmer.html
https://github.com/SuperPaintman/the-evolution-of-a-go-programmer#readme
https://dxdt.ru/2026/01/08/16903/
be72ef3a8ad941f67d5470f1dfcc184fce74df7a
6b8cfdca91bc5c3eca705c5ed5da79b08429893d
Ну как современным: возраст и стаж почти совпадают с моими. Поговорил,
поспорил тут несколько дней с одним разработчиком ПО. Думал что он, ну
типа, как минимум, опытный. Как можно оценить опытность человека за пару
минут? Послушать какими вопросами он задаётся, какие критерии и оценки даёт.

Например новичок будет в первую очередь думать например о выборе языка
программирования, в какой VCS хранить. Опытного же это чуть ли не в
последнюю очередь будет волновать. В резюме новичков будут перечислены
shell, редакторы, SQL, IDE, git и что-то в этом духе. У опытного всё это
почти наверняка будет вообще пропущено. Это всё очевидно, как мне кажется.

Так вот собеседник рассказывал, как встретился в одном месте с
программой, где Motif использовался для GUI. А там что-то простое
выводилось. Он предлагал (ну или думал предложить) переделать так, чтобы
был API с JSON/whatever RPC вызовами, сделать UI на DHTML. Я спрашиваю:
зачем, что это даст? Ну типа не будет линковаться серверная штука с
GUI-related библиотеками. Да, это неприятно, но ещё не весомый аргумент.
Начал говорить про взаимозаменяемость frontend-ов, чистое разделение
"end"-ов. Спрашиваю: есть программа, работает, какой именно практический
плюс ты получишь? Ответов, кроме цитирования абзацев из каких-нибудь
SOLID-related книжек не было. Человек предлагает добавить ещё кучу
зависимостей, заставить писать ещё на одном ЯП/framework/whatever,
которое, как правило, будет лютым говном (мир JS же) для адекватных
программистов. Требовать использования JS-запускалки ("web-браузера"),
которая будет весить тяжелее всей ОС со всем софтом вместе взятым.
Наверное ещё бы вскоре предложил и обернуть в Docker (если там "Linux").
Ещё одним аргументом был: "ну так же все делают!".

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

    print "
    -*-*-*-*-*-*-*-*\n
    *-*-*-*-*-*-*-*-\n
    -*-*-*-*-*-*-*-*\n
    *-*-*-*-*-*-*-*-\n
    -*-*-*-*-*-*-*-*\n
    *-*-*-*-*-*-*-*-\n
    -*-*-*-*-*-*-*-*\n
    *-*-*-*-*-*-*-*-\n"

ну и тест добавит. Человек раскритиковал такое решение, мол не
удовлетворяет "DRY, YAGNI, KISS, CQRS". Я ещё от себя добавил бы
"SOLID". Всё это я назвал "мантрами" для удобства.

Тут и начался у нас срачь, ибо у него явно, то что у нас на работе
называли "ООП-головного мозга". Он говорил, что "ООП обязательно должен
быть в арсенале". Все доводы в его сторону: снова цитирование абзацев из
ООП-книжек, где мир в радуге, всё идеально декомпозировано и прекрасно.
На деле же любой опытный разраб видит в основном код от неопытных такой,
что redis.get превращается в 200 строчек кода, без учёта комментариев. Я
постоянно вспоминаю этот redis.get, ибо я воочию видел на одной работе
это, понял к чему приводит "ООП головного мозга".

Говорю что у него похоже этот недуг. Отвечает: (ООП) --
"основопологающий принцип". Эти мантры -- "базовые принципы", их
соблюдение "никогда не делает код хуже". "Базовые правила, на уровне
чистописания". "Простота и "тупорылость"" -- признак дурного тона в коде
и неподдерживаемых решений. Тут я наверное совсем уже офигел. Простота
стала недостатком, признаком плохого кода! Мне кажется каждый, кто видел
код хороших хакеров, в первую очередь поражался простоте,
незатейливости, лаконичности и тривиальности понимания.

Причём я про себя максимально "упоротую" реализацию "шахмат" представлял
как класс, где атрибутами ширина и высота заданы, будет метод для её
генерирования, циклы само собой, возможно метод для создания одной
единственной строки. Но собеседник заикнулся о:
    PrintCell(bool isWhite)
    PrintRow(uint cellsCount)
    PrintCheckBoard(uint sideSize)
Вот про метод, который бы принимал isWhite я точно не смог бы подумать.
По моему это переплёвывает весь "ООП" что я видел раньше. Но да, явно
сделанным по канонам SOLID и прочих мантр. Даже мысли посещали о том,
что раз там bool, то значит будет if, а значит прощай branch prediction
(точнее его отсутствие) и speculative execution наверняка. Даже здесь на
пустом месте возможна потенциальная просадка по скорости. Я про себя
думал про какой-нибудь chars[ctr%2] массив, где будут чередоваться
взятия одного или другого символа, а начальное значение счётчика будет
задавать с чего начинаем.

Почему у них в одном месте используется C#? Потому что "много богаче Go
по возможностям". А я на своей работе коллегам Jim Tcl предлагаю, а тут
надо вон на богатство возможностей смотреть оказывается.

Коллеги на работе как-раз в первую очередь новобранцев отучали писать
спагетти-код, лечили от ООП головного мозга. Причём как на текущей
работе, так и на прошлой.

Я был шокирован всем этим, мягко говоря. Кстати собеседник ни разу не
покритиковал решение hello world из "анекдота" на C++. Там точно будут
удовлетворяться мантры. Я был поражён тем фактом, что за 20+ лет стажа
человек по моим меркам не вылез из состояния новичка, которыми мы все
когда-то были, когда возводили в абсолют всякие подобные мантры
(безусловно, к которым стоит прислушиваться, ибо зерно адекватности и
разумности конечно же там есть).

Но по факту я и мой бывший начальник услышали про многие термины только
от junior-ов. Так вот оказывается как это называлось, что мы делали
десять лет! Singleton! Descriptor! Замыкание! SOLID! Про последний я
относительно недавно услышал и не очень понял: там же всё банально
очевидно и зачем это выносить в свод "правил"? Но и этим банальным вещам
придумали аббревиатуру красивую.

Вот только по факту все те 99% софта, являющегося неюзабельным говнищем
("моё разочарование в софте" (bb09bd6fb88009c4db4caf0e8372bbde38a56701)
и масса подобных эпосов), пишется как-раз разработчиками которые
прекрасно знаю ещё наверное с десяток других "мантр", в которых наверное
всё правильно в теории. А почти все окружавшие меня опытные разрабы не
факт что знали значение "DRY", только "KISS" наверное известен. Вот
только они писали системы, которые и спроектировать на бумажке то 99%
"умников" не смогли бы. Смогли бы, забывая про возможности сбоев,
сбоящих сетей, вопросов консистентности данных, гарантий атомарности, и
прочего.

Только и только от новичков я слышал про все эти "SOLID", "книжку с
кабанчиком" (кстати, на мой взгляд не плохая для вода в тему), "чистый
код" и подобное. От опытных скорее услышишь про книжки про экстремальное
программирование и книжку с канбаном (всегда я "кабанчика" читал как
"канбанчика" :-)).

Не раз я пересекался с бывшим начальником, где его окружали новые
коллеги и они с ним спорили о том как надо разбивать коммиты (надо тесты
и доку делать отдельными коммитами ли например?), в каком порядке и
какими этапами выполнять ту или иную задачу. Он, так сказать, выл от
непонимания молодых коллег и насколько сложные (или просто некорректные)
вещи они предлагают. Просто недостаток опыта. И когда я появлялся, то он
спрашивал моё мнение, описывая дилемму и спор с коллегами. Мы не
сговаривались никогда, я вообще не в теме их проблем и проектов. Я не
знал какой ответ он или они давали. Но в 100% случаев я давал точно
такие же доводы и точно такие же ответы, без компромиссов, как и он.
Опытные разрабы на одной волне вместе, на пике цунами просто.

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

А потом, через дни, меня осенило: все его мантры и подходы ИДЕАЛЬНЫ для
того, чтобы получать деньги за строки кода. Идеальны для того, чтобы
тебя удерживали на работе, так как мало кому захочется разбираться в ООП
коде "шахмат". Дешевле платить и знать, что автор подобного кода рядом,
чем тратиться нервы, психику и время остальных коллег или на его
разбирание или переписывание (чем чаще всего и занимаются с ООП кодом по
статистике после ухода костяка его знающего). Эти люди делают всё, а
жёсткое следование мантрам (SOLID и DRY (две одинаковые строки по
определению просто недопустимы!) и прочее) идеально в этом помогает,
чтобы быть полезным компании: им зарплата, уволить дорого из-за
незаменимости (из-за очевидной объективной неподдерживаемости
redis.get-like кода на 200 строк).

У "нас" с "ними" совершенно и кардинально отличающиеся ценности и этика.
Они делают так, чтобы от них не избавились на работе. И платили деньги.
Всё, больше ничего. Мантры, распиливание Motif-linked (хотя признаю, что
Motif древний и из-за этого могут тоже быть сложности) на микросервисы с
созданием прослоек из сериализации/десериализации, RESTful/whatever,
найм frontend, возможно devops чтобы это всё собирать/запускать,
возможно devsecops чтобы не тащить непойми что из тысяч npm пакетов, и т.д.
Куча пристроенных людей, куча людей при работе. Работающая экономика и рынок.
Собеседник как раз занят в торговой сфере.

А у "нас" что? Написал не убиваемую программу, которую сможет любой
junior поддерживать из-за лаконичности, простоте и лёгкого кода,
мизерного объёма, не требующего более 1-2 человек на проект, и забыл про
проект, который just works и не будет ещё и поддержки требовать. Ну а
если stargrave придёт, то ещё задрюкает вопросами/задачами про
атомарность операций, надёжность, консистентность, работают ли fsync,
выполняется ли build reproducibility, очищается ли память от sensitive
данных и тогда точно можно успокоиться. А ещё документация обязательно
появится (везде где я появлялся -- она возникала :-)) Скучно, уныло, не
интересно, могут быть простои от недостаточного потока входящих задач.
Так и экономике плохо и выживаемость подобных разработчиков под вопросом.

Чисто этика и преследуемые цели в работе. Вот и вся разница. А рынок
поэтому и вдалбливает SOLID/whatever мантры, ибо ему не нужен код
"шахмат" на один print.

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

Всюду везде речь про то, что программистов типа меня в принципе нигде не
рассматривают для найма. В этом году говорил с ещё одним ИТшником,
вообще директором компании, который подтвердил, что без использовании ИИ
или тебе будут платить меньше чем junior, или нафиг не возьмут. Причём с
ним же мы поигрались с prompt-ом и убедились что ни разу не был
сгенерирован (корректно) работающий Go код (или это я ставлю не по зубам
задачи?). Спрашиваю: всем пофиг на тот факт, что это чей-то (зачастую не
наш, а какой-нибудь вражеской страны) сервис, что без него ИИ-зависимые
вообще бесполезны, тогда как мне не нужен online в принципе (VPN до
работы пару раз в день могу поднять)? Да, всем пофиг. Где то слышал про
то, что ИИ это типа как IDE -- когда-то их не было, а после появления
стало глупо не использовать и человек без IDE не считается
квалифицированным сотрудником. Я вот, правда, ни разу (как и коллеги) не
видел чтобы кто-то либо с IDE мог переплюнуть любого из нас
(Vim/Emacs-users) в производительности чисто coding-а (молчу про
проектирование и придумывание архитектуры, что вообще может не требовать
компьютер под рукой). Ещё не встречал опровержений того факта, что
вакансии 40+ летних рассматривают (мне 1.5 года до этого рубежа).

В общем всё это снова приводит к мыслям о том, что делать дальше, если
(когда) уволят из компании. У нас смена руководства и я совершенно не
знаю чего ожидать. Может быть вообще через 1-2 недели посрусь по
какому-нибудь принципиальному вопросу и уволюсь. Многие думали, что нас
уже готовы сократить (56af7e1fc9064d32dfb9aac1a5fd41c72c695000) из-за
недостатка финансов в стране из-за войны. Я реально беспокоюсь о полной
неизвестности (для себя) будущего на текущем месте. И кстати с того
собрания мой КПД почти упал до нуля, уже просто в ожидании праздников,
на которых я ни одной строчки кода не написал, ни одного конфига не
менял, ничего не делал.

Все мои мысли приводили только к тому, что из ИТ я уйду совсем. Но чем
заниматься ума не приложу. Только какой-нибудь низкооплачиваемой
работой, где не нужна квалификация, ибо я же больше ничего не умею, руки
из жопы (вставлю PCIe карту -- поранюсь), инженером стал в институте и с
того момента им никогда и не был по сути. Почти все мысли сводились к
работе на каком-нибудь заводе, синим воротничком, ибо вроде там их не
хватает.

А тут как-будто замерцала надежда что не всё так мрачно: есть громкие
(по информационным вбросам) ИТшники типа собеседника, где всё преследует
кардинально иную этику, но должны же оставаться и не единичные "нормальные"
компании. Хотя на деле всё наверняка гораздо мрачнее и хуже чем можно
представить :-)

    [оставить комментарий]