четверг, 2 мая 2024 г.

[prog.c++] Одно из недооцененных мной качеств C++

Есть в C++ одно качество, на которое я сам начал обращать внимание относительно недавно, года три или четыре назад. А вот поговорить об этом захотелось только сейчас, после выхода большой статьи "Leaving Rust gamedev after 3 years" (ее перевод уже начали делать и на Хабре -- вот первая часть).

Сразу скажу, что статью про Rust целиком не осилил, т.к. геймдев вообще не моя область. Да на Rust-е не программирую (может быть и зря, но это уже совсем другая история).

Тем не менее в начале "Leaving Rust..." речь идет о том, что Rust, в силу своей специфики, затрудняет быстрое прототипирование. Мол, Rust настолько пристально следит за программистом, что не позволяет писать откровенный говнокод. Даже в случаях, когда целью программиста является именно быстренько что-то наговнякать, проверить результат и выбросить все написанное.

Читая эту "претензию" к Rust-у вспомнил про то самое качество C++ о котором и пойдет сегодня речь.

Суть в том, что C++ позволяет программисту написать откровенно плохой код. Который, тем не менее, будет работать.

Да, да. Речь именно о том, что на C++ любой "недоучка" может написать работающий говнокод. Ключевое здесь "работающий", а "говнокод" -- это так, функция от времени ;)

И, что еще интереснее, даже работающий с приемлемой скоростью.

Т.е. неопытный C++ник из говна и палок может получить нужное ему решение.

Конечно, во многих случаях такой код будет падать, т.к. тестированием чего-то кроме happy path в таких условиях не занимаются. Конечно, он будет неэффективно расходовать память, делать что-то лишнее, протекать и иметь кучу потенциальных UB...

Но здесь и сейчас он будет работать.

И, что удивительно, на ранних этапах жизненного цикла нового софта это все, что требуется.

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

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

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

Выше я не зря взял термин "недоучка" в кавычки. Иногда это студенты, которые слишком рано, не имея практического опыта, попали "под крыло" к специалистам в какой-то узкой прикладной нише. Иногда это люди, которые уже умеют программировать и, зачастую, делают это очень хорошо. Но не на C++, а на Python-е или VisualBasic-е, к примеру. Да и вообще в своей предметной области съели не одну собаку. И, что самое важное, они знают что нужно клиентам и как это клиентам продать.

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

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

Так-то я привык к работе в условиях, когда качеству уделяется серьезное внимание, и думал, что подход "фигаг-фигак-и-в-продакшен" за последние 15-20 лет из C++ полностью ушел в Java, Python и Go. Просто в силу того, что ниша C++ все эти годы скукоживается и C++, к счастью, остается лишь там, где в этом еще есть смысл.

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

Почему не ведет к фатальным последствиям для меня пока еще загадка. Могу предположить, что здесь здорово помогают современные средства разработки с крутыми отладчиками, анализаторами и санитайзерами. Ну и стандартная библиотека C++, хоть и остается куцей, но хотя бы std::vector и std::string уже есть везде, не нужно свое колхозить, как было в 1990-х.

Так что да, удивительный для меня факт: современный C++ вполне себе используется в парадигме "фигак-фигак-и-в-продакшен" и это далеко не всегда фатально.


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

Но если над кодовой базой должно работать несколько десятков человек с разной квалификацией, то C++ плохой выбор (жирное ИМХО).

среда, 1 мая 2024 г.

[life.cinema] Очередной кинообзор (2024/04)

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

Фильмы

Дюна: часть вторая (2024). Красиво. Пожалуй, это все, что я могу сказать хорошего. Полагаю, фильм для тех, кому и сама книга-первоисточник понравилась. Но т.к. мне и книга не зашла, то и фильм оставил равнодушным. Так что если сделают и третью часть, то я ее, пожалуй, вообще смотреть не буду. Но красиво, да.

Хитмен. Последнее дело (Knox Goes Away, 2023). Отличная развязка. Но чтобы ее дождаться придется вытерпеть полтора часа скучной тягомотины.

Манкимэн (Monkey Man, 2024). Ну что тут сказать? Можно вывезти индуса в Голливуд, но вывести Болливуд из индуса невозможно. Как по мне, так даже попытки сделать экшОн в духе "Джона Уика" не помогают.

Сериалы

Золотое дно (первый сезон, 2024). Мне вот прям зашло, посмотрел с удовольствием. Да, в конце авторы не смогли поставить жирную точку и закинули удочки для второго сезона, но все-таки основные линии до развязки довели, за что отдельное спасибо. Пожалуй, лучшее из российских сериалов, что удалось посмотреть после Без правил.

Fallout (первый сезон, 2024). В игры Fallout никогда не играл и даже ничего про них не слышал, кроме того, что такие игры есть в принципе. А вот экранизацию было интересно смотреть даже несмотря на отсутствие каких-либо знаний о фантазийном мире Fallout-а. Отличный получился треш на тему выживания после глобальной ядерной войны. Но! Кино явно для любителей подобного треша.

Банда «ЗИГ ЗАГ» (первый сезон, 2023). Динамично. Нет ни грамма сериальной затянутости. Но столько клюквы развешено, что как-то не по себе местами становится.

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

воскресенье, 28 апреля 2024 г.

[life.photo] В первые за долгое, долгое время сделал несколько кадров на полноценную камеру

Давненько не отводил душу посредством фотографии. Сегодня чуть-чуть удалось. Из более чем 80 кадров, после выбраковки осталось всего пять, увидеть их можно вот в этом альбоме.

Хочется надеятся, что возможностей и желания прогуляться с фотокамерой будет больше, чем в последние 3-4 года.