Поднимите свои стандарты качества настолько высоко, насколько это возможно, не тратьте время на рутинные проблемы и всегда старайтесь работать как можно ближе к границе своих возможностей. Сделайте это, потому что это единственный способ узнать, как следует продвигать эту границу.
Эдсгер Дейкстра

В этой статье описывается путь к тому, чтобы стать крутым инженером-программистом .NET. Я начну с самого языка C# и познакомлю вас с фреймворками и технологиями, которые вам необходимо освоить в своем путешествии.

Эта дорожная карта довольно субъективна, поскольку я описываю рекомендации в основном на основе собственного опыта. Тем не менее, я рекомендую только отобранные темы и материалы.

Шаг 1. Изучите C#

Найдите одну хорошую книгу и придерживайтесь ее. Параллельно можно смотреть Youtube и видеокурсы на таких платформах, как Pluralsight и Udemy, но только как дополнение к чтению книги.

Я рекомендую книгу Эндрю Троелсена Pro C# 10 с .NET 6: основополагающие принципы и практика программирования. Я изучил C# по старому изданию этой книги 12 лет назад, и новые издания до сих пор имеют отличные рейтинги на Amazon. Не стесняйтесь провести собственное исследование и найти хорошую книгу для себя.

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

Читать не значит учиться. Учиться не значит запоминать. Лучший способ учиться и запоминать — это практиковать то, что вы читаете. Пишите простые программы и играйте с языком, отладчиком, IDE. Напишите свою консольную утилиту, которая перечисляет все запущенные процессы или удаляет все файлы из папки просто так. Создайте простое приложение WinForms, которое отслеживает ваш вес. Напишите свой собственный парсер. Напишите что-нибудь полезное или бесполезное, просто потренируйтесь.

Вот список хороших ресурсов для изучения C#:

  1. Руководство для игрока на C#
  2. Microsoft Введение в C#
  3. Документация по C# от Microsoft
  4. Популярные обучающие материалы от Microsoft

Шаг 2. Изучите платформу ASP.NET

Теперь пришло время узнать настоящие вещи.

Ядро ASP.NET

ASP.NET Core — это платформа для создания веб-приложений.

В нем две части:

  1. ASP.NET Core Web API используется для создания серверной части приложений.
  2. ASP.NET Core Blazor — это платформа для создания клиентских веб-приложений.

Я рекомендую сосредоточиться только на первом элементе — ASP.NET Core Web API. Он популярен в отрасли, и вы увидите, как он используется в производственной среде. Что касается ASP.NET Core Blazor, я не рекомендую тратить на него слишком много времени, поскольку он не получил широкого распространения, а в реальных приложениях используются другие интерфейсные фреймворки, такие как React или Angular.

В ASP.NET есть и другие технологии, но я их опускаю, поскольку они устарели или не получили широкого распространения.

Я рекомендую начать с книги Pro ASP.NET Core 6: разработка облачных веб-приложений с использованием MVC, Blazor и Razor Pages, авторАдам Freeman, чтобы получить хороший обзор платформы.

Кроме того, стоит изучить Swagger UI и OpenAPI для документирования ваших API и Postman для их тестирования и опробования сторонних API.

Другие полезные ресурсы, отобранные мной вручную:

  1. УЛУЧШЕННЫЙ ВЕБ-API ASP.NET CORE
  2. Microsoft Учебное пособие: создание веб-API с помощью ASP.NET Core

Шаг 3. Изучите SQL

Любая программа работает с данными. Наиболее популярным и мощным языком для управления данными является SQL. Он используется почти в каждом проекте, и вам будут задавать вопросы о нем на каждом собеседовании.

Как разработчику программного обеспечения вам не нужно знать все тонкости SQL и внутреннего устройства SQL Server, но вы должны знать хотя бы основы.

Убедитесь, что вы знаете следующие темы, поскольку они часто задаются на собеседованиях:

  1. SQL-соединения
  2. Типы данных SQL (например, nvarchar против varchar)
  3. Кластеризованные и некластеризованные индексы
  4. Оптимизация SQL

