StepOne | Степан Минин – Telegram
StepOne | Степан Минин
3.42K subscribers
247 photos
35 videos
6 files
312 links
StepOne by Степан Минин @ststphn

Твой первый шаг к успеху в программировании

Закрытый тг канал https://news.1rj.ru/str/tribute/app?startapp=slOA

По вопросам рекламы @Spiral_Yuri

Ютуб https://www.youtube.com/@steponeit
Download Telegram
У меня 2️⃣ работы

Вы всё правильно прочитали, ведь помимо программирования я занимаюсь ведением этого telegram канала.

И это такая же сложная работа, поскольку в неё входит: выпуск нового контента, разбор кейсов, структурирование информации, создание сообщества, и, самое главное, донесение пользы и ценности.

Поэтому, если вы хотите поддержать мой канал и у вас есть Telegram Premium, то нужно обновить приложение telegram и заboostить канал, используя ссылку:

https://news.1rj.ru/str/steponeit?boost
10😢4❤‍🔥2🙏2
Вас точно это удивит 😱

В IDE Rider появилась возможность записывать голосовушки вместо комментариев 🤯

Недавно, некий энтузиаст под ником polina4096 зарелизил плагин в маркетплейсе JetBrains, который добавляет поддержку голосовых сообщений в IntelliJ-based средах разработки.

Сам плагин написан на Kotlin и имеет на GitHub уже 300+ звёзд.

Стали бы вы им пользоваться на проекте?
🤯29🤔8🔥2😁1🤩1🍌1
StepOne | Степан Минин pinned «У меня 2️⃣ работы Вы всё правильно прочитали, ведь помимо программирования я занимаюсь ведением этого telegram канала. И это такая же сложная работа, поскольку в неё входит: выпуск нового контента, разбор кейсов, структурирование информации, создание сообщества…»
Вы используете Generic Math или abstract static в продакшн коде на своём проекте?
Anonymous Poll
8%
Да
44%
Нет
5%
Планируем
51%
Не понимаем зачем нужен инструмент
1
StepOne | Степан Минин
Вы используете Generic Math или abstract static в продакшн коде на своём проекте?
Всё, как я и ожидал

Обобщённая математика слишком "непонятный фрукт" для рядового C# разработчика - в проде это не используют, и при этом не планируют из-за отсутствия понимания инструмента.

Благо, вы подписаны на этот канал, и в этом месяце будет анонс доклада, в котором разложу по полочкам этот инструмент.

Расскажу полную историю - как и почему оно случилось, что именно в итоге получили, и вы поймёте стоит ли ввязываться в истории с Generic Math.
🔥21👍53🤯1
Throw

Перемещаясь по просторам интернета, наткнулся на простую, гибкую и расширяемую библиотеку для выбрасывания исключений в приложениях .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";
str.Throw().IfEquals("foo");

А дальше начинается так много всего, что лучше вам самим зайти на GitHub и увидеть это своими глазами😁
🔥12👍6😱3🥴32🤔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'ах с подробными примерами на…
На Хабре вышел анализ корпоративных блогов

"Нам интересны классические корпблоги, где компании делятся своим опытом и приносят читателю какую-то пользу по своему направлению, а за одно продвигают себя.

Однако на первых местах рейтинга уже много лет прочно обосновались несколько условно хостинговых компаний, создавших свои редакторские коллективы и представляющие собой самостоятельные СМИ.

Эти СМИ активно скупают контент крутых независимых авторов на Хабре, заказывают материалы на стороне и периодически делают всякие любопытные контент-проекты.
"

Получается, я крутой независимый автор 😎
👍83👏2
StepOne | Степан Минин
Всё, как я и ожидал Обобщённая математика слишком "непонятный фрукт" для рядового C# разработчика - в проде это не используют, и при этом не планируют из-за отсутствия понимания инструмента. Благо, вы подписаны на этот канал, и в этом месяце будет анонс…
В жизни случаются и поражения (история моей неудачи) 💔

Удивительно, но с этим докладом связана моя личная и долгая история.

Во время работы в Райффайзенбанке начался мой активный рост как специалиста.

