Metaprogramming
616 subscribers
103 photos
1 video
157 links
μετά- «между, после, через» (греч.)

Жизнь программиста за пределами программирования: алгоритмы, психология, инвестиции, иное.
加入频道
Выше было во-первых, перейдём к во-вторых.

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

Мой собственный интерес к программированию изначально воплотился (спустя недолгое время после того, как я научился говорить) в желание буквально расковырять исполняемые файлы и посмотреть как они устроены. Я нажимал F4 в Нортон Коммандере на экзешниках и день за днём смотрел на эти крякозябры (машинные коды в текстовом виде выглядят как набор случайных символов). И думал, как же программисты пишут эти закорючки, если их даже на клавиатуре нет, не говоря уже про то что такое огромное их количество надо как-то запомнить. Каким-то невероятным умом надо обладать для такого. С другой стороны, а куда деваться.

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

То есть я понял, что программирование это просто.

Таким оно в общем и целом простым для меня и оставалось по мере дальнейшего изучения и работы – из-за изначально поставленной нереально высокой планки ожиданий сложности. Справедливости ради, каким-то объективным хардкором я в общем-то никогда и не занимался, оставаясь разработчиком прикладного ПО.

Программистам может наскучивать рутина, но им не наскучивает новое. Считается, что если программисту не платить за работу, то он всё равно будет программировать. Это верно, но есть нюанс – он будет программировать нечто иное, скорее всего чего раньше ещё не делал.

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

#programming
Вкратце про монады

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

Как узнать, что такое монады в две строки из, фактически, первоисточника:

docker run --rm -it haskell:slim
:info Monad

Где ясно написано, что монада это аппликативный функтор с определённой операцией >>= (bind, привязки).

Ну какие ещё могут быть вопросы после такого?
Вкратце о ИИ и программистах

Скинули видео об очередном ИИ для генерации кода, в этот раз от OpenAI – Codex. Напомню, аналогичную разработку ведёт GitHub под названием Copilot.

В целом "вспомогательный ИИ" для выполнения рутинных задач в текстовом редакторе – годная тема. Думаю, имеет смысл его затачивать именно в сторону облегчения повторных однородных правок, мелкого рефакторинга и т.д.

В некоторых СМИ акцент делают на хайповой теме "не закончится ли нужда в программистах". Я начал этот канал с тезиса о том, что программисты и так нужны не всякие. В целом кодогенерация, "рельсовики" вон об этом тоже представление имеют по всяким rails g, облегчает наполнение проекта и преодоления "страха чистого листа" для новичков, но едва ли значительно ускоряет создание реального проекта от начала до конца.

Я бы не отказался от ИИ-помощника типа того, что в первом видео, который по словам "сделай мне сцену, где была бы солнечная система с планетами, двигающимися в соответствии с законами небесной механики" набросала заготовку проекта в Godot. К сожалению, пока что ИИ может только на основе гораздо менее содержательных (по смыслу более простых) предложений накидать заготовку веб-сервиса на Питоне.

Проще ли это, чем скопировать готовый код, который будет на первой странице результатов запроса в Гугл? Конечно, намного проще: и понимает цель запроса такой ИИ лучше, пока что, чем поисковая строка Гугла; и ответ сразу вставляется в документ, не надо копировать. Это сильно снизит порог входа для новичков (и это прекрасно), вызовет интерес у школьников и студентов.

Станет ли это серьёзным инструментом "взрослых" разработчиков, в разы сокращающим требуемое на написание кода время? Думаю, в ближайшем будущем вряд ли. Кодогенерация – термин давно известный, минусы подхода тоже понятны: нагенерированный не понятно как код надо потом самому же и поддерживать.

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

Так что диссертацию по философии или теологии в каком-нибудь продвинутом ВУЗе какая-нибудь лямбда защитить, уверен, вскоре сможет. Создать язык программирования, написать увлекательный научно-фантастический роман, победить в чемпионате по Старкрафту с ограниченным APM – нет.

Кстати, о старкрафте. Люблю вспоминать старые темы. Помните, там какой-то очередной ИИ в Го победил чемпиона, и вот-вот должен был победить команду чемпионов в "Доту"? Так и как там дела у них?

