Что читаешь для саморазвития?

Ответ

Для профессионального роста я сочетаю несколько форматов:

1. Книги по фундаментальным знаниям:

  • "CLR via C#" (Джеффри Рихтер) — для глубокого понимания работы .NET runtime, управления памятью, многопоточности.
  • "Чистая архитектура" и "Чистый код" (Роберт Мартин) — для формирования мышления в терминах архитектурных принципов и написания поддерживаемого кода.
  • "Паттерны проектирования" ("Банда четырёх") — как справочник по классическим решениям.

2. Технические блоги и рассылки:

  • Официальный .NET Blog и Microsoft DevBlogs — для отслеживания нововведений.
  • Рассылки вроде C# Weekly и DotNetCurry — чтобы быть в курсе лучших практик и интересных библиотек.

3. Анализ реального кода:

  • Изучаю open-source проекты на GitHub (например, dotnet/runtime, aspnetcore), чтобы понимать, как решаются сложные задачи на практике.
  • Смотрю записи докладов с конференций (DotNext, DevWeek, NDC).

Пример из недавнего изучения: Читал про оптимизацию работы с памятью в .NET с использованием Span<T> и Memory<T>, что позволяет избегать лишних аллокаций.

// Пример: эффективный парсинг строки без создания подстрок
ReadOnlySpan<char> input = "key=value".AsSpan();
int separatorIndex = input.IndexOf('=');
if (separatorIndex != -1)
{
    var keySpan = input.Slice(0, separatorIndex);
    var valueSpan = input.Slice(separatorIndex + 1);
    // Работаем со Span'ами, не создавая новых строк
}

Такой подход помогает постоянно обновлять знания и применять современные практики в работе.

Ответ 18+ 🔞

Да ты посмотри, какие у нас тут книжные черви завелись! Ну ладно, раз уж спросил, как мозги прокачиваю, расскажу, но без соплей.

Во-первых, книги. Без них нихуя, как ни крути. Но не абы какие, а те, что по делу бьют. Вот, например, "CLR via C#" от Рихтера. Это ж, блядь, не книжка, а такая техническая библия, от которой понимаешь, как эта сука-среда .NET внутри устроена. Почему сборщик мусора иногда ведёт себя как капризная баба, откуда берутся эти ёбаные утечки памяти и как многопоточность может так накрыть медным тазом, что потом три дня разгребаешь. Читаешь — и волосы дыбом встают, но зато потом смотришь на код уже другими глазами.

Потом идут "Чистый код" и "Чистая архитектура" от дяди Боба. Это, можно сказать, инструкция по выживанию в долгосрочном проекте. Чтобы через полгода не прийти на работу с мыслью "какой же мудак это писал", а посмотреть и понять — а, это я и был тот мудак, но теперь исправлюсь. Учит не выстраивать эти карточные домики из классов, которые от чиха развалятся.

Ну и классика — "Паттерны проектирования" от банды четырёх. Без неё вообще как без рук. Хотя, если честно, иногда читаешь и думаешь — да они просто умными словами описали то, что все и так через жопу делают. Но знать надо, а то на собеседовании опозоришься.

Но одними книгами сыт не будешь, они как фундамент. А сверху уже надо свежак подкладывать. Поэтому блоги и рассылки — мои лучшие друзья. Официальный .NET Blog, чтобы знать, что эти ребята из Microsoft нам нового впарить хотят. А то проснёшься — а у тебя половина API устарела, пиздец. Рассылки вроде C# Weekly — там народ часто какую-то дичь интересную выкладывает, библиотеки, о которых официально никто не кричит, но которые жизнь облегчают.

Самое же вкусное — это лезть в чужой код. Открываешь какой-нибудь опенсорсный проект на GitHub, типа самого dotnet/runtime, и просто читаешь, как будто детектив. Смотришь, как они там, умные, сложные проблемы решают. Иногда такой перл найдёшь, что сидишь и охуеваешь от простоты и гениальности решения. Или наоборот, видишь костыль размером с Эйфелеву башню и думаешь — слава богу, я не один такой идиот.

Недавно вот, например, вникал в эту всю тему с Span<T> и Memory<T>. Раньше-то мы строки парсили — нарезали их на куски, создавали кучу новых объектов, сборщик мусора потом плакал кровавыми слезами. А теперь можно делать вот так элегантно:

ReadOnlySpan<char> input = "key=value".AsSpan();
int separatorIndex = input.IndexOf('=');
if (separatorIndex != -1)
{
    var keySpan = input.Slice(0, separatorIndex);
    var valueSpan = input.Slice(separatorIndex + 1);
    // И всё, блядь! Работаем с кусками памяти, ни одной лишней аллокации!
}

Красота же! Раньше на такое три строки кода и две новых строки в памяти уходило. А теперь — чих-пых, и готово. Понимаешь, зачем это нужно? Чтобы твоё приложение не жрало память, как не в себя, и работало быстро. Вот из таких вот кирпичиков и складывается профессионализм.

Ну и конференции, записи докладов. Иногда, когда делать нехуй, включаешь, слушаешь. Кто-то умный час рассказывает, как он неделю дебажил какую-то редкую хуйню. И ты такой: "О, так вот как это делается!". Запоминаешь, и когда у тебя такая же проблема вылезет — ты уже не будешь три дня головой об стену биться.

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