Лаборатория Математики и Программирования Сергея Бобровского – Telegram
Лаборатория Математики и Программирования Сергея Бобровского
1.29K subscribers
1.19K photos
24 videos
930 links
ЛаМПовое с Бобровским
Download Telegram
Вы только посмотрите на это:
https://incredible.pm/
Шикарный тренажёр для прокачки в различных видах логик и формальных исчислений.
Вообще, для программистов, привыкших фигачить киберпанки, опердни или распознавалки котиков, главная засада в изучении математической логики, что там нету вообще никакого содержания :) одни абстракции. Но, нельзя стать сильным проектировщиком, цепляясь лишь за семантику и "мысля в онтологии заказчика".
Carrot Weather прикольная прога прогноза погоды, стоит 5 евро; осенью 2020-го ежемесячно продавалась на 100++ тысяч евро.
Смешные комменты выдаёт AI, даже сюжет есть (города как локации разблокировывать), и вообще у Мюллера (аффтор проги) все приложения в таком стиле. Например, есть список дел Carrot ToDo, который жостко прям мотивирует, обзывая ленивой свиньёй :)

Да, Мюллер шёл к успеху постепенно, семь лет, но -- это ровно та схема, которая работает и в случае личного блога и гитхаба, к чему я всех призываю.

Просто делай, долби и долби годами в одном направлении. И однажды ЭТО случится :)

Нету вообще никакой конкуренции в ИТ, и то что миллионы программ и игр в мобильных маркетах, тоже вообще ничего не значит, потому что 99.999% из них случайный шлак и отстой. Никакая это не ошибка выжившего -- просто надо долго нормально делать, и нормально будет.
👍1
Наконец-то засилью Unity3D подходит конец :) Движок Godot развивается опережающими темпами, причём он поддерживает как C#/Mono, так и свой скрипт-язык, почти идентичный Питону.
И вот новость, что Кефир (авторы Тюряги) выделили годоту грант на 120,000 долларов! респект пацанам.
https://godotengine.org/article/godot-engine-receives-120000-grant-from-kefir
Подводим итоги 2020-го. Что было потенциально самого крутого для ИТ?
Абсолютный топчик -- это доказательство MIP* = RE
https://habr.com/ru/company/ruvds/blog/492502/
В результате уже в этом десятилетии начнётся космический взлёт компьютерных систем формального доказательства.
Речь о том, что а как верифицировать решение, полученное например квантовыми компьютерами? А вдруг они ошиблись?
Есть класс сложности задач MIP (multi-proven interactive proofs), в который в частности входит множество задач класса NP, однако и у него оказались явные границы. Тогда на помощь позвали квантовых физиков, которые намешали своих теорий, получился класс сложности MIP* (MIP + квантовая запутанность), и внезапно выяснилось, что в MIP* попадает большой класс рекурсивно перечислимых задач RE.
А RE -- это задачи вообще невероятной сложности. Реализовывать их по прежнему сложно, но верифицировать будет легко.
От крутого карьерного консультанта утянул очень полезную, довольно очевидную, но при этом редко применяемую фичу «как постоянно оставаться в трендах мэйнстрима». В принципе, я её рекомендовал не раз в каком-то виде, но вот тут чётко сформулированную услышал.

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

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

А ещё лучше, запилить парсер 2-3 ресурсов по работе, и чтобы он выдавал вам наглядную аналитическую инфографику :)
Второе крутое открытие в математике 2020 -- это решение аспиранткой Лизой Пиччирилло проблемы "узел Конвея" (есть ли он на самом деле кусочек узла более высокого измерения). Этот узел оставался последним нерешённым из множества тысяч узлов с <= 12 пересечениями.
https://habr.com/ru/company/skillfactory/blog/504068/
Оказалось, что он -- нет, не срез :)
"Это очень, очень странные предметы, которые вроде как существуют с помощью магии"