#science #programming #neuronetworks
Вкратце про нефть

Ранее писал, что главная функция ЦБ, evidently, это защита активов зарубежных стейкхолдеров крупнейших экспортёров.

Думаю, многие инвесторы в первую неделю так называемых "известных событий" сидели и рассуждали примерно следующим образом:

– Ну, идёт уже который день нагнетания взаимных санкций и общей неопределённости и сейчас, вот может быть прямо сегодня, вот может быть прямо в этот час, самые стойкие операторы зарубежных фондов (действие которых и задавало тренды российского рынка акций) решат, что хватит с них всего, и начнут кликать "продать, продать, продать!". Тут-то мы и национализируем всё! – занося палец над кнопкой "купить".

Спустя короткое время, однако, ЦБ выпустил указ о запрете продажи иностранцами активов. При этом не стесняясь буквально назвать чёрное белым заявил, что сделал это для защиты отечественных инвесторов.

Что его на самом деле вынудило ввести такую меру не трудно представить. В качестве анекдота я несколько месяцев пересказывал такую фантазию/гипотезу: звонит нужному зампреду специальный человек из British Petroleum и говорит:

– Ребята, нас тут правительство UK зажимает, заставляет продать долю в Роснефти, говорят неприлично так нагло продолжать вкладываться в Россию на фоне санкций и всего. А мы не хотим её продавать. Сделайте со своей стороны что-нибудь.
– Понял, – отвечают в ЦБ. И накладывают санкции на российских граждан, запрещая им выкупить по-дешёвке акции Роснефти.

Ну а сейчас сама BP рассказывает, как оно было:

> Британская ВР сохраняет участие в российских активах, в том числе 19,75% пакет акций "Роснефти" — крупнейшей в РФ нефтяной компании.
>
> В финансовом отчете британской компании, опубликованном 2 августа, говорится, что контрсанкции со стороны Москвы не позволяют ВР отказаться от доли в "Роснефти": компания не может осуществить продажу акций "Роснефти" на Московской бирже и оценить вероятность какого-либо сценария выхода из актива.

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

#economics #investing
Вкратце про игры для программистов

Тракторист после работы приходит домой и расслабляется в Farming Simulator, экскаваторщик в Excavator Simulator (увы, ещё не вышла, но очень ждём), фрезеровщик в Milling machine 3D, ну а игры для программистов мы сейчас вкратце рассмотрим. За прошедшие годы тут выбор крайне широкий, и в этот пост постараюсь уместить только непосредственно связанное с разработкой программ (т.е. условный Factorio или ещё что отдалённое не рассматриваем), лично рассмотренное и, с моей точки зрения, одновременно полезное и приятное.

1. TIS-100. Программируем многоядерную машину на ассемблере. Скучно, блекло и искусственные ограничения (всего несколько десятков строк кода на каждое "ядро") демотивируют. Но, в целом, классика, которую нельзя не упомянуть.

2. Exapunks. Красочно, ярко, интересно. Уровни разнообразные и сопровождаются симпатичными рисовками. Тоже ассемблер.

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

4. The Signal State. Весьма красочная и с прописанным сюжетом. Разрабатываем аналоговые преобразователи сигналов, соединяя их в специальной деке в цепочку. Однако, механика довольно слабая, забирать элементы с предыдущего уровня на следующий нельзя.

#games
Вкратце про развитие IT

Обозначу вкратце маркеры, по которым, на мой взгляд, можно судить о том, что некая айти-компания в самом деле занимается развитием:

1. На позиции главного публичного лица (например, генерального директора; или министра) находится человек, который всеми силами старается мимикрировать под айтишника. Понятно, что настоящий технарь, занимающий высший управленческий пост, это статистическая погрешность, которой следует пренебречь при общем взгляде – не так мир устроен. Посему управленец, который хотя бы притворяется технарём, это уже хорошо. Если управленец (на публичной позиции) притворяется зиц-председателем (зиц-председатель претворяющийся зиц-председателем – даже звучит абсурдно) и на передний план выставляет MBA, экономическое образование, юридический ВУЗ и прочие МГИМО, то диагноз вполне однозначен – ничего не будет, а если и будет, то вопреки.

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

