185919

Почему C# программисты скоро будут нарасхват

C# программисты становятся более востребованными благодаря развивающейся экосистеме языка. На нём пишут бэкенд, приложения, игры.

Разберёмся, в чём причина популярности языка.

Знакомьтесь, C#!

C# обладает выразительным синтаксисом, и его легко изучать. Фигурные скобки узнают все, кто работал в C, C++ или Java. Знакомы с одним из этих языков? Тогда вы быстро начнёте продуктивную работу в C#.

Синтаксис языка устраняет сложности C++ и предоставляет такие мощные возможности, как обнуляемые значения типов, перечисления, делегаты, лямбда-выражения и прямой доступ к памяти. C# поддерживает универсальные методы и типы, которые повышают безопасность типов и производительность. Итераторы позволяют классам создателей коллекций определять кастомные поведения итераций, которые легко использовать в клиентском коде. Выражения интегрированного языка запросов (LINQ) делают строго типизированный запрос первоклассной конструкцией языка.

C# – объектно-ориентированный язык, а значит, поддерживает инкапсуляцию, наследование и полиморфизм. Класс может наследоваться напрямую от одного родительского класса, но может реализовывать любое число интерфейсов. Методы, которые переопределяют виртуальные методы в родительском классе, требуют указания ключевого слова override для предотвращения случайного переопределения.

В дополнение ко всем плюшкам ООП язык C# облегчает разработку программных компонентов посредством нескольких инновационных конструкций языка:

  • Инкапсулированные сигнатуры методов, названные делегатами, включают оповещения о безопасности типов.
  • Свойства служат акцессорами к переменным закрытых частей.
  • Атрибуты предоставляют декларативные метаданные о типах во время исполнения.
  • Строчные документационные комментарии XML.
  • Интегрированный язык запросов (LINQ) предоставляет встроенные возможности запросов между различными источниками данных.

Нужно взаимодействовать с другими программами Windows, например, с COM-объектами или со встроенными Win32 DLL? Сделайте это с помощью C# через процесс «Interop». Interop позволяет программам, написанным на C#, делать почти всё, что доступно программам, написанным на C++. C# поддерживает даже указатели и концепцию «небезопасного» кода для случаев, когда прямой доступ к памяти абсолютно критичен.

Причём тут .NET?

Программы C# выполняются поверх .NET Framework – встроенного компонента Windows, который включает в себя виртуальную среду выполнения, называемую общеязыковой исполняющей средой (CLR), и единый набор классовых библиотек. CLR – это коммерческая реализация общеязыковой инфраструктуры (CLI). Она служит основой для создания исполняемых файлов и окружений разработки, в которых языки и библиотеки работают совместно и незаметно.

Исходный код, написанный на C#, компилируется в промежуточный язык (IL), который удовлетворяет спецификации CLI. Код IL и такие ресурсы, как растровые изображения и строки, хранятся на диске в виде исполняемого файла – сборки, обычно с расширениями .exe и .dll. Сборка содержит манифест, который предоставляет информацию о типах, версии, культуре и требованиях безопасности сборки.

При запуске программы сборка C# загружается в CLR, которая совершает определённые действия, исходя из информации в манифесте. Если требования безопасности удовлетворяют CLR, она производит JIT-компиляцию, чтобы конвертировать код IL во встроенные машинные инструкции. CLR предоставляет и другие службы, связанные с автоматической сборкой мусора, обработкой исключений и управлением ресурсами. Код, выполняемый в CLR, иногда называют «управляемым кодом» для сравнения с «неуправляемым кодом», который компилируется во встроенный машинный язык, нацеленный на определённую систему.

Вот отношение между временем компиляции и временем выполнения исходников C#, классовых библиотек .NET Framework, сборок и CLR:

Языковая совместимость – ключевая особенность .NET Framework. Так как IL-код производится на C#, компилятор соответствует общей спецификации типов (CTS). IL код, сгенерированный из C#, может взаимодействовать с более чем двадцатью другими CTS-совместимыми языками. Одиночная сборка может содержать множество модулей, а типы могут ссылаться друг на друга так, будто они написаны на одном языке.

.NET Core – кроссплатформенный .NET

Версия Core – это модульная кроссплатформенная open source реализация стандарта .NET общего назначения. Она содержит множество API из .NET Framework и включает среду выполнения, фреймворк, а также инструменты, поддерживающие различные ОС и процессоры. Реализация находилась под управлением наработок из ASP.NET Core, но требовала более современного подхода. Она может использоваться для различных устройств, в облаке и для встроенных/IoT сценариев.

Вот основные характеристики .NET Core:

  • Кроссплатформенность: .NET Core предоставляет ключевую функциональность для реализации нужных особенностей вашего приложения, а также возможность повторного использования кода вне зависимости от вашей платформы. Она поддерживает Windows, Linux и macOS. Вы можете писать приложения и библиотеки, которые запускаются на всех поддерживаемых ОС без изменений.
  • Open source: .NET Core – один из многих проектов, который находится под управлением .NET Foundation и доступен на GitHub. Использование .NET Core в качестве open source проекта способствует прозрачному процессу разработки и развитию активного, вовлечённого сообщества.
  • Гибкий деплой: есть два главных способа деплоя вашего приложения: зависимый от фреймворка и автономный. В первом случае устанавливаются только ваше приложение и зависимости. Приложение зависит от глобальной версии .NET Core. Во втором случае версия .NET Core, которая использовалась для сборки вашего приложения, деплоится вместе с приложением и зависимостями, и может выполняться параллельно другим версиям.
  • Модульность: .NET Core обладает модульностью потому, что выпускается через NuGet в меньших пакетах сборок. В отличие от одной большой сборки со всей встроенной функциональностью, .NET Core доступен в виде меньших функционально-ориентированных пакетов. Это приводит к более гибкой модели разработки, позволяет оптимизировать приложение, включая только необходимые пакеты NuGet. Преимущества меньшего поля покрытия приложения отражаются в повышенной безопасности, менее требовательном обслуживании, высокой производительности и в сниженных затратах по принципу «плати только за то, чем пользуешься».