Да, я вообще рекомендую периодически решать задачки из теории узлов, в принципе, там много математики можно опустить, и подчас действительно крайне странные трансформации, топологические преобразования применяются. Ум учится отлично распутывать сложные зависимости и связности, которые в любой программной системе сегодня данность. Вот этот навык абстрактного топологического запутывания/распутывания, нахождения инвариантов, хорошо ложится в частности на прозаически запутанный код.
Наконец, третье крутое, даже не событие в 2020-м, а некоторый стремительно развивающийся и уже официально признанный тренд в математике – это активное явление AI в области формальных доказательств. Прошло всего десять лет с формулирования гениальным Владимиром Воеводским унивалентных оснований математики, и вот уже обещается, что в этом году за золотую медаль на Всемирной Математической Олимпиаде будет сражаться AI, использующий пруф-ассистант Lean.

https://leanprover.github.io/

Ну и, понятно, до массовой экспансии AI в профессию программиста остались считанные годы :)

https://www.quantamagazine.org/at-the-international-mathematical-olympiad-artificial-intelligence-prepares-to-go-for-the-gold-20200921/
Ну что, программисты, вы больше не нужны? :)
https://doesnotexist.codes/
А вот потому что учиться надо правильным вещам =>
https://лялямбда.рус
Эксперты-математики (топовые криптографы) в своей полузакрытой тусовке предсказали три года назад, когда случился обвал крипты, что к 2021-му рынок всех криптовалют вместе взятых достигнет 1 триллион долларов , ну и вот:
https://www.coindesk.com/cryptocurrency-market-value-record-1-trillion
Хотя конечно оценить этот рынок точно весьма трудно, и тут есть много нюансов, но общий тренд очевиден. Инфляция случается в ИТ абсолютно везде: обесцениваются все вычислительные ресурсы, и процессоры, и накопители, и оперативка.

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

Так вот, те же криптографы, среди которых, в силу профессии, немало конспирологов :) , также прогнозировали, что 9 января 2021-го с битком что-то должно произойти (это годовщина genesis-блока). Ну и вот, его цена чётко в этот единственный день впервые скакнула за $40k, после чего временю снова уехала вниз. Три года назад также было с психологическим рубежом $20k, из чего делается вывод, что этим рынком таки манипулируют -- банки, правительства и олигархи.

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

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

Так вот, палю фишку, что крипта, по прогнозам реальных экспертов, обязательно станет ценной как золото и больше, не ранее чем через 5-10 лет.

И, самое главное, что с большой вероятностью топовой криптовалютой станет отнюдь не биток, а что-то созданное одним из пяти ИТ-гигантов (Гугл, Микрософт, Фейсбук...), которые сделают серьёзный продукт и мощно вложатся в его маркетинг.

Стратегически, что-то подобное произойдёт точно. Крипта преодолеет рубеж 3 триллиона долларов лет через 10, а золото продолжит слабеть и размываться. В конечном итоге, цифровая валюта точно выиграет -- но какая конкретно, пока неведомо.

Не подумайте только, что я призываю что-то инвестировать в крипту, или, ещё хуже, майнить :) не-не!
Рассказал про это исключительно в контексте того, что криптовалюта -- крайне интересное направление для программистов, напрямую связанное с деньгами, огромные обороты потенциально, а рынок пока почти пуст, как и везде в ИТ, впрочем, если действительно нормально делать. Конечно, "многие стартапы пытаются...", но как в 99% случаев, крайне криво и неумело.

А тем временем сегодня например Ethereum Виталика Бутерина пробил свой рекорд 2,08 тыс. долл.

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

Будь как Виталик! :)
Когда несколько лет назад в Пакистане решили создавать свой истребитель (пятого поколения!), в качестве базового языка программирования был выбран С++. В частности, потому, что в стране этому языку массово обучали практически все университеты и колледжи, и там насчитывались буквально десятки тысяч молодых ребят, знающих этот язык.
Ну а где плюсы, почти там же и сишечка, на которой активно пишется софт непосредственно для "железа", и опыт в программной инженерии накоплен огромный.

Кстати, есть довольно распространённое мнение, что бортовой софт F-35 написан на С++ (F-22 точно программировался на Ada), но, знающие люди утверждают, что на таком заоблачном уровне сложности кодировать вручную на плюсах обходится уж слишком дорого. Скорее всего, используются какие-нибудь закрытые lowcode-пакеты, генерирующие код на Си/C++, а также расширения для MATLAB (Coder), Simulink и т. д.