3. Тот же пункт, но немного с другой стороны. Понятно, что вырасти "с самых низов" и до генерального директора/мажоритарного акционера крупной айти-компании – это статистическая погрешность (а скорее всего сказка для детей). Опять же, не так мир устроен. Топовые позиции занимают люди из некоей группы X со своей определённой субкультурой, а специалистами работают люди некоей группы Y с другой определённой субкультурой. Множества слабо пересекаются, хотя за счёт мимикрии, на беглый взгляд, граница и выглядит размыто. Так вот, айти-компания/отрасль будет развиваться, если существует сформированный класс управленцев второго уровня из группы Y – т.е. на высшие руководящие позиции систематически попадают "технари", которые прочно на них закрепляются и условно свободно мигрируют с одной такой позиции на другую.

4. Специалистам "на местах" платят нормальные деньги. Думаю, не требует дополнительных уточнений.

Ну, соответственно новости в духе:

> Выпускник, скажем, университета марксизма-ленинизма (юридического факультета областного ВУЗа, Британского университета дружбы народов, ВШЭ, etc.) поднимает высокотехнологическую отрасль, скажем, космонавтики (микропроцессоров, самолётостроения, производства подшипников, etc.), получил N млрд. руб. на развитие отрасли (зарплата инженера высшей категории на соответствующем заводе: 30 тыс. руб.), разогнал старых коррупционеров и привёл свою команду (выпускников тех же институтов, ни одного с профильной специальностью, раньше, например, продавали мебель), и теперь мы заживём!

Стоит читать так – в данной отрасли продолжается запланированная стагнация. Если бы хотели её развалить совсем, то новость была бы немного другой. А если бы хотели что-то в ней сделать, то см. пункты выше.

#economics
Вкратце про обучение "матану"

На фоне чуть ли не многовековых разговоров о том, как "матан" (в общем смысле, т.е. стандартные разделы/курсы высшей математики) это что-то такое мозголомное и труднопонимаемое 21-й век наконец начал расставлять всё по местам.

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

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

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

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

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

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

#science #education #mathematics
Вкратце про тест Тьюринга (1/2)

У Тьюринга, человека выдающегося интеллекта, выросшего в феодальном государстве с первобытными порядками, была тяжёлая жизнь с юношества и до самой смерти. Тьюринг типичный евразиец, родители – низовые британские аристократы, жили в Индии. Отметим на полях, что именно из такого контекста и пошло слово "евразиец", которое в связи с определёнными последними трагичными событиями мусолится в некоторых политических кругах. После переезда в Лондон молодой парень, чувствовавший себя в колонии принцем (с соответствующем, в том числе, уровнем жизни), превратился в "омегу" среди местных англичан. Гениальность всё равно пробилась, но личность поломалась от подобной "школы жизни" изрядно.

Уже на фоне блестящей карьеры и высочайших технических/интеллектуальных достижений (Тьюринг стал одним из отцов-основателей "компьютерных наук") он подвергся демонстративной государственной травле по надуманному поводу, позорному приговору, пыткам и, в итоге, насильственной смерти. Рядом с трупом нашли надкушенное яблоко (символ греха), ну мол они-гебисты тоже люди образованные, книжки читали. И в документах так и написали – яблоко, т.е. грех, буквально и убило. Все эти невероятные по меркам 20-го века репрессии и художества якобы из-за гомосексуализма – это в стране, где гомосексуалисты являются государствообразующим классом.

В качестве последнего издевательского жеста он был реабилитирован в 2017-м (!) году, при этом подчёркивается, что правовых последствий это "помилование" не имеет. Т.е. символический (значит, изначально притворный, сделанный понарошку – прошлого в любом случае не исправишь) жест символически же сделан (как бы в квадрате притворно и демонстративно-понарошку).

На фоне развития ИИ периодически упоминают так называемый тест Тьюринга. Напомню правила игры (которой этот тест и является): чат-бот должен по очереди убедить 70%+ собеседников (жюри), что является человеком, а не машиной. Тьюринг считал, что к началу 21-го века результат будет достигнут. Блестящих успехов в этой области достичь не удалось, но какие-то подвижки есть: боты, которые притворяются идиотами или сильно эмоциональными собеседниками, вполне успешно дурят головы самым наивным судьям. Примечательно, что Тьюрингу самому такой способ "взлома" его теста в голову не пришёл. Да и оригинальная статья вышла откровенно слабой, из-за того, что Тьюринг больше занимается проекцией и рефлексией некоторых собственных внутренних психических поломок, а не рассуждениями по существу.

