Лаборатория Математики и Программирования Сергея Бобровского – Telegram
Лаборатория Математики и Программирования Сергея Бобровского
1.3K subscribers
1.19K photos
24 videos
933 links
ЛаМПовое с Бобровским
Download Telegram
Интересное исследование Microsoft Research "What is it like to program with artificial intelligence?"

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

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

Думаю, что в итоге с массовым распространением подобных AI-ассистентов, когда обещается, что "до 40% кода AI напишет за вас всего за 10 долларов в месяц", и без того невысокий средний уровень программистов вообще пробьёт дно, потому что можно будет вообще не думать.
Ричард Фейнман говорил, что учить надо не "что делать", а "как делать". В университетах этому принципу кое-как ещё пытаются следовать, а на онлайн-курсах, конечно, повсеместно уже давным-давно учат только "что делать". В результате сегодня многие компании в резюме кандидатов и не смотрят, и даже тема хорошего гитхаба, хорошие ссылочки на сайд-проекты в резюме, актуальная буквально пару лет назад, сегодня тоже быстро схлопывается, потому что у 98% на гитхабе одни и те же "прикладные практические проэкты", сделанные под копирку по шаблонам известных онлайн-школ, которые (шаблоны) не меняются годами.

Это кстати в некотором смысле хорошо, и вот почему.

"что делать" -- это фактически тупое обучение на примерах нейросетки в вашей голове. Если хардвер вашего ума от природы мощный (повезло/карма), то пройдя например мой курс обучения программированию с нуля, где вы грузите в свой ум, в свою условную GPT-3, текст теории + решаете сотни задачек + потом разбираете эталонные примеры, вы научитесь достаточно успешно решать задачки соответствующей мощности автоматически. У вас в уме появился Copilot 1-го левела, а так как обученные модельки ресурсы/энергию почти не потребляют, то и решать соответствующие задачки вам удаётся легко.

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

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

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

"Just unbelievable. Can you imagine being his mum?
So we're hoping to meet him soon ... to recruit him."

Ну, просто никогда не надо недооценивать человеческую изобретательность.
Инверсия зависимостей из SOLID рекламируется массам якобы в целях устранения зависимостей: вместо того, чтобы A статически связывал/вызывал модуль B, программа передаёт A ссылку на B во время выполнения. Но A всё равно откажет, если откажет B. Ну и?

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

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

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

Diagrams -- DSL для векторной графики, написанный на хаскеле.
Интересно, вам рассказывали в университете на информатике (если вам вообще повезло там учиться :) про "N-version programming" из 1970-х?

Тогда эта идея была модной: если 5 человек пишут одну и ту же программу, то вероятность, что во всех их версиях кода будут одни и те же ошибки, исчезающе мала, верно? Мы берём, конечно, профессиональных разработчиков; так то у меня на курсе с нуля 98% начинающих делают одни и те же ошибки :)

Таким образом, вы можете попросить 5 человек реализовать одну и ту же (очень подробную) важную спецификацию (например, для управления АЭС), и пусть сами программы голосуют, что им делать на каждом своём шаге выполнения; до тех пор, пока три человека не сделают одинаковых ошибок в спецификации (что крайне маловероятно), программа всегда будет работать в соответствии со спецификацией, верно?

Увы нет; это классический когнитивный баг, незнание механизмов статистики, которые часто выдают совершенно неочевидные результаты.

Вот эмпирическое опровержение данной методики:
ieeexplore.ieee.org/document/6312924

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

Это значит, что нужно быть очень осторожным, когда вы разрабатываете инструменты (особенно для критических инфраструктур) и предлагаете их для использования. К сожалению, современная ИТ-сфера, основанная прежде всего на бабле, а не на интересах общества, совсем не "осторожна" в этом плане.
Пришёл спам пригласительное письмо от Мэрии Москвы (рассылается, понято, всем, кто зарегистрирован на mos.ru) с приглашением проголосовать на выборах онлайн. Однако когда туда заходишь, выдаётся вот такое.
Это классический пример кривой ИТ-архитектуры на топовых уровнях управления.

Во-первых, ну хотелось бы просто понять: "список для электронного голосования" -- что ты такое? ))) Это список Лиспа, или это бумажный список, или это список семейств гомотопических групп сфер?

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

Подробно разбираю эти моменты в СильныхИдеях в материале "Как правильно проектировать систему в парадигме состояний".

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

P.P.S. Между прочим, в Молдавии на днях уволили министра, по-моему, природных ресурсов за то, что она не запустила в срок сайт по сбору дров :)
Программисты-зумеры обожают гоняться за новыми модными технологиями вроде Tailwind или Svelte, вместо того, чтобы изучать фундаментальные темы computer science -- например, React.

