Тут незаметно подъехала свежая статистика по разработчикам от Stackoverflow. Каждый год я думаю о том, что надо бы принять участие в опросе, и каждый год пропускаю его. Судя по всему, его не рекламируют по почте, не присылают никаких уведомлений, не продвигают. В итоге мы получаем абсурдную картину, когда в статистике по странам разработчики из России представлены на одном уровне с Нигерией. Хотя понятно, что айти сектор в России очень развит и влияет на глобальные процессы (взять тот же Kotlin).
Так что, на эту статистику стоит смотреть, как на данные по США и чуть-чуть Германии. Ещё довольно высоко стоит Индия, но мы-то знаем :)
Ладно. Принципиально нового по сравнению с предыдущими годами почти нет. Три года назад я делал анализ графиков, чтобы дать ответ на вопрос: «Какой язык программирования учить?». С тех пор общие тренды остались плюс-минус такими же: вся [американская] разработка до сих пор сидит на Винде и пишет на JavaScript,потому что нет выхода, много использует проприетарщины и коммерческих облаков от монополистов.
В статистике Web-фреймворков React вдвое популярнее у разработчиков, чем jQuery, хотя, вроде как, 73% сайтов до сих пор на jQuery. Вывод понятен: значительная часть этих сайтов в сети не поддерживается, никакой активной разработки по ним нет. Это, кстати, важная причина, по которой не стоит использовать аргументы вроде: «На PHP до сих пор весь интернет, поэтому язык востребован».
Стоит отметить, что среди профессионалов наконец C# стал самым популярным языком с нормальной системой типов, если не считать TypeScript. Позиции Java уверенно падают который год. А ASPNET Core самый популярный Web-фреймворк с нормальной системой типов (но так было и раньше, даже три года назад).
Остальное ожидаемо: PostgreSQL, Docker, VS Code в топах по использованию.
Ну, и большая секция про ИИ. Почти все используют LLM, но почти все просто общаются в чатах, а не применяют какой-нибудь агентный режим. 66% опрошенных сказали, что в ИИ их фрустрирует приближенность ответа к правильному, но всё-таки не до конца («AI solutions that are almost right, but not quite»). И почти половина отмечает, что дебаг нейросетевого кода отнимает больше времени. Хотя тут, мне кажется, эффект в том, что дольше дебажить код, который писал не ты, и не важно, ИИ там или другой разработчик.
Я кстати и сам после первых восторгов от Cursor немного поубавил свой пыл: реально большой проект на C# он не умеет правильно читать и понимает происходящее там довольно посредственно. DeepSeek, ChatGPT, Claude Sonnet — за всеми нужно внимательно следить и править их ошибки, ловить галлюцинации, не позволять творить дичь. Я бы сказал, что в моей рабочей практике ИИ это просто очень быстрый поиск и агрегация материала по тому, как что-то сделать. Но делать нужно самому.
#dev
Так что, на эту статистику стоит смотреть, как на данные по США и чуть-чуть Германии. Ещё довольно высоко стоит Индия, но мы-то знаем :)
Ладно. Принципиально нового по сравнению с предыдущими годами почти нет. Три года назад я делал анализ графиков, чтобы дать ответ на вопрос: «Какой язык программирования учить?». С тех пор общие тренды остались плюс-минус такими же: вся [американская] разработка до сих пор сидит на Винде и пишет на JavaScript,
В статистике Web-фреймворков React вдвое популярнее у разработчиков, чем jQuery, хотя, вроде как, 73% сайтов до сих пор на jQuery. Вывод понятен: значительная часть этих сайтов в сети не поддерживается, никакой активной разработки по ним нет. Это, кстати, важная причина, по которой не стоит использовать аргументы вроде: «На PHP до сих пор весь интернет, поэтому язык востребован».
Стоит отметить, что среди профессионалов наконец C# стал самым популярным языком с нормальной системой типов, если не считать TypeScript. Позиции Java уверенно падают который год. А ASPNET Core самый популярный Web-фреймворк с нормальной системой типов (но так было и раньше, даже три года назад).
Остальное ожидаемо: PostgreSQL, Docker, VS Code в топах по использованию.
Ну, и большая секция про ИИ. Почти все используют LLM, но почти все просто общаются в чатах, а не применяют какой-нибудь агентный режим. 66% опрошенных сказали, что в ИИ их фрустрирует приближенность ответа к правильному, но всё-таки не до конца («AI solutions that are almost right, but not quite»). И почти половина отмечает, что дебаг нейросетевого кода отнимает больше времени. Хотя тут, мне кажется, эффект в том, что дольше дебажить код, который писал не ты, и не важно, ИИ там или другой разработчик.
Я кстати и сам после первых восторгов от Cursor немного поубавил свой пыл: реально большой проект на C# он не умеет правильно читать и понимает происходящее там довольно посредственно. DeepSeek, ChatGPT, Claude Sonnet — за всеми нужно внимательно следить и править их ошибки, ловить галлюцинации, не позволять творить дичь. Я бы сказал, что в моей рабочей практике ИИ это просто очень быстрый поиск и агрегация материала по тому, как что-то сделать. Но делать нужно самому.
#dev
❤20👍7
Программисты пока могут не бояться ИИ.
В Росатоме работать с ИИ-агентами было нельзя, а вот тут в 2ГИС это даже поощряется, и компания сама оплачивает нужные доступы и лицензии. Практически любые модели на выбор, чаты, Copilot и так далее. Поэтому я попробовал выполнять прям настоящую энтерпрайзную работу при поддержке ИИ, и вот что скажу.
Во всех рекламах нейросеток говорят о том, как вам эта сетка позволит создать программу по текстовому описанию без разработчиков. Пожалуй, если создавать программу с нуля и аккуратно итеративно описывать требования, это может сработать. Только дело в том, что в реальной разработке мало работы по созданию с нуля и много работы по внедрению фич и исправлению ошибок. А для этого ИИ-агенту нужно, кроме умения хорошо кодить, ещё и знать (и понимать!) предметную область.
И тут начинаются проблемы.
Во-первых, в большинстве компаний предметная область нигде целиком не формализована в виде какого-то текста, который можно было бы передать в контекст. Я бы сказал, что единственный более-менее полный документ, описывающий предметную область программы — исходный код этой программы. И хорошо, если она сделана по какому-нибудь DDD, а если там хаотичные процедуры с высоким зацеплением?
Во-вторых, и это более важно, мы используем свои человеческие навыки и опыт жизни в окружающем мире, чтобы правильно понимать предметную область. Нужно именно что пожить в мире, чтобы понимать, как пить из пресловутого перевёрнутого стакана. И пока моделькам не получается передать всё многообразие человеческого опыта, люди в относительной безопасности. Ну, кроме тех, чья работа это просто кодить без обдумывания.
#dev
В Росатоме работать с ИИ-агентами было нельзя, а вот тут в 2ГИС это даже поощряется, и компания сама оплачивает нужные доступы и лицензии. Практически любые модели на выбор, чаты, Copilot и так далее. Поэтому я попробовал выполнять прям настоящую энтерпрайзную работу при поддержке ИИ, и вот что скажу.
Во всех рекламах нейросеток говорят о том, как вам эта сетка позволит создать программу по текстовому описанию без разработчиков. Пожалуй, если создавать программу с нуля и аккуратно итеративно описывать требования, это может сработать. Только дело в том, что в реальной разработке мало работы по созданию с нуля и много работы по внедрению фич и исправлению ошибок. А для этого ИИ-агенту нужно, кроме умения хорошо кодить, ещё и знать (и понимать!) предметную область.
И тут начинаются проблемы.
Во-первых, в большинстве компаний предметная область нигде целиком не формализована в виде какого-то текста, который можно было бы передать в контекст. Я бы сказал, что единственный более-менее полный документ, описывающий предметную область программы — исходный код этой программы. И хорошо, если она сделана по какому-нибудь DDD, а если там хаотичные процедуры с высоким зацеплением?
Во-вторых, и это более важно, мы используем свои человеческие навыки и опыт жизни в окружающем мире, чтобы правильно понимать предметную область. Нужно именно что пожить в мире, чтобы понимать, как пить из пресловутого перевёрнутого стакана. И пока моделькам не получается передать всё многообразие человеческого опыта, люди в относительной безопасности. Ну, кроме тех, чья работа это просто кодить без обдумывания.
#dev
3❤16🤔9👍8💯4🤓1
Друг делал уборку у себя и обнаружил мою книжку. Двадцать лет у него хранилась. Именно с неё де-факто началось моё изучение программирования. Первые две части про то, как во флэше рисовать, а вот третья — о программировании на ActionScript 2 (тогда ещё), причем очень подробно, с самых основ.
До сих пор считаю убийство Флэша одним из наиболее деструктивных и вредных для человечества действий компании Apple.
Кстати, изучать программирование на движущихся графических объектах было прям очень вдохновляюще. Ничто не давало такую мотивацию, как созерцание того, как тела летают по экрану согласно заданному тобой принципу.
Еще в комплекте с Флэшем был набор демок, и, запуская каждую из них, я думал "Хочу уметь так делать!". Одна из мечт, которые сбылись полностью.
#dev
До сих пор считаю убийство Флэша одним из наиболее деструктивных и вредных для человечества действий компании Apple.
Кстати, изучать программирование на движущихся графических объектах было прям очень вдохновляюще. Ничто не давало такую мотивацию, как созерцание того, как тела летают по экрану согласно заданному тобой принципу.
Еще в комплекте с Флэшем был набор демок, и, запуская каждую из них, я думал "Хочу уметь так делать!". Одна из мечт, которые сбылись полностью.
#dev
❤27🔥11👍3
Выступил на DotNext сегодня, уже второй раз в жизни. Вообще, во времена хайпа ML и нейросетей было любопытно подать доклад, который рассказывает о том, как обойтись БЕЗ нейросетей и сделать всё на привычных алгоритмах. Видимо, не один я устал от ИИ, народу было достаточно, прошло вроде хорошо.
Сходил на четыре других доклада, и, пожалуй, с точки зрения докладов этот год лично для меня один из лучших, потому что два прям очень зашли: увидел то, что хотел по темам, всеобъемлюще, с ответами на возникающие в процессе вопросы. Вообще, нередко авторы боятся показывать совсем азы и тривиальные вещи — возможно, чтобы доклад не казался слишком простым. Но вот мне при введении в любую новую технологию или новый подход часто не хватает как раз основ. Чтоб прям с фундамента разжевали. И тут наконец-то такое было.
А вот со стендами дела похуже, имхо — из известного бигтеха только Озон и Контур. Завтра второй день, пойду подробнее посмотрю, что там. И да, снова сама конференция не предложила никакие тематические наклейки, и непонятно, что клеить на ноутбук :)
#dev
Сходил на четыре других доклада, и, пожалуй, с точки зрения докладов этот год лично для меня один из лучших, потому что два прям очень зашли: увидел то, что хотел по темам, всеобъемлюще, с ответами на возникающие в процессе вопросы. Вообще, нередко авторы боятся показывать совсем азы и тривиальные вещи — возможно, чтобы доклад не казался слишком простым. Но вот мне при введении в любую новую технологию или новый подход часто не хватает как раз основ. Чтоб прям с фундамента разжевали. И тут наконец-то такое было.
А вот со стендами дела похуже, имхо — из известного бигтеха только Озон и Контур. Завтра второй день, пойду подробнее посмотрю, что там. И да, снова сама конференция не предложила никакие тематические наклейки, и непонятно, что клеить на ноутбук :)
#dev
5❤36👍11🔥9🥰1
Несколько лет назад на конференции TechTrain я впервые сыграл в Code in the Dark. Два разработчика параллельно садятся за компьютеры, запускается таймер. Дается картинка, которую нужно сверстать в HTML, но важный нюанс: ты не видишь результат до самого конца, пока не отправишь своё решение. Вёрстка вслепую. Если где-то поехало, можешь вообще всё сломать, но не узнаешь об этом. Мне очень понравилось, но я никак не мог придумать, как бы подобное соревнование выглядело для бэкенд-разработчиков.
А тут вот на стенде Контура была версия как раз для бэкендеров: даётся набор данных, отражающий валидные вводы и выводы для неизвестных юнит-тестов, и нужно закодить функцию, которая пройдёт эти тесты.
Сыграл дважды, один раз догадался о принципе, но не смог реализовать (видеть вывод твоей функции нельзя, вслепую я не учёл важный краевой случай), а второй раз решил с небольшой подсказкой от организаторов. В общем, это как задача с литкода уровня Easy, но саму задачу ты не видишь, только правильные кейсы.
Мне понравилось. Нужно на вечеринках с коллегами играть :)
#dev
А тут вот на стенде Контура была версия как раз для бэкендеров: даётся набор данных, отражающий валидные вводы и выводы для неизвестных юнит-тестов, и нужно закодить функцию, которая пройдёт эти тесты.
Сыграл дважды, один раз догадался о принципе, но не смог реализовать (видеть вывод твоей функции нельзя, вслепую я не учёл важный краевой случай), а второй раз решил с небольшой подсказкой от организаторов. В общем, это как задача с литкода уровня Easy, но саму задачу ты не видишь, только правильные кейсы.
Мне понравилось. Нужно на вечеринках с коллегами играть :)
#dev
❤14🔥8👍3🤔1
Объявили результаты. Из четырёх команд мы оказались на четвёртом месте. Сказать, что это стало мягко говоря удивлением — ничего не сказать. Секрет оказался прост: мы пришли четверо разработчиков делать проект на хакатон, который был назван таковым организаторами по ошибке. А оказался конкурсом бизнес-идей. В общей шкале оценки реализация значила всего 20%. Двадцать процентов. Двухдневная работа заняла одну пятую от общей оценки (презентация делалась за пределами основного времени). Зато более половины уделялось умозрительным критериям, не имеющим никакого отношения к собственно работе, проделанной командами на самом хакатоне: например «Прогнозируемый объём аудитории», «Вирусный эффект» (ага, для B2G продукта вирусный эффект). Как в той картинке, где разных животных, включая рыбу, просят залезть на дерево, кто быстрее.
При цене реализации в 20% можно было вообще ничего не кодить два дня, прийти без проекта, но зато удачно придумать и продать комиссии маркетинговую лапшу. Хакатоны нередко ругают за возможность «выиграть одной презентацией», но в такой критике обычно речь идёт об обмане относительно степени готовности прототипа. Здесь же такие условия были с самого начала заложены в систему.
Даже не знаю, как к этому относиться. Ну типа чуваки просто не донесли, что реализация почти ничего не значит, и стараться не нужно. На мой взгляд это противоречит концепции хакатона, тогда уж стоило просто объявить конкурс идей, у него совсем другие правила игры. С другой стороны, участвовать нас никто не заставлял, проект получился прикольный, делать его было интересно. С третьей стороны, одно из самых сокрушительных поражений в моей жизни.
В ноябре будет уже более масштабный внутренний so-called-хакатон в компании. Не понимаю, хочу ли теперь участвовать или нет. #dev
При цене реализации в 20% можно было вообще ничего не кодить два дня, прийти без проекта, но зато удачно придумать и продать комиссии маркетинговую лапшу. Хакатоны нередко ругают за возможность «выиграть одной презентацией», но в такой критике обычно речь идёт об обмане относительно степени готовности прототипа. Здесь же такие условия были с самого начала заложены в систему.
Даже не знаю, как к этому относиться. Ну типа чуваки просто не донесли, что реализация почти ничего не значит, и стараться не нужно. На мой взгляд это противоречит концепции хакатона, тогда уж стоило просто объявить конкурс идей, у него совсем другие правила игры. С другой стороны, участвовать нас никто не заставлял, проект получился прикольный, делать его было интересно. С третьей стороны, одно из самых сокрушительных поражений в моей жизни.
В ноябре будет уже более масштабный внутренний so-called-хакатон в компании. Не понимаю, хочу ли теперь участвовать или нет. #dev
1🤯31👍7❤6👨💻2🔥1
Самое удивительное в энтерпрайз-разработке — необходимость специально доказывать и аргументировать объективно правильные решения. Представь, приходишь на автомобильный завод, а там выпускают бензобаки с дыркой в центре одной из стенок. Причём, это не особенность конкретного рынка или потребителя, просто исторически так процессы сложились. Ты такой: «Эээ, зачем с дыркой, давайте делать без дырки». Но тебе отвечают, что нужно аргументировать, защитить эту позицию перед бизнесом, ещё и с цифрами. Показать, что затраты ниже, чем профит. А начальник производства тебе ещё и раскладывает: на бензобаки без дырки будет уходить больше металла, так что твоё предложение приведёт к росту расходов. Ещё и у клиентов баки начнут заполняться дольше, негативный опыт.
Ты находишь инженерные книжки с описанием физики сплошных сред: «Вот гляньте что пишут, вот аргументы, вот схемы и формулы». А в ответ слышишь, что книги это идеализация, и в жизни оно всё иначе, нужно реалистично смотреть. Но самое главное: перестраивать линию на отсутствие дырки это прям очень дорого: станки переконфигурировать, персонал обучать, да и наверняка первое время будут косяки, поставки снизятся. Короче если прям не докажешь, что профит от твоего предложения принесёт миллиард за день, то иди нафиг.
Почему в разработке такого много, а на реальных автомобильных заводах всё-таки делают без дырок? Я вижу две причины:
1. Во-первых, когда бензобак еб**ёт, или там самолёт упадёт, это очень заметно. Аварии происходят с шумом, нередко с травмами. А падение какого-нибудь входящего интеграционного потока из-за отсутствия контроля состояния модели — это тихо, без фейерверков. Ну насыпется в лог ошибок, пошёл, руками поправил пару записей в БД, запустил снова.
2. Во-вторых, всё-таки у разработки низкая степень разнообразной конкуренции из-за склонности этой сферы к монополизации (которая обусловлена простотой доставки потребителю). В мире порядка тысячи автопроизводителей, а вот софт одного типа обычно выпускает едва ли десяток компаний. Сколько фирм делают, например, САПР для твердотельного моделирования? Нейросетка мне привела девять. Сколько настоящих конкурентов у какого-нибудь Майкрософт Офиса? Один: гугл документы.
И вроде всё понятно, как оно работает, но не перестаю удивляться. Нужно прям реально убеждать людей, не на инженерном языке, а на языке бизнеса и маркетинга, что дырка в бензобаке это плохо. #dev #life
Ты находишь инженерные книжки с описанием физики сплошных сред: «Вот гляньте что пишут, вот аргументы, вот схемы и формулы». А в ответ слышишь, что книги это идеализация, и в жизни оно всё иначе, нужно реалистично смотреть. Но самое главное: перестраивать линию на отсутствие дырки это прям очень дорого: станки переконфигурировать, персонал обучать, да и наверняка первое время будут косяки, поставки снизятся. Короче если прям не докажешь, что профит от твоего предложения принесёт миллиард за день, то иди нафиг.
Почему в разработке такого много, а на реальных автомобильных заводах всё-таки делают без дырок? Я вижу две причины:
1. Во-первых, когда бензобак еб**ёт, или там самолёт упадёт, это очень заметно. Аварии происходят с шумом, нередко с травмами. А падение какого-нибудь входящего интеграционного потока из-за отсутствия контроля состояния модели — это тихо, без фейерверков. Ну насыпется в лог ошибок, пошёл, руками поправил пару записей в БД, запустил снова.
2. Во-вторых, всё-таки у разработки низкая степень разнообразной конкуренции из-за склонности этой сферы к монополизации (которая обусловлена простотой доставки потребителю). В мире порядка тысячи автопроизводителей, а вот софт одного типа обычно выпускает едва ли десяток компаний. Сколько фирм делают, например, САПР для твердотельного моделирования? Нейросетка мне привела девять. Сколько настоящих конкурентов у какого-нибудь Майкрософт Офиса? Один: гугл документы.
И вроде всё понятно, как оно работает, но не перестаю удивляться. Нужно прям реально убеждать людей, не на инженерном языке, а на языке бизнеса и маркетинга, что дырка в бензобаке это плохо. #dev #life
👍22💯10😢7❤2😁1
У протокола Яндекса по умному дому есть регламент, согласно которому Яндекс периодически запрашивает состояние всех устройств одного пользователя в рамках конкретного провайдера, одним запросом. Провайдеры забивают на поддержку этого метода, и возвращают не всегда корректный ответ, из-за чего про некоторые устройства Яндекс начинает думать, что они отвалились.
В такой ситуации Яндекс делает несколько попыток, а затем присылает пользователю уведомление типа «Датчик такой-то долго не отвечает». Фокус в том, что, если нажать на уведомление, открывается карточка этого устройства, которая запрашивает его состояние уже более целенаправленно: не методом получения всех устройств, а методом запроса по конкретному устройству. На эти методы производители не забивают, и карточка успешно обновляется.
Так вот. Какого хрена в Яндексе не догадались пропускать шаг с уведомлением и просто при неполучении состояния пытаться запрашивать его напрямую? Это же прям очень просто в реализации, экономит запросы на уведомления, не отвлекает юзера, делает систему более надёжной.
Не, ладно, я сам работаю в энтерпрайзе, поэтому знаю, что можно годами ждать исправления даже мелкого косяка, потому что так процессы устроены. Но всё-таки, блин. Прям подбешивает меня, и как пользователя, и как программиста. #dev
В такой ситуации Яндекс делает несколько попыток, а затем присылает пользователю уведомление типа «Датчик такой-то долго не отвечает». Фокус в том, что, если нажать на уведомление, открывается карточка этого устройства, которая запрашивает его состояние уже более целенаправленно: не методом получения всех устройств, а методом запроса по конкретному устройству. На эти методы производители не забивают, и карточка успешно обновляется.
Так вот. Какого хрена в Яндексе не догадались пропускать шаг с уведомлением и просто при неполучении состояния пытаться запрашивать его напрямую? Это же прям очень просто в реализации, экономит запросы на уведомления, не отвлекает юзера, делает систему более надёжной.
Не, ладно, я сам работаю в энтерпрайзе, поэтому знаю, что можно годами ждать исправления даже мелкого косяка, потому что так процессы устроены. Но всё-таки, блин. Прям подбешивает меня, и как пользователя, и как программиста. #dev
💯17😱4🤯1
Media is too big
VIEW IN TELEGRAM
Каждый Новый Год, как вы помните, я пытаюсь придумать какую-то новую технологическую фишечку к празднику. Идея вот этого у меня возникла еще год назад, но ни времени, ни знаний для реализации толком не было. В этот же раз поставил себе цель обязательно разобраться и добить. Демка на видео, без звука будет непонятно.
Из недостатков, конечно, нужно калибровать под каждые светодиоды то, как визуально будет выглядеть тот или иной цвет. Я этого не делал, поэтому попадание не чтоб прям идеальное, особенно для сложных сцен типа «осенний лес».
Из крутого внезапно узнал, что ESP32 двухъядерная! Не знаю, как я это пропустил в своё время. Но тут прям можно одним потоком читать сеть, а другим драйвить ленту и не делать паузы.
В целом мне всё равно нравится. Работает под управлением DeepSeek. В первой версии был GigaChat, он отвечает где-то вдвое быстрее, но слишком часто предлагает цвета совершенно мимо того, что я назвал.
Репозиторий с не слишком аккуратным кодом, если кому не лень будет возиться :) С наступающим!
#dev@clockstackwheels #gadgets@clockstackwheels #diy@clockstackwheels
Из недостатков, конечно, нужно калибровать под каждые светодиоды то, как визуально будет выглядеть тот или иной цвет. Я этого не делал, поэтому попадание не чтоб прям идеальное, особенно для сложных сцен типа «осенний лес».
Из крутого внезапно узнал, что ESP32 двухъядерная! Не знаю, как я это пропустил в своё время. Но тут прям можно одним потоком читать сеть, а другим драйвить ленту и не делать паузы.
В целом мне всё равно нравится. Работает под управлением DeepSeek. В первой версии был GigaChat, он отвечает где-то вдвое быстрее, но слишком часто предлагает цвета совершенно мимо того, что я назвал.
Репозиторий с не слишком аккуратным кодом, если кому не лень будет возиться :) С наступающим!
#dev@clockstackwheels #gadgets@clockstackwheels #diy@clockstackwheels
6🔥35❤7👍5👏1😱1