Дорожная карта: из C# Middle разработчика в Senior C#
Как вырасти из Middle C# программиста в уверенного сеньора с нужным багажом знаний и навыков? Составили роадмап для будущего Senior C# developer.
19К открытий26К показов
Путь от Middle C# до сеньора похож на переходный возраст: нужно становиться самостоятельным и брать на себя всё больше ответственности. Для тех, кто готов шагнуть во «взрослый» карьерный этап и стать Senior C# разработчиком, мы совместно с экспертами курсов для Middle-специалистов Route 256 от Ozon Tech сделали роадмап. Держите дорожную карту перехода C# Middle-разработчика в статус Senior.
- Чем Senior отличается от Middle
- Что необходимо, чтобы стать Senior C# разработчикомТехнические навыкиПлатформа .NET и базы данныхПаттерны проектированияМикросервисыКонтейнеризация и облачные решенияCI/CD и тестированиеВидение проектаЛичностные качестваЛюбовь к «чистоте» кодаКоммуникативные навыкиНавыки ментораРабота с сообществом
- Полезные ресурсы
- Вместо эпилога
Чем 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# до старшего разработчика был максимально коротким, следует запастись полезными ресурсами.
Кроме тех книг, которые мы рекомендовали по ходу дорожной карты, стоит прочесть также:
Также советуем подписаться на 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 и другое.
Надеемся, статья оказалась для вас полезной. Остались вопросы? Задайте их в комментариях.
Реклама ООО «Озон технологии» LjN8KVpnf
19К открытий26К показов