В то время как технологическая индустрия продолжает переживать кризис, мы по-прежнему наблюдаем массовые увольнения и большую конкуренцию за вакансии .NET-разработчиков. В такой сложной ситуации, чтобы оставаться на плаву, необходимо не только обладать опытом, но и постоянно развивать навыки. Так, сейчас как никогда важно готовиться к собеседованиям и телефонным интервью с менеджерами по найму.
Наш эксперт, Technology Lead Олег Карасик, подготовил подробное руководство по ключевым навыкам, на которые .NET-разработчикам следует обратить внимание, чтобы оставаться востребованными и сохранять свои позиции в отрасли.
На протяжении всей своей истории .NET всегда был больше, чем Backend: если речь шла о Desktop-приложениях, .NET включал в себя все, от UI до хранения и использования данных. Когда затрагивалась тема Web, говорили о полном цикле, начиная путь со страницы, переходя на сервер и заканчивая в базе данных.
Сегодня представление о .NET-разработчике как о full-stack-разработчике не только не изменилось, но и в значительной степени укрепилось. Поэтому от сильного .NET разработчика ожидаются знания современного .NET и C#, Frontend, Cloud, DevOps и, конечно, базы данных. Звучит чересчур, поэтому давайте разберемся, что именно это значит.
Знание современного .NET и C#
За последние несколько лет .NET сделал огромный скачок вперед. Новые версии выходят каждый год и приносят с собой не только улучшенную производительность, но и новые возможности. Однако основным достижением, на мой взгляд, можно считать практически безболезненный процесс миграции с одной LTS-версии на другую – что позволяет поддерживать проекты на последних версиях платформы, прилагая минимальные усилия.
Это значит, что мы, разработчики, должны быть в курсе серьезных нововведений: JSON-сериализация, встроенные Source Generators, возможности языка C# и так далее. В этот список попадают и смежные технологии. Entity Framework Core как был, так и остается стандартом для работы с базами данных из .NET-приложений, с каждой новой версией становясь быстрее и предоставляя все больше возможностей.
Нет необходимости досконально изучать каждую новую возможность – но стоит прочитать о них, чтобы оставаться в курсе событий.
Разумеется, это не отменяет того, что мы должны отлично знать и понимать ставшие уже фундаментальными возможности платформы: асинхронное программирование при помощи async-await, многопоточное программирование, эффективное использование коллекций и работа с памятью.
И, конечно, не стоит забывать о шаблонах проектирования, базовых принципах построения архитектуры приложения (как минимум, вариантах Clear / Onion архитектуры). Эти знания как были, так и остаются прочным фундаментом, который ни в коем случае не стоит игнорировать.
Знание Frontend
Знание одного из популярных Frontend-фреймворков можно считать практически обязательным.
Сложно сказать, что более востребовано: Angular или React. По нашим данным, Angular все еще встречается чаще (в связке с .NET-разработкой), чем React, однако разницу нельзя назвать колоссальной.
Важным является вопрос, насколько хорошо нужно знать Frontend. Несмотря на то, что требования каждого проекта индивидуальны, можно обоснованно сказать, что знания не должны быть совсем базовыми или исключительно теоретическими. Стоит приобрести и практический опыт: можно, к примеру, в качестве упражнения разработать простое приложение для себя. Следует быть готовым к тому, что на проекте может не быть выделенных Frontend-разработчиков.
Знание Cloud
Сейчас все реже можно встретить проекты, где облака не используются совсем – поэтому знание облачных технологий становится неотъемлемой частью Full-stack разработчика.
В отношении .NET Azure, без сомнения, является наиболее популярным выбором. Однако стоит обратить внимание на то, что в последнее время AWS становится все более «дружелюбным» к .NET и, возможно, в ближайшем будущем его доля может значительно возрасти.
Не обязательно быть крутым сертифицированным архитектором, чтобы работать с облаками, но нужно иметь базовое представление о том, что они собой представляют, и иметь опыт работы с наиболее популярными облачными сервисами: на примере Azure, к таким можно отнести Web Apps, Azure Functions, Azure Storage Account и др.
Говоря об облаках, необходимо упомянуть работу с Docker. Контейнеризация является очень популярным способом не только развертки самих приложений, но и различных зависимостей (не говоря уже об использовании контейнеров непосредственно в процессе разработки).
Поэтому обязательно необходимо знать базовые принципы: что такое контейнеры, как запаковать приложение, как его развернуть и понять, что там происходит. Важно, чтобы вид Dockerfile не вызывал приступ паники, а слова «просто подними Redis в контейнере» не казались иностранным языком.
Знание DevOps
«Не хочется, но надо» – наверное, это лучшее описание того, почему базовые знания DevOps являются плюсом.
Все больше проектов выходит на непрерывные releases (чему крайне способствует использование облаков), и это влечет за собой совершенно новый класс проблем, на которые разработчикам нужно обращать внимание: каким образом проект будет собран, какие данные нужны для работы, каким образом он будет коммуницировать с другими сервисами и так далее.
Базовые представления о том, как работает build & deployment могут быть отличным подспорьем в этом деле. Поэтому стоит уделить немного внимания и получить практический опыт в настройке CI / CD с использованием одного из популярных инструментов: Azure DevOps, GitHub Actions или Bitbucket Pipelines. Важно помнить, что детали систем всегда будут отличаться, но концепции, на которых они построены, крайне схожи, поэтому изучение любой из них дает вам знание и понимание других схожих систем.
Знание баз данных
Умение работать с редакционными базами данных (особенно с MS SQL) всегда было и остается неотъемлемой частью навыков .NET-разработчика. Однако сегодня все чаще, кроме хороших знаний реляционных баз данных, требуется понимание и опыт работы с нереляционными, такими как Azure Table Storage, Azure CosmosDb, MongoDb.
Заключение
Разумеется, приведенный тут список технологий, областей знаний и советов не является исчерпывающим и ни в коем случае не гарантирует, что этого будет достаточно для работы на любом проекте.
Помимо перечисленных, существует множество распространенных технологий (как, например, Kubernetes), знание которых может быть преимуществом.
Невозможно выучить абсолютно все, однако можно почитать и получить базовые знание и представление о возможностях этих технологий и том, какие проблемы они решают. И когда настанет необходимость их изучить досконально, вы будете знать, откуда начать и куда нужно двигаться.