Написать пост

Дорожная карта: из C# Middle разработчика в Senior C#

Логотип компании Ozon Tech

Как вырасти из Middle C# программиста в уверенного сеньора с нужным багажом знаний и навыков? Составили роадмап для будущего Senior C# developer.

Обложка поста Дорожная карта: из C# Middle разработчика в Senior C#

Путь от Middle C# до сеньора похож на переходный возраст: нужно становиться самостоятельным и брать на себя всё больше ответственности. Для тех, кто готов шагнуть во «взрослый» карьерный этап и стать Senior C# разработчиком, мы совместно с экспертами курсов для Middle-специалистов Route 256 от Ozon Tech сделали роадмап. Держите дорожную карту перехода C# Middle-разработчика в статус Senior.

Чем Senior отличается от Middle

Middle C# developer — это разработчик, который хорошо освоил язык и платформу .NET, понимает процессы разработки на проекте, умеет пользоваться всеми необходимыми инструментами и может справиться с повседневными задачами практически без помощи старших коллег.

У Senior C# разработчика больше опыта, экспертизы и потому больше ответственности. Он глубоко понимает архитектуру, устройство фреймворков и библиотек, видит технические риски и знает, как их предотвратить. А ещё сеньор умеет организовать работу над проектом: сформулировать и раздать задачи, следить за разработкой и сроками и презентовать результат. Как вы уже поняли, сеньор должен уметь не только программировать, но и управлять проектами и людьми.

Что необходимо, чтобы стать Senior C# developer

Чтобы начать путь от мидла к сеньору, необходимо развиваться в двух направлениях: прокачивать технические навыки и личностные качества. Поэтому мы разделили дорожную карту на две части и структурировали и подробно раскрыли оба направления.

Технические навыки

Платформа .NET и базы данных

То, что C# Middle разработчик воспринимает как функциональность языка C#, сеньор понимает глубже — как возможности для построения сложных систем.

Старший специалист в деталях знает, как работает многопоточность, асинхронность и чем они отличаются друг от друга. А ещё — как применять примитивы синхронизации потоков (lock, Monitor, Mutex, Semaphore и SemaphoreSlim), зачем нужен ThreadPool, какие операции лучше выполнять синхронно, а какие асинхронно (CPU bound, IO bound), что такое контекст синхронизации, CancellationToken и в каких случаях может пригодится ValueTask.

Сеньор точно знает, какие структуры данных лучше использовать и почему, как посчитать сложность алгоритма и измерить эффективность выбранного подхода. Для этого на уровне мидл необходимо уверенно освоить способ Big O Notation, алгоритмы сортировки и поиска элементов в коллекции, а также иметь чёткое представление, в чём разница между Array и List, как устроен Dictionary и почему он работает быстрее чем List, что такое коллизии в Dictionary и как он взаимодействует с ними.

Не менее важно для Senior C# developer уметь работать с базами данных. Старший специалист не просто знает, как писать запросы и в чём разница между SQL и NoSQL. Он может обоснованно выбрать ту или иную базу данных для решения конкретной задачи, построить план запросов и правильно их прочитать.

Сеньору следует знать, что такое уровни изоляции транзакций и какие проблемы они решают, как нормализовать данные и какие индексы необходимо использовать для ускорения выборки данных. А ещё иметь понимание, что такое ACID и BASE, теорема CAP, шардинг и вертикальное масштабирование.

Паттерны проектирования

Старшему специалисту пригодится умение работать с паттернами проектирования. У сеньора должен быть навык выявления необходимого и достаточного паттерна проектирования для конкретной ситуации, чтобы не допустить «кода ради кода».

Senior C# разработчику необходимо понимать, как следовать принципам SOLID, DRY, KISS, YAGNI и GRASP. А также знать, как и когда применять архитектурные паттерны, например, SOA, Microservices, MVC, MVVM, Client-Server, Broker, и контролировать использование антипаттернов, таких как Spaghetti code, Accidental complexity, Lava flow, God Object, Dependency hell.

Чтобы научиться обдуманно подходить к использованию паттернов, рекомендуем ресурс dotfactory — здесь вы найдёте подборку паттернов проектирования на C# с подробным описанием и примерами реализации.

