⏰ Уже сегодня в 19:00 (МСК) стартует открытый урок!Тема:«Мультиагентные системы: почему большинство архитектур переусложнены»🔥 За 90 минут разберёмся, когда действительно стоит строить мультиагентную систему, а когда она только добавляет сложность, расходы и новые точки отказа.Поговорим о критериях выбора архитектуры, типичных ошибках и ограничениях современных ИИ-агентов, которые важно учитывать ещё до внедрения в продукт.🎙️ Спикер — Дмитрий Юдин, руководитель AI/ML-направления в Сloud․ru.🎁 Для всех участников подготовили промокод на скидку 10 000 ₽ на курс «Разработка ИИ-агентов».👉 Успей присоединиться к уроку
Библиотека шарписта | C#, F#, .NET, ASP.NET
@csharpproglib
Все самое полезное для C#-разработчика в одном канале.Наши курсы: https://clc.to/y3LDtwПо рекламе: @proglib_advДля обратной связи: @proglibrary_feeedback_botРКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Похожие каналы
Все →Последние посты
🔗 Три режима git reset, которые должен знать каждый разработчикКоманды git reset --soft, --mixed и --hard путают даже опытных разработчиков, потому что Git одновременно работает с историей коммитов, индексом и рабочей директорией.🔤 Из-за этого одна и та же команда может:— оставить изменения в staging area— снять файлы со staging— полностью откатить локальные измененияВ этой шпаргалке собраны основные различия между всеми режимами git reset и показано, что именно происходит с HEAD, индексом и рабочими файлами 💡📍 Навигация: Вакансии • Задачи • Собесы🐸 Библиотека шарписта#схема
Что такое IoC-контейнеры?👾 — управляет зависимостями в приложении, автоматически создавая и внедряя объекты.👍 — инвертирует управление созданием объектов, снижая связность между компонентами.🥰 — упрощают код, управляя жизненным циклом и зависимостями объектов.⚡️ — разрешает зависимости между классами и помогает внедрять их через конструкторы или свойства.🐸Библиотека задач по C#
💡 Как устроен StringBuilder. Почему это не один большой буферМногие представляют StringBuilder как один массив символов, который растёт по мере добавления текста. На самом деле внутри он устроен как связный список кусков, и из этого вытекает почти всё его поведение.🔴 Каждый StringBuilder хранит текущий кусок, обычный char[], и ссылку на предыдущий кусок. Когда вы вызываете Append, символы пишутся в текущий кусок. Как только в нём кончается место, выделяется новый кусок, а старый остаётся висеть в цепочке позади. Получается список кусков, направленный назад, от последнего к первому.🔴 Отсюда понятны несколько вещей. Append в среднем дешёвый, потому что чаще всего это запись в уже выделенный кусок без копирования всего текста. ToString дороже, ведь он проходит по всей цепочке и собирает символы в одну новую строку. Индексатор по символу на длинном тексте тоже не бесплатный, так как может потребоваться пройти по нескольким кускам, чтобы добраться до нужной позиции.Эта же модель объясняет свежий метод MoveChunks из .NET 11 Preview 5. Раз текст это цепочка кусков, передать его в другой билдер можно, просто переставив ссылку на цепочку, без копирования символов. Поэтому операция и выполняется за O(1), а исходный билдер остаётся пустым, но рабочим.📍 Навигация: Вакансии • Задачи • Собесы🐸 Библиотека шарписта#il_люминатор
🎓 Где потренировать C# бесплатноSololearn предлагает интерактивный курс по C# среднего уровня с практическими заданиями и встроенной AI-проверкой решений.В программе:— массивы— ООП— структуры и enum— исключения— работа с файлами— genericsПодойдёт тем, кто уже знает основы языка и хочет закрепить их на практике.🔗 Ссылка📍 Навигация: Вакансии • Задачи • Собесы🐸 Библиотека шарписта#sharp_view