При этом практически не применяются опенсорсные решения (Not-Invented-Here), потому что непонятно качество и безопасность, никаких виртуальных машин (лишние накладные расходы), ну и например для самых ключевых модулей и систем в NASA (спутники, роверы-планетоходы) много кода пишется по-прежнему на ассемблере. В результате в NASA очень топят за повторное использование кода, так как он очень тщательно проверяется и получается в итоге очень дорогим, но минус такого подхода, что приходится долго использовать устаревшее оборудование. И это кстати одна из причин, почему SpaceX смог так внезапно впрыгнуть в космическую индустрию -- у них не было огромного организационно-технического легаси-наследия.
Восемь контринтуитивных трендов нынешней ситуации на рынке труда программистов. Спойлер: если вы читаете этот пост и любите и умеете программировать, то вам реально очень повезло в этой жизни.

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

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

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

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

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

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

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

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

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

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

Резюме такое, что если вам очень нравится программировать, а работа в офисе за хорошую зарплату не вызывает особого дискомфорта, то вам совершенно реально жутко повезло в жизни. Потому что идущие за вами следом скорее всего уже никогда не будут ценить эти вещи :) и за десяток лет возникнет огромная пропасть -- количество программистов, готовых реально трудиться, да ещё и подолгу и на одном месте, будет сокращаться с космической скоростью, и вы на этом фоне получите огромные конкурентные преимущества (которыми, конечно, ещё надо суметь правильно распорядиться), если например будете усиленно развиваться, да ещё и в одной организации. Хотя и больше 3-5 лет я тоже не рекомендую засиживаться нигде вообще, если зп не сильно выше среднерыночной.
Очередная мощная идея из математики -- схемы Гротендика, открытые им 60 лет назад, и связавшие сразу несколько крупных областей математики в одно целое (алгебраическую геометрию) -- добирается до мира ИТ.
https://arxiv.org/pdf/2104.09366.pdf
Оказалось в частности, что с их помощью можно разработать более простую теорию типов, которая будет не менее сильная, нежели зависимые типы, активно применяющиеся в пруф-ассистантах вроде Lean и Coq.
В работе показано, как аналогичную по мощности систему можно реализовать в Isabelle через т.н. локали (по сути, предикаты), из которых можно строить иерархии.
За этими всеми темками -- ближайшее будущее программирования!
Знание и умение применять теорию типов уже сегодня обязательно для любого уважающего себя программиста.

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

https://www.youtube.com/watch?v=7PYhY8eXkoo
Сегодня популярные онлайновые платформы поддержки программирования уже столь круты, что сами по себе представляют фактически готовые, простые и очень удобные движки для создания полноценного многомиллионного ИТ-бизнеса. Это так называемый PaaS -- платформа как сервис. Не надо заморачиваться арендой виртуальных серверов, их суппортом, деплоем нужных пакетов, администрированием...

Например, 20-летний пацанчик Soren из Сиэтла создал трейдинговый сервис blubbr.io (the global leader in real-time automated notifications for key events in the lifecycle of every SPAC....), который ежемесячно зарабатывает тысячу долларов, а разработал и задеплоил он его вообще без инвестиций, на популярном бесплатном сервисе для разработчиков https://replit.com/
Причём пилил он blubbr вообще как сторонний проект, в свободное время (Soren ещё учится и работает в финтехе).
https://blog.replit.com/blubbr

You have to code locally, push your code to the cloud, create a database, test your strategy, and then finally deploy to Google Cloud or Heroku. This process always takes weeks. With Replit, we had completed all of this in four days. The part of the development process for me that was simplified the most was deployment. This is because Replit deployment consists of two buttons: “always-on” and “run”.
Что серьёзному программисту полезно почитать на тему, как думать о сложных системах рационально и как решать программистские задачки по-научному -- учимся у математиков.

