вторник, 26 сентября 2023 г.

[prog.work.flame] Деньги платят не за язык, а за решение проблем?

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

Я понимаю подобные высказывания так: первичны знания человека в какой-то специфической области. Например, в обработке видео. Или в распознавании образов. Или в статистике. Или в компиляторостроении. И т.д., и т.п.

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

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

Как минимум по двум причинам.

Во-первых, любое объемное ПО -- это не только набор математических формул. Это все-таки огромное количество "сопроводительного текста" к этим самым формулам. Т.е. наукоемкое ядро будет занимать пару-тройку десятков процентов (а то и меньше) от общего объема кода. Тогда как большая часть -- это рутинная обвязка. И эту обвязку нужно написать. Желательно хорошо. А для этого нужен такой навык, как умение писать код. Что, вообще-то говоря, дано не всем. Особенно из числа математиков и физиков ;)

Ну и к умению писать код желательно бы еще и приложить владение инструментом, т.е. знание языка программирования и умение пользоваться этим самым языком (что далеко не всегда сопутствует знанию языка). Грубо говоря, если вы пишете на C++, то вы на автомате должны расставлять const и noexcept, и не создавать объекты через new там, где их можно просто разместить на стеке, ну и RAII во все поля, куда же без этого ;)

Во-вторых, не боги же горшки обжигают. Если не брать какой-то серьезный матан, для освоения которого нужны пять лет ВУЗа, три года аспирантуры + кандидатская степень, то большинству программистов приходится погружаться во что-то новое и совершенно незнакомое. И ничего, как-то же справляемся.

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

Но, опять же, человек должен был уметь писать код. Знания C++ можно было подтянуть. А умение излагать свои мысли в виде понятного и нормально работающего кода уже должно было быть. Вот этому учить точно не было возможностями, такие навыки приобретаются самостоятельно в ВУЗе.

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


ЗЫ. Наверное, отчасти этот пост навеян легким сожалением о том, что такая штука, как "знание C++", не котируется. Столько лет насмарку, и как теперь жить? ;)))

ЗЗЫ. По большому счету к перспективе сменить основной язык программирования отношусь философски. Наверное среди используемых сейчас в индустрии языков найдется мало таких, которые я бы не смог толком освоить... Хотя вот Perl в свое время не смог ;) Жаль только, что на овладение новым языком время потребуется. Месяцев 9-10. Ну, чтобы овладеть. А не так, чтобы как курица лапой.

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

Stanislav Mischenko комментирует...

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

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

@Stanislav Mischenko

У меня вообще есть версия, что подобные высказывания делают люди, которые долго копают какую-то тему именно как программисты (например, 25+ лет в жестком рилтайме в радиолокации или столько же лет в разработке драйверов под Windows, или столько же лет в компиляторостроении, или столько же лет в разработке какой-то условной PostgreSQL). У них в этой области такая экспертиза, какой мало у кого есть. При этом они еще и программируют постоянно (а может быть даже и хорошо). Вот отсюда и такая максима.

В то же время люди, которые больше математики/физики/химики/и-тд-и-тп, но программируют лишь время от времени и в каком-нибудь MathCAD или Matematica, они подобной фигней реже страдают. Т.к. многие из них прекрасно знают свой уровень как программисты.