Благодаря .NET Core C# программисты могут разрабатывать не только на Windows.

Xamarin: мобильная разработка на C#? Легко!

Многие думают о разработке под Android и iOS в контексте таких встроенных языков, как Objective-C, Swift, Java и Kotlin.

Xamarin позволяет разрабатывать на C#, используя библиотеки и рантайм, которые работают на iOS, Android и Windows. При этом компилируются встроенные (не интерпретированные) приложения с достаточной производительностью для игр.

Xamarin совмещает все возможности встроенных платформ и добавляет несколько мощных особенностей:

  • Полная привязка к базовым SDK: Xamarin содержит привязки практически ко всем базовым платформенным SDK от iOS и Android. Вдобавок эти привязки строго типизированы, что облегчает использование и навигацию, а также включает строгую проверку типов во время компиляции и разработки.
  • Interop для Objective-C, Java, C и C++: Xamarin содержит средства для прямого вызова библиотек Objective-C, Java, C, and C++, а значит, вы свободны использовать сторонний код, не изобретая велосипед. Таким образом, вы воспользуетесь преимуществами существующих библиотек iOS и Android, написанных на Objective-C, Java или C/C++.
  • Современные языковые конструкции: приложения Xamarin пишутся на C#, современном языке, который содержит существенные улучшения по сравнению с Objective-C и Java. Например, особенности динамического языка, лямбды, LINQ, функции параллельного программирования, дженерики и многое другое.
  • Библиотека базовых классов (BCL): приложения Xamarin используют .NET BCL, большую коллекцию классов, которая имеет такие функции, как XML, базы данных, сериализацию, IO, строки и поддержку сети. Существующий код C# можно скомпилировать для дальнейшего использования в приложении, что открывает доступ к тысячам библиотек, которые могут делать то, что недоступно в BCL.
  • Современная IDE: Xamarin использует Visual Studio на macOS и Windows. Обе версии обладают такими современными функциями, как автозавершение кода, системой управления проектом, библиотекой шаблонов, встроенным контролем версий.
  • Поддержка мобильной кроссплатформенности: Xamarin поддерживает iOS, Android и Windows. Приложения могут иметь до 90% общего кода. Библиотека Xamarin.Mobile предлагает унифицированный API для доступа к ресурсам всех платформ.

C# программисты могут разрабатывать кроссплатформенные мобильные приложения на Xamarin!

C# используется в машинном обучении

У вас уже есть опыт в .NET, и вы хотите освоить машинное обучение? ML.NET – это кроссплатформенный фреймворк машинного обучения с открытым исходным кодом.

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

Вот что можно сделать с ML.NET:

  • Классификация/категоризация: разделяйте пользовательский фидбэк на позитивную и негативную категории автоматически.
  • Регрессия/Прогнозирование: непрерывных значений: прогнозируйте цены на недвижимость исходя из размеров и местоположения.
  • Обнаружения аномалий: обнаруживайте мошеннические банковские операции.
  • Рекомендации: предлагайте продукты онлайн-покупателям исходя из их истории покупок.

Отдельно про игры

Unity – самый популярный игровой движок для разработки инди-игр, и он использует код на C#. Интересно, что сам движок написан на C++, поэтому он освобождает программиста от необходимости разбираться со скоростью исполнения, что идеально для новичков.

Есть и другие движки с поддержкой C#:

  • Monogame позволяет «написать игру один раз и играть везде»;
  • WAVE – кроссплатформенный движок;
  • Xenko – довольно мощный кроссплатформенный движок;
  • Duality поддерживает только 2D;
  • Xna – официальный движок от Microsoft;
  • Flatredball 2D-движок.

Все перечисленные движки позволяют писать игровой код на C#, но Unity определённо занял особое место в коммерческой разработке. Достаточно вспомнить такие игры, как Rust и Forest – они написаны на Unity, а значит и на C#.

Игра Rust написана на Unity

C# программисты имеют большие возможности в геймдеве!

Как всё это влияет на рынок труда?

Возможно, C# программисты не ринулись строем писать мобильные или веб-приложения. Но посмотрите, какие возможности открываются для тех, кто уже знает C#. К тому же, Microsoft планируют к 2021 году объединить .NET Core и .NET Framework совместно с фишками вроде Windows Presentation Foundation (WPF).

C# программисты больше не ограничены платформой Windows. Сегодня они могут смело пробовать себя в роли мобильных, игровых или веб-разработчиков.

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

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

И всем этим вы сможете заниматься в Visual Studio!

А какие преимущества C# выделили бы вы?

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ

matyushkin
18 марта 2020

ТОП-10 книг по C#: от новичка до профессионала

Отобрали актуальные книги по C#, .NET, Unity c лучшими оценками. Расположил...
Библиотека программиста
01 июля 2018

Лучшие актуальные шпаргалки по C# на все случаи жизни

Шпаргалки по C# помогут забыть о поиске простой информации и сосредоточитьс...
Библиотека программиста
12 марта 2018

Видеокурс по C# с нуля: от основ до полноценного приложения

Подробный видеокурс для изучающих C# с нуля. Пройдем путь от основ до напис...