Обновить
112.3

C# *

Объектно-ориентированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Как Microsoft задушил Delphi, создав .NET: история одного программиста и одного чемодана

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров34K

Личный взгляд программиста с стажем на то, как Microsoft переманил Хейлсберга, создал .NET и вытеснил Delphi с технологической сцены. История предательства, перехода эпох и чемодана, который до сих пор скрипит в углу.

Как Microsoft задушил Delphi читать далее

Почему вы никогда не выучите все фреймворки

Время на прочтение5 мин
Количество просмотров4.1K

Когда вы в последний раз чувствовали себя настоящим экспертом в разработке? Лично я — где-то в тот момент, когда впервые написал программу, которая завершилась без ошибок. Программирование — это как бесконечный ремонт дома, в котором ты уже живёшь. Ещё вчера тебе казалось, что новая крыша будет решением всех проблем. А сегодня оказалось, что появились окна с автоподогревом, и без них дом вообще не дом. И, конечно, все соседи уже поставили такие.

Читать далее

Hangfire + Multi Tenancy

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров1.1K

Краткий туториал, как организовать обработку фоновых задач с приоритетами для условного SaaS продукта с разделением клиентских данных.

Читать далее

ref, out, in: как понять, кто из них тебе нужен

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров7.5K

Привет, Хабр!

Наверняка вы сталкивались с out, ref и in, но вот в чём штука — хотя выглядят они похоже, под капотом у них совершенно разные намерения. Один любит брать всё на себя, другой ждёт готового, третий — как библиотекарь: знает много, но не вмешивается. Сегодня разберёмся, когда и кого стоит звать в метод

Читать далее

Почему == и .Equals() — не одно и то же (и как это вас подставит)

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров20K

Привет, Хабр! Когда речь заходит о сравнении объектов, все почему-то решают, что это элементарный вопрос: ну есть же == и есть .Equals(), в чём проблема? На практике — проблема порой вырастает в целое шапито. Сегодня поговорим о весьма противоречивой парочке. Почему иногда, написав var a = b; if (a == b) { ... }, мы проверяем одно, а вызвав a.Equals(b) — совершенно другое? И главное: как это может довольно жестоко подставить нас в реальном коде, когда «ой, ну мы же не ожидали, что кто‑то переопределит оператор == так хитро».

Читать далее

Искусство Unit-тестирования: сокращаем Arrange до нуля

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров5.2K


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

Эта статья будет полезна .NET разработчикам, которые когда-либо сталкивались с написанием unit тестов, а также тим и техлидам в поиске оптимальной практики для своей команды.
Читать дальше →

Год изучения бэкенда: от растерянности к осознанному подходу

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров14K

В этой статье я делюсь своим личным опытом обучения программированию с нуля. Статья не про конкретные технологии. Это размышления, и подведение итогов за мой первый год пути как разработчика. Здесь я затрагиваю только ключевые этапы, которые на меня повлияли.

Статья подойдет тем, кто:

Боится ошибаться и откладывает старт.
Учится и не понимает зачем ему это.
Учится, но хочет услышать про чужой путь и сделать свои выводы.

Читать далее

Микросервисы на C#. Часть 3

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров4.8K

Вас не удивило, что проблема 1970-х — высокая сцепленность кода — дожила до 2010-го и способствовала изобретению микросервисов? Если так, то вы не удивитесь и узнав, что микросервисы тоже её не решили. Сегодня индустрия относится к ним скептически. За последние десять лет мы поняли, что они не стали панацеей. Архитекторы в мире IT — это не учёные, и даже не художники. Это шаманы. Удачно разбить систему на несцепленные части было сложно в 1970-е, сложно и сейчас.

При этом микросервисы привносят проблемы, которых не было в монолитных приложениях.

Первая часть

Вторая часть

Читать далее

Nuke, AppVeyor, GitVerse

Время на прочтение11 мин
Количество просмотров990

Недавно я работал над небольшим собственным проектом, представляющим собой Roslyn-генератор интерфейсов только для чтения для существующих классов. Когда я посчитал, что пришло время выкладывать результаты в виде NuGet-пакета, я решил, что нужно создать автоматизированный конвейер сборки. В прошлом я уже решал такую задачу с помощью AppVeyor. Но на этот раз имелись некоторые отличия. Во-первых, в прошлом я использовал Cake для описания задач сборки. На этот раз я решил попробовать Nuke. Последний обещает лучшую интеграцию с Visual Studio. Кроме того, я решил попробовать русский аналог GitHub — GitVerse. Что из этого получилось, читайте ниже.

Читать далее

Я стала злодейкой и теперь мои контроллеры лежат в библиотеках. Архитектурный паттерн SUFA в .net приложении

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров9K

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

Читать далее

Горе от ума, или как я писал виртуальную машину на C#

Уровень сложностиСредний
Время на прочтение16 мин
Количество просмотров6.8K

В этой статье я расскажу, как разрабатывал виртуальную машину на C#, столкнувшись с проблемами производительности и управления памятью, а также поделюсь опытом, который приобрел в ходе работы.

Читать далее

Микросервисы на C#. Часть 2

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров6K

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

Первая часть.

Читать далее