Непреодолимым препятствием для современных чат-ботов является удержание контекста. "Алиса, какая погода в Самаре? А есть ли там пробки на дорогах?". Вот это слово "там" разыменовать (как переменную-указатель в программировании) ИИ может только в жёстко и вручную прописанных разработчиком случаях (т.е. лингвистического интеллекта не демонстрирует). А человек на самых "минималках" владения языком делает запросто и не задумываясь ни на мгновение.

#programming #psychology #politics
Вкратце про тест Тьюринга (2/2)

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

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

Зрителям со стороны без таких психологических особенностей при этом совершенно не ясно, что же они вертятся, как ужи на сковородке? "Тут мы русские, тут не русские, тут русскоязычные, тут россияне, тут русский мир, тут цивилизационный проект, союз шестисот шестидесяти шести народов, шовинизм, националисты!"

Думаю, пока в нашей прогрессивной и по-настоящему толерантной стране – чай не средневековая монархия – наблюдатели спокойно и терпимо к этому цирку относятся, этим ребятам надо понять две вещи:

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

2. Чтобы быть русским, надо разобраться со своей национальной идентичностью.

Понятно, что дело тяжелое, потому что для "элитарной прослойки" дальше просматривается третий пункт: "если мы все, оказывается, не русские, то почему мы занимаем 90% топа в моноэтничном русском государстве?". Но эта мысль-то не бином Ньютона, дойти до неё раз плюнуть, раз до сих пор головы по мостовым не покатились, то наверное и не так всё страшно – может достаточно будет слегка вежливо подвинуться, а не свалиться совсем?

Может ли машина пройти тест Тьюринга вопрос уже тривиальный, а вот насколько хорошо национальный аналог теста Тьюринга (в качестве жюри – 80%+ населения страны) проходят новиопы – это мы непосредственно и наблюдаем. Успехов, господа, и пусть победит наиболее приспособленный!

#politics
Языки программирования для разработки игр (1/3)

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

Пойдём дальше и почти всерьёз обсудим, на чём стоит писать компьютерные игры. Решил для себя сделать краткий обзор полянок, думаю, будет интересен не только мне.

Обычно берут готовый движок, из которых три явно выделяются (перечисление от более хардкорного к более лояльному пользователю): Unreal, Unity, Godot.

На фоне этих трёх мейнстримных вариантов есть плеяда ушедших на второй план и почти забытых AAA-движков (Source, Cryengine, Serious Engine, etc.), которыми пользуются те кто давно в них вложился, и россыпь indie-вариантов. Из последних произвольно выделю Game Maker, использовал его ещё в школьные годы: одна из моих поделок даже случайно попала в какой-то болгарский компьютерный журнал. Примерно ту же нишу, насколько можно понять со стороны, занимают Construct, Cocos Creator и мн. др.

Для тех, кто хочет написать что-то более-менее с нуля или не хочет бороться с типовыми конвенциями движков, остаётся использование "графических библиотек" (ну или "игровых библиотек", т.е. графика + ввод-вывод + звуки) – кода, который поверх вызовов API операционной системы и низкоуровневых библиотек создаёт весьма тонкую абстракцию, чтобы вещи типа инициализации окна или создания камеры делались в одну строку (вместо череды API-вызовов операционной системы и перемножения трёх матриц соответственно).

Библиотек этих десятки на любой вкус и цвет, среди энтузиастов последнее время популярна Raylib. Так и пишут: создана для любителей программировать и желающих на практике разобраться, как работают видеоигры. Чуть более тонкие абстракции дают библиотеки SDL, GLFW и др.

На самом низком уровне находятся графические API. Долгое время их по сути было два: OpenGL (всеплатформенный) и DirectX (Windows + XBox). Консорциум, отвечающий за разработку OpenGL, объявил, что дальше его развивать не будет и все усилия направит на развитие Vulcan. На устройствах Apple свой Metal. В целом на будущее стоит осваивать Vulcan (а на настоящее и в качестве ностальгии – OpenGL).