Микросервисы

Senior C# разработчику нужно знать, что такое микросервисы и уметь их строить. Как проектировать сервис, как делить его на слои, чем отличается многослойная архитектура от чистой, что такое low coupling и high cohesion, как обеспечивать консистентность данных — всё это не должно вызывать вопросов.

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

  • межсервисное взаимодействие: HTTP call, Message Broker (AMQP) и gRPC;
  • подходы микросервисных решений: CQRS, Event Sourcing, Circuit Breaker, Saga pattern, Sidecar, Database per Service, Shared Database per Service, API Gateway;
  • безопасность микросервисов: Basic Authentication, JWT, ASP.NET Core Identity, OpenID Connect или OAuth.

А также разобраться с RESTful-сервисами, stateless и уровнями зрелости дизайна REST API.

Чтобы научиться правильно строить микросервисную архитектуру, рекомендуем прочитать книги Криса Ричардсона «Микросервисы. Паттерны разработки и факторинга» и Сэма Ньюмена «Создание микросервисов».

Контейнеризация и логирование

Сегодня сложно представить проект, в котором не используются контейнеризация и методы оркестрации контейнеров. Поэтому сеньору важно знать, что такое Docker, зачем использовать Kubernetes, и разбираться в технологиях Docker swarm, Nomad, Consul.

Немаловажной частью работы над сложными системами является мониторинг и алертинг компонентов. В этом сеньору пригодится навык настройки логирования таким образом, чтобы оно не перегружало инфраструктуру ненужной информацией. Здесь помогут навыки работы с Grafana, ELK-стеком, Prometheus, OpenTelemetry.

CI/CD и тестирование

Ещё сеньору пригодятся знания CI/CD-процессов и умение их использовать, чтобы выпускать более качественный продукт. Сеньор должен понимать, какие критерии проверки необходимо включить в CI/CD-процесс, какие использовать тесты — unit или integration, и какой процент покрытия тестами удовлетворительный для конкретного проекта.

Сеньор может успешно выстроить CI/CD-процесс на проекте. Он не забывает об автоматизации билда, Self-testing сборке, о том, что каждый commit в master должен быть сбилженным, билды — быстрыми, тестирование на pre-prod среде — максимально приближенное к production, а деплой — автоматизированным.

Старший специалист уверен в том, что находить дефекты в продукте — прежде всего задача разработчиков, а не тестировщиков. Именно разработчики отвечают за качество и функционал кода. Чтобы подтянуть свои навыки в тестировании, необходимо изучить библиотеки MSTest, xUnit, NUnit, Moq, NSubstitute, а также разобраться в разнице между Dummy, Fake, Stubs, Spies и Mock объектами.

Видение проекта

Старший разработчик C# понимает, как устроен проект в целом, и старается принести своими решениями максимальную выгоду бизнесу. Он видит проблемы и осознаёт, как применение того или иного подхода повлияет на проект и его компоненты. Хороший Senior C# на уровне рефлексов знает, какое решение правильное, а какое нет, — опыта за плечами хватает.

Ещё один необходимый скилл для сеньора — находить точки интеграции компонентов с другими командами, системами. Зачастую некорректная интеграция может критически сказаться на разработке и принести много проблем и рисков.

Также Senior C# программисту важно понимать изолированный контекст компонентов системы, чтобы они не становились большими и перегруженными. И в этом помогут знания DDD-подхода — рекомендуем изучить.

Личностные качества

Любовь к «чистоте» кода

Читаемый код с понятной архитектурой и логикой, который без труда могут разобрать другие разработчики — вот, к какому коду следует стремиться Middle C# разработчику, чтобы вырасти до старшего специалиста.

При этом на уровне старшего программиста нужно не только заботиться о чистоте и простоте своего кода, но и учить этому своих младших коллег. По мере возможности сеньору стоит погружаться технически не только в свои задачи, но и в задачи коллег и тщательно проводить код-ревью.

Коммуникативные навыки

Разработчик сеньор часто ведёт проекты самостоятельно. Он умеет обрабатывать ТЗ, разбивать его на мелкие задачи и выстраивать план работ. Сеньор знает, кому из специалистов и что делегировать, и какие задать вопросы коллегам для прояснения ТЗ, чтобы задачи были выполнены корректно и в срок.

