💡 Как определить приоритет задачи
У разработчиков всегда задач больше, чем времени. Чтобы не тратить часы на споры, можно пройтись по этому мини-чеклисту:
1️⃣ Влияние на бизнес/пользователя
Что произойдет, если не сделать? Потеряем клиентов, деньги или просто будет некрасиво?
2️⃣ Срочность
Есть ли жесткий дедлайн? Блокируется ли чужая работа?
3️⃣ Сложность
Сколько времени и сил займет выполнение? Можно ли сделать быстрый фикс?
4️⃣ Риск откладывания
Станет ли хуже, если подождать? Вырастет техдолг, появятся новые баги?
5️⃣ Зависимости
Задача открывает путь для других? Или сама ждет чего-то?
Можно поставить по каждому пункту баллы от 1 до 3 и сложить. Чем выше сумма — тем выше приоритет.
🐸 Библиотека шарписта
#буст
У разработчиков всегда задач больше, чем времени. Чтобы не тратить часы на споры, можно пройтись по этому мини-чеклисту:
Что произойдет, если не сделать? Потеряем клиентов, деньги или просто будет некрасиво?
Есть ли жесткий дедлайн? Блокируется ли чужая работа?
Сколько времени и сил займет выполнение? Можно ли сделать быстрый фикс?
Станет ли хуже, если подождать? Вырастет техдолг, появятся новые баги?
Задача открывает путь для других? Или сама ждет чего-то?
Можно поставить по каждому пункту баллы от 1 до 3 и сложить. Чем выше сумма — тем выше приоритет.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤5
Хотите увидеть будущее Visual Studio? Insiders для 2026 версии доступен.
Быстрее, умнее, удобнее — проверяйте новые функции, отлаживайте проекты и опробуйте возможности, которые скоро станут стандартом.
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥3❤2
🔐 Хэширование в C#: как и когда использовать
Хэширование — это процесс преобразования данных в фиксированное значение, которое затем можно использовать для быстрого поиска и сравнения.
Основная цель хэширования — ускорить операции, например, поиск элементов в коллекциях или в базах данных.
Как работает хэширование
В C# хэширование чаще всего встречается в таких структурах данных, как
Хэш-таблица использует хэш-функцию, которая принимает ключ и преобразует его в индекс, который указывает на место хранения данных в массиве.
Пример реализации собственного хэширования:
Когда стоит использовать хэширование
Если вам нужно быстро найти, добавить или удалить данные, хэширование может значительно ускорить эти операции. Когда вы добавляете или ищете элемент, хэш-функция преобразует его ключ в индекс, и вы сразу попадаете в нужную ячейку, не перебирая все данные.
Хэширование используется для защиты данных, например, в процессе хранения паролей. В этом случае важно использовать криптографически стойкие хэш-функции, такие как SHA-256 или bcrypt.
Хэш-функции могут использоваться для проверки, не изменились ли данные, например, для контроля над целостностью файлов.
💬 Как вы используете хэширование в своих проектах? Делитесь примерами в комментариях 👇
🐸 Библиотека шарписта
#междусобойчик
Хэширование — это процесс преобразования данных в фиксированное значение, которое затем можно использовать для быстрого поиска и сравнения.
Основная цель хэширования — ускорить операции, например, поиск элементов в коллекциях или в базах данных.
Как работает хэширование
В C# хэширование чаще всего встречается в таких структурах данных, как
Dictionary
и HashSet
, где хэш-функции используются для быстрого поиска элементов. Эти коллекции используют хэш-таблицы для того, чтобы операции поиска, добавления и удаления выполнялись за время O(1) в среднем.Хэш-таблица использует хэш-функцию, которая принимает ключ и преобразует его в индекс, который указывает на место хранения данных в массиве.
Пример реализации собственного хэширования:
// Переопределение метода GetHashCode для обеспечения корректного хэширования
public override int GetHashCode()
{
// Простой хэш-функции, использующей значения полей объекта
// Здесь мы комбинируем хэши Name и Age для создания уникального хэш-значения
int hashName = Name == null ? 0 : Name.GetHashCode();
int hashAge = Age.GetHashCode();
// Используем формулу для комбинирования хэшей, чтобы минимизировать коллизии
return hashName ^ hashAge;
}
Когда стоит использовать хэширование
Если вам нужно быстро найти, добавить или удалить данные, хэширование может значительно ускорить эти операции. Когда вы добавляете или ищете элемент, хэш-функция преобразует его ключ в индекс, и вы сразу попадаете в нужную ячейку, не перебирая все данные.
Хэширование используется для защиты данных, например, в процессе хранения паролей. В этом случае важно использовать криптографически стойкие хэш-функции, такие как SHA-256 или bcrypt.
Хэш-функции могут использоваться для проверки, не изменились ли данные, например, для контроля над целостностью файлов.
💬 Как вы используете хэширование в своих проектах? Делитесь примерами в комментариях 👇
#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
👾8👍3❤1
Нашли для вас видео, которое поможет разобраться в различиях между операторами неравенства
!=
и паттерн-матчингом с is not
в C#. Несмотря на схожесть, каждое из этих решений имеет свои особенности, и неправильное использование может привести к ошибкам, особенно в случаях с боксингом, проверкой на null и перегрузкой операторов. Паттерн-матчинг предоставляет более безопасное и гибкое решение, особенно для работы с типами и константами.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7
🔥 Последняя неделя перед стартом курса по AI-агентам
Старт курса уже 15го числа! Если вы планировали вписаться — сейчас ПОСЛЕДНИЙ шанс забронировать место
На курсе:
— разложим LLM по косточкам: токенизация, SFT, PEFT, инференс
— соберём RAG и научимся оценивать его адекватно
— построим настоящую мультиагентную систему — архитектуру, которая умеет расти
— разберём CoPilot, сломаем через prompt injection (спасибо Максу)
— и наконец, посмотрим, как это работает в MCP и реальных кейсах
📍 Это 5 живых вебинаров + раздатка + домашки + чат с преподавателями
И главное — возможность реально разобраться, как проектировать системы на LLM, а не просто «поиграться с API»
Промокод на 5.000₽: LASTCALL
👉 Курс здесь
Старт курса уже 15го числа! Если вы планировали вписаться — сейчас ПОСЛЕДНИЙ шанс забронировать место
На курсе:
— разложим LLM по косточкам: токенизация, SFT, PEFT, инференс
— соберём RAG и научимся оценивать его адекватно
— построим настоящую мультиагентную систему — архитектуру, которая умеет расти
— разберём CoPilot, сломаем через prompt injection (спасибо Максу)
— и наконец, посмотрим, как это работает в MCP и реальных кейсах
📍 Это 5 живых вебинаров + раздатка + домашки + чат с преподавателями
И главное — возможность реально разобраться, как проектировать системы на LLM, а не просто «поиграться с API»
Промокод на 5.000₽: LASTCALL
👉 Курс здесь
🔒 Оптимистическая vs пессимистическая блокировка
Каждый .NET разработчик рано или поздно сталкивается с этим: два запроса одновременно обновляют одну сущность в Entity Framework, и один из них молча затирает изменения другого. Классическая проблема многопоточных приложений, которая превращает стабильный код в источник багов.
В многопользовательских приложениях, где несколько пользователей или процессов одновременно читают или изменяют одни и те же данные, очень важно обеспечить целостность и согласованность данных.
В статье разбираемся как это сделать с помощью двух типов блокировок.
➡️ Читать статью
🐸 Библиотека шарписта
Каждый .NET разработчик рано или поздно сталкивается с этим: два запроса одновременно обновляют одну сущность в Entity Framework, и один из них молча затирает изменения другого. Классическая проблема многопоточных приложений, которая превращает стабильный код в источник багов.
В многопользовательских приложениях, где несколько пользователей или процессов одновременно читают или изменяют одни и те же данные, очень важно обеспечить целостность и согласованность данных.
В статье разбираемся как это сделать с помощью двух типов блокировок.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤7
Please open Telegram to view this post
VIEW IN TELEGRAM
😁32🥱2
Разработчики всегда стояли на перепутье: либо углубляться в одну область, становясь мастерами в ней, либо учить всё и сразу, чтобы быть востребованными на рынке.
Сейчас не редкость, что на рынок труда выходят кандидаты, которые могут работать с абсолютно всем — от фронтенда до бэкенда, от баз данных до DevOps. В некоторых случаях это выглядит как «швейцарские ножи», которые знают всё, но ни в чём не являются экспертами.
Появление инструментов, таких как фреймворки и библиотеки, изменяет саму парадигму разработки. Сегодня мы можем использовать множество технологий, не будучи экспертами в каждой из них. Это позволяет нам быстро создавать сложные системы без необходимости углубляться в каждую деталь.
💬 Как думаете вы? Лучше углубиться в одну область или быть «швейцарским ножом»?
#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
📰 Недельный дайджест
Собрали для вас материалы второй недели осени.
— Сентябрьские обновления .NET
Microsoft выпустили обновления для .NET 8.0 и .NET 9.0. Эти обновления содержат исправления, не связанные с безопасностью, и направлены на улучшение стабильности и качества платформы.
— Улучшения производительности в .NET 10
В .NET 10 значительные улучшения производительности были достигнуты благодаря оптимизациям в Just-In-Time (JIT) компиляторе. Также улучшена деабстракция, позволяющая интерфейсам и делегатам работать быстрее, а виртуальные вызовы — эффективно инлайнироваться.
— 5 трендов IT-найма 2025
— Первый кандидат к релизу .NET 10
— Visual Studio 2026 Insiders уже доступна
🐸 Библиотека шарписта
Собрали для вас материалы второй недели осени.
— Сентябрьские обновления .NET
Microsoft выпустили обновления для .NET 8.0 и .NET 9.0. Эти обновления содержат исправления, не связанные с безопасностью, и направлены на улучшение стабильности и качества платформы.
— Улучшения производительности в .NET 10
В .NET 10 значительные улучшения производительности были достигнуты благодаря оптимизациям в Just-In-Time (JIT) компиляторе. Также улучшена деабстракция, позволяющая интерфейсам и делегатам работать быстрее, а виртуальные вызовы — эффективно инлайнироваться.
— 5 трендов IT-найма 2025
— Первый кандидат к релизу .NET 10
— Visual Studio 2026 Insiders уже доступна
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Forwarded from Библиотека задач по C# | тесты, код, задания
Библиотечный метод возвращает ValueTask<T> (часто завершается синхронно). В вызывающем коде результат нужно ждать несколько раз и/или комбинировать с другими задачами через Task.WhenAll. Что делать правильно?
👾 — ValueTask<T> можно await-ить сколько угодно раз — как Task<T>
👍 — Сконвертировать в Task<T> через .AsTask() и уже его ждать/комбинировать
🥰 — Обернуть в Task.Run(...), чтобы получить полноценную Task
⚡️ — Никогда не возвращать ValueTask<T> из публичных API — всегда только Task<T>
Библиотека задач по C#
👾 — ValueTask<T> можно await-ить сколько угодно раз — как Task<T>
👍 — Сконвертировать в Task<T> через .AsTask() и уже его ждать/комбинировать
🥰 — Обернуть в Task.Run(...), чтобы получить полноценную Task
⚡️ — Никогда не возвращать ValueTask<T> из публичных API — всегда только Task<T>
Библиотека задач по C#
👍56⚡5
💎 Вспоминаем SOLID
SOLID — это 5 принципов объектно-ориентированного проектирования. Давайте повторим эту базу.
— Single Responsibility Principle (Принцип единственной ответственности)
Каждый класс должен иметь только одну причину для изменения.
Плохо: класс UserManager и сохраняет пользователя в БД, и отправляет email.
Хорошо: UserRepository хранит, EmailService отправляет письма.
— Open/Closed Principle (Принцип открытости/закрытости)
Классы должны быть открыты для расширения, но закрыты для изменения.
Новый функционал добавляем через расширение, а не переписывание старого кода.
Пример: вместо переписывания метода — создаём новый подкласс или внедряем стратегию.
— Liskov Substitution Principle (Принцип подстановки Барбары Лисков)
Объекты подклассов должны работать так же, как объекты родителя.
Если Square наследуется от Rectangle, он должен вести себя как прямоугольник, а не ломать ожидания.
Суть: наследование не должно рушить логику программы.
— Interface Segregation Principle (Принцип разделения интерфейсов)
Лучше много маленьких интерфейсов, чем один огромный.
Плохо: интерфейс IMachine с методами print(), scan(), fax().
Хорошо: IPrinter, IScanner, IFax. Каждый класс реализует только нужное.
— Dependency Inversion Principle (Принцип инверсии зависимостей)
Зависимости должны быть от абстракций, а не от конкретных классов.
Плохо: класс ReportGenerator напрямую вызывает MySQLDatabase.
Хорошо: ReportGenerator работает с интерфейсом Database, а уже конкретная БД подставляется снаружи.
Без SOLID код быстро превращается в спагетти, где одно изменение ломает всё.
💬 Пишите в комменты как вы объясняете, что такое SOLID
🐸 Библиотека шарписта
#буст
SOLID — это 5 принципов объектно-ориентированного проектирования. Давайте повторим эту базу.
— Single Responsibility Principle (Принцип единственной ответственности)
Каждый класс должен иметь только одну причину для изменения.
Плохо: класс UserManager и сохраняет пользователя в БД, и отправляет email.
Хорошо: UserRepository хранит, EmailService отправляет письма.
— Open/Closed Principle (Принцип открытости/закрытости)
Классы должны быть открыты для расширения, но закрыты для изменения.
Новый функционал добавляем через расширение, а не переписывание старого кода.
Пример: вместо переписывания метода — создаём новый подкласс или внедряем стратегию.
— Liskov Substitution Principle (Принцип подстановки Барбары Лисков)
Объекты подклассов должны работать так же, как объекты родителя.
Если Square наследуется от Rectangle, он должен вести себя как прямоугольник, а не ломать ожидания.
Суть: наследование не должно рушить логику программы.
— Interface Segregation Principle (Принцип разделения интерфейсов)
Лучше много маленьких интерфейсов, чем один огромный.
Плохо: интерфейс IMachine с методами print(), scan(), fax().
Хорошо: IPrinter, IScanner, IFax. Каждый класс реализует только нужное.
— Dependency Inversion Principle (Принцип инверсии зависимостей)
Зависимости должны быть от абстракций, а не от конкретных классов.
Плохо: класс ReportGenerator напрямую вызывает MySQLDatabase.
Хорошо: ReportGenerator работает с интерфейсом Database, а уже конкретная БД подставляется снаружи.
Без SOLID код быстро превращается в спагетти, где одно изменение ломает всё.
💬 Пишите в комменты как вы объясняете, что такое SOLID
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥4🥱3⚡1😁1
🧩 Оптимизация кода с помощью Application Insights
В .NET теперь проще выявлять узкие места и оптимизировать производительность приложений благодаря обновлениям в Application Insights. Инструмент собирает данные о работе кода в реальном времени, помогает находить медленные участки, лишние аллокации и повторяющиеся операции.
➡️ Блог разработчиков
🐸 Библиотека шарписта
В .NET теперь проще выявлять узкие места и оптимизировать производительность приложений благодаря обновлениям в Application Insights. Инструмент собирает данные о работе кода в реальном времени, помогает находить медленные участки, лишние аллокации и повторяющиеся операции.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🧗 Кто такие Unit-лид и Technical Owner
Классическая связка «тимлид + продакт-менеджер» не справляется с ростом команд до 50-100+ человек и усложнением продуктов. На смену приходят роли, ориентированные на продуктовое мышление вместо простого исполнения задач.
Unit-лид функционирует как мини-CEO продуктового направления: управляет стратегией, а technical owner служит мостом между бизнесом и техникой.
Главное отличие от прошлого: специалисты не просто выполняют поставленные задачи, а понимают продукт целиком.
➡️ Подробнее про обе роли
🐸 Библиотека шарписта
Классическая связка «тимлид + продакт-менеджер» не справляется с ростом команд до 50-100+ человек и усложнением продуктов. На смену приходят роли, ориентированные на продуктовое мышление вместо простого исполнения задач.
Unit-лид функционирует как мини-CEO продуктового направления: управляет стратегией, а technical owner служит мостом между бизнесом и техникой.
Главное отличие от прошлого: специалисты не просто выполняют поставленные задачи, а понимают продукт целиком.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Включите EventPipe/PerfView/dotnet-trace для старта: какие сборки грузятся, на что тратится время.
Снимите таймлайны: «вход в Main → готовность endpoint'ов / UI».
Измеряйте Release-сборку, без отладчиков и без «горячих» кэшей.
• ReadyToRun (R2R)
Компилирует IL в машинный код при публикации:
<!-- Directory.Build.props или csproj -->
<PropertyGroup>
<PublishReadyToRun>true</PublishReadyToRun>
<PublishTrimmed>true</PublishTrimmed>
<TrimMode>partial</TrimMode> <!-- для библиотек и DI -->
</PropertyGroup>
• PGO (Profile-Guided Optimization) + R2R
Соберите профиль и примените при crossgen2 (даёт лучший порядок/инлайнинг для «горячего» пути старта).
• NativeAOT
Полностью нативный бинарь, почти мгновенный старт. Подходит для CLI/служб с ограниченным набором фич и для «узких» сервисов или edge-эндпоинтов в вебе.
Уберите всё, что не нужно при старте: тяжёлые клиенты (БД, кеши, внешние SDK) создавайте лениво, после поднятия хостинга.
Прогружайте конфигурацию минимально: уберите лишние провайдеры, большие JSON-файлы, многократные AddJsonFile.
Логи на старте — только консоль/минимальный уровень, позже можно расширить.
Уберите неиспользуемые пакеты, объедините внутренние пакеты, избегайте древовидных зависимостей ради одной функции.
Встроенный контейнер быстрый, но следите за графом:
• Регайте Singleton/Scoped только когда нужно.
• Избегайте «сервисов-глобов» с большим конструктором на десятки зависимостей.
• Используйте фабрики/Lazy для тяжёлых зависимостей.
Минимальный хостинг и только нужные middleware:
var builder = WebApplication.CreateBuilder(args);
// Оставьте только то, что нужно для старта
builder.Services.AddRouting();
var app = builder.Build();
// Критичный middleware – ближе к началу конвейера
app.MapGet("/healthz", () => "OK");
app.Run();
Отключите всё, что делает работу на старте: избыточная авто-дискавери Swagger, отражение в валидации, сканирование сборок.
Разнесите готовность принимать трафик и полную готовность всех подсистем:
• Быстрый
/healthz
сразу.• Прогрев кэшей/метаданных — в фоне
IHostedService
с низким приоритетом.• В оркестраторе задайте
readinessProbe
после минимального старта, а «тяжёлый прогрев» делайте уже на фоне.PublishTrimmed=true
+ TrimMode=partial
часто снижает размер и ускоряет загрузку.Обязательно добавляйте
DynamicDependency
/UnconditionalSuppressMessage
/RD.XML
для сохранения типов, которые нужны через рефлексию (DI/JSON/ORM).💬 А у вас сколько секунд уходит на холодный старт .NET сервиса?
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤2🔥2❤🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁28❤🔥13💯11👾1
Часто не хочется писать шаблонный код и будто для этого и были придуманы нейросети. Сегодня делимся с вами промптом для разбавления рутины.
Промпт для генерации DTO:
Сгенерируй DTO класс на C# с публичными свойствами для объекта, содержащего следующие поля: {подставить полный список свойств}. Класс должен иметь комментарии для каждого свойства, описывающие его назначение. Используй стандартные соглашения оформления C# для именования классов и свойств.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚10😁7🥱3🙏2
This media is not supported in your browser
VIEW IN TELEGRAM
📅 24 сентября в 19:00 МСК — бесплатный вебинар с Максимом Шаланкиным.
Тема: «ИИ-агенты: новая фаза развития искусственного интеллекта».
🔹 Почему все говорят про ИИ-агентов и куда вливаются миллиарды инвестиций.
🔹 Чем они отличаются от ChatGPT и обычных ботов.
🔹 Как работает цикл агента: восприятие → планирование → действие → обучение.
🔹 Живое демо простого агента.
🔹 Потенциал для бизнеса: автоматизация процессов и ROI до 80%.
Не придёшь — будешь потом рассказывать, что «агенты — это как чат-боты», и ловить косые взгляды от коллег 😏
👉 Регистрируйтесь через форму на лендинге
Тема: «ИИ-агенты: новая фаза развития искусственного интеллекта».
🔹 Почему все говорят про ИИ-агентов и куда вливаются миллиарды инвестиций.
🔹 Чем они отличаются от ChatGPT и обычных ботов.
🔹 Как работает цикл агента: восприятие → планирование → действие → обучение.
🔹 Живое демо простого агента.
🔹 Потенциал для бизнеса: автоматизация процессов и ROI до 80%.
Не придёшь — будешь потом рассказывать, что «агенты — это как чат-боты», и ловить косые взгляды от коллег 😏
👉 Регистрируйтесь через форму на лендинге
😢2
📊 Почему сайты тормозят: фронтенд ли
Сегодня большинство сайтов загружаются 3–5 секунд. Для пользователя это уже привычно, но для бизнеса — потерянные клиенты и деньги. И дело не только во фронтенде: корень проблемы иногда глубже — в бэкенде.
Что влияет на скорость ответа:
• неоптимизированные запросы к базе
• тяжёлые API-эндпоинты
• отсутствие кэша или его неправильная реализация
• перегрузка серверов и медленные очереди
Фронтенд может ужать картинки и ускорить отрисовку, но если бэкенд думает по 2 секунды на запрос — сайт всё равно будет тормозить.
💬 Как вы относитесь к этой проблеме и что делаете в своих проектах, чтобы бэкенд не становился узким местом?
🐸 Библиотека шарписта
#entry_point
Сегодня большинство сайтов загружаются 3–5 секунд. Для пользователя это уже привычно, но для бизнеса — потерянные клиенты и деньги. И дело не только во фронтенде: корень проблемы иногда глубже — в бэкенде.
Что влияет на скорость ответа:
• неоптимизированные запросы к базе
• тяжёлые API-эндпоинты
• отсутствие кэша или его неправильная реализация
• перегрузка серверов и медленные очереди
Фронтенд может ужать картинки и ускорить отрисовку, но если бэкенд думает по 2 секунды на запрос — сайт всё равно будет тормозить.
💬 Как вы относитесь к этой проблеме и что делаете в своих проектах, чтобы бэкенд не становился узким местом?
#entry_point
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7
Please open Telegram to view this post
VIEW IN TELEGRAM
👏36❤8💯8🥱3🔥1