Як стати .NET-розробником. План дій для початківців
.NET — це платформа від Microsoft для створення програмного забезпечення. Мова С#, яку використовують для роботи з .NET, друга за популярністю серед українських розробників. Крім того, в категорії С#/.NET на DOU завжди відкрито багато вакансій.
У межах рубрики для початківців «Код професії» розповідаємо про те, як вивчити С#/.NET та знайти першу роботу. Для цього ми поспілкувалися з досвідченими .NET-розробниками Олексієм Краєвим, Володимиром Вердишем і Андрієм Губським та зібрали їхні поради в один матеріал.
Що таке .NET
.NET — це платформа від Microsoft, яка існує з 2002 року. Основна мета її творців — це можливість створювати програми різних типів (насамперед Web), які можуть виконуватися на різних пристроях. Основа .NET — CLR, тобто Common Language Runtime, що дає змогу абстрагуватися від конкретної мови програмування та виконувати код однаково на всіх платформах.
З 2016 року CLR стає кросплатформною, і .NET починає рух у напрямі того, якою ми знаємо платформу зараз — зручний засіб для розробки різноманітних програм, які аналогічно до Java можуть запускатися і на Windows, і на Unix-based системах.
Згідно з останнім зарплатним опитуванням, мовою С#, яку використовують для роботи з .NET, пишуть 16,3% розробників в Україні. Вона на другому місці за популярністю використання, і в останні роки її частка зростає.
Як першу мову С# вказали 5,4% респондентів, що на чверть більше, ніж 2021 року.
Серед мов, яким би віддали перевагу розробники, якби була свобода вибору, С# на другому місці — 14,6%.
Згідно з останнім опитуванням, медіанна зарплата С#/.NET-розробника становить $2525, що відповідає медіанній зарплаті рівня Middle. Медіанна зарплата Junior: $950; Senior: $4500. Зарплати спеціалістів усіх рівнів дещо зросли, порівняно з минулим опитуванням: у джуніорів на $50, у мідлів та сеньйорів +$100.
А тут можна переглянути відкриті вакансії в категорії С#/.NET. На момент публікації статті є 218 вакансій.
Чи підходить .NET для початківців
На думку опитаних нами розробників, C# підходить і як перша мова програмування для початківців, і як додаткова для тих, хто хоче перейти з іншої мови. C# — це мова зі статичною типізацією, яка дає змогу зосередитися на вивченні концепцій об’єктноорієнтованого програмування, абстракцій, алгоритмів, негайного занурення в низькорівневі деталі реалізації. При цьому, якщо в майбутньому виникне необхідність піти на нижчий рівень (робота з пам’яттю, багатопотоковість тощо), мова та платформа нададуть зручні можливості для цього.
Для зручного вивчення C# цілком вистачить безкоштовних інструментів на зразок зв’язки VS Code + консоль або VS Community. З невеликих проблем під час навчання можна виділити хіба те, що деякі ресурси досі навчають застарілих конструкцій мови, які вже практично не використовують на кшталт delegate (усі застосовують уже готові Func<> або Action<>) та event (втратив свою актуальність для вебсервісів). Але зазвичай про це ніколи не запитують на співбесіді та не використовують у проєктах.
Перевагою платформи .NET можна назвати те, що, крім мови C#, вона охоплює й інші мови. Наприклад, в одному проєкті можна одночасно використовувати і C#, і F# — функціональну мову програмування. Таким чином, новачок може вивчати як об’єктноорієнтований підхід, так і функціональний. При цьому кожна з мов дає змогу повною мірою зрозуміти переваги кожного з підходів.
Ще деякі переваги .NET:
- На .NET можна писати Back-end, настільні програми, мобільні програми, сайти, є фреймворки для створення ігор, можна працювати з Machine Learning.
- .NET-програми можна запускати під різними операційними системами. Є все необхідне, щоб без особливих проблем запакувати застосунок у контейнер.
- Сучасний .NET (і саме середовище виконання, і фреймворки на кшталт ASP.NET Core) — це платформа з відкритим вихідним кодом.
- Платформа розвивається дуже високими темпами, постійно зʼявляються оновлення.
- Про платформу є багато інформації: книги, відео. Як про саму .NET, так і про окремі мови, що підтримуються нею, серед яких і C#.
- Під платформу написано багато коду під що завгодно.
- Для .NET є хороші засоби розробки.
- Немає передумов до того, щоб .NET у наступні
10–20 років зникла чи стала незатребуваною.
Більше про плюси та мінуси платформи ми писали у статті «Переваги та недоліки .NET: швидкий розвиток, велика поширеність і середні зарплати».
Які технології варто вивчити в межах .NET
.NET — це платформа, де можна писати різні типи застосунків: настільні, мобільні, веб. Від цього сильно залежить, якими супутніми технологіями варто цікавитися.
Щоб писати бекенди, однозначно обов’язково розбиратися в базах даних. Це те, без чого не можна написати нічого корисного і що буде у 98% випадків. Якщо ви будете розуміти MS SQL, RabbitMQ чи MongoDB, цього буде достатньо. Навіть якщо десь будуть інші СУБД, маючи розуміння того, як працювати з цими технологіями, ви найімовірніше розберетеся, як використовувати щось інше. Дуже цінно в роботі розуміти різницю між цими видами баз і що коли потрібно запускати. Для цього можна прочитати книгу Мартіна Клепманна «Designing Data-Intensive Applications».
Також буде добре, якщо ви вмітимете працювати з Entity Framework.
Решта може траплятися в тих чи інших проєктах: Redis, ElasticSearch, системи обміну повідомленнями (Kafka, RabbitMQ, якісь специфічні для певних хмар, як-от Service Bus в Azure). Не обов’язково мати реальний досвід із цим усім, але хоча б мати уявлення, що це і вміти виконувати якісь базові речі через відповідні бібліотеки. Добре було б орієнтуватися в хмарних провайдерах на кшталт Azure, AWS, Google Cloud.
Не зайвими будуть знання Docker та Kubernetes. Останнє не обов’язково має бути на рівні адміністратора, але варто концептуально розуміти, як там що.
Варто знати і вміти писати юніт-тести.
Звичайно ж, для всіх технологій .NET базовим є знання мови C#. Але сьогодні пишуть не мовою програмування, а на фреймворках. Синтаксис будь-якої сучасної мови вивчити легко і швидко. Набагато важливіше добре розуміти екосистему технології, з якою працюєте.
Якщо йдеться про хайлоад, то крім C# і .NET, потрібно буде вивчити технології кешування, роботу з чергами, принципи роботи систем масового обслуговування тощо.
Якщо йдеться про розробку вебзастосунків та роботу фулстек-розробником, то потрібно вивчити те, як працює ASP.NET Core, шаблони Razor, Blazor, а також розуміти особливості роботи HTTP-протоколу, сесій, знати, що таке CORS, та озброїтися знаннями з боку фронтенду: HTML, CSS, JS.
Для розробки десктопних програм варто ознайомитися з WPF, MAUI, знати, що таке XML, розуміти, як працюють потоки.
Для мобільної розробки також варто ознайомитись з MAUI та Xamarin, а також з документацією та гайдлайнами iOS та Android.
Якщо плануєте зайнятися DevOps-практиками, варто подивитися на Pulumi, а також ознайомитися з можливостями основних хмарних платформ і засобами роботи з ними: Azure, AWS, GCP.
Тим, хто хоче займатися машинним навчанням, не обійтися без ознайомлення з фреймворком ML.NET і вивчення теоретичної бази: що таке регресія, класифікація, детекція аномалій, кластеризація.
Охочим розробляти продукти для інтернету речей, варто приготуватися до того, щоб реалізовувати проєкти в межах обмежених апаратних ресурсів, а відповідно вміти оцінювати складність алгоритмів, витрати пам’яті, швидкість зчитування інформації.
Корисні ресурси для вивчення .NET
Microsoft Learn. Спеціальний портал Microsoft, який містить величезну кількість безкоштовних та якісних матеріалів для навчання.
Ukrainian .NET Developer Community. Проєкт, який об’єднує українські .NET-спільноти, в яких ви зможете знайти однодумців та завжди спитати поради.
Телеграм-канал devdigest // dot net. Тут регулярно публікують новини про платформу .NET, корисні матеріали та інформацію для .NET-розробників.
Джон Пол Мюллер «C# для чайників». Навіть якщо ви ніколи не мали справи із програмуванням, цей посібник допоможе освоїти мову C#.
Джеффрі Ріхтер «CLR via C#. Програмування на платформі Microsoft .NET Framework мовою C#». Ця книга докладно описує внутрішнє влаштування та функціонування загальномовного середовища (CLR) Microsoft .NET Framework.
Джуст Віссер «Розробка програм мовою С#». Цей практичний посібник ознайомить вас із 10 простими рекомендаціями, які допомагають писати програмне забезпечення, яке легко підтримувати та адаптувати. Ці тези сформульовані, виходячи з аналізу сотень реальних систем.
Відеоканал Channel 9 від Microsoft розміщує багато цінної для IT-фахівців інформації, у тому числі відеоуроки.
Журнал MCDN Magazine публікує на своєму сайті цікаві навчальні статті.
Joseph Albahari «C# 10 in a Nutshell. The Definitive Reference». Лаконічний довідник про все, що потрібно знати про С#.
Корисні статті на DOU
Що має знати Senior .NET Developer. Аналіз вакансій на DOU.
Статті рубрики «.NET дайджест».
Советы сеньоров: как прокачать знания junior .NET.
Обзор Akka.NET: как проектировать IoT-системы с помощью этой библиотеки.
Асинхронность в C#. Разрушение легенд.
Разработка highload-системы на .NET Core: задачи и их решения.
.NET Core: как работают микросервисы в контейнерах.
Як шукати роботу початківцю в .NET
Перш ніж розсилати резюме, потренуйтесь писати код, наприклад на Codewars або LeetCode — це дуже добре набиває руку. Production-ready код ви зможете побачити й почати писати, тільки коли вже влаштуєтеся на роботу, а до того корисно просто вміти писати мовою базові алгоритми. Знайдіть прості завдання, виконайте, а проєкт залийте на GitHub.
Кілька загальних порад. Пишіть у резюме те, що ви справді вмієте та розумієте. Не пишіть усі ключові слова, опис яких ви прочитали у Вікіпедії. Не варто надто сильно морочитися над зовнішнім виглядом резюме, бо у роботодавця може скластися враження, що під гарною обгорткою немає нічого суттєвого.
Хороше резюме .NET-розробника містить:
2–3 речення з коротким описом себе та своєї мотивації.- Список навичок і знань, які потрібні більшості .NET-проєктів: мова C#, база даних, брокер повідомлень, базовий Computer Science, бажання навчатися, комунікабельність тощо.
- Досвід роботи або стажування. Їх можна знаходити як у великих компаніях, так і в менших. Плюси великих компаній — їхній процес найму стажистів уже налагоджений, і там із більшою ймовірністю є готовий план розвитку співробітників та більший вибір проєктів, мінус — велика конкуренція. У малих компаніях конкуренція може бути меншою. Якщо певний комерційний досвід вже є — обов’язково опишіть в резюме, яка була ваша роль на проєкті, який саме внесок ви зробили.
- Якщо у вас є свої проєкти з відкритим кодом (нехай навіть код там не ідеальний), вкажіть посилання на них.
- Зазначте решту технологій, з якими працювали. Тільки не перераховуйте все поспіль, а лише те, з чим справді працювали.
Станьте членом спільнот розробників, там іноді можна побачити, як хтось шукає людей собі у команду. Перевагою буде той факт, що ви зможете безпосередньо поспілкуватися з тією людиною, з якою, можливо, працюватимете в майбутньому. Можливо, знаючи вас, хтось сам рекомендуватиме компанії взяти вас до себе.
Перед підготовкою до співбесіди радимо звернути увагу на статтю «Співбесіда з .NET. 150+ запитань для Junior, Middle, Senior».
Роботу радимо шукати на Djinni та DOU. На DOU є розділ «Перша робота» з курсами, стажуваннями та вакансіями лише для початківців.
Також варто створити акаунт в LinkedIn і додати в друзі якомога більше розробників та рекрутерів. Про те, як правильно заповнювати LinkedIn-профіль, читайте тут. Після перших відмов запитуйте в інтерв’юєрів, що варто підтягнути.
Бажаємо успіху у вивченні .NET і віримо, що вам все вдасться!
Раніше ми писали про те, як вивчити JavaScript та Python. Напишіть у коментарях, про яку технологію ви б хотіли почитати наступного разу.