-- "Доказательства и опровержения" Имре Лакатос. Элегантно и увлекательно рассказывается о математической логике;
-- "Как научиться решать задачи" Фридман, Турецкий. Была рекомендована в СССР даже учащимся ПТУ :)
-- "Как решать задачу, когда не знаешь как" Кашуба -- совсем простенькая в методологическом плане, но была рекомендована в кружке мехмата МГУ например;
-- "Как решают нестандартные задачи" Канель-Белов, Ковальджи. Разбор решений нестандартных олимпиадных задач;
-- конечно, Пойя "Как решать задачу", "Математика и правдоподобные рассуждения".

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

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

VS её например давным давно меряет, для питончика есть Radon, для Java во все еёные IDE тоже сколько лет метрика McCabe встроена, да и калькуляторов полно, вот например эталонно написан:
https://github.com/rodhilton/jasome/blob/master/src/main/java/org/jasome/metrics/calculators/CyclomaticComplexityCalculator.java

Ну и вторая фишка, очень рекомендованная к применению совместно с первой: использовать только иммутабельные типы данных.
Системный разбор Анатолием Георгиевичем Кушниренко темки "Программирование для математиков, 35 лет спустя" (там же ссылочка на видео) -- про школьную информатику и, соответственно, про массовое обучение программированию всех желающих.
https://ailev.livejournal.com/1568319.html
"Не опустить университетский курс в среднюю школу, а поднять курс для дошкольников в начальную школу -- и навыки в объёме ОГЭ по информатике закрыть уже в начальной школе. И этот второй заход оказался успешным!.."

Добавлю, что в любой науке ровно столько науки, сколько в ней математики, а в любой математике ровно столько математики, сколько в ней вычислимости. Но чтобы правильно думать об этой вычислимости (не путая вычислительную сложность с дескриптивной сложностью), надо прежде всего учиться задавать вычислительную семантику.
Многие люди, кодящие даже на "современном" C++20, оказывается, не знают, что там давным давно есть завтипчики:
https://en.cppreference.com/w/cpp/language/dependent_name
С С++11 или C++14 вроде началось, если не раньше.
Темплейты в плюсах тьюринг-полные, и генерики из других языков до их мощи не дотягивают. Отличие от классических dependent types в том, что некоторое значение (параметр типа) тут должно быть в конечном итоге реально вычислено (конкретная чиселка нужна), чтобы это всё заработало, а полноценные языки с завтипами (в Idris или Agda например) подразумевают возможность формальных алгебраических "вычислений" на уровне исходных текстов.
Для улучшения понимания зависимых типов порекомендую прежде всего почитать про параметрический полиморфизм, как именно он поддерживается в языке программирования, на котором вы в основном кодите, а главное, поразбирать конкретные примеры такого полиморфизма.
Я довольно часто говорю занимающимся о двух вечных болях в программировании, готового решения "из коробки" для которых не существует в силу их природы. Это

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

2) дата/время таймзоны -- например, на сервере в классе Enterprise задаётся локальная таймзона, но у клиента в браузере своя локальная таймзона, и он вдобавок хочет произвольно менять таймзоны и при этом смотреть все отчёты с точностью до минуты в "своей" таймзоне (не забывая при этом переходы на весеннее и зимнее время...).

Однако есть ещё как минимум три боли, к которым каждому программисту желательно хорошо подготовиться.

3) regexp -- регулярные выражения. Как говорится, джуниор посмотрел на проблему, задействовал регэкспы для её решения, и теперь у него стало две проблемы :)

Регулярки -- сильная, но очень опасная штука, в частности потому, что отлаживать её практически нереально. Нафигачил паттерн, потестил, ну вроде работает. А потом такое началось!

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

4) CORS, XSS и CSRF -- механизмы атак и защит в браузерах, с которыми необходимо как следует промучиться не только каждому фронтендеру, но и бэкендеру прежде всего.

5) состояния/stateful и мутабельность -- ну это даже не конкретная боль, а просто неотъемлемое от любой программистской работы в мэйнстриме свойство быстрого запутывания кода и быстрого роста ошибок, прямо пропорциональное количеству используемых в коде переменных, значения (состояние) которых меняются в процессе работы программы. Бороться с этим надо, соответственно, stateless-ом и иммутабельностью -- правильным применением практик декларативного (в частности, функционального) программирования.