StepOne | Степан Минин
Поздравляю всех с Днём Знаний 🥳 Решил попробовать новый формат, поэтому держите дайджест лучших постов августа: 👉 Разбор кейса Авито 👉 Разоблачение мифологии грейдов 👉 Крик души про русский IT
По традиции, сложившейся месяц назад, публикую подборку лучших постов сентября:
📝 История самого крутого найма
📝 Как я консультировал подписчика по MongoDB
📝 Почему стоит забыть про премии
📝 История самого крутого найма
📝 Как я консультировал подписчика по MongoDB
📝 Почему стоит забыть про премии
❤5👍2🔥1
Вы используете Generic Math или abstract static в продакшн коде на своём проекте?
Anonymous Poll
8%
Да
44%
Нет
5%
Планируем
51%
Не понимаем зачем нужен инструмент
❤1
StepOne | Степан Минин
Вы используете Generic Math или abstract static в продакшн коде на своём проекте?
Всё, как я и ожидал
Обобщённая математика слишком "непонятный фрукт" для рядового C# разработчика - в проде это не используют, и при этом не планируют из-за отсутствия понимания инструмента.
Благо, вы подписаны на этот канал, и в этом месяце будет анонс доклада, в котором разложу по полочкам этот инструмент.
Расскажу полную историю - как и почему оно случилось, что именно в итоге получили, и вы поймёте стоит ли ввязываться в истории с
Обобщённая математика слишком "непонятный фрукт" для рядового C# разработчика - в проде это не используют, и при этом не планируют из-за отсутствия понимания инструмента.
Благо, вы подписаны на этот канал, и в этом месяце будет анонс доклада, в котором разложу по полочкам этот инструмент.
Расскажу полную историю - как и почему оно случилось, что именно в итоге получили, и вы поймёте стоит ли ввязываться в истории с
Generic Math.🔥21👍5❤3🤯1
Throw
Перемещаясь по просторам интернета, наткнулся на простую, гибкую и расширяемую библиотеку для выбрасывания исключений в приложениях .NET 6+.
Начинается всё с показательного примера, вот эта длинная запись:
Перемещаясь по просторам интернета, наткнулся на простую, гибкую и расширяемую библиотеку для выбрасывания исключений в приложениях .NET 6+.
Начинается всё с показательного примера, вот эта длинная запись:
var str = "foo";Превращается в:
if (string.Equals(str, "foo", StringComparison.Ordinal)
{
throw new ArgumentException("String should not be equal to 'foo'.", nameof(str));
}
var str = "foo";А дальше начинается так много всего, что лучше вам самим зайти на GitHub и увидеть это своими глазами😁
str.Throw().IfEquals("foo");
GitHub
GitHub - amantinband/throw: A simple, fluent, extensible, and fully customizable library for throwing exceptions for projects using…
A simple, fluent, extensible, and fully customizable library for throwing exceptions for projects using .NET 6+ - amantinband/throw
🔥12👍6😱3🥴3❤2🤔1
Запечатанная тайна
Всем известно, что если очень хочется запретить наследовать класс, то можно:
Экспериментируя в своём пет-проекте, я случайно узнал об ещё одной возможности этого ключевого слова.
Если мы хотим запретить переопределение метода, то это тоже можно сделать:
А вам приходилось запрещать переопределение метода в коммерческой практике?
sealed о которой ты мог не знать 😱Всем известно, что если очень хочется запретить наследовать класс, то можно:
sealed class Foo
{
public void Bar()
{
Console.WriteLine("StepOne");
}
}
Экспериментируя в своём пет-проекте, я случайно узнал об ещё одной возможности этого ключевого слова.
Если мы хотим запретить переопределение метода, то это тоже можно сделать:
class XПопытка переопределить метод, помеченный
{
protected virtual void F() { Console.WriteLine("X.F"); }
protected virtual void F2() { Console.WriteLine("X.F2"); }
}
class Y : X
{
sealed protected override void F() { Console.WriteLine("Y.F"); }
protected override void F2() { Console.WriteLine("Y.F2"); }
}
class Z : Y
{
protected override void F2() { Console.WriteLine("Z.F2"); }
}
sealed, заставит компилятор завершить работу с ошибкой CS0239.А вам приходилось запрещать переопределение метода в коммерческой практике?
👍9🤯4🔥3😁1
StepOne | Степан Минин
Подписчик на консультации расспрашивал меня про функциональное программирование В результате, возникла идея написать статью про один из основных аспектов в ФП. В ней разложил по полочкам всё об ad-hoc полиморфизме и type class'ах с подробными примерами на…
На Хабре вышел анализ корпоративных блогов
"Нам интересны классические корпблоги, где компании делятся своим опытом и приносят читателю какую-то пользу по своему направлению, а за одно продвигают себя.
Однако на первых местах рейтинга уже много лет прочно обосновались несколько условно хостинговых компаний, создавших свои редакторские коллективы и представляющие собой самостоятельные СМИ.
Эти СМИ активно скупают контент крутых независимых авторов на Хабре, заказывают материалы на стороне и периодически делают всякие любопытные контент-проекты."
Получается, я крутой независимый автор 😎
"Нам интересны классические корпблоги, где компании делятся своим опытом и приносят читателю какую-то пользу по своему направлению, а за одно продвигают себя.
Однако на первых местах рейтинга уже много лет прочно обосновались несколько условно хостинговых компаний, создавших свои редакторские коллективы и представляющие собой самостоятельные СМИ.
Эти СМИ активно скупают контент крутых независимых авторов на Хабре, заказывают материалы на стороне и периодически делают всякие любопытные контент-проекты."
Получается, я крутой независимый автор 😎
Хабр
Краткий анализ топ 20 блогов компаний за сентябрь: накрутки рейтинга и малополезный контент
Есть несколько причин, почему на Хабре в корпблогах до сих пор обнаруживается масса малополезного и странного контента. Но для компаний из первой двадцатки рейтинга и его середины эти причины будут...
👍8❤3👏2
StepOne | Степан Минин
Всё, как я и ожидал Обобщённая математика слишком "непонятный фрукт" для рядового C# разработчика - в проде это не используют, и при этом не планируют из-за отсутствия понимания инструмента. Благо, вы подписаны на этот канал, и в этом месяце будет анонс…
В жизни случаются и поражения (история моей неудачи) 💔
Удивительно, но с этим докладом связана моя личная и долгая история.
Во время работы в Райффайзенбанке начался мой активный рост как специалиста.
Там было очень крутое внутреннее .NET сообщество, которое не только тянуло наверх, но и продвигало идею делиться своим ростом.
Во многом, прообразом моего канала
Даже чуть не стал там ведущим рубрики - правда звёзды не сошлись, поскольку ушёл из компании.
Также была развита культура митапов: регулярно проводились встречи, на которых сеньористые сеньоры с бородой делились опытом с зелёными джунами.
Как вы могли догадаться, начал читать доклады именно на этих митапах, и именно тогда поставил себе цель - выступить на DotNext.
Как бы я не ругался на некоторые пункты программ последних сезонов, это крупнейшая и старейшая конференция для всех, кто занимается .NET-разработкой, и просто знаковое мероприятие.
Первая подача была обречена на провал: она случилась так поздно, что заявку не рассмотрели.
Затем, программный координатор пригласила участвовать в Call For Papers на сезон 2023 и, уже собрав багаж тем и статей на Хабре, подал аж две штуки.
И тут всё оказалось не просто - первый доклад не подходил по формату, в итоге его перехватила Стачка, а второй получил все аппрувы уже после упаковки расписания.
Так что цели пока не достиг.
Несмотря на это, путь оказался интересным и насыщенным: я стал публичным спикером, побывал в новом для себя городе и совсем скоро анонсирую новое выступление.
Поэтому сдаваться не намерен, продолжаю движение по намеченной траектории 💪
Удивительно, но с этим докладом связана моя личная и долгая история.
Во время работы в Райффайзенбанке начался мой активный рост как специалиста.
Там было очень крутое внутреннее .NET сообщество, которое не только тянуло наверх, но и продвигало идею делиться своим ростом.
Во многом, прообразом моего канала
StepOne был чат сообщества в Slack.Даже чуть не стал там ведущим рубрики - правда звёзды не сошлись, поскольку ушёл из компании.
Также была развита культура митапов: регулярно проводились встречи, на которых сеньористые сеньоры с бородой делились опытом с зелёными джунами.
Как вы могли догадаться, начал читать доклады именно на этих митапах, и именно тогда поставил себе цель - выступить на DotNext.
Как бы я не ругался на некоторые пункты программ последних сезонов, это крупнейшая и старейшая конференция для всех, кто занимается .NET-разработкой, и просто знаковое мероприятие.
Первая подача была обречена на провал: она случилась так поздно, что заявку не рассмотрели.
Затем, программный координатор пригласила участвовать в Call For Papers на сезон 2023 и, уже собрав багаж тем и статей на Хабре, подал аж две штуки.
И тут всё оказалось не просто - первый доклад не подходил по формату, в итоге его перехватила Стачка, а второй получил все аппрувы уже после упаковки расписания.
Так что цели пока не достиг.
Несмотря на это, путь оказался интересным и насыщенным: я стал публичным спикером, побывал в новом для себя городе и совсем скоро анонсирую новое выступление.
Поэтому сдаваться не намерен, продолжаю движение по намеченной траектории 💪
👍17❤🔥8👏5🔥1🏆1
Вчера на паре в магистратуре получил классный инсайт:
Если руководитель не растёт, то членам команды повышений можно не ждать.
Распутывается этот клубок предельно просто.
Команда делает некий продукт/проект/фичу.
Руководитель отвечает за результаты этого процесса перед вышестоящим руководством.
Если результата нет, то маловероятно, что владельцы мешка денег дадут ресурсов на расширение, увеличение бюджета или чего-то ещё.
Так что в глазах членов команды он руководитель, а для ребят, принимающих решения, он такой же подчинённый.
Если руководитель не растёт, то членам команды повышений можно не ждать.
Распутывается этот клубок предельно просто.
Команда делает некий продукт/проект/фичу.
Руководитель отвечает за результаты этого процесса перед вышестоящим руководством.
Если результата нет, то маловероятно, что владельцы мешка денег дадут ресурсов на расширение, увеличение бюджета или чего-то ещё.
Так что в глазах членов команды он руководитель, а для ребят, принимающих решения, он такой же подчинённый.
👍9😱3🤯2🔥1
Not all heroes wear capes
Товарищ захотел сменить работу, составил резюме, вышел на рынок, и…
Оно не сработало от слова совсем.
Хотя за плечами 6 лет опыта, из которых 3 года в Яндексе на 2х ключевых проектах компании.
Тогда он обратился ко мне, и всего за час работы удалось добиться ошеломительного результата - релевантные приглашения сразу после размещения.
Так что если вы хотите прокачать своё резюме и быть уверенными, что не облажаетесь, пишите
@ststphn
Товарищ захотел сменить работу, составил резюме, вышел на рынок, и…
Оно не сработало от слова совсем.
Хотя за плечами 6 лет опыта, из которых 3 года в Яндексе на 2х ключевых проектах компании.
Тогда он обратился ко мне, и всего за час работы удалось добиться ошеломительного результата - релевантные приглашения сразу после размещения.
Так что если вы хотите прокачать своё резюме и быть уверенными, что не облажаетесь, пишите
@ststphn
👍17❤6🔥4
StepOne | Степан Минин
стачка_полиморфные-контракты.pdf
Запись выступления на Стачке 💪
Наконец-то стала доступна!
Бекендеры были в шоке, когда узнали, что при перекладывании JSON'ов можно...😅
Наконец-то стала доступна!
Бекендеры были в шоке, когда узнали, что при перекладывании JSON'ов можно...😅
YouTube
Степан Минин - Внедрение полиморфных контрактов в сервисы на .NET 7
Направление: Разработка
Секция: С# & .NET
Спикер:
Степан Минин
Ведущий разработчик C#
Москва
Описание:
Не так давно состоялся релиз седьмой версии платформы .NET. Благодаря нему коробочный Json сериализатор платформы ушёл вперёд семимильными шагами.…
Секция: С# & .NET
Спикер:
Степан Минин
Ведущий разработчик C#
Москва
Описание:
Не так давно состоялся релиз седьмой версии платформы .NET. Благодаря нему коробочный Json сериализатор платформы ушёл вперёд семимильными шагами.…
🔥15👍8❤5😁2
Отлаживать код в Rider смогут даже младенцы 👶
JetBrains продолжают развивать лучшую IDE для C# разработчиков и удивлять их новыми обновлениями.
В грядущей версии
Debugger Data Flow Analysis.
Сила статического анализа позволит предсказывать движение потока данных и показывать во время отладки, в каком направлении продолжится выполнение кода.
Must have, can't wait 🔥
JetBrains продолжают развивать лучшую IDE для C# разработчиков и удивлять их новыми обновлениями.
В грядущей версии
2023.3 завезут, на мой взгляд, настоящую killer feature, которая называетсяDebugger Data Flow Analysis.
Сила статического анализа позволит предсказывать движение потока данных и показывать во время отладки, в каком направлении продолжится выполнение кода.
Must have, can't wait 🔥
🔥29👍11🤯8🥴1
Please open Telegram to view this post
VIEW IN TELEGRAM
💯20🤣14😁3
Примитивы синхронизации доступно 🙏
1️⃣
Простейший в использовании примитив синхронизации в .NET, который используется для обеспечения взаимоисключающего доступа к распределённому ресурсу путём получения или высвобождения блокировки на специальном объекте.
Монитор предназначен для использования в рамках одного процесса, и чтобы это делать максимально эффективно и удобно в C# завезли оператор
2️⃣
▪️предоставляет эксклюзивный доступ к ресурсу
▪️также как и Монитор, требует того, чтобы поток, получивший Мьютекс, высвободил его
Однако, главная прелесть этого примитива в возможности межпроцессной синхронизации - достаточно присвоить ему строковое имя, чтобы разные сервисы могли открывать уже существующий примитив.
3️⃣
При этом потоки, которые пытаются пробиться к ресурсу будут ждать, пока любой поток с доступом высвободит семафор, поскольку, в отличие от Мьютекса, поток, заполучивший примитив, не обязан его высвобождать - это может сделать другой.
Семафоры бывают именованными, для синхронизации на уровне ОС, и локальными в рамках одного процесса.
4️⃣
Согласно предписаниям Microsoft его рекомендуется использовать для синхронизации в одном процессе.
5️⃣
Monitor Простейший в использовании примитив синхронизации в .NET, который используется для обеспечения взаимоисключающего доступа к распределённому ресурсу путём получения или высвобождения блокировки на специальном объекте.
Монитор предназначен для использования в рамках одного процесса, и чтобы это делать максимально эффективно и удобно в C# завезли оператор
lock - синтаксический сахар над конструкцией try-Enter-finally-Exit.Mutex
Мьютекс очень похож на Монитор: ▪️предоставляет эксклюзивный доступ к ресурсу
▪️также как и Монитор, требует того, чтобы поток, получивший Мьютекс, высвободил его
Однако, главная прелесть этого примитива в возможности межпроцессной синхронизации - достаточно присвоить ему строковое имя, чтобы разные сервисы могли открывать уже существующий примитив.
Semaphore
Семафор ограничивает число потоков, у которых есть конкурентный доступ к пулу распределённых ресурсов.При этом потоки, которые пытаются пробиться к ресурсу будут ждать, пока любой поток с доступом высвободит семафор, поскольку, в отличие от Мьютекса, поток, заполучивший примитив, не обязан его высвобождать - это может сделать другой.
Семафоры бывают именованными, для синхронизации на уровне ОС, и локальными в рамках одного процесса.
SemaphoreSlim
Это облегчённая и оптимизированная версия локального Cемафора.Согласно предписаниям Microsoft его рекомендуется использовать для синхронизации в одном процессе.
Interlocked
Этот класс стандартной библиотеки предоставляет возможность выполнять простые атомарные операции на переменных, такие как: сложение, инкремент и декремент, перестановка и условная перестановка на основе сравнения, а также чтение long значений.Please open Telegram to view this post
VIEW IN TELEGRAM
👍28🔥8❤4
StepOne | Степан Минин
Примитивы синхронизации доступно 🙏 1️⃣ Monitor Простейший в использовании примитив синхронизации в .NET, который используется для обеспечения взаимоисключающего доступа к распределённому ресурсу путём получения или высвобождения блокировки на специальном…
Продолжение по просьбе подписчика 🔥
6️⃣
У читателей и писателей разные очереди. В момент времени, когда поток высвобождает писательскую блокировку, все потоки, ожидавшие блокировку на чтение, получают её. И, наоборот, когда все эти читательские блокировки отпускаются, поток в читательской очереди обрабатывается. Получается, что примитив чередует обработку коллекции потоков читателей и одного потока писателя.
7️⃣
Класс доработали с разных сторон: упрощены правила рекурсии и изменения состояния блокировки, исправлены многие случаи потенциального дедлока, а также общая производительность выше, чем у предшественника.
А вообще, помните друзья: лучший примитив синхронизации тот, который вам не понадобится, другими словами, не делите данные между потоками 😁
ReaderWriterLock
С помощью этого класса в любой момент времени можно получить или конкурентный доступ на чтение распределённого ресурса для множества потоков, или экслюзивный доступ на запись в него для одного, поэтому, в случае, когда ресурс нечасто меняется, будет обеспечена лучшая пропускная способность, чем с Монитором.У читателей и писателей разные очереди. В момент времени, когда поток высвобождает писательскую блокировку, все потоки, ожидавшие блокировку на чтение, получают её. И, наоборот, когда все эти читательские блокировки отпускаются, поток в читательской очереди обрабатывается. Получается, что примитив чередует обработку коллекции потоков читателей и одного потока писателя.
ReaderWriterLockSlim
Этот примитив синхронизации очень похож на предыдущий, и рекомендуется к использованию в версиях .NET новее .NET Framework 3.5Класс доработали с разных сторон: упрощены правила рекурсии и изменения состояния блокировки, исправлены многие случаи потенциального дедлока, а также общая производительность выше, чем у предшественника.
А вообще, помните друзья: лучший примитив синхронизации тот, который вам не понадобится, другими словами, не делите данные между потоками 😁
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍11❤3❤🔥1
StepOne | Степан Минин
Всё, как я и ожидал Обобщённая математика слишком "непонятный фрукт" для рядового C# разработчика - в проде это не используют, и при этом не планируют из-за отсутствия понимания инструмента. Благо, вы подписаны на этот канал, и в этом месяце будет анонс…
Как в C# 11 появилась обобщённая математика ❓
7 ноября при поддержке CUSTIS состоится MskDotNet Meetup #55, где я выступлю с докладом.
В рамках доклада рассмотрим с нуля концепцию обобщённой математики, как она выглядит в C# 11, как могла выглядеть в предыдущих версиях языка и почему вообще появилась.
Также зароемся в кишки
Чтобы посетить митап оффлайн зарегистрируйтесь по ссылке, там вся необходимая информация.
Для онлайн слушателей будет организована трансляция.
7 ноября при поддержке CUSTIS состоится MskDotNet Meetup #55, где я выступлю с докладом.
В рамках доклада рассмотрим с нуля концепцию обобщённой математики, как она выглядит в C# 11, как могла выглядеть в предыдущих версиях языка и почему вообще появилась.
Также зароемся в кишки
System.Numerics, и узнаем, в какой продакшн в скором времени заделиверится эта фича.Чтобы посетить митап оффлайн зарегистрируйтесь по ссылке, там вся необходимая информация.
Для онлайн слушателей будет организована трансляция.
Please open Telegram to view this post
VIEW IN TELEGRAM
mskdotnet.timepad.ru
MskDotNet Meetup #55 / События на TimePad.ru
🔥12⚡5❤4👍2
StepOne | Степан Минин
По традиции, сложившейся месяц назад, публикую подборку лучших постов сентября: 📝 История самого крутого найма 📝 Как я консультировал подписчика по MongoDB 📝 Почему стоит забыть про премии
В Москве уже успело выпасть 7 сантиметров снежного покрова, а я успел собрать для вас самые важные посты октября 🤩
💎 Запись моего спикерского дебюта на Стачке
💎 История о том, как этот дебют состоялся
💎 Самое простое объяснение примитивов синхронизации
💎 Самая ожидаемая фича Rider в 2023 году
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥2❤1
Как разобраться в новом проекте: пошаговая инструкция 🤩
Каждый разработчик при выходе на новую работу, скачав код из корпоративного репозитория, сталкивался с мыслью о том, что он не понимает написанного на экране.
Дело тут не в компетенции, а в исторически сложившихся особенностях системы, которые отличаются от компании к компании.
При использовании следующих рекомендаций появится шанс приносить ценность ещё до окончания испытательного срока.
1️⃣ Общайтесь с аналитиками, расспрашивайте их про проект, попросите показать документацию и так далее.
Именно эти люди превращают непонятные бизнес-требования в структурированные технические задачи.
2️⃣ Если нет аналитиков, документации или что-то из этого в плохом состоянии, то смело бросайтесь выполнять много разноплановых мелких задач.
В большинстве проектов есть задачи техдолга, покрывающие разные участки системы: работа с ними позволит сформировать поверхностное представление, которое со временем станет проще углублять.
3️⃣ О качественной аналитике на проекте никогда не слышали, задач для погружения не дают - тогда бегите писать тесты!
Во-первых, тесты нужны всем. Во-вторых, их написание вырабатывает понимание того, как выполняется конкретный код, а, следовательно, какую задачу он решает.
Каждый разработчик при выходе на новую работу, скачав код из корпоративного репозитория, сталкивался с мыслью о том, что он не понимает написанного на экране.
Дело тут не в компетенции, а в исторически сложившихся особенностях системы, которые отличаются от компании к компании.
При использовании следующих рекомендаций появится шанс приносить ценность ещё до окончания испытательного срока.
Именно эти люди превращают непонятные бизнес-требования в структурированные технические задачи.
В большинстве проектов есть задачи техдолга, покрывающие разные участки системы: работа с ними позволит сформировать поверхностное представление, которое со временем станет проще углублять.
Во-первых, тесты нужны всем. Во-вторых, их написание вырабатывает понимание того, как выполняется конкретный код, а, следовательно, какую задачу он решает.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍8⚡3🤯3