Все основные вспомогательные библиотеки и сами графические API имеют C-интерфейсы. Все распространённые языки программирования так или иначе могут его использовать (называется FFI, foreign function invocation). Если использовать полновесный движок, то к нему уже прилагается и свой язык (C++ для Unreal, C# для Unity, собственный GDScript для Godot). Если спускаться на уровень ниже, то выбор пошире.

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

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

#programming
Языки программирования для разработки игр (2/3)

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

Переходим к списку языков.

1. Ruby (Python, etc.). Знакомо, просто, есть удобные библиотеки (Gosu для Ruby, pygame и множество других для Python). Есть библиотеки общего назначения на любой вкус и под любую задачу. Неудобно компилировать всё в один файл, чтобы можно было легко распространять.

2. Go. Хороший язык для 1985-го года. Использует передовую новинку – сборку мусора – в остальном использует хорошо знакомый набор конструкций школьного Pascal. Примерно так, например, можно из массива выбрать все положительные числа и умножить каждое на два, получив новый массив:

numbers := []int{-1, 1, 2, -3, 5}
result := make([]int, 0, len(numbers))
for _, x := range numbers {
if x > 0 {
result = append(result, x*2)
}
}

Что ж, неплохо было бы для языка сорокалетней давности. В языках двадцатилетней давности уже было что-то такое:

numbers = [-1, 1, 2, -3, 5]
numbers.filter { |x| x > 0 }.map { |x| x * 2 }

Зачем намеренно нужно пользоваться новым языком, который в момент рождения устарел на 2 поколения, я не знаю. Разработан и поддерживается Google, которому, по мнению создателя языка, этот инструмент помогает заставить не обременённых избыточными талантами выпускников вузов писать хоть как-то работающий код.

3. C. Вечная классика, которая, вероятно, никогда не умрёт. "Лингва франка", который определил, например, конвенцию вызова функций, используемую повсеместно до сих пор (и нет оснований считать, что она будет в обозримой перспективе заменена чем-то радикально новым). Говорить на универсальном языке дело хорошее, вам без проблем доступен весь набор библиотек. Сам язык архаичный: полностью ручное управление памятью, отсутствие удобных функций в стандартной библиотеке и т.д.

4. C++. Крайне широко применяется в геймдеве и позволяет совместить работу и на низком уровне (ну, к примеру перекладывать вручную биты и байты) и на высоком (классы, ООП). Путь его развития был тяжёлым и тернистым, только к концу двухтысячных комитет разработчиков вдруг очнулся и осознал, что на дворе не 1985-й год, а уже 21-й век. Современных подходов и концепций туда с тех времён напихали под завязку и горшочек продолжает варить: в некотором смысле язык-антипод Go. Для иллюстрации подходит известный анекдот с панчлайном "фонарь, фонарь мне на лоб ещё прилепите!".

5. Zig, Odin. В одну кучу, т.к. без содержательной оценки. Стильно, модно, молодёжно, ориентированно в числе прочего на геймдев. Мне кажется, создатели этих языков просто не справляются с взятыми на себя задачами и какие-то базовые вещи делают ошибочно. Впрочем, не боги горшки обжигают, может быть что-нибудь и выйдет интересное из одного из них или обоих через 3-5 лет.

6. Crystal. Ruby-подобный синтаксис и отношение к пользователю ("программирование должно приносить удовольствие"), помноженный на статическую типизацию, компилирование, высокую производительность. Язык достаточно зрелый, но нет полноценной поддержки Windows.

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

Перейдём к шорт-листу победителей.

#programming
Языки программирования для разработки игр (3/3)

Итак, шорт-лист победителей

A. D. Из названия ясно, что люди хотели сделать "как C/С++, только всё чтобы было лучше". У них это получилось. Доступ к низкоуровневым операциям, более-менее беспроблемная интеграция C (и даже C++) кода, в то же время человеческий синтаксис, хорошая стандартная библиотека, автоматическое управление памятью (отключаемое).

B. Nim. На что был бы похож язык, сделанный без оглядки на внешний вид всех предыдущих, но с использованием наработанного человечеством опыта разработки компиляторов? Да вот на Nim. Есть некоторые очевидные сомнительные моменты в синтаксисе, на тему которых идут вечные холивары, но не буду их даже перечислять из-за ничтожной значимости. В целом взято лучшее из всех миров: управление памятью на гибридной модели (подсчёт ссылок + сборка мусора для циклически связанных объектов; обещают вскоре что-то ещё более интересное выкатить), богатый синтаксис (с адекватным метапрограммированием), хорошая стандартная библиотека. Программисты на современных языках быстро освоятся.

Выбор между двумя вариантами сложный и вот какими соображениями определяется.

– С одной стороны, синтаксис D ограниченно совместим с синтаксисом C (некоторые фрагменты кода можно по сути копи-пастить). Дополнительно, режим ImportC позволяет напрямую использовать сишные хедеры (ну, почти напрямую, поковырять немного придётся, но писать полноценные биндинги, как во всех других языках кроме собственно C и C++, не обязательно).
– С другой стороны, Nim в целом более передовой и перспективный. На нём код получается более лаконичный, выразительный и легко поддерживаемый (на D в целом-то тоже норм, но всё же не дотягивает). Идеология "структур с методами, принимающими структуру или указатель на неё" вместо "классов" (хорошее место в Go, кстати) здесь вполне работает, удобней в обращении чем классический ООП D.
– В установке под Windows проще D. Компилятор Nim работает без нареканий, но процесс развёртывания неприятный.

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

В Nim создателем-руководителем является молодой рациональный мужик, люди вокруг без особенностей, развито русскоязычное коммьюнити (вплоть до того, что пишут плагины для компиляции под Эльбрус).

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

А вообще лучше забыть про все подобные списки и писать на том, что нравится – это первейшее и главнейшее соображение.

#programming
Вкратце про биржевые новости

Уже давненько появилась идея написать телеграм бота, который бы сам вёл канал с биржевыми новостями. Прикреплял бы скриншот графика котировки нефти (газа, биткоина, акций Сбербанка, значений vanguard total index, ...) и писал волнующие сообщения.

Вот такого сорта (приводится в прямом хронологическом порядке):

18.03.2017 Цена биткоина опустилась ниже $1000
20.11.2018 Bitcoin упал ниже 4500 долларов и не может подняться
25.06.2019 После резкого падения во вторник, 24 сентября, биткоин закрыл неделю на уровне $8620
26.02.2020 Цена биткоина упала ниже $9000, потянув за собой остальной рынок
20.07.2021 Цена биткоина упала ниже $30 тыс.
12.04.2022 Цена биткоина упала ниже $40 тыс.

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

#economics
Вкратце о...

Накидаю ссылок и несколько тезисов по непрофильным (интересных мне в значительной мере лишь вынужденно) темам.

1. Описание диспозиции власти РФ <-> общество. На мой взгляд вот этот пост у @pravak_online вышел удачно. В целом мне не импонирует стиль автора – несомненно, все материалы смотрелись бы выигрышней без площадного тона. Однако описание общей конструкции и оценочные суждения сделаны, безусловно, верные. Далее вниз от указанного поста можно выборочно почитать-посмотреть на эту же тему.

2. Сделать банковские карты Visa/Mastercard по-прежнему можно в Белоруссии. Вот случайно найденный в интернете гайд. Ситуация особо не меняется, добавлю только несколько частных полезных советов путешественникам. Во-первых, везде записывайтесь заранее. Во-вторых, отсутствие официального карантина ≠ отсутствию риска заражения.

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

4. На фоне включенных психоизлучателей, разгоняющих колесо генотьбы по официальным каналам теперь и в РФ (вот, например, рефлексирует её действие автор пророссийского телеграмм-канала), кажущиеся себе особенно сообразительными трудящиеся начинают советовать друг другу ролики кацев-шмацев, ходорковских-навальновских. Если РФ как государство народ воспринимает как ресурс – пусть и далеко не с любовью, но всё же с некоторой долей бережливости – то вот эти вот просто с откровенной ненавистью. Вдвойне странно продолжать или, боже упаси, начинать слушать лично тебе причиняющих вред дезинформаторов, будучи эмигрантом: половину благодарности за пресловутые очереди на границе и прочую суматоху, принёсшую сотням тысяч соотечественников чудовищный материальный и моральный вред, по праву стоит испытывать к этим лицам. Думаю, своего битья палками они дождутся быстрее, чем кажется: не только соловьёвым отдуваться горящими виллами за всех, компашка общая.

5. Уже кидал выше ссылку на наиболее рациональный текущий обзор событий: серию "Информационный бюллетень" Д.Е. Галковского.

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

Будьте здоровы!

#politics
Вкратце про платформы для блоггинга (и "разложение правды")

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

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

Вот, скажем, на YouTube и в Google всё ещё можно как-то получить упорядоченную по времени выборку конкретных источников, хоть и надо постараться. А ни в Facebook, ни в Twitter это сделать невозможно. Телеграм испорчен лишь на половину: в настольном клиенте поиск норм, в мобильном сломан.

Умники из цистерн не одну сотню тысяч баксов распилили, рассуждая на тему увядания правды ("decay of truth"). Посвящаю эту идею их биению головой об рельсу: правда не в особых "правдивых источниках", а в хорошо организованных базах данных.

Минимально приемлемый уровень организации, препятствующий увяданию: полнотекстовый поиск + хронологическая выборка + фильтр по авторам/источникам.

#philosophy
Вкратце про неопозитивизм

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

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

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

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

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

Другая проблема – это подмена "сенсорного опыта" набором некоторых примитивных алгоритмов обработки данных (буквально десятка-другого известных статистических операций) и ещё более примитивных алгоритмов сбора данных. Особенно наглядно это видно на примере психотерапии, где академические исследования дошли уже до того, что прямо постулируют невозможность с помощью прямого наблюдения определить состояние клиента (пациента) и его изменение по ходу сессий (или между ними). Ну и где здесь фирменный неопозитивистский сенсорный опыт?

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

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

А психологи нет – у них и в учебном плане предмет research methods предполагает лишь изучение ограниченного набора методов статистической обработки данных – в первую очередь данных заполненных анкет. Риторический вопрос, зачем вообще нужен практический психолог, которому не интересно смотреть на людей?

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

#philosophy
Вкратце про Твиттер

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

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

Из такого парадокса следует, что исходная посылка о независимости соцсетей была неверная; значит надо как-то им с этим помочь, улучшить.

Думаю, такому улучшению сильно бы способствовала деколонизация США на 50 независимых государств, каждое со своими взглядами на предписываемый, разрешённый и запрещённый образ мышления и действия, каждое из которых панамериканским интернет-площадкам приходилось бы обслуживать на свой манер. Так, научившись на своём опыте и родной публике, они бы может стали бы готовы выйти и на общемировой рынок.

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

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

Давеча меня упрекнули, что я не достаточно точно оперирую философской терминологией – наверное, теперь что-нибудь придумают по поводу употребления юридических терминов. Господа, я по первому образованию программист, а по второму психолог-консультант, а как известно и те, и другие спорят за звание людей, которые лучше всех знают что всем надо думать и делать, при этом вовсе не ощущая необходимость углубляться в технические подробности второстепенных дисциплин. "Моё дело стратегия". Дальше вы сами мысли как-нибудь додумывайте. Если покажется интересным, можно подхватить и развить и в серьёзном ключе; а нет, так в любом случае некоторое интеллектуальное удовольствие, могу надеяться, получите, ухватив возможно не вполне точно сформулированную идею.

#philosophy
Операционализация философии

Давеча хотел высказать мысль, что 21-й век точно также станет веком операционализации философии, как 20-й стал веком операционализации информатики.

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

Но тут скинули прекрасную ссылку на бесконечный диалог двух философов, генерируемый ИИ: https://infiniteconversation.com/

Некоторое время назад скидывали в комментариях ссылку на того самого Жижека, вот мол современный философ, важные проблемы поднимает, дискутирует. Ну вот пусть и дискутируют бесконечно без повторов, прекрасно же. Хорошо бы тот же Яндекс выпустил программу-диалогера Ленина.

#philosophy
Антирейтинг редакторов Markdown

1. Slack. Пользуясь их интерфейсом ты каждый раз представляешь, как разработчики держали в голове образ тупого менджера (скорее всего, какого-то конкретного человека среди своих инвесторов), который тем лучше себя чувствует, чем меньше видит пунктов в списке каналов и адресатов, равно кнопочек в окне редактирования. Абсолютный лидер по нелепым компромиссам интерфейса в целом и убогости markdown-редактора в частности.

2. Jira. Редактор худо-бедно работает и содержит, вроде бы, все необходимые функции, но примерно в половине случаев как-то подленько вставляет тебе палки в колёса. Отдельно, отсутствие простого и примитивного lock-а при совместном редактировании текста тикета на фоне общей всеобъятной монструозности продукта иначе как специальным издевательством сложно объяснить.

3. Telegram. Продукт, конечно, перерос сам себя, и видно что он это понимает по факту создания Telegraph. То, что функции Telegraph не интегрировали в основное приложение, а вынесли куда подальше, чтобы ими пользовалось как можно меньше людей (но формальный повод для упрёка становился при том менее обоснованным), показывает, что команда разработки с чего-то твёрдо уверена, что деньги будут делать не писатели интеллектуальных пабликов, а твиттерная масса черни с постами "вот моя новая тачка", "Байден оговорился" и "биткоин снова упал ниже $100500". На фоне развития всех этих Sponsor-ов, Boosty-ей и Patreon-ов это выглядит как "не надо денег", что, впрочем, не удивительно для организации, руководимой человеком, потратившим $150k на покупку паспорта мусорного оффшора.

К другой стороне рейтинга: самый лучший редактор Markdown, к которому даже при желании едва ли найдёшь по какому поводу придраться, конечно, в Obsidian.

#programming
Вкратце, чем бы по-хорошему заняться современным философам

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

Древние греки путём вдумчивых рассуждений как-то ухитрились додуматься до атомов, сил взаимного притяжения и отталкивания, жидкой мантии Земли, концепции пределов и др. В наше время всё это проработано гораздо более последовательно и технично в физике и математике (на фоне которых рассуждения греков выглядят, конечно, наивно – но тем более, с другой стороны, интересно как они дошли до столь впечатляющих результатов). По поводу того, что такое "душа" (если угодно, "психика"), однако, ушли не далеко.

В нейроисследованиях хоть и формально, исследуя то же "сознание" (абстрактный/виртуальный феномен), материальные его проявления называют "коррелятами". Фактически всё равно мечтают свести сознание к сумме, пусть и достаточно большой, взаимосвязанных материальных проявлений мозга. Вроде как сейчас мы не можем всецело объять феномен сознания лишь потому что нейрончиков много, но когда-нибудь вот все пересчитаем, оцифруем, и всё поймём. Спойлер: сего не будет.

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

Это, конечно, дело хорошее, но сейчас этого мало. Нужно ТЗ и ГОСТ на философское мышление, чтобы если уж не каждая кухарка, то по крайней мере каждый человек с высшим образованием мог сесть, прочитать пару методичек, поупражняться достаточное время и додуматься до чего-нибудь интересного и нового в своей области. Как греки до атомов, паровых машин и системы права. Пускай до чего-то поменьше, частного, в своих рамках.

Философы, конечно, сидят посмеиваются над такими рассуждениями: думают, кому надо изучит и латынь, и древнегреческий, и сам додумается, ха-ха. А кто-то будет сидеть и со словарём переводить каждое слово 20 лет, хи-хи. А кому не зайдёт читать, так профаном и останется, хо-хо.

Хорошо устроились, конечно. Причём на напрашивающуюся реплику, мол, да вы же работать не хотите просто по специальности и придумываете опрадвания, только раздувающие чувства собственной гордости! – тоже заготовлен ответ. Философия (читай – философы) сами решают чем им заниматься, такие люди такая вот наука.

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

Не хотите, дело ваше.

#philosophy
Вкратце о демагогии "когнитивных искажений"

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

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

Как и известные списки так называемых когнитивных искажений (на данный момент там уже сотни элементов), в списках "запрещённых (кстати, кем?) пропагандистских приёмов" используется подход "сломанного разума" – человеческий ум изначально несовершенный, и чтобы его исправить надо постоянно пенять на конкретные мелкие ошибки.

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

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

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

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

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

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

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

А зачем нужно-то это такое оруэловское издевательство над собой?

#psychology