(это был сарказм, а то, боюсь, и 98% уже не поймут такой юмор....)
Провожу серьёзнейшее научное исследование, проголосуйте пожалуйста.
Каким было наиболее значительное изобретение в истории человечества?
Anonymous Poll
26%
Огонь
9%
Сельское хозяйство
55%
Письменность
11%
NFTs
Вторая часть серьёзнейшего научного исследования, проголосуйте пожалуйста!
Какое из этих изобретений было самым значимым, самым трансформирующим, наиболее сильно изменившим историю человечества?
Anonymous Poll
5%
Смарт-контракты
5%
Web3
84%
Сельское хозяйство`
6%
Метаверсум
Короче говоря, по первому из опросов аналогичному американцы ответили 70% (!) "сельское хозяйство", а мои подпищеки - 55% "письменность" и 25% "огонь". Разница налицо :)

Ну, с днём Программиста!
Дорогие мои, не представляю, честно, как живя в msk/spb не найти себе нормальную работу программистом на 150-200k, если у вас хотя бы пара лет опыта. Ну это детский сад штаны на лямках.
Некоторые у меня вообще почти с нуля устраивались джунами на 80-90т.

"Мы уточнили у первого вице-президента по технологиям МТС Павла Воронина, как у них обстоят дела с набором айтишников. До конца года компания планирует набрать еще пять тысяч спецов, в частности интересуют разработчики Java, .net, JS, Python, Golang. Кроме них, особой востребованностью пользуются DevOps-инженеры и специалисты по Data Science.
По плану компании, увеличение штата разработчиков позволит МТС увеличить количество команд, создающих новые технологические продукты на основе Big Data, ИИ, облачной инфраструктуры и стриминговых сервисов."

В двух километрах от меня, в 15 минутах от метро Ховрино, формально за МКАДом в Химках снять приличную двушку 40 кв. м. - 40т, а за 60т можно и 70 кв м без проблем найти.
10 минут на метро, и на Водном уже куча ИТ-контор - банковские, касперский и дофита других, которым нужны многие тыщи разработчиков.
Переезжаете всей семьёй, и маму не забудьте :)

P.S. Только не забывайте, что подобный ажиотаж с набором отнюдь не вечен. Будете тянуть — потом локти закусаете )
О боже
promptbase.com/marketplace
Куда катится мир? :)

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

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

Допустим, с помощью AI мы достигли бесконечной скорости разработки программного продукта. Но такой продукт никому не будет нужен: пользователи окажутся заваленными кучей фич, быстро запутаются и сдадутся. Бесконечная скорость разработки будет бесконечно плохой!
Смешное: "Аллоды Онлайн" оказывается всё ещё неплохо живут. Вот свежая вакансия.

Надо "отлично знать" Java 7 )))

Так понимаю, что из-за того что Blizzard ушла, теперь в рамках импортозамещения развёртываем свои серверы (подписочные и др.), и народ из WoW к ним ломанулся.
Хорошая метрика командной производительности -- скорость, с которой выполняется code review. Типа, отправили вы свой код в локальный мастер, и ждёте пару дней, когда его ближайший свободный сеньор обозрит :)

Если в вашей команде вообще не ведутся никакие метрики, рекомендую начать именно с этой.

Если, конечно, процесс проведения инспекций кода у вас хоть как-то организован; если же нет, тогда с вами пока вообще не о чем говорить, это даже не детский сад, а ИТ-ясли :)
В web3 сегодня работает много 17-летних, 16-летних, 14-летних! Именно работающих - зарабатывающих деньги, и создающих потрясающие проекты (более подробно буду рассказывать об этом тут).

Когда моему сыну было 14, он в основном упарывался в HoMM и LoL и ходил в WoW на больших боссов.

Я очень надеюсь на следующие поколения. Это будет потрясающе. Они создадут (уже создают!) полностью другой цифровой мир, очень стильный и совершено не похожий на все эти унылые "современные" программные продукты, разработанные бумерами в скучных гигантских корпорациях.
Нравится вам это или нет, но рост JavaScript уже не остановить. Сейчас он захватил более 50% кода на GitHub. Он как сорняк заполнил фактически каждую нишу в экосистеме. Он слишком "подходит" для чего угодно.

Фронтенд? node.js
Бэкенд? node.js

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

P.S. Учите, короче, обязательно js и ноду, увы :)
А кто хочет стратегически развиваться, старайтесь по возможности вместо js применять TypeScript.