У меня 2️⃣ работы
Вы всё правильно прочитали, ведь помимо программирования я занимаюсь ведением этого telegram канала.
И это такая же сложная работа, поскольку в неё входит: выпуск нового контента, разбор кейсов, структурирование информации, создание сообщества, и, самое главное, донесение пользы и ценности.
Поэтому, если вы хотите поддержать мой канал и у вас есть Telegram Premium, то нужно обновить приложение telegram и заboostить канал, используя ссылку:
https://news.1rj.ru/str/steponeit?boost
Вы всё правильно прочитали, ведь помимо программирования я занимаюсь ведением этого telegram канала.
И это такая же сложная работа, поскольку в неё входит: выпуск нового контента, разбор кейсов, структурирование информации, создание сообщества, и, самое главное, донесение пользы и ценности.
Поэтому, если вы хотите поддержать мой канал и у вас есть Telegram Premium, то нужно обновить приложение telegram и заboostить канал, используя ссылку:
https://news.1rj.ru/str/steponeit?boost
Telegram
StepOne | Степан Минин
Проголосуйте за канал, чтобы он получил больше возможностей.
❤10😢4❤🔥2🙏2
Вас точно это удивит 😱
В IDE Rider появилась возможность записывать голосовушки вместо комментариев 🤯
Недавно, некий энтузиаст под ником
Сам плагин написан на Kotlin и имеет на GitHub уже 300+ звёзд.
Стали бы вы им пользоваться на проекте?
В IDE Rider появилась возможность записывать голосовушки вместо комментариев 🤯
Недавно, некий энтузиаст под ником
polina4096 зарелизил плагин в маркетплейсе JetBrains, который добавляет поддержку голосовых сообщений в IntelliJ-based средах разработки.Сам плагин написан на Kotlin и имеет на GitHub уже 300+ звёзд.
Стали бы вы им пользоваться на проекте?
🤯29🤔8🔥2😁1🤩1🍌1
StepOne | Степан Минин
Остался разочарован программой DotNext 2022 Autumn… В целом есть ощущение некоторой деградации мероприятия, потому что разговоры идут об одном и том же уже который год. Моё внимание особенно привлекли два доклада. 1. «Введение в Microsoft SignalR». Серьёзно?…
Позавчера прошла бесплатная конференция
Вот смотришь после этого на Dotnext, и не понимаешь, за что они просят деньги… 🤬
За очередное введение в ФП и пересказ всем известных паттернов? 🤔
Кстати, запись
Ловите ссылку - https://www.youtube.com/watch?v=8ddzYsZVIYY
JetBrains .NET Day Online ‘23Вот смотришь после этого на Dotnext, и не понимаешь, за что они просят деньги… 🤬
За очередное введение в ФП и пересказ всем известных паттернов? 🤔
Кстати, запись
JetBrains .NET Day Online ‘23 доступна сразу и для всех 👍🏻Ловите ссылку - https://www.youtube.com/watch?v=8ddzYsZVIYY
YouTube
JetBrains .NET Day Online '23
Join us on September 26 for a free virtual event where the most influential people in the .NET space will talk about topics they’re passionate about. The agenda for the event:
0:00 - Intro
9:20 - Recreating Wolfenstein 3D in F# by James Randall
1:05:33…
0:00 - Intro
9:20 - Recreating Wolfenstein 3D in F# by James Randall
1:05:33…
🔥14👍4❤1❤🔥1
StepOne | Степан Минин pinned «У меня 2️⃣ работы Вы всё правильно прочитали, ведь помимо программирования я занимаюсь ведением этого telegram канала. И это такая же сложная работа, поскольку в неё входит: выпуск нового контента, разбор кейсов, структурирование информации, создание сообщества…»
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