Как саморазвиваешься?

Ответ

Мой подход к саморазвитию — постоянное и сбалансированное обучение через теорию и практику.

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 }

Вот так, по чуть-чуть, и не заметишь, как из говнокодерца превращаешься в более-менее адекватного инженера. Главное — не останавливаться, а то мир-то бежит, ёпта.