Там было очень крутое внутреннее .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
👍176🔥4
😁28🌭32🤩2👏1🥱1🤣1
Отлаживать код в Rider смогут даже младенцы 👶

JetBrains продолжают развивать лучшую IDE для C# разработчиков и удивлять их новыми обновлениями.

В грядущей версии 2023.3 завезут, на мой взгляд, настоящую killer feature, которая называется
Debugger Data Flow Analysis.

Сила статического анализа позволит предсказывать движение потока данных и показывать во время отладки, в каком направлении продолжится выполнение кода.

Must have, can't wait 🔥
🔥29👍11🤯8🥴1
Повторите техдолг пожалуйста
😁21🤣7🤩2
Не в бровь, а в глаз 😁
Please open Telegram to view this post
VIEW IN TELEGRAM
💯20🤣14😁3
Примитивы синхронизации доступно 🙏

1️⃣ Monitor

Простейший в использовании примитив синхронизации в .NET, который используется для обеспечения взаимоисключающего доступа к распределённому ресурсу путём получения или высвобождения блокировки на специальном объекте.

Монитор предназначен для использования в рамках одного процесса, и чтобы это делать максимально эффективно и удобно в C# завезли оператор lock - синтаксический сахар над конструкцией try-Enter-finally-Exit.

2️⃣ Mutex

Мьютекс очень похож на Монитор:

▪️предоставляет эксклюзивный доступ к ресурсу

▪️также как и Монитор, требует того, чтобы поток, получивший Мьютекс, высвободил его

Однако, главная прелесть этого примитива в возможности межпроцессной синхронизации - достаточно присвоить ему строковое имя, чтобы разные сервисы могли открывать уже существующий примитив.

3️⃣ Semaphore

Семафор ограничивает число потоков, у которых есть конкурентный доступ к пулу распределённых ресурсов.

При этом потоки, которые пытаются пробиться к ресурсу будут ждать, пока любой поток с доступом высвободит семафор, поскольку, в отличие от Мьютекса, поток, заполучивший примитив, не обязан его высвобождать - это может сделать другой.

Семафоры бывают именованными, для синхронизации на уровне ОС, и локальными в рамках одного процесса.

4️⃣ SemaphoreSlim

Это облегчённая и оптимизированная версия локального Cемафора.

Согласно предписаниям Microsoft его рекомендуется использовать для синхронизации в одном процессе.

5️⃣ Interlocked

Этот класс стандартной библиотеки предоставляет возможность выполнять простые атомарные операции на переменных, такие как: сложение, инкремент и декремент, перестановка и условная перестановка на основе сравнения, а также чтение long значений.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍28🔥84
StepOne | Степан Минин
Примитивы синхронизации доступно 🙏 1️⃣ Monitor Простейший в использовании примитив синхронизации в .NET, который используется для обеспечения взаимоисключающего доступа к распределённому ресурсу путём получения или высвобождения блокировки на специальном…
Продолжение по просьбе подписчика 🔥

6️⃣ ReaderWriterLock

С помощью этого класса в любой момент времени можно получить или конкурентный доступ на чтение распределённого ресурса для множества потоков, или экслюзивный доступ на запись в него для одного, поэтому, в случае, когда ресурс нечасто меняется, будет обеспечена лучшая пропускная способность, чем с Монитором.

У читателей и писателей разные очереди. В момент времени, когда поток высвобождает писательскую блокировку, все потоки, ожидавшие блокировку на чтение, получают её. И, наоборот, когда все эти читательские блокировки отпускаются, поток в читательской очереди обрабатывается. Получается, что примитив чередует обработку коллекции потоков читателей и одного потока писателя.

7️⃣ ReaderWriterLockSlim

Этот примитив синхронизации очень похож на предыдущий, и рекомендуется к использованию в версиях .NET новее .NET Framework 3.5

Класс доработали с разных сторон: упрощены правила рекурсии и изменения состояния блокировки, исправлены многие случаи потенциального дедлока, а также общая производительность выше, чем у предшественника.

А вообще, помните друзья: лучший примитив синхронизации тот, который вам не понадобится, другими словами, не делите данные между потоками 😁
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍113❤‍🔥1