Я рекомендую выбрать книгу и придерживаться ее. Вы можете найти лучшие книги в списке ниже:

  1. Поваренная книга SQL от Энтони Молинаро
  2. SQL за 10 минут, Sams Teach Yourself, Бен Форта
  3. SQL Practice Problems, Сильвия Мёстл Василик
  4. SQL-антипаттерны Билла Карвина
  5. Изучение SQL Алана Болье
  6. Карманное руководство по SQL от Джонатана Генника
  7. Искусство SQL, Стефан Фарулт
  8. Производительность SQL объяснила все, что нужно знать разработчикам
  9. Производительность SQL, Маркус Винанд

Шаг 4. Изучите фреймворк ADO.NET и Entity Framework

ADO.NET позволяет использовать SQL в .NET для доступа к базе данных. Я рекомендую научиться использовать Dapper в качестве средства сопоставления объектов вместо сырого ADO.NET.

Entity Framework — это сопоставитель объектов и баз данных, который позволяет вам обращаться к базе данных без написания SQL и работать с объектами вместо реляционных таблиц. Он широко используется, но вы все равно должны знать SQL, чтобы понимать, как оптимизировать запросы и устранять проблемы с производительностью.

Рекомендуемые ресурсы по ADO.NET:

  1. Документы Майкрософт

Рекомендуемые ресурсы по Entity Framework:

  1. Документы Майкрософт
  2. Ядро Entity Framework в действии
  3. Джули Лерман — автор Entity Framework | Многообразие

Шаг 5. Углубите свои знания .NET и C#

Чтобы стать абсолютным зверем в .NET, вы должны расширить свои знания даже дальше, чем я описал ранее. Я рекомендую две книги, которые всегда есть на моей книжной полке, и я просматриваю их перед каждым интервью.

Первый — это CLR через C# Джеффри Рихтера.

Эта книга, наверное, известна каждому разработчику .NET. В нем описывается внутреннее устройство фреймворка, механизмы асинхронного программирования в .NET, принцип работы сборщика мусора и многое другое. Он охватывает темы, которые часто задают в интервью. Это необходимо прочитать, если вы хотите быть экспертом.

Вторая книга называется C# In A Nutshell by Joseph Albahari.

Он имеет широкий охват широкого круга тем. Это один из лучших справочников по .NET, который вы можете иметь на своей полке. Мне нравится эта книга, потому что в ней собран один из лучших материалов по асинхронному программированию, параллелизму, параллелизму и LINQ. Кстати, популярный интерактивный блокнот .NET LINQPad создан автором книги.

Шаг 6. Изучите шаблоны проектирования

Шаблоны проектирования — это многократно используемые решения распространенных повторяющихся проблем при проектировании программного обеспечения.

Я рекомендую две книги. Первый — Паттерны дизайна Head First от Эрика Фримана. Он лучше всего подходит для начинающих, потому что написан простым языком с хорошими примерами.

Второй — «Прочитайте шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения». Он более хардкорный, чем предыдущий, и лучше подходит для опытных разработчиков. Некоторые утверждают, что она слишком абстрактна и сложна, но на самом деле это довольно краткая и тонкая книга с четкими описаниями шаблонов и примерами. Единственным недостатком является то, что примеры написаны на C++, но вы можете их пропустить, потому что описания и диаграммы дают очень хорошее представление о шаблонах.

Шаг 7. Изучите структуры данных и алгоритмы

Структуры данных и алгоритмы — это то, с чем вы, возможно, не столкнетесь в своей повседневной работе, но они имеют решающее значение для прохождения собеседований в таких компаниях, как FANG. В любом случае, знание этого предмета делает вас лучшим разработчиком, способным создавать более качественное программное обеспечение и решать сложные задачи.

Если вы новичок, обязательно рекомендую книгу Алгоритмы Грокинга. Это удобное руководство по алгоритмам с отличными иллюстрированными примерами.

Для опытных программистов рекомендую книгу Алгоритмы Роберта Седжвика.

Кроме того, у автора есть отличный одноименный курс на Coursera. Примеры и присваивания есть на Java, но это не должно быть проблемой, так как Java и C# очень похожи.

Шаг 8. Изучите архитектуру программного обеспечения

