ООП не мертво. Вы просто пользуетесь им как молотком по клавиатуре
После каждой новой статьи с заголовком «ООП — это обман» хочется напомнить: ООП — это не набор шаблонов из книжек, а инженерный подход. Если проект страдает от наследования и DI, возможно, проблема не в ООП. А в том, как вы его применяете.
https://habr.com/ru/articles/908422/
После каждой новой статьи с заголовком «ООП — это обман» хочется напомнить: ООП — это не набор шаблонов из книжек, а инженерный подход. Если проект страдает от наследования и DI, возможно, проблема не в ООП. А в том, как вы его применяете.
https://habr.com/ru/articles/908422/
👍7
🗓 25 декабря в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «C# Developer».
На вебинаре:
Кому будет полезно:
- Для начинающих разработчиков, которые хотят создать своего первого бота для Telegram.
Что вы получите:
К концу занятия мы получим необходимые знания и умения для написания консольного приложения работающего с Telegram API, создадим Telegram бота.
🔗 Ссылка на регистрацию: https://vk.cc/cSpYgu
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
Anonymous Quiz
88%
MyClass obj = new MyClass();
2%
MyClass obj = MyClass();
2%
MyClass obj;
9%
obj = new MyClass();
🤔1
Если вы работаете ближе к железу или серверу, чем к интерфейсу, жизненный цикл программы в UNIX — необходимый инструмент.
💻 На открытом уроке разберём:
- чем программа отличается от процесса
- как процессы создаются и связываются между собой
- как терминал с ними взаимодействует
- что такое процесс-зомби и как грамотно завершать процессы.
Потренируемся работать с ps, kill и базовыми сценариями управления.
Занятие будет полезно embedded-разработчикам и системным администраторам, которые хотят понимать иерархию процессов, уверенно разбираться в зависаниях и обслуживать системы без угадываний.
📌 Встречаемся 23 декабря в 20:00 МСК, регистрация на бесплатный вебинар: https://vk.cc/cSsRNc
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
💻 На открытом уроке разберём:
- чем программа отличается от процесса
- как процессы создаются и связываются между собой
- как терминал с ними взаимодействует
- что такое процесс-зомби и как грамотно завершать процессы.
Потренируемся работать с ps, kill и базовыми сценариями управления.
Занятие будет полезно embedded-разработчикам и системным администраторам, которые хотят понимать иерархию процессов, уверенно разбираться в зависаниях и обслуживать системы без угадываний.
Вебинар проходит в преддверии старта курса «Программист С» и для тех, кто рассматривает обучение, мы подготовили специальное предложение.🎄 Учитесь в новом году по старым ценам!
Максимальная скидка 30% на обучение до 21.12.2025:
1 курс — тающая скидка 15% до 21.12
2 курса −25%, 3 курса −30%
Вы можете оставить заявку на странице курса. Учиться системно — выгоднее!
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
Всё про Generic Math в C#
С момента своего релиза в C# 11 и .NET 7 Обобщённая Математика так и осталась тёмной лошадкой в глазах программистов. Разработчики не понимают и не используют эту фичу.
В этой статье мы рассмотрим с нуля концепцию Generic Math, как она выглядит в C# и других языках программирования и почему вообще появилась. Также зароемся в «кишки» System.Numerics и узнаем, как применить в продакшне кровавого ынтэрпрайза.
https://habr.com/ru/companies/ruvds/articles/900006/
С момента своего релиза в C# 11 и .NET 7 Обобщённая Математика так и осталась тёмной лошадкой в глазах программистов. Разработчики не понимают и не используют эту фичу.
В этой статье мы рассмотрим с нуля концепцию Generic Math, как она выглядит в C# и других языках программирования и почему вообще появилась. Также зароемся в «кишки» System.Numerics и узнаем, как применить в продакшне кровавого ынтэрпрайза.
https://habr.com/ru/companies/ruvds/articles/900006/
Задачка: Проверка, содержит ли строка только одинаковые символы
Напишите функцию, которая возвращает
Примеры:
Пишите ваши варианты в комментариях. Ответ будет в канале вечером.
#задача
Напишите функцию, которая возвращает
true, если все символы в строке одинаковы, и false в противном случае.Примеры:
isIdentical("aaaaaa") ➞ true
isIdentical("aabaaa") ➞ false
isIdentical("ccccca") ➞ false
Пишите ваши варианты в комментариях. Ответ будет в канале вечером.
#задача
❤1
using System.Linq;
public class Program
{
public static bool isIdentical(string str)
{
return str.Distinct().Count() == 1;
}
}
#задача #ответ@csharpovich
🔥2💩2
Вакансии для C#/.NET разработчиков за последние 14 дней:
✓ Junior C# Developer. Офис (РФ)
✓ Full stack разработчик (Middle) Удалёнка (РФ, Беларусь), 150–200 т.р.
✓ Разработчик C#. Гибрид (Москва) или удалёнка, 200–400 т.р.
✓ Разработчик .Net. Удалёнка или офис, 250–500 т.р.
✓ Unity разработчик (Middle/Senior) Удалёнка, ЗП по договорённости
✓ Unity разработчик (Middle/Senior) Удалёнка (Нидерланды), ЗП по договорённости
#подборка #csharp
✓ Junior C# Developer. Офис (РФ)
✓ Full stack разработчик (Middle) Удалёнка (РФ, Беларусь), 150–200 т.р.
✓ Разработчик C#. Гибрид (Москва) или удалёнка, 200–400 т.р.
✓ Разработчик .Net. Удалёнка или офис, 250–500 т.р.
✓ Unity разработчик (Middle/Senior) Удалёнка, ЗП по договорённости
✓ Unity разработчик (Middle/Senior) Удалёнка (Нидерланды), ЗП по договорённости
#подборка #csharp
Telegram
C# вакансии
Junior C# Developer
Компания: IGS
Формат: офис (РФ)
Занятость: Full-time
Описание: https://telegra.ph/Junior-C-Developer-05-25
#office #junior #fulltime
Cвязаться с HR - @AnnaS_ithr
Компания: IGS
Формат: офис (РФ)
Занятость: Full-time
Описание: https://telegra.ph/Junior-C-Developer-05-25
#office #junior #fulltime
Cвязаться с HR - @AnnaS_ithr
❤1
Как делать видеоигры в 2025 году (без движка)
Я искренне считаю, что создание игр без огромного «многофункционального» движка может быть проще и интереснее, а часто и позволяет оптимальнее тратить вычислительные ресурсы. Я не делаю игру, в которой «есть всё», поэтому мне не нужны 90% фич, предоставляемых движками. Все мои игры обладают конкретным стилем и у меня есть конкретные способы работы с моими инструментами.
https://habr.com/ru/articles/911370/
Я искренне считаю, что создание игр без огромного «многофункционального» движка может быть проще и интереснее, а часто и позволяет оптимальнее тратить вычислительные ресурсы. Я не делаю игру, в которой «есть всё», поэтому мне не нужны 90% фич, предоставляемых движками. Все мои игры обладают конкретным стилем и у меня есть конкретные способы работы с моими инструментами.
https://habr.com/ru/articles/911370/
Вакансии для С# разработчиков
Ищите работу на С#? Устали пролистывать сотни неактуальных предложений?
Подписывайтесь на канал 👉 «Вакансии для С# разработчиков»
Что тебя ждёт:
✔️ Свежие вакансии каждый день
✔️ Junior, Middle, Senior — для любого уровня
✔️ Только проверенные работодатели
Не упусти шанс найти работу мечты!
🗂 Подписывайся и будь первым, кто узнает о новых вакансиях.
[Вакансии для С# разработчиков]
Ищите работу на С#? Устали пролистывать сотни неактуальных предложений?
Подписывайтесь на канал 👉 «Вакансии для С# разработчиков»
Что тебя ждёт:
Не упусти шанс найти работу мечты!
[Вакансии для С# разработчиков]
Please open Telegram to view this post
VIEW IN TELEGRAM
Что будет выведено на экран?
Anonymous Quiz
23%
6, 6, 6, 6, 6, 6
41%
1, 2, 3, 6, 6, 6
37%
1, 2, 3, 1, 2, 3
👍4
Fullstack Senior Разработчик
Компания: SSP SOFT
ЗП: 350 000 ₽
Формат: удалённо
Занятость: Full-time
Описание: https://news.1rj.ru/str/rabotacschap/507
Компания: SSP SOFT
ЗП: 350 000 ₽
Формат: удалённо
Занятость: Full-time
Описание: https://news.1rj.ru/str/rabotacschap/507
Telegram
C# вакансии
Fullstack Senior Разработчик
Компания: SSP SOFT
ЗП: 350 000 ₽
Формат: удалённо
Занятость: Full-time
Описание: https://telegra.ph/Fullstack-Senior-Razrabotchik-01-04-2
#remote #senior #fulltime
Cвязаться с HR - @sspsoft
Компания: SSP SOFT
ЗП: 350 000 ₽
Формат: удалённо
Занятость: Full-time
Описание: https://telegra.ph/Fullstack-Senior-Razrabotchik-01-04-2
#remote #senior #fulltime
Cвязаться с HR - @sspsoft
🎯 Открытый урок «Linq на практике».
🗓 14 января в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «C# Developer».
На вебинаре будут рассмотрены:
✔️ синтаксис операторов linq;
✔️ синтаксис компараторов, применяемых в linq-запросах;
✔️ примеры linq-запросов для наиболее популярных коллекций.
Кому будет полезно:
- данная тема будет интересна всем, кто работает с массивами данных в рамках .NET. Вы сможете эффективно использовать простой синтаксис для наиболее частых операций применяемых в рамках работы с коллекциями.
Что вы получите:
- вы сможете писать свои linq-запросы, опираясь на синтаксис linq.Будете знать разницу при применении тех или иных методов в рамках написания linq-запросов.
🔗 Ссылка на регистрацию: https://vk.cc/cTkWsE
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🗓 14 января в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «C# Developer».
На вебинаре будут рассмотрены:
Кому будет полезно:
- данная тема будет интересна всем, кто работает с массивами данных в рамках .NET. Вы сможете эффективно использовать простой синтаксис для наиболее частых операций применяемых в рамках работы с коллекциями.
Что вы получите:
- вы сможете писать свои linq-запросы, опираясь на синтаксис linq.Будете знать разницу при применении тех или иных методов в рамках написания linq-запросов.
🔗 Ссылка на регистрацию: https://vk.cc/cTkWsE
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
«Удалённо» управляем компьютером с доступом в BIOS
Сейчас для удалённого управления компьютером есть великое множество программ на любой цвет, вкус и запах. Но что, если мы хотим пойти немного дальше, и наши требования к удалённому управлению становятся немного жёстче:
Мы хотим иметь возможность не только работать в операционной системе, но и заходить в биос, или вообще эту систему переустановить.
По тем или иным причинам, компьютер не может быть подключён к сети, но управлять им мы от этого меньше не хотим, а рядом у нас есть компьютер, который в сети находиться может.
Но как это сделать? Вот этим мы тут и будем заниматься…
https://habr.com/ru/companies/ruvds/articles/847842/
Сейчас для удалённого управления компьютером есть великое множество программ на любой цвет, вкус и запах. Но что, если мы хотим пойти немного дальше, и наши требования к удалённому управлению становятся немного жёстче:
Мы хотим иметь возможность не только работать в операционной системе, но и заходить в биос, или вообще эту систему переустановить.
По тем или иным причинам, компьютер не может быть подключён к сети, но управлять им мы от этого меньше не хотим, а рядом у нас есть компьютер, который в сети находиться может.
Но как это сделать? Вот этим мы тут и будем заниматься…
https://habr.com/ru/companies/ruvds/articles/847842/
🎯 Открытый урок «Сетевой чат на C#».
🗓 22 января в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «C# Developer».
На вебинаре:
✔️ Рассмотрим написание сетевого приложения на C#.
✔️ Мы реализуем простые клиент и сервер с помощью одного из сетевых протоколов.
✔️ Также затронем темы многопточности и асинхронности
Кому будет полезно:
- Вебинар будет полезен начинающим разработчикам, желающим разобраться в сетевом и многопочном\асинхронном программировании.
Что вы получите:
- По итогам вебинара смогут проектировать сетевые приложения.
- Получат представление о работе сетевых протоколов, и многопоточности\асинхронности в приложениях.
- На практике попробуют разработать такое приложение.
🔗 Ссылка на регистрацию: https://vk.cc/cTr1Ep
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🗓 22 января в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «C# Developer».
На вебинаре:
Кому будет полезно:
- Вебинар будет полезен начинающим разработчикам, желающим разобраться в сетевом и многопочном\асинхронном программировании.
Что вы получите:
- По итогам вебинара смогут проектировать сетевые приложения.
- Получат представление о работе сетевых протоколов, и многопоточности\асинхронности в приложениях.
- На практике попробуют разработать такое приложение.
🔗 Ссылка на регистрацию: https://vk.cc/cTr1Ep
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🤔1
Какой из следующих вариантов НЕВЕРНЫЙ в контексте использования Dispose в C#?
Anonymous Quiz
39%
Метод Dispose вызывается автоматически сборщиком мусора, когда объект больше не используется
10%
Интерфейс IDisposable предоставляет метод Dispose для освобождения ресурсов, используемых объектом
18%
Блок using гарантирует, что метод Dispose будет вызван, даже если в блоке произойдет исключение
32%
Неуправляемые ресурсы должны быть освобождены вручную, чтобы избежать утечек памяти
👍4
Паттерн стратегия подходит, когда один и тот же сценарий можно выполнить несколькими способами, и выбор зависит от условий. Вместо большого
switch внутри сервиса разные варианты выносятся в отдельные классы с общим интерфейсом, а контекст просто делегирует работу выбранной реализации.Типовая схема такая. Есть интерфейс
Strategy, есть несколько конкретных стратегий, и есть контекст, который держит ссылку на стратегию и вызывает ее метод, не зная деталей реализации. Это снижает связность и позволяет добавлять новые варианты без переписывания старого кода.Мини пример на C#:
public interface IDiscountStrategy
{
decimal Apply(decimal total);
}
public sealed class RegularDiscount : IDiscountStrategy
{
public decimal Apply(decimal total) => total;
}
public sealed class VipDiscount : IDiscountStrategy
{
public decimal Apply(decimal total) => total * 0.9m;
}
public sealed class Checkout
{
private readonly IDiscountStrategy _discount;
public Checkout(IDiscountStrategy discount) => _discount = discount;
public decimal TotalWithDiscount(decimal total) => _discount.Apply(total);
}
Если стратегия выбирается по условиям, условие должно выбирать объект, а не ветку кода:
var checkout = serviceProvider.GetRequiredService<Checkout>();
var total = checkout.TotalWithDiscount(100m);
Выбор стратегии лучше делать на границе приложения, например в фабрике или при конфигурации через DI, потому что прямое создание зависимостей внутри сервиса жестко привязывает код к конкретной реализации.
Профессор Си
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Профессор Си
Уроки, советы, новости C#.
@anothertechrock
@aldrson
@anothertechrock
@aldrson
❤3👍3
⚡️ Готовые решения и лучшие практики для надёжной защиты API в архитектуре бэкенда
📅 26 января | 20:00 мск | бесплатно
Хотите, чтобы ваши API были надёжно защищены без потери производительности?
На вебинаре разберём:
- Типовые угрозы и уязвимости API
- Аутентификация и авторизация
- Защита на уровне архитектуры
- Роль API Gateway и прокси в обеспечении безопасности
- Лучшие практики проектирования защищённых API и контрактов
✅ После вебинара вы сможете:
- Проектировать API с учётом безопасности на уровне архитектуры
- Применять готовые решения для защиты API
- Осознанно балансировать между безопасностью, сложностью и производительностью
👉 Регистрация https://otus.pw/NvH2/
Занятие приурочено к старту курса "Software Architect" в OTUS.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
📅 26 января | 20:00 мск | бесплатно
Хотите, чтобы ваши API были надёжно защищены без потери производительности?
На вебинаре разберём:
- Типовые угрозы и уязвимости API
- Аутентификация и авторизация
- Защита на уровне архитектуры
- Роль API Gateway и прокси в обеспечении безопасности
- Лучшие практики проектирования защищённых API и контрактов
✅ После вебинара вы сможете:
- Проектировать API с учётом безопасности на уровне архитектуры
- Применять готовые решения для защиты API
- Осознанно балансировать между безопасностью, сложностью и производительностью
👉 Регистрация https://otus.pw/NvH2/
Занятие приурочено к старту курса "Software Architect" в OTUS.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
GroupBy в LINQ удобный и выразительный, поэтому его часто тянут в любой код, где надо что то посчитать по ключу.Проблема в том, что
GroupBy решает задачу группировки, а агрегация это частный случай, и за него иногда приходится платить лишним.Типичный паттерн выглядит так:
var totals = orders
.GroupBy(o => o.CustomerId)
.Select(g => new
{
CustomerId = g.Key,
Total = g.Sum(o => o.Amount)
})
.ToList();
Выглядит читабельно, но
GroupBy внутри строит структуру групп, а значит элементы буферизуются и создаются объекты группировок, даже если в итоге нужен только итоговый Total.Если нужна именно аккумуляция, проще и дешевле сделать один проход и складывать суммы в словарь:
var totals = new Dictionary<int, decimal>();
foreach (var order in orders)
{
if (totals.TryGetValue(order.CustomerId, out var current))
totals[order.CustomerId] = current + order.Amount;
else
totals[order.CustomerId] = order.Amount;
}
Это скучно, зато алгоритм читается буквально, один проход, явные обновления, без сюрпризов с материализацией групп.
Профессор Си
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Профессор Си
Уроки, советы, новости C#.
@anothertechrock
@aldrson
@anothertechrock
@aldrson
✍2