🗞 Дайджест недели
Освежаем в памяти прошедшие дни и готовимся к новой рабочей неделе.
— JetBrains просит разработчиков поделиться кодом
Участие добровольное, а конфиденциальность и контроль — в руках пользователя. Новые опции появятся в обновлении 2025.2.4 уже в ближайшие недели.
— PostgreSQL 18
— ТОП-9 популярных AI-агентов для разработки
— Microsoft представили Agent Framework
— Rx.NET 6.1
🐸 Библиотека шарписта
#async_news
Освежаем в памяти прошедшие дни и готовимся к новой рабочей неделе.
— JetBrains просит разработчиков поделиться кодом
Участие добровольное, а конфиденциальность и контроль — в руках пользователя. Новые опции появятся в обновлении 2025.2.4 уже в ближайшие недели.
— PostgreSQL 18
— ТОП-9 популярных AI-агентов для разработки
— Microsoft представили Agent Framework
— Rx.NET 6.1
#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что вас зацепило на неделе
Делитесь в комментах:
• Крутые материалы
• Интересные новости
• Полезные инсайты
• Новые инструменты
Собираем коллективную мудрость 👇
🐸 Библиотека шарписта
#entry_point
Делитесь в комментах:
• Крутые материалы
• Интересные новости
• Полезные инсайты
• Новые инструменты
Собираем коллективную мудрость 👇
#entry_point
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁48👏8❤4🥱2
🚩 Задача с собеса: контейнер с водой
Ваша задача — выбрать две вертикальные линии на плоскости, чтобы вместе с осью X они образовали контейнер, в который поместится максимум воды. Даны высоты этих линий в массиве.
Как действовать:
1. Ставим два указателя: один — на начало, второй — на конец массива.
2. Считаем объем текущего контейнера: ширина между указателями умножается на минимальную из двух высот.
3. Двигаем указатель с меньшей высотой внутрь. Если обе высоты равны — можно сдвигать любой.
4. Запоминаем максимум, повторяем шаги, пока указатели не встретятся.
По сути, это жадный алгоритм с двумя указателями, который перебирает края и минимизирует лишние проверки.
Пример реализации:
➡️ Попробовать на литкоде
🐸 Библиотека шарписта
#dotnet_challenge
Ваша задача — выбрать две вертикальные линии на плоскости, чтобы вместе с осью X они образовали контейнер, в который поместится максимум воды. Даны высоты этих линий в массиве.
Как действовать:
1. Ставим два указателя: один — на начало, второй — на конец массива.
2. Считаем объем текущего контейнера: ширина между указателями умножается на минимальную из двух высот.
3. Двигаем указатель с меньшей высотой внутрь. Если обе высоты равны — можно сдвигать любой.
4. Запоминаем максимум, повторяем шаги, пока указатели не встретятся.
По сути, это жадный алгоритм с двумя указателями, который перебирает края и минимизирует лишние проверки.
Пример реализации:
public int MaxArea(int[] h)
{
int l = 0, r = h.Length - 1, m = 0;
while (l < r)
{
m = Math.Max(m, (r - l) * Math.Min(h[l], h[r]));
if (h[l] < h[r]) l++; else r--;
}
return m;
}
#dotnet_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤2
Когда вы пишете асинхронный метод вроде:
async Task<int> GetDataAsync()
{
var data = await FetchAsync();
return data.Length;
}
вы можете думать, что это «всего лишь ожидание задачи». Но на самом деле компилятор C# превращает этот метод в state machine — конечный автомат, который управляет переходами между состояниями выполнения.
State machine — это структура, которая:
• хранит текущее состояние выполнения программы, например, до await, после await или завершено,
• знает, в какое состояние перейти дальше, когда наступает внешнее событие например, завершение Task.
Проще говоря, компилятор разворачивает ваш линейный асинхронный код в набор состояний + переключатель между ними.
Что делает компилятор
При компиляции метода с await создаётся вспомогательный класс, реализующий интерфейс
IAsyncStateMachine
.Если упростить, то наш пример превращается примерно в:
private struct GetDataAsyncStateMachine : IAsyncStateMachine
{
public int _state;
public AsyncTaskMethodBuilder<int> _builder;
private TaskAwaiter<string> _awaiter;
public void MoveNext()
{
try
{
if (_state == 0)
{
// после await
var result = _awaiter.GetResult();
_builder.SetResult(result.Length);
return;
}
var task = FetchAsync();
if (!task.IsCompleted)
{
_state = 0;
_awaiter = task.GetAwaiter();
_builder.AwaitUnsafeOnCompleted(ref _awaiter, ref this);
return;
}
_builder.SetResult(task.Result.Length);
}
catch (Exception ex)
{
_builder.SetException(ex);
}
}
public void SetStateMachine(IAsyncStateMachine stateMachine) { }
}
Другие примеры использования state machines в C#
• yield return — генерация итераторов
IEnumerator
• foreach на async коллекциях — асинхронные итераторы
IAsyncEnumerable
Каждый await или yield превращает метод в "автомат", который сам управляет своим ходом выполнения.
#il_люминатор
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🥱7❤4
🛠 Ловите ошибку сразу
Ничто не портит день разработчика так, как внезапный
Лучше упасть сразу — с понятным сообщением, чем потом искать, где всё пошло не так.
Как избежать ошибки:
Это fail-fast подход: программа ломается там, где ошибка реально возникла, а не через пять вызовов.
Полезно для входных параметров, обязательных зависимостей и DTO, пришедших из вне.
🐸 Библиотека шарписта
#sharp_view
Ничто не портит день разработчика так, как внезапный
NullReferenceException
в проде.Лучше упасть сразу — с понятным сообщением, чем потом искать, где всё пошло не так.
Как избежать ошибки:
_ = arg ?? throw new ArgumentNullException(nameof(arg));
Это fail-fast подход: программа ломается там, где ошибка реально возникла, а не через пять вызовов.
Полезно для входных параметров, обязательных зависимостей и DTO, пришедших из вне.
#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱9👍6
C# потерял сразу две позиции в рейтинге PYPL. Его доля снизилась примерно на -2.5 % поисковых запросов.
#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
😁26😢19👍2🙏2🌚1
🎓 Как вайб-кодинг меняет рынок IT-образования
За последние годы подход к обучению программированию меняется быстрее, чем сами языки. На смену долгим упражнениям с синтаксисом приходит работа с идеями и концепциями, где код во многом генерируется автоматически.
Этот сдвиг называют «вайб-кодингом». Он уже влияет на университетские программы, онлайн-курсы и требования к выпускникам.
➡️ В статье о том, что стоит за этим термином и как он меняет обучение IT-специалистов.
🐸 Библиотека шарписта
За последние годы подход к обучению программированию меняется быстрее, чем сами языки. На смену долгим упражнениям с синтаксисом приходит работа с идеями и концепциями, где код во многом генерируется автоматически.
Этот сдвиг называют «вайб-кодингом». Он уже влияет на университетские программы, онлайн-курсы и требования к выпускникам.
Please open Telegram to view this post
VIEW IN TELEGRAM
😢5❤3👍2
💥 Весь октябрь -40% на курсы для разработчиков в proglib.academy
Бери знания под свой стек:
Python | алгоритмы | математика для Data Science | архитектура кода.
⚡️ Пока скидка действует, апдейтни свои навыки
Бери знания под свой стек:
Python | алгоритмы | математика для Data Science | архитектура кода.
Пока одни ждут «идеальный момент», другие просто учатся.
А потом берут ваши офферы.
⚡️ Пока скидка действует, апдейтни свои навыки
Пока мы думали как бы вам рассказать про наш Х, обнаружили любопытную вещь: если пользователь не залогинен в Х, то лента нашего паблика пустая — ни одного поста.
Теперь разбираемся, это недоработка или новая фича, мотивирующая авторизацию 🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁48❤3
⌛️ Таймаут в одну строку
Когда нужно ограничить время ожидания ответа от HTTP-запроса можно использовать метод WaitAsync для установки таймаута без необходимости создавать отдельные токены отмены.
Пример:
Если время ожидания превышает заданный лимит, метод выбросит исключение. Поэтому важно правильно обрабатывать эту ситуацию, решая, нужно ли повторить запрос или применить стратегию отката.
🐸 Библиотека шарписта
#sharp_view
Когда нужно ограничить время ожидания ответа от HTTP-запроса можно использовать метод WaitAsync для установки таймаута без необходимости создавать отдельные токены отмены.
Пример:
var response = await http.GetAsync(url).WaitAsync(TimeSpan.FromSeconds(5));
Если время ожидания превышает заданный лимит, метод выбросит исключение. Поэтому важно правильно обрабатывать эту ситуацию, решая, нужно ли повторить запрос или применить стратегию отката.
#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤3🤔3🙏1
Вы когда-нибудь пытались использовать метод
Console.ReadLine()
в онлайн-компиляторе C#? Да, звучит как извращение, но давайте углубимся в проблему.Метод
Console.ReadLine()
позволяет вашему приложению ожидать ввода пользователя в консоли — это основной инструмент для взаимодействия с пользователем в командной строке. Но когда вы пытаетесь использовать этот метод в браузерной среде, появляется проблема: браузеры просто не поддерживают работу с консолью напрямую. Атрибут
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
прямо в документации говорит: «Не поддерживайте это в браузере!»Браузер — это отличное место для быстрых экспериментов, но когда речь идет о полноценной разработке, лучше использовать локальные инструменты: Visual Studio или Visual Studio Code.
#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
😢18❤5🥱2😁1
🚀 JetBrains .NET Days 2025
JetBrains снова собрала лучших инженеров и евангелистов .NET на своей онлайн-конференции .NET Days. Два дня плотных докладов — от чистой архитектуры и распределённых систем до GenAI и F#.
1️⃣ Самое интересное за первый день:
• Чистая архитектура с ASP.NET Core
Как выстроить проект так, чтобы код был читаемым, тестируемым и легко рефакторился. Разделение слоёв и зависимостей без боли.
• Nullability в C#: включаем защиту от NullReferenceException
Аннотации и статический анализ помогают избавиться от NullReferenceException и внедрить null safety даже в старый код.
• Как выбрать систему обмена сообщениями
Сравнение AWS SQS, RabbitMQ и Azure Service Bus — плюсы, минусы и типичные ошибки при выборе очередей сообщений.
• TDD на фронтенде с Blazor
Как применять TDD на фронтенде с Blazor и bUnit. Быстрая обратная связь и уверенность в каждом изменении.
2️⃣ Темы за второй день:
• Версионирование событийных систем
Безопасные приёмы эволюции событий: версионирование, апкастинг и совместимость без поломок у потребителей.
• Генеративный ИИ и .NET Aspire в действии
Интеграция LLM, управление контекстом и масштабируемая оркестрация с помощью Semantic Kernel и Aspire.
• Функциональное программирование в F#: мода или польза
Реальные преимущества функционального подхода — лаконичные пайплайны, паттерн-матчинг и безопасные абстракции.
• Как нашли утечку 2 ГБ в день за 5 минут
История о том, как обнаружить гигабайтные утечки памяти с помощью dotMemory в продакшене за считанные минуты.
Два дня — и десятки инсайтов о будущем .NET: от облаков и AI до функционального подхода и устойчивой архитектуры. Записи доступны на YouTube.
➡️ Первый день
➡️ Второй день
🐸 Библиотека шарписта
#il_люминатор
JetBrains снова собрала лучших инженеров и евангелистов .NET на своей онлайн-конференции .NET Days. Два дня плотных докладов — от чистой архитектуры и распределённых систем до GenAI и F#.
• Чистая архитектура с ASP.NET Core
Как выстроить проект так, чтобы код был читаемым, тестируемым и легко рефакторился. Разделение слоёв и зависимостей без боли.
• Nullability в C#: включаем защиту от NullReferenceException
Аннотации и статический анализ помогают избавиться от NullReferenceException и внедрить null safety даже в старый код.
• Как выбрать систему обмена сообщениями
Сравнение AWS SQS, RabbitMQ и Azure Service Bus — плюсы, минусы и типичные ошибки при выборе очередей сообщений.
• TDD на фронтенде с Blazor
Как применять TDD на фронтенде с Blazor и bUnit. Быстрая обратная связь и уверенность в каждом изменении.
• Версионирование событийных систем
Безопасные приёмы эволюции событий: версионирование, апкастинг и совместимость без поломок у потребителей.
• Генеративный ИИ и .NET Aspire в действии
Интеграция LLM, управление контекстом и масштабируемая оркестрация с помощью Semantic Kernel и Aspire.
• Функциональное программирование в F#: мода или польза
Реальные преимущества функционального подхода — лаконичные пайплайны, паттерн-матчинг и безопасные абстракции.
• Как нашли утечку 2 ГБ в день за 5 минут
История о том, как обнаружить гигабайтные утечки памяти с помощью dotMemory в продакшене за считанные минуты.
Два дня — и десятки инсайтов о будущем .NET: от облаков и AI до функционального подхода и устойчивой архитектуры. Записи доступны на YouTube.
#il_люминатор
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥4👍3
Вам дан отсортированный по возрастанию массив целых чисел. Нужно создать новый массив, в котором содержатся квадраты этих чисел — и он тоже должен быть отсортирован по возрастанию.
Поскольку исходный массив отсортирован, отрицательные числа после возведения в квадрат могут стать больше положительных, поэтому нужно рассматривать оба края массива.
1. Обрабатываем два края массива (left и right), сравниваем их квадраты.
2. Наибольший квадрат записываем в конец результирующего массива.
3. Сдвигаем соответствующий указатель — либо left, либо right.
4. В конце получаем отсортированный массив квадратов.
Решение с двумя указателями:
public int[] SortedSquares(int[] nums) {
int n = nums.Length;
int[] result = new int[n];
int left = 0, right = n - 1, pos = n - 1;
while (left <= right) {
int leftSq = nums[left] * nums[left];
int rightSq = nums[right] * nums[right];
if (leftSq > rightSq) {
result[pos] = leftSq;
left++;
} else {
result[pos] = rightSq;
right--;
}
pos--;
}
return result;
}
#dotnet_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7❤🔥6🥱2
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰14😁6👍2
🧠 Должен ли разработчик запоминать код
На Reddit вспыхнула классическая тема — запоминают ли профессиональные разработчики свой код.
Комментаторы разбились на два лагеря:
и
💬 Нужно ли запоминать код, или важно просто понимать, как он работает?
🐸 Библиотека шарписта
#entry_point
На Reddit вспыхнула классическая тема — запоминают ли профессиональные разработчики свой код.
Комментаторы разбились на два лагеря:
Если ты не помнишь, как работает твоя функция, ты просто копипастер!
и
Профессионал не держит в голове код, он держит в голове логику и подход. Код — деталь реализации
#entry_point
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8🔥1
📰 Дайджест недели
Что произошло в мире за последние семь дней.
— Разработчик как AI-код-ревьюер
Введение AI в .NET разработку повышает темпы, но успешная интеграция зависит от тщательной проверки: ревьюеру важно контролировать архитектуру, тесты и качество, иначе риски для поддержки и надёжности возрастают.
— .NET 10 готовит революцию в управлении памятью
Разработчики включат по умолчанию функцию DATAS, которая адаптирует размер кучи к текущим потребностям приложения.
— C# потерял две позиции в рейтинге PYPL
— Как вайб-кодинг меняет рынок IT-образования
— JetBrains .NET Days 2025
🐸 Библиотека шарписта
#async_news
Что произошло в мире за последние семь дней.
— Разработчик как AI-код-ревьюер
Введение AI в .NET разработку повышает темпы, но успешная интеграция зависит от тщательной проверки: ревьюеру важно контролировать архитектуру, тесты и качество, иначе риски для поддержки и надёжности возрастают.
— .NET 10 готовит революцию в управлении памятью
Разработчики включат по умолчанию функцию DATAS, которая адаптирует размер кучи к текущим потребностям приложения.
— C# потерял две позиции в рейтинге PYPL
— Как вайб-кодинг меняет рынок IT-образования
— JetBrains .NET Days 2025
#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Anonymous Poll
31%
Мемы
39%
Задачи с собесов
40%
Небольшие посты с кодом
23%
Новости
33%
Объемные посты с погружением