Изучите следующие понятия:

  1. Трехслойная архитектура
  2. Микросервисная архитектура
  3. Брокеры сообщений
  4. Дизайн, управляемый доменом
  5. ЦКРС
  6. Шлюзы API
  7. CI/CD
  8. Чистая архитектура
  9. RESTful

Ресурсы:

  1. Микросервисы .NET: архитектура для контейнерных приложений .NET
  2. Создание современных веб-приложений с помощью ASP.NET Core и Azure
  3. Дапр для .NET-разработчиков

Шаг 9. Изучите Microsoft Azure Cloud

Облачные технологии вездесущи. Если вы придерживаетесь технического стека Microsoft, я рекомендую изучить Azure Cloud.

Убедитесь, что вы знакомы со следующими технологиями:

  1. Функции Azure
  2. Azure ServiceBus
  3. Хранилище лазурного ключа
  4. Инсайты приложений
  5. Докер
  6. Кубернетес
  7. Горизонтальное масштабирование
  8. Виртуальные машины
  9. Управление API Azure

Ресурсы:

  1. Архитектура облачных приложений .NET для Azure

Шаг 10. Изучите базы данных NoSQL

Я рекомендую изучить некоторые базовые концепции баз данных NoSQL, такие как теорема CAP, кластеризация, сегментирование и конечная согласованность.

Рекомендую ознакомиться со следующими БД:

  1. MongoDB — самая популярная документно-ориентированная база данных NoSQL.
  2. CosmosDB — высокомасштабируемая база данных NoSQL от Microsoft.
  3. Redis — ключ-значение в хранилище памяти, используемом в качестве кеша. Откровенно говоря, теперь дело не только в памяти и не только в ключе-значении :)

Из книг очень рекомендую NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence. На данный момент это лучшая книга по NoSQL, которую я читал.

Шаг 11. Сторонние библиотеки .NET, которые де-факто являются отраслевыми стандартами

Существует ряд отличных библиотек .NET, которые стали стандартом во многих проектах и, безусловно, заслуживают внимания.

Я составил список отобранных библиотек .NET, которые я считаю наиболее полезными и широко используемыми на протяжении многих лет.

  1. FluentValidation — библиотека для построения строго типизированных правил проверки. Это наиболее полезно, когда у вас есть сложная логика проверки для запросов API.
  2. Serilog — лучшая библиотека для логирования. Он позволяет вести журнал в файл, базу данных или консоль с помощью всего нескольких строк конфигурации.
  3. Automapper — библиотека для отображения объектов. С помощью этой библиотеки вы можете избавиться от повторяющегося кода, который сопоставляет ваши модели запросов с DTO или моделями предметной области.
  4. Dapper — простой сопоставитель объектов для упрощения сопоставлений результатов SQL-запросов со строго типизированными моделями.
  5. Polly — библиотека устойчивости .NET, в основном используемая для повторных попыток и ограничения скорости некоторых операций. Особенно полезно для микросервисной архитектуры с высокой нагрузкой.
  6. Медиатр — библиотека внутрипроцессного обмена сообщениями с поддержкой запросов/ответов, команд, запросов, уведомлений и событий.
  7. Playwright — современная библиотека от Microsoft для сквозного тестирования веб-приложений. Может использоваться для веб-скрапинга клиентских приложений.
  8. Кварц.NET — система планирования заданий для .NET.
  9. Spectre.Console — .NET библиотека для создания красивых консольных приложений.
  10. Moq — самая популярная и удобная библиотека моков для .NET.
  11. Hangfire — библиотека для фоновой обработки заданий со встроенной панелью мониторинга и постоянным хранилищем.

Шаг 12. Подготовьтесь к собеседованию

  1. Будьте готовы описать свой последний проект или предыдущий опыт
  2. Записывайте все вопросы после каждого интервью и обрабатывайте их, чтобы заполнить пробелы в ваших знаниях.
  3. Умейте писать код на доске и объяснять свой мыслительный процесс

Одна из лучших книг по подготовке к собеседованию — Cracking the Coding Interview by Gayle Laakmann McDowell.

Спасибо за чтение и удачи!