Найти тему
Спроси Таню

Roadmap .NET разработчика в 2024

Оглавление

За таким громким заголовком скрывается мое субъективное мнение и опыт. Официально я 2,5 года в разработке и на днях меня повысили до мидла. Радости нет предела, но и самокритика тоже не спит: тут еще пахать, это еще учить, а про это даже боюсь подумать.

Когда я только начинала работать, то у меня была идея сделать интерактивный роадмап, куда бы я могла добавлять полезные ссылки по темам и наращивать его по мере собственного развития. Идея умерла, как и все мои пет-проекты =)

Я довольно быстро вкатилась в айти, до стажерства меньше 3х месяцев с начала учебы и где-то 6 месяцев с той же даты до джунства. Как Гарри Поттер, я отвечаю, что мне всегда везло. Но при этом я понимаю, сколько за этим везением стоит моей работы, чтобы его оправдать. Ведь попасть на работу это еще не значит удержаться на ней или развиться.

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

Первый блок: база.

Под базой я понимаю крепкие знания C#, .NET и стандартных библиотек CLI. Сложно описать полностью, что значит "знать" язык, но постараюсь добавить ключевые слова, которые нужно не забыть.

  1. Отличное знание синтаксиса С# 10.0+, структур данных и FCL. Особенно** понимание механизмов IQueryable, IEnumerable (+IEnumerator), Expression.

    Сюда также входит понимание ссылочных и значимых типов, строки и StringBuilder, концепций интерфейсов и классов, модификаторов доступа, абстрактных и статических классов/элементов, обработка исключений, события и делегаты, коллекции и их отличия, boxing/unboxing, generics, overriding/hiding (shadowing), приведение типов, ref/out/params и др.
  2. * Работа всех элементов среды исполнения .NET, CLR, CIL и JIT. Для того, чтобы понимать что происходит с вашим кодом после его написания :)
  3. * Сборки и все о них. ** Работа со сборками в runtime'.
  4. * + ** Рефлексия в .NET.
  5. * + ** Потоки, асинхронность, параллельность в .NET – Thread, ThreadPool, Task, SynchronizationContext, TaskScheduler и др. Тут можно добавлять все звездочки мира, потому что глубина познания может быть большая. Но базовое понимание асинхронности и работы потоков должно быть, хотя бы на уровне гайда от MSDN.
  6. * Работа с I/O операциями – IDisposable, Finalize
  7. * Garbage Collector - как работает сборщик мусора и зачем он нам :)

Второй блок: ближе к Web

Знания базы необходимо, но еще недостаточно для начала веб-разработки. Тут к нам врывается ASP.NET Core, работа с сетью и базами данных, как минимум.

  • Базы данных. Для начала достаточно одной PostgreSQL, например, как одной из самых популярных среди реляционных. Тут нужно познакомиться с языком SQL, понятиями различных ключей, ограничений и индексов, связей: один к одному, один ко многим, многие ко многим, особенностью синтаксиса и функциями в PostgreSQL. Также неплохо познакомиться с тем, какие базы бывают кроме реляционных, зачем они нам нужны.
  • Продолжая тему БД уже в .NET: ORM - EF Core/Dapper, LINQ.
  • Поднимаемся на уровень повыше и узнаем как работать с маппингом данных: встроенные средства или сторонние библиотеки (Automapper, Mapster и тп.). Познакомиться с Best Practices и посмотреть на плюсы и минусы различных решений.

Следующая большая часть ASP.NET Core - это работа с входящими запросами и ответами, тут пласт довольно большой:

  • аутентификация, авторизация - как с ними работать в .NET, чем отличаются, там же почитать про Identity, Cookie, JWT.
  • роутинг и REST - как дать возможность другим приложениям найти ваше :)
  • сериализация/десериализация, а также другие типы входящих и исходящих данных (по ссылке серия различных статей на тему). Особенности работы System.Text.Json и NewtonsoftJson.
  • * валидация - тут нужно узнать о стандартных средствах валидации данных и о сторонних библиотеках (мне попадалась только Fluent Validator).
  • * http/https, http методы, статус-коды, headers + body - базовые концепции + средства для работы с ними в .NET.
  • ** не совсем HTTP - gRPC, SignalR
  • HttpContext - вот тут можно почитать и посмотреть связанные статьи по теме.
  • * Middleware - что делают, как изменить.

По пути также стоит почитать про исходящие запросы:

Чуть шире, чем веб:

Третий блок: всё обо всем

Требования от компании к компании сильно разнятся и порой даже всего вышеперечисленного может быть недостаточно. А где-то может хватить и половины, но это не значит, что нужно пропускать эти темы :)

Тем не менее есть общие темы, которые необходимы везде:

  • Git
  • Чистый код, соблюдение конвенций (не всегда применяется всё сразу), DRY, KISS, SOLID и вот это все
  • ** Понимание паттернов разработки и чуточку архитектуры. От каких то абстрактных фабрик, прототипов и строителей до более прикладных CQS/CQRS, Onion, DDD, TDD и др. Начать можно отсюда
  • ** Docker. Без него, кажется, уже никуда. Хотя бы база :)
  • Сети. Во всем их глобальном понимании. Это то, чего очень не хватает лично мне, но в этом году надеюсь победить.
  • Основы фронтенда. Как происходит взаимодействие, как вообще фронтендеры работают с вашим кодом, как "склеиваются" фронт и бэк :)

Заключение

Некоторые темы очень глубокие и сложно ограничить страницу книги, до которой нужно читать джуну. Джуны и сеньеры читают одно и то же, просто джуны запоминают только то, что понимают. Хорошей тактикой, мне кажется, будет почитать все, даже самые сложные, темы по верхам почти сразу. Чтобы обратить внимание на какие-то термины и концепции, чтобы потом знать к чему возвращаться при возникновении сложностей.

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

Это все, что мне удалось вспомнить.

Планирую дополнять и расширять статью по мере воспоминаний, а также ваших подсказок и советов.

Наверняка у меня выпала из головы какая-нибудь базовая тема, необходимая для становления крепким джуном :)