А ещё Senior C# — хороший командный игрок. Он правильно выстраивает коммуникацию, организовывает процесс работы и знает, как избегать конфликтных ситуаций. Научиться этому поможет книга Дж. Ханк Рейнвотера «Как пасти котов. Наставление для программистов, руководящих другими программистами».

Навыки ментора

Одна из задач сеньора — помогать младшим специалистам развиваться и расти. У сеньора достаточно опыта за плечами и набитых шишек, поэтому он точно знает, как достичь цели или решить задачу быстрее и с меньшими потерями.

Менторский опыт важно приобретать уже на уровне мидл. Станьте наставником для своих младших коллег или присоединитесь к сообществу IT-менторов. Это поможет прокачать лидерские, преподавательские навыки, эмпатию и эмоциональный интеллект. Нелишним будет прочесть книги Гарвардской школы бизнеса «Делай как я! Руководитель как играющий тренер» и Ларри Кинга «Как разговаривать с кем угодно, когда угодно и где угодно».

Работа с сообществом

Не ограничивайтесь только рабочими задачами и находите время делиться опытом и знаниями с коллегами. Вклад в комьюнити шарпистов может быть хорошим толчком к развитию C# Middle разработчика.

Устраивайте семинары в своей команде, пишите полезные статьи на Tproger, Habr или англоязычных Medium или Hackernoon, выступайте с докладами, — например, ребята из dotnet.ru регулярно проводят оффлайн- и онлайн-встречи и всегда открыты к сотрудничеству.

Публикуйте свои pet-проекты на Github или участвуйте в open-source проектах на площадке. Такой опыт даст возможность поработать со специалистами из разных стран и областей разработки. И, возможно, именно вам удастся внести свой вклад в следующий популярный фреймворк или новую технологию.

Полезные ресурсы

Чтобы путь от Middle уровня C# до старшего разработчика был максимально коротким, следует запастись полезными ресурсами.

Кроме тех книг, которые мы рекомендовали по ходу дорожной карты, стоит прочесть также:

Джеффри Рихтер «CLR via C#»

Джеффри Рихтер «CLR via C#»

Конрад Кокоса «Управление памятью в .NET для профессионалов»

Конрад Кокоса «Управление памятью в .NET для профессионалов»

Риккардо Террелла «Конкурентность и параллелизм на платформе .NET»

Риккардо Террелла «Конкурентность и параллелизм на платформе .NET»

Роберт Мартин «Чистый код. Создание, анализ и рефакторинг»

Роберт Мартин «Чистый код. Создание, анализ и рефакторинг»

Роберт Мартин «Чистая архитектура. Искусство разработки программного обеспечения»

Роберт Мартин «Чистая архитектура. Искусство разработки программного обеспечения»

Также советуем подписаться на YouTube-канал сообщества разработчиков .NET DotNetRu и авторский канал Nick Chapsas, на котором регулярно выходят интересные разборы проблем C# разработчиков и обсуждаются новые возможности .NET.

А ещё рекомендуем читать новостной ресурс InfoQ о разработке программного обеспечения и регулярно заглядывать на сайт глобального онлайн-сообщества шарпистов C-Sharpcorner, где разработчики обмениваются знаниями и опытом.

Вместо эпилога

Чтобы быстро освоить базис дорожной карты, рекомендуем пройти курс для Middle-специалистов Route 256 от Ozon Tech «Продвинутая разработка микросервисов на C#».

Программа рассчитана на разработчиков с опытом от 3 лет. Преподаватели и тьюторы — инженеры Ozon Tech. За два месяца вы сможете подтянуть скилы и освежить знания. На курсе вы научитесь создавать и настраивать микросервисы на ASP.NET Core, эффективно работать с асинхронным кодом, проектировать сложные распределенные системы, создавать REST и gRPC API и другое.

Учиться вместе с Ozon Tech

Надеемся, статья оказалась для вас полезной. Остались вопросы? Задайте их в комментариях.
Реклама ООО «Озон технологии» LjN8KVpnf

Следите за новыми постами
Следите за новыми постами по любимым темам
16К открытий17К показов