Cross Join - канал о разработке
رفتن به کانال در Telegram
Канал о разработке Антона Околелова. Разрабочик/ex-тимлид Go, живу в Чехии. Мысли, новости, вопросы. По вопросам рекламы @antonokolelov
نمایش بیشتر3 811
مشترکین
+124 ساعت
-17 روز
-1930 روز
آرشیو پست ها
Приглашаем на курс для прокачки навыков архитектора и проектировщика, которые важны для профессионального роста программиста.
🌐 С курсом «Системный дизайн высоконагруженных проектов» вы:
▪️изучите ключевые фундаментальные паттерны и получите навыки проектирования проектов с миллионной аудиторией (балансировка, масштабирование апп/кешей/субд, высокая доступность и кластерные решения, шардинг, CAP/PACELS, консистентность, саги, транзакционные очереди и многое другое)
▪️поупражняетесь в проектировании и получите обратную связь на реальных задачах: магазин/маркетплейс, такси/доставка, обьявления, соцсети, дейтинг, игры, википедия, мессенжер, CDN, хранилище файлов, онлайн-кинотеатр, счетчики, удаленный мониторинг, интеграционные вебхуки, рассылки и тд.
▪️ научитесь планировать нагрузку и связывать
бизнес-показатели с нефункциональными требованиями к системе
▪️ попрактикуемся в проведении и прохождения секций системного дизайна на интервью.
Всё в формате живых онлайн-сессий (лекции, брейнштормы, презентации домашних проектов).
🤩 Кто мы: R&D-центр Devhands.ru, наш канал (https://t.me/rybakalexey). Основатель школы и автор курса Алексей Рыбак, ex-СТО Badoo, с 20-летним опытом высоконагруженных проектов и управления глобальными технологическими организациями.
🗓 Старт 7 сентября, изучаем программу, записываемся здесь
Реклама. ИП Рыбак А.А. ИНН 771407709607 Erid: 2VtzqvimBRf
В Go 1.27, который вышел 19 августа, есть несколько любопытных изменений в самом языке.
Дженерики на методах
Раньше методы могли использовать параметры типов своего receiver’а, но не могли объявлять дополнительные. Теперь могут.
type Box[T any] struct {
Value T
}
func (b Box[T]) Map[U any](fn func(T) U) Box[U] {
return Box[U]{Value: fn(b.Value)}
}
Чувствую, теперь будут повсеместно фигачить магические цепочки типа таких:
result := Box[int]{Value: 42}.
Map(strconv.Itoa).
Map(func(s string) int {
return len(s)
})
fmt.Println(result.Value) // 2
С одной стороны, это хорошо для стандартной библиотеки: её API можно будет делать более гибкими. С другой стороны, чем больше обобщённых языковых конструкций, тем больше контекста может понадобиться LLM, чтобы понять, что скрывается за таким выражением.
Кстати, у Google недавно была статья, в которой они утверждали, что Go — чуть ли не лучший язык для LLM.
Интерфейсные методы по-прежнему не могут иметь собственные параметры типов, а generic-метод не может реализовать обычный метод интерфейса
Далее, поля embedded структур теперь инициализируются проще.
type Contact struct {
Email string
Phone string
}
type User struct {
Name string
Contact
}
Раньше приходилось писать так:
user := User{
Name: "Анна",
Contact: Contact{
Email: "anna@example.com",
Phone: "+7 999 000-00-00",
},
}
Теперь можно делать так:
user := User{
Name: "Анна",
Email: "anna@example.com",
Phone: "+7 999 000-00-00",
}
Опять же, меньше писанины, больше магии.
Улучшился вывод типов generic-функций
Например, есть функция, которая превращает значение в строку:
func FormatValue[T any](value T) string {
return fmt.Sprint(value)
}
И мы хотим добавить её в список форматтеров.
Раньше тип приходилось указывать явно:
formatters := map[string]func(int) string{
"default": FormatValue[int],
"hex": func(value int) string {
return fmt.Sprintf("0x%x", value)
},
}
В Go 1.27 можно не писать [int]
formatters := map[string]func(int) string{
"default": FormatValue,
"hex": func(value int) string {
return fmt.Sprintf("0x%x", value)
},
}
Компилятор видит, что значения map должны иметь тип func(int) string, и сам выводит для FormatValue параметр T = int.
Не знаю, честно говоря, насколько это всё важно, потому что код пишет теперь LLM, а ему и так было норм 🙂
Интереснее то, что наконец-то затащили json/v2, который тупо в разы быстрее при анмаршаллинге.Интересно, что будет с рынком IDE, таких как IntellijIdea и прочие Goland. По сути всё реже и реже нужны их могучие способности. Можно агента попросить, тоже самое сделает. А для простого просмотра кода для ревью - это уже, наверно, ту мач
Repost from do...while...ai
Типовые косяки агентов (август 2026)
У меня есть сложный проект, в котором 99% кода написано AI (код уровня подсистем ядра Linux и секурити: eBPF LSM, TPROXY, fanotify). На нём отлично видно, как кодинговые агенты лажают.
Наиболее типичные ошибки, которые я замечаю:
- Автоматические тесты через агента тестируют не реальные сценарии. Например, у юзера стартует один сервис, а в плейбуке в момент тестирования создается другой сервис. После чего, какие-то сценарии начинают валиться с ошибками и агент маркирует это как "Critical", заводит задачу "на серьезных щах" и даже порывается пофиксить.
- Агенты переусложняют реализацию. Если дать им полную свободу продуктового мышления, то они навертят кучу сложностей, которые вообще не нужны (или не нужны в ближайшие пару лет точно)
- Агенты всегда находят ошибки в ревью кода. То есть можно запускать на сложной кодовой базе ревьюер, потом фиксить его находки, запускать ещё раз, фиксить... и каждый раз получать новую порцию "проблем". После ревью агент обычно ещё делает триаж найденных задач, и часть из них становится Critical/Major ошибочно. Потому что если разбираться в продукте и его архитектуре, там из 23 найденных проблем, ну, может, три Major, остальные — можно смело засунуть в бэклог и никогда до них не дойти.
- Сложные планы агенты реализуют неэффективно. Ну то есть человек смотрит на объем работ из плана и начинает отмечать кластеры работы, группировать изменения, делать сначала code complete, точечно проверять в реальных сценариях на реальных сервера, а потом уже тестить всё полными e2e. Агент (без специальных инструкций) послушно выполняет план и постоянно сползает в сторону "после каждого изменения запустить тесты".
Сначала я думал, что проблема в моём харнессе вокруг проекта, но потом у меня появилось ещё три других проекта, где всё было совсем по-другому, а проблемы те же.
Противоядие от этих проблем есть. Нужно понимать проект (как с технической, так и с продуктовой стороны). И иногда проваливаться очень глубоко в реализацию (когда начинается очевидный булщит вместо фикса кода). Это раздражает, но пока по-другому никак.
Если что, у меня gpt-5.6-sol xhigh и Fable 5 xhigh. Другие модели работают ещё хуже (отдельная подстава с Opus 5 на который иногда делает авто-фолбэк Fable 5).
—
Если у вас нет таких проблем, скорее всего проект не сильно сложный. Ну или вы — чертов гений! Хочу с вами познакомиться, чтобы вы меня научили.
RYBE — одежда с твоим языком программирования (JavaScript, Python, QA, SQL, ML-engineer, Rust и другие)
Где два айтишника могут познакомиться?
В офисе и на конференции. Нам этого мало. Мы захотели объединить людей, у которых одни интересы. Дать возможность узнать друг друга. В метро, на прогулке, в офисе, на конференции, в походе, в баре, в самолёте.
В каком-то смысле это мерч для твоего языка программирования.
А что еще?
- отшиваемся в Москве;
- множество принтов с языками программирования (и не только);
- плотный премиум-хлопок;
- фичи типа люверсов для крепления пропуска, кармана для наушников и салфетки для очков, карман для телефона
Выбирай свой язык, заказывай, дари, носи сам
Тг канал: https://t.me/rybe_store
Сайт: http://rybe.store/
GitHub добавил stacked pull requests
GitHub запустил публичное тестирование stacked pull requests — цепочек связанных PR, которые нужно сливать по порядку.
main
└ branch-1 → PR 1
└ branch-2 → PR 2
└ branch-3 → PR 3
Например:
PR 1 добавляет новую структуру данных;
PR 2 использует её в API;
PR 3 добавляет интерфейс.
Такую цепочку можно было собрать и раньше, но следить за ветками, их порядком и обновлением приходилось вручную. Теперь GitHub встроил поддержку этого процесса:
• показывает весь "стек" и порядок изменений;
• в каждом PR показывает только изменения его слоя
• позволяет ревьюить все части параллельно;
• помогает обновлять оставшиеся ветки после слияния нижнего PR;
• может слить сразу несколько готовых слоёв в правильном порядке.
Прогать с агентом зачастую выматывает сильнее, чем без него.
Сначала надо сгенерить код. Это кажется просто, но перед этим действием нужно уже провести много работы, продумать требования и нюансы (ибо магии нет: говно на входе = говно на выходе). План-хуян. Потом наконец генеришь и даёшь другому агенту на ревью. Если код сложный, то в 99% случаев что-то вылезает. Ладно, чинишь. Даёшь другому агенту посмотреть. Вылезает что-то странное, ты не понимаешь, он прав или нет. Начинаешь читать код вручную (это всё равно пришлось бы делать, но надеялся, что позже, когда основное будет пофикшено). Читать чужой код, написанный инопланетянамм (сам бы так не написал). Тратишь дофигища энергии, чтобы построить в голове ментальную модель высера. Просишь объяснить тестами. Понимаешь, что это нечитаемое говно, просишь агента переделать так-то и упростить тут-то. И всё равно - ну не то, блин. Нет удовольствия от хорошо сделанной раьоты.
Наконец, понимаешь, что имелось в виду на втором код ревью от агента. Начинаешь копать, и понимаешь, что это не просто корнер кейс, а возможно вообще к задаче надо было подходить по-другому, и надо обсуждать с коллегами, иьо а таком виде задачу, может, и не решить вообще.
И так целыми днями. Про баги на проде я уже писал - чинить их намного сложнее, так как в голове не прошивается нужная информация.
А как было раньше: моменты обдумывания чередовались моментами медитативного прописывания. Модель в мозгу выстраивалась постепенно и надолго. Было удовольствие от полученного кода.
эх
apple/container — это CLI-инструмент для создания и запуска Linux-контейнеров на Mac. Релиз 1.0 был пару недель назад. Написан на Swift, разработан для Apple silicon. Работает с OCI-совместимыми образами, то есть умеет тянуть и пушить образы из обычных container registry. Apple прямо описывает его как инструмент для запуска Linux containers as lightweight virtual machines на Mac.
Docker Desktop на macOS сейчас живёт вокруг большой Linux VM, внутри которой уже крутятся контейнеры. Apple сделал по-другому: каждый контейнер запускается в своей лёгкой виртуальной машине. В описании Apple говорит, что такой подход даёт каждому контейнеру изоляцию уровня VM, уменьшает объём того, что надо шарить с хоста, и при этом сохраняет время старта, сравнимое с контейнерами внутри общей VM.
Стартовать сервис:
container system start
Посмотреть контейнеры:
container list --all
Можно запускать образы, собирать image из Dockerfile, работать с registry, смотреть логи, настраивать volume mounts и ресурсы.
Так как контейнер — это lightweight VM, у него есть свои CPU и memory limits. По умолчанию обычный container получает 1 GB RAM и 4 CPU, а builder VM — 2 GB RAM и 2 CPU. Для тяжёлых сборок это можно подкручивать: например, container builder start --cpus 8 --memory 32g.
Можно создавать отдельные изолированные networks через container network create, задавать IPv4/IPv6 subnets и запускать контейнеры в выбранной сети. Контейнеры в разных сетях друг друга не видят.
Разумеется, это не значит, что Docker Desktop завтра умер: Docker - огромная экосистема, Compose, привычки, интеграции, документация, корпоративные сценарии, да и просто инерция. apple/container пока выглядит скорее как фундамент. Apple хочет, чтобы Linux-контейнеры на Mac стали частью платформы.
Также, помимо cli, Apple открыла apple/containerization — Swift package для запуска Linux containers на macOS. Он даёт API для OCI images, registry, ext4 filesystems, Netlink, запуска лёгких VM, containerized processes и т.д.о, оказывается метод QUERY теперь уже не "proposed standard", это теперь официально RFC 10008
Что меня бесит в ИИ - это то, что как ему ни описывай задание, хоть максимально подробно и с утверждением плана, всё равно есть пространство для манёвра, где агент сам принимает решение, о котором ты не узнаешь, пока не получишь граблями по башке.
Никакой спек-дривен девелопмент не поможет. Ты не можешь описать вообще все нюансы в мире, проще тогда код написать самому на формальном языке (языке программирования).
Например, несколько раз было, что ошибку агент решал почему-то просто залогировать там, где надо было упасть нахер, чтобы избежать неконсистентности в данных.
И если невнимательно ревьювить код, то увидишь ты эту проблему только когда, собственно, эту неконсистентность на проде и получишь.
А когда сам пишешь код (например, на Go), то каждый раз приходится явно думать, что делать с ошибкой, падать/не падать или вообще как-то по-другому пытаться избегать. И во всех других ситуациях ты явно принимаешь решения в вопросах, о которых не подумал заранее.
Телеграм канал AI для бизнеса
AI - не будущее. Это настоящее вашего бизнеса.
Телеграм-канал "AI для бизнеса" знает все о внедрении и использовании искусственного интеллекта в бизнесе в России и мира. Только со своими подписчиками канал делится:
- как внедрить искусственный интеллект в реальные бизнес-процессы,
- разборами кейсов: как компании сократили затраты на 30-50% с помощью AI,
- лайфхаками по автоматизации рутинных задач,
- новостями мира AI и разборами трендов.
Сами давно читаем и вам советуем подписаться.
Подписаться
#реклама 16+
О рекламодателе
Вайбкодеры объясняют про айти. Это ржака
Прод у них по ночам самообновляется и падает, капец
Посоветуйте плиз подкасты айтишные, такие, чтоб полезно было. Какую-то дельную мысль чтобы можно было вынести.
Я слушаю "Организованное программирование", "Три тимлида заходят в бар", "Подлодка". Другие тоже есть в плейлисте, но они скорее развлекательные, чем полезные.
Вдруг что-то упускаю.
По-русски, по-английски или по-чешски (ну, а вдруг)
Приглашаем на курс для прокачки навыков архитектора и проектировщика, которые важны для профессионального роста программиста.
🌐 С курсом «Системный дизайн высоконагруженных проектов» вы:
▪️изучите ключевые фундаментальные паттерны и получите навыки проектирования проектов с миллионной аудиторией (балансировка, масштабирование апп/кешей/субд, высокая доступность и кластерные решения, шардинг, CAP/PACELS, консистентность, саги, транзакционные очереди и многое другое)
▪️поупражняетесь в проектировании и получите обратную связь на реальных задачах: магазин/маркетплейс, такси/доставка, обьявления, соцсети, дейтинг, игры, википедия, мессенжер, CDN, хранилище файлов, онлайн-кинотеатр, счетчики, удаленный мониторинг, интеграционные вебхуки, рассылки и тд.
▪️ научитесь планировать нагрузку и связывать
бизнес-показатели с нефункциональными требованиями к системе
▪️ попрактикуемся в проведении и прохождения секций системного дизайна на интервью.
Всё в формате живых онлайн-сессий (лекции, брейнштормы, презентации домашних проектов).
🥸 Кто мы: R&D-центр Devhands.ru, наш канал (https://t.me/rybakalexey). Основатель школы и автор курса Алексей Рыбак, ex-СТО Badoo, с 20-летним опытом высоконагруженных проектов и управления глобальными технологическими организациями.
🗓 Старт 25 июня, изучаем программу, записываемся здесь
Реклама. ИП Рыбак А.А. ИНН 771407709607 Erid: 2VtzquZx6c8
Приглашаем на курс для прокачки навыков архитектора и проектировщика, которые важны для профессионального роста программиста.
🌐 С курсом «Системный дизайн высоконагруженных проектов» вы:
▪️изучите ключевые фундаментальные паттерны и получите навыки проектирования проектов с миллионной аудиторией (балансировка, масштабирование апп/кешей/субд, высокая доступность и кластерные решения, шардинг, CAP/PACELS, консистентность, саги, транзакционные очереди и многое другое)
▪️поупражняетесь в проектировании и получите обратную связь на реальных задачах: магазин/маркетплейс, такси/доставка, обьявления, соцсети, дейтинг, игры, википедия, мессенжер, CDN, хранилище файлов, онлайн-кинотеатр, счетчики, удаленный мониторинг, интеграционные вебхуки, рассылки и тд.
▪️ научитесь планировать нагрузку и связывать
бизнес-показатели с нефункциональными требованиями к системе
▪️ попрактикуемся в проведении и прохождения секций системного дизайна на интервью.
Всё в формате живых онлайн-сессий (лекции, брейнштормы, презентации домашних проектов).
🥸 Кто мы: R&D-центр Devhands.ru, наш канал (https://t.me/rybakalexey). Основатель школы и автор курса Алексей Рыбак, ex-СТО Badoo, с 20-летним опытом высоконагруженных проектов и управления глобальными технологическими организациями.
🗓 Старт 25 июня, изучаем программу, записываемся здесь
Реклама. ИП Рыбак А.А. ИНН 771407709607 Erid: 2VtzquZx6c8
Вот такой получился график % кода, написанного с помощью ии-агентов в динамике. Очень, конечно, быстро всё меняется. Еще в начале декабря только избранные писали весь код ии-шкой, то сейчас это норма. А прошло каких-то жалких полгода. И ничего не устаканилось, динамика по-прежнему бешеная.
На рынке труда тоже происходит что-то странное - с одной стороны массовые увольнения программистов "из-за AI" в бигтехах, с другой - количество вакансий в США, UK и т.д. по итогу выросло за последний год.
Бесплатный курс: веб-дизайн, графика, интерфейсы
Получи востребованные навыки:
- создание дизайна сайтов и приложений
- создание инфографики и карточек для маркетплейсов
- работа в графическом редакторе Figma и др.
Студенты курса в среднем зарабатывают от 68 000 ₽ уже во время обучения💰
Зарегистрироваться
#реклама 16+
ydaev.ru
О рекламодателе
