Ответ
Мой подход к саморазвитию — постоянное и сбалансированное обучение через теорию и практику.
1. Потребление информации:
- Технические блоги и новости: Подписки на Dev.to, Stack Overflow Blog, официальные блоги (.NET, AWS).
- Подкасты: DotNet Rocks, The Changelog — слушаю в дороге.
- Книги: Комбинирую фундаментальные ("CLR via C#", "Design Patterns") и практические ("Code That Fits in Your Head").
- Конференции и митапы: Смотрю записи DotNetConf, посещаю локальные митапы для нетворкинга.
2. Практика — ключевой элемент:
- Пет-проекты: Создаю небольшие проекты для опробования новых технологий (например, микросервис на gRPC, SPA с Blazor WASM).
- Решение задач: Регулярно практикуюсь на LeetCode, Advent of Code для поддержания алгоритмических навыков.
- Участие в open-source: Изучаю код популярных библиотек, иногда вношу мелкие правки (исправление багов, документация) или создаю свои утилиты.
3. Применение в работе:
- Внедряю изученные best practices (например, внедрение зависимостей, паттерны).
- Предлагаю и провожу рефакторинг устаревшего кода, применяя новые знания.
- Делиться знаниями внутри команды через код-ревью или мини-доклады — лучший способ закрепить материал.
Пример практики новой фичи C#:
// Изучение record struct и global using в C# 10
// GlobalUsing.cs
global using System;
global using System.Collections.Generic;
// Point.cs - неизменяемая структура с автоматической реализацией Equality
public readonly record struct Point(int X, int Y)
{
public double DistanceFromOrigin => Math.Sqrt(X * X + Y * Y);
}
// Использование
var p1 = new Point(1, 2);
var p2 = new Point(1, 2);
Console.WriteLine(p1 == p2); // True (значимое сравнение)
Console.WriteLine(p1); // Point { X = 1, Y = 2 } Ответ 18+ 🔞
Давай я тебе расскажу, как я свой мозг прокачиваю, чтобы не превратиться в старого пердуна, который на COBOL только и может. А то ведь так и до пенсии в аутсайдерах просидеть.
1. Жрать информацию, как не в себя.
- Блоги и новости: Подписан на всякие Dev.to, Stack Overflow Blog, официальные блоги .NET и AWS. Читаю, когда в сортире сижу или кофе пью. Без этого вообще нихуя не понятно, куда ветер дует.
- Подкасты: DotNet Rocks, The Changelog — в уши в дороге. А то в пробке только материться, так хоть польза какая-то.
- Книги: Беру и толстые талмуды вроде "CLR via C#", и что-то полегче, практическое. Иначе засыпаешь на третьей странице, ебать.
- Конференции: Записи DotNetConf гляжу, на местные тусовки иногда заваливаюсь. Послушать умных людей и понять, что ты ещё не такой конченый.
2. Без практики — нихуя. Теория — это, конечно, круто, но если руками не трогать, то всё это пиздеж на постном масле.
- Пет-проекты: Начинаю какую-нибудь хуйню, чтобы новую технологию попробовать. Типа микросервис на gRPC или интерфейс на Blazor. Главное — не залипнуть на год, а то получится очередной велосипед с квадратными колёсами.
- Задачки: LeetCode, Advent of Code. Это как зарядка для мозгов. А то они там совсем атрофируются, если только бизнес-логику жевать.
- Open-source: Заглядываю в код нормальных библиотек, иногда баг поправлю или описание допишу. Не боги горшки обжигают, в конце концов.
3. Тащить это всё на работу. А иначе зачем учился? Красивые слова на собеседовании рассказывать?
- Начинаю потихоньку внедрять нормальные практики: dependency injection, какие-то паттерны. Не сразу все, а то коллеги убьют.
- Старый код, который всех уже заебал, предлагаю порефакторить. С новыми знаниями хоть понятно, как к нему подступиться.
- А самое главное — начинаешь другим объяснять на код-ревью или на летучке. Вот тут-то и понимаешь, сам-то ты реально въехал в тему или просто слова запомнил. Лучший способ проверить знания — попробовать их впарить кому-то ещё.
Вот, например, как новую фичу C# пробую на живца:
// Разбираюсь с record struct и global using из C# 10
// GlobalUsing.cs
global using System;
global using System.Collections.Generic;
// Point.cs — структура, которая сама за себя решает, как сравниваться
public readonly record struct Point(int X, int Y)
{
public double DistanceFromOrigin => Math.Sqrt(X * X + Y * Y);
}
// Использование
var p1 = new Point(1, 2);
var p2 = new Point(1, 2);
Console.WriteLine(p1 == p2); // True (сравнивает по значению, а не ссылке)
Console.WriteLine(p1); // Выведет: Point { X = 1, Y = 2 }
Вот так, по чуть-чуть, и не заметишь, как из говнокодерца превращаешься в более-менее адекватного инженера. Главное — не останавливаться, а то мир-то бежит, ёпта.