Ответ
Для профессионального роста я сочетаю несколько форматов:
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);
// И всё, блядь! Работаем с кусками памяти, ни одной лишней аллокации!
}
Красота же! Раньше на такое три строки кода и две новых строки в памяти уходило. А теперь — чих-пых, и готово. Понимаешь, зачем это нужно? Чтобы твоё приложение не жрало память, как не в себя, и работало быстро. Вот из таких вот кирпичиков и складывается профессионализм.
Ну и конференции, записи докладов. Иногда, когда делать нехуй, включаешь, слушаешь. Кто-то умный час рассказывает, как он неделю дебажил какую-то редкую хуйню. И ты такой: "О, так вот как это делается!". Запоминаешь, и когда у тебя такая же проблема вылезет — ты уже не будешь три дня головой об стену биться.
Короче, суть в чём: нельзя останавливаться. Технологии бегут вперёд с такой скоростью, что если на полгода зазевался — ты уже в лучшем случае вчерашний день, а в худшем — позавчерашний. Нужно постоянно искать, читать, пробовать и иногда, блядь, ошибаться, чтобы понять, как делать не надо. Вот и весь секрет.