Микросервисы на C#. Часть 1

Уровень сложностиСредний
Время на прочтение14 мин
Количество просмотров8.2K

В любой сфере деятельности есть знаковые фигуры. Признанные эксперты. Лидеры мнений. Программирование не является исключением. Всем нам знакомы имена Кернигана, Кнута, Торвальдса, Скита. Не последним в этом ряду будет и имя Мартина Фаулера. Он написал книгу «Рефакторинг», которую обязан прочитать любой профессиональный программист. Он предложил термин Dependency Injection. Он участвовал в подготовке каталога действительно полезных паттернов проектирования. Он был одним из авторов Манифеста Гибкой Разработки Программ.

В 2014-м вместе с Джеймсом Льюисом Фаулер написал статью о микросервисах, которая начинается словами: «Термин „микросервисная архитектура‟ уже несколько лет применяется, чтобы описать способ проектирования программ»… Очевидно, теме микросервисов без малого десять лет. Можно ли добавить что-нибудь к тому, что уже было сказано и написано за это время?

Оказывается, можно.

Читать далее

Ближайшие события

Kakikata Shogun AI: Telegram-бот для изучения американского английского — и отличный pet-проект для стажёра

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров1.6K

Привет, Хабр!

Сегодня я хочу рассказать о создании простого, но полезного пет-проекта — Telegram-бота, который помогает пользователям улучшать их английский с помощью GPT-4. Проект отлично подойдет для начинающих разработчиков, так как использует современный стек технологий и имеет понятную архитектуру.

Читать далее

Как управлять памятью в C#: StructLayout

Время на прочтение6 мин
Количество просмотров2.3K

Привет, Хабр!

Сегодня рассмотрим тему, которая обычно ассоциируется с C или Rust, но никак не с C#. А именно — ручное управление памятью, байтовые смещения, бинарная сериализация и прочая низкоуровневые вещи. Зачем? Допустим, в одном из проектов потребовалось прочитать старый бинарный лог от С-подобной прошивки. Формат документации был: offset 0 — 1 byte: Type; offset 1 — 2 bytes: ID; offset 3 — 4 bytes: Timestamp; и т.д.

Разбирать всё это вручную с BinaryReader? Нет, спасибо. Можно воспользоваться StructLayout, FieldOffset, MemoryMappedFile, Unsafe.As<T>() и Span<byte>.

Читать далее

Сравнение 2х нишевых библиотек для написания миграций в монго

Уровень сложностиПростой
Время на прочтение13 мин
Количество просмотров1.2K

В работе веб-разработчика (в частности бекенд-разработчика) встречается много разных интересных и уникальных задач. В этой статье речь пойдёт о такой теме как написание миграций документно-ориентированной БД mongo. Как и в любой задаче у нас имеется несколько вариантов решения проблемы. Мы подробно разберём примеры использования 2х разных c#-библиотек, не углубляясь в детали реализации. Посмотрим их плюсы и минусы и выберем 1 из них для выполнения поставленной задачи. В конце нас ждёт небольшое сравнение производительности, так что пристегнитесь, ведь будет интересно.

Пристегнуться!

Инновационные технические решения и баги в исходном коде PowerShell

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров2.1K

PowerShell — известный инструмент от Microsoft. Но какие секреты сможет найти статический анализатор в его исходном коде? Посмотрим в этой статье.

Читать далее

Локальный AI-ассистент в почте: инструкция по применению

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров2.4K

Привет, Хабр! Это Eppie – p2p децентрализованная почта. У нас новости: мы добавили в Eppie ИИ. Сейчас расскажем, зачем, и как им пользоваться.

Локальный ИИ == приватный ИИ

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

Читать далее

Многопоточность. Снизу вверх. Потоки в языке C#

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров8.7K

Привет, Хабр! Это Дмитрий Бахтенков. Добро пожаловать в третью часть цикла статей «Многопоточность. Снизу вверх»! Мы уже разобрали процессор и операционную систему, а сегодня поговорим про использование потоков в .NET с помощью языка программирования C#.

Эта статья — обзор основных возможностей взаимодействия с потоками в .NET.

Читать далее

Тест от айти-джинна: справишься с рабочими задачами аналитика, тимлида, тестировщика?

Время на прочтение6 мин
Количество просмотров16K

Вечер пятницы, пустой коворкинг, посиделки над пет-проектом после работы. Накопилась усталость, навалились проблемы, выгорание не за (вы)горами. Очень сильно хочется кофе: он нужен любой ценой,. Даже сильнее хочется чего-то нового в жизни.

Знакомая ситуация? Тогда, айтишник, тебе повезло — под катом ты встретишь IT-джинна, который предлагает всем, кто ждёт перемен или просто хочет развлечься, отправиться в увлекательное путешествие: испытать силы и знания в трёх направлениях работы с продуктами компании Контур. 

Ты окажешься в роли системного аналитика, или C#-разработчика, или тестировщика и повзаимодействуешь с продуктами в сферах финтеха, документооборота и видеоконференций. 

В этом тесте ты сам выбираешь, каким будет твоё приключение. А джинн подстрахует в случае ошибки. Стартуем?

Начать квест

Вклад авторов