среда, 27 июля 2022 г.

[prog.c++] Немного разрозненной рефлексии на тему C++ и ощущения себя самого в мире C++ных проектов

За последние полтора-два месяца довелось погрузиться, наверное, в четыре разных C++ных проекта. На разную глубину, на разное время, с разными целями. Проекты, написаны разными людьми, в разное время.

Вынырнул, так сказать, из манямирка собственных проектов, оглянулся по сторонам , прифигел :)


Поймал себя на том, что мог бы работать C++ корректором :)

Это как в литературе есть редакторы, а есть корректоры. Редакторы отвечают за фактологическую и стилистическую составляющую, а корректоры отвечают за то, чтобы все было хорошо с точки зрения языка: орфографические ошибки, опечатки, знаки препинания и вот это вот все.

Когда заглядываю в чужой код, то во многих случаях сходу вижу разные мелочи (хотя с моей точки зрения это и не мелочи): где можно избавиться от дублирования кода (скажем, за счет делегирующих конструкторов или локальных функций в виде лямбд), где можно обойтись средствами стандартной библиотеки, где не учтены какие-то тонкости (например, пользовательские операторы копирования/перемещения не защищены от x=x), и т.д., и т.п.

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

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


Самодокументирующийся код -- это миф.

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

Так что блин, комментарии нужно писать. Даже если сейчас они кажутся избыточной банальностью. Через 10 лет за любой комментарий в коде можно спасибо говорить, а уж если это адекватный и полезный комментарий, то хоть в ноги кланяйся :)

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


Думаю, что C++ для молодых разработчиков -- это бесперспективно.

Да, C++ никуда не денется и будет с нами еще не одно десятилетие. Но если тебе сейчас 20 лет и перед тобой открыты все пути (а уж тем более если ты вошел в ойти просто за зарплатой), то незачем тратить годы своей жизни на достижение мастерства в C++. Без которого, к сожалению, нормально программировать на C++ не получается. А если не нормально, то лучше и не надо.

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

А основная часть работы, связанная с C++, будет касаться сопровождение легаси. Т.е. разгребание чужого дерьма.

Оно вам реально нужно?

Оставьте C++ старперам, вроде меня. А там глядишь, и C++ станет не актуальным, т.к. все динозавры (включая и меня) вымрут. А место C++ постепенно займет что-то, что будет и приятнее в использовании, и безопаснее.


Если не считать тех небольших периодов, которые удалось потратить на выпуск новых версий SObjectizer, so5extra и RESTinio, все остальное время приходилось заниматься задачами, которые нужно делать, т.к. за них платят, но которые интереса или воодушевления не вызывают.

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

Вопрос, как оказалось, далеко не праздный. С учетом того, сколько уже всякого разного за плечами, не так уж просто найти то, что вызывает однозначное "хочу!" Первое, что приходит на ум -- это отпуск месяца на три, чтобы в это время вообще никакого программирования :)

Если же говорить серьезно, то, наверное, я бы с удовольствием сделал бы свою реализацию HTTP. Хоть HTTP1/1, хоть HTTP2, хоть HTTP3. Все это пригодилось бы в том же RESTinio. Но, главное, этим было бы интересно заниматься мне лично.

Но поскольку денег это не принесет, а счета оплачивать как-то нужно, то... :(


Вообще жалко, что язык D не взлетел (еще более жалко, что он развивается именно так, как развивается). D версии 1.000 образца 2007-го года был языком, который для меня лично выглядел желанной заменой C++.

2 комментария:

Alex комментирует...

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

eao197 комментирует...

То, что C++ становится сложнее для погружения в него новых людей (да еще и отстает по развитию инфраструктуры от конкурентов) -- это только одна сторона медали. И, вероятно, не самая страшная.

Как по мне, так главная причина -- это снижение потребности в языках, вроде Modula-2, Ada, C++ и Rust, в принципе. Т.е. языков, на которых можно писать большие и сложные приложения с высокими требованиями по эффективности.

В старых нишах, где все это было нужно, уже сделан большой задел. Это различные инфраструктурные вещи, вроде СУБД. Это CAD-ы. Это АСУТП. Это оборонка, авионика, космос и т.д.

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

Т.е. в принципе сейчас мало кому нужно писать с нуля AutoCAD, Photoshop, MariaDB или WindowsNT. Да даже если брать небольшие кросс-платформенный десктоп приложения: если раньше C++ здесь был отличным выбором, то сейчас народ тупо берет Electron/Atom и говнокодит свои тормознутые "нетленки" на JS. Причем их тормознутость даже не особо заметна на современных процах. Плюс выросло поколение, которое даже не подозревает, что может быть на порядок-два быстрее. В принципе не подозревает.

В общем, совсем другой исторический фон. И на этом новом историческом фоне старый C++ со всей его сложностью и монстроузностью, отсталой экосистемой и прочими прелестями не выглядит привлекательным для широких масс современных программистов. Многие из которых, как я полагаю, идею C-шных указателей не смогут уразуметь, а без этого на C++ все-таки не попрограммируешь (как по мне).