🎥 До открытого урока — несколько дней. Подготовили небольшую подборку материалов от нашего спикера Дмитрия Юдина.Дмитрий руководит AI/ML-направлением в Сloud․ru и развивает Evolution AI Factory — среду для работы с GenAI: от инфраструктуры обучения LLM до внедрения интеллектуальных агентов.С чего начать:📺 AI-инструменты для разработчиков — как код, автотесты и ассистенты меняют рутину инженера.📺 AI-эволюция бизнеса в эпоху генеративных моделей — агентные системы в реальных продуктах.📺 Разработка мертва? — дискуссия о будущем профессии и роли AI в ней.📖 Применение LLM в бизнесе — статья Дмитрия о практике внедрения и роли облака.Одна из ключевых тем Дмитрия — практическое применение агентных систем и их ограничения.Именно об этом — бесплатный урок 18 июня в 19:00: «Мультиагентные системы: почему большинство архитектур переусложнены» 🔥🎁 Для участников подготовили промокод на скидку 10 000 ₽ на курс «Разработка ИИ-агентов».👉 Успей занять место на открытом уроке
🔗 EqualityComparer.Create. Сравнение по одному полю без лишнего кодаНужно хранить пользователей в HashSet по email? Убирать дубли через Distinct? Группировать объекты по ключу?Раньше для этого часто приходилось писать собственный IEqualityComparer<T>.🔴 В .NET 11 Preview 5 появилась новая перегрузка EqualityComparer<T>.Create, которая позволяет описать сравнение через селектор ключа:var users = new HashSet<User>( EqualityComparer<User>.Create( user => user!.Email, StringComparer.OrdinalIgnoreCase));users.Add(new User("ada@example.com", "Ada"));users.Add(new User("ADA@example.com", "Ada Lovelace"));Console.WriteLine(users.Count); // 1Здесь сравнение выполняется по Email без учёта регистра.Плюс такого подхода в том, что логика равенства остаётся локальной и не требует переопределения Equals и GetHashCode у самого типа.Работает везде, где принимается IEqualityComparer<T>: HashSet, Distinct, GroupBy, ToDictionary и не только.⚠️ Пока доступно в .NET 11 Preview 5.📍 Навигация: Вакансии • Задачи • Собесы🐸 Библиотека шарписта#async_news

💻 3 курса по цене одного — собери стек для оффера в топовую IT-компаниюДля следующего карьерного шага мало писать код. Работодатели ждут не только знания языка, но и понимания архитектуры, алгоритмов, автоматизации, AI-инструментов и агентных систем.Одно направление закрывает только часть задачи.Поэтому сейчас мы предлагаем освоить сразу несколько востребованных навыков — выбери любой курс и получи доступ еще к двум бесплатно 🔥Собери стек навыков под свою цель:🔹 подготовка к сильным компаниям (алгоритмы, архитектура);🔹 переход в AI-направление (ИИ-агенты, AgentOps);🔹 развитие в ML и Data Science (математика, основы ML);🔹 новый оффер и рост дохода.Полученные знания применяешь в работе уже во время обучения.⏳ Акция действует 48 часов — 13 и 14 июня.👉 Переходи на сайт, выбирай курсы и оставляй заявку — за 10 минут поможем собрать комплект под твою цель.
🧩 Разбор задачиПравильный ответ: 10Многие ожидают увидеть 20, но здесь есть важная деталь:Counter — это struct, а значит значимый тип (value type).Когда выполняется:var c2 = c1;создаётся не ссылка на объект, а полная копия структуры.После этой строки в памяти фактически находятся два независимых экземпляра:c1 -> Value = 10 c2 -> Value = 10Затем меняется только копия:c2.Value = 20;Теперь состояние выглядит так:c1 -> Value = 10 c2 -> Value = 20Поэтому вывод будет: 10 💡 Это одно из ключевых отличий struct от class.Для сравнения, если бы Counter был классом:public class Counter{ public int Value;}то после:var c2 = c1;обе переменные ссылались бы на один и тот же объект, и результатом был бы уже 20.📍 Навигация: Вакансии • Задачи • Собесы🐸 Библиотека шарписта#dotnet_challenge

🐸 Библиотека шарписта#dotnet_challenge
🔥 Union types добрались до C#До сих пор в C# не было встроенного способа описать тип «либо одно, либо другое». Приходилось использовать наследование, object или сторонние библиотеки вроде OneOf.В .NET 11 Preview появилась экспериментальная возможность — union.public record class Dog(string Name);public record class Cat(int Lives);public union Pet(Dog, Cat);static string Describe(Pet pet) => pet switch{ Dog(var name) => $"dog: {name}", Cat(var lives) => $"cat: {lives}"};Что это даёт:✅ один тип может хранить одно из нескольких значений✅ компилятор знает все возможные варианты✅ switch проверяется на полноту✅ меньше шаблонного кода и проверок типов в рантаймеРядом появилась и поддержка закрытых иерархий (closed), которая позволяет компилятору анализировать всех наследников типа и также проверять исчерпывающее сопоставление с образцом.❕ Пока это preview-функциональность. До релиза .NET 11 синтаксис и детали реализации ещё могут измениться.Идею union types сообщество просило больше десяти лет. Если фича дойдёт до релиза без серьёзных изменений, моделировать состояния, результаты операций и альтернативные типы станет заметно проще.📍 Навигация: Вакансии • Задачи • Собесы🐸 Библиотека шарписта#async_news

🤔 Нужен ли MediatR современному .NET-проектуВ видео разбирают, как реализовать аналог pipeline behaviors через стандартный DI-контейнер без дополнительной зависимости.Обсуждаются:— зачем вообще нужен MediatR— когда он действительно полезен— как заменить его встроенными инструментами .NET— какие компромиссы появляются при таком подходе🔗 Смотреть по ссылкеP.S. Видео на английском языке, можно включить субтитры 💡📍 Навигация: Вакансии • Задачи • Собесы🐸 Библиотека шарписта#il_люминатор
💡 Если свойству нужна небольшая логика, больше не обязательно заводить отдельное полеРаньше приходилось писать так:private string _email;public string Email{ get => _email; set => _email = value.Trim().ToLowerInvariant();}Начиная с C# 14 можно использовать field — ссылку на автоматически сгенерированное backing field:public string Email{ get; set => field = value.Trim().ToLowerInvariant();}Подходит для:✅ валидации значений✅ нормализации данных✅ INotifyPropertyChanged✅ небольшой логики в get/set⚠️ Если в классе уже есть член с именем field, внутри аксессора приоритет получит новое ключевое слово. Для обращения к своему члену используйте @field или this.field.📍 Навигация: Вакансии • Задачи • Собесы🐸 Библиотека шарписта#sharp_view

🔥 Инженерная методичка по ИИ от Романа Барлоса (Team Lead в Yandex Cloud)Продолжаем делиться экспертизой команды курса «Разработка ИИ-агентов».Роман собрал мастхев-инструменты и ключевые работы для тех, кто хочет выйти за рамки вайбкодинга.🛠 Полезные инструменты:• Understand Anything — граф знаний по коду и зависимостям.• DeepTutor — open-source платформа для персонализированного обучения.• Superpowers — набор практик для системной разработки с ИИ.• Awesome Agent Skills — коллекция навыков для ИИ-агентов.📚 Ключевые работы по LLM:• Attention Is All You Need (2017) — архитектура Transformer.• GPT-1 (2018) — начало эпохи GPT.• GPT-2 (2019) — решение новых задач без дообучения.• GPT-3 (2020) — обучение на примерах из запроса.• InstructGPT (2022) — RLHF и современные чат-боты.На курсе Роман выступает консультантом программы: помогает формировать содержание уроков с опорой на актуальные инженерные практики».Занять свое место на потоке:👉 Курс «Разработка ИИ-агентов»

Когда добавил CultureInfo.InvariantCulture и больше не ищешь баги, которые воспроизводятся только у пользователей из Германии 😎🐸 Библиотека шарписта#garbage_collector

😎 Знакомьтесь с экспертом Proglib.academy: Senior Software Engineer и Team Lead в Yandex Cloud Роман БарлосРоман — консультант нашего курса «Разработка ИИ-агентов». Он работает на стыке cloud-native архитектуры и AI, активно внедряя современные ИИ-подходы в реальные процессы разработки.За что его ценит IT-комьюнити?🟣 Team Lead и AI-евангелист в команде UX Yandex Cloud14-лет в разработке. Занимается AI-адопшеном в команде Yandex Cloud, проводит мастер-классы и продвигает лучшие практики для повышения эффективности разработчиков.🟣 Техлид Sourcecraft Code AssistantС сильным практическим бэкграундом принимал участие как технический лид в создании мощного AI-расширения для VS Code.🟣 Создатель полезного Open SourceРазрабатывает утилиты, которые позволяют быстро начать эксперименты с инференсом и агентами в локальном окружении: например, набор скриптов vllm-setup для быстрого запуска окружения и mini-proxy — минималистичный прокси для OpenAI API провайдеров.🟣 Автор интерактивных ML-визуализацийОбъясняет сложные концепции наглядно. Создал серию залипательных обучающих материалов, где можно вживую пощупать работу сетей Хопфилда, машин Больцмана и VC-размерности.Роман регулярно делится инженерными наработками, инсайтами и экспертизой в своем авторском Telegram-каналеНа курсе Роман выступает консультантом программы: он помогает формировать содержание уроков с опорой на актуальные инженерные практики и жесткие требования индустрии.Узнать больше о программе и разработке автономных систем:👉 Курс «Разработка ИИ-агентов»Так, продолжаем знакомить вас с командой?👍 — Да, ждем новых лиц🔥 — Жду полезные материалы от Романа
🧩 Разбор задачиПравильный ответ: Будет выброшен InvalidOperationExceptionМногие ожидают, что новый элемент просто добавится в список и цикл продолжит работу. Но внутри foreach используется Enumerator, который запоминает версию коллекции на момент начала обхода.После выполнения:users.Add(4);версия списка изменяется.➡️ При следующем вызове MoveNext() Enumerator обнаруживает, что коллекция была изменена после начала обхода, и выбрасывает исключение:System.InvalidOperationException: Collection was modified; enumeration operation may not execute.❕ Исключение возникает не в момент Add(), а при попытке перейти к следующему элементу коллекции.Например, такой код:{ Console.WriteLine(user); if (user == 2) users.Add(4);}успеет вывести:12 и только после этого завершится с ошибкой.💡 Это поведение характерно не только для List<T>, но и для большинства коллекций .NET, включая Dictionary<TKey, TValue>, HashSet<T> и другие.Если во время обхода нужно изменять коллекцию, используйте цикл for, работайте с копией через ToList() или накапливайте изменения отдельно.📍 Навигация: Вакансии • Задачи • Собесы🐸 Библиотека шарписта#dotnet_challenge

🐸 Библиотека шарписта#dotnet_challenge
💡 Что должен знать C#-разработчикОт async/await и LINQ до GC, многопоточности, рефлексии и управления памятью — экосистема .NET становится всё шире с каждым релизом.➡️ Нашли большую шпаргалку, которая собирает ключевые темы C# и .NET в одном месте. Удобно для подготовки к собеседованию, систематизации знаний или поиска тем для изучения ⚡️🔗 Источник📍 Навигация: Вакансии • Задачи • Собесы🐸 Библиотека шарписта#схема

🤔 Middleware, Endpoint Filter или Policy PipelineПочти в каждом ASP.NET Core-проекте возникает один вопрос: куда выносить новую логику ❓Проверки доступа, feature flags, комплаенс, торговые часы и региональные ограничения со временем превращают хендлеры в набор бесконечных if.➡️ В карточках разберём, чем отличаются Middleware, Endpoint Filters и Policy Pipeline, и в каких случаях использовать каждый из них.🔗 Ссылка📍 Навигация: Вакансии • Задачи • Собесы🐸 Библиотека шарписта#il_люминатор