В чём особенности .NET-платформы, чем занимаются .NET-разработчики и как начать развитие в .NET? Об этом мы спросили Дениса Чеснокова – Lead Software Engineer и преподавателя в EPAM.
Что такое .NET
.NET – это платформа от Microsoft, которая позволяет создавать программные приложения. Первый выпуск .NET Framework состоялся в 2002 году. Считается, что .NET Framework была создана как альтернатива платформе Java от компании Sun. Главное отличие состоит в том, что .NET Framework официально рассчитана на работу именно с операционными системами семейства Microsoft Windows. С тех пор она прошла долгий путь от версии 1.0, и на сегодняшний день, несмотря на появление платформы нового поколения (.NET Core), по-прежнему достаточно популярна: существует множество программных продуктов, библиотек и фреймворков, которые написаны и развиваются под .NET Framework.
В 2016 году в дополнение к .NET Framework выпущена модульная платформа .NET Core, которая совместима с различными операционными системами. Другими словами, она кроссплатформенная. Кроссплатформенность .NET Core открыла большое количество новых сценариев и возможностей её применения. Это сыграло существенную роль в продвижении .NET среди разработчиков и представителей бизнеса.
Денис Чесноков, Lead Software Engineer:
Идея кроссплатформенности в том, что программный продукт пишется на конкретном языке, а затем переводится в промежуточный язык, и уже он общается с машинным кодом. Таким образом появляется возможность, например, писать .NET-приложение с использованием языка C# для устройств Linux: домашних роутеров, smart-телевизоров и других «умных» устройств, даже для стиральных машин, оборудованных контроллером Raspberry PI.
Многие считают, что язык С# и платформа .NET – это одно и то же. Конечно, это не так. Они, несомненно, развиваются с оглядкой друг на друга, но не имеют строгой взаимозависимости. Например, помимо официально поддерживаемых реализаций .NET, существуют и альтернативные варианты, такие как Mono, .NET Compact Framework, .NET Micro Framework и другие. На всех этих платформах мы можем применять язык C#, но в определённой степени. С другой стороны, с .NET совместим не только с C#, но и с другими языками: F#, VB.NET и даже C++.
Разработчики, которые знают разные языки, могут собраться вместе и написать общий программный продукт под конкретную .NET-платформу. Элементы этого продукта, написанные на разных языках, смогут коммуницировать между собой без всяких проблем. Кстати, это объясняет, почему комьюнити .NET такое большое и разнообразное: оно объединяет программистов, которые пишут на разных языках.
Чтобы начать изучение.NET, воспользуйтесь картой, созданной инженерами EPAM, чтобы определить приоритет тем и технологий, необходимых начинающему инженеру.
Чем занимаются .NET-разработчики
Языки и платформы созданы для решения конкретных задач и разработки соответствующих программных продуктов. У .NET тоже есть своя специфика. При этом диапазон продуктов, над созданием которых трудятся .NET-разработчики, очень широкий. Достаточно посмотреть на этот список: в нём перечислены использующие .NET компании из самых разных отраслей – от финансовой и торговой до научной и социальной. В целом, всё разнообразие программных продуктов, которые создаются под .NET, можно сгруппировать следующим образом.
Web Development
Пожалуй, это самая распространённая группа приложений, которые пишутся под .NET. Особенность web-приложений состоит в том, что они работают через браузер и требуют, как правило, стабильного интернет-подключения.
Web-приложения могут быть разной сложности. Набросать небольшой одностраничный сайт с картинками и ссылками – дело нехитрое. А вот для создания комплексного web-приложения потребуется много усилий. Ярким примером простого с точки зрения внешнего вида и сложного с точки зрения нагрузки на серверную часть приложения является сайт Stack Overflow, известный каждому разработчику.
Чтобы написать web-приложение под .NET, необходимо знать C# и владеть фреймворком ASP.NET MVC. Также нужно понимать, что такое клиент/сервер, как устроен протокол HTTP, REST, JavaScript, различать Frontend и Backend. И если мы говорим про современную разработку, то важно иметь представление о доменах, хостингах, планах, а ещё – немного об облачных технологиях (MS Azure, Amazon, Google Cloud).
Client Applications
Под .NET создаются не только web, но и клиентские приложения – продукты, которые запускаются на персональных компьютерах и мобильных устройствах конечных пользователей.
С применением .NET разработаны некоторые компоненты операционной системы Windows, среди них – блокнот и калькулятор. Но есть и большое количество приложений под .NET, сделанных индивидуальными разработчиками: на этом ресурсе можно познакомиться с некоторыми из них. Создаются и более сложные продукты. Например, для трейдеров – NinjaTrader, Tradesignal. Ещё есть интересное приложение для бизнес-аналитиков – Microsoft Power BI, которое визуализирует информацию из любого источника и позволяет проще и быстрее работать с большими данными. В основном для Desktop Client Applications применяются технологии WPF либо Windows Forms – зная их, вы сможете создавать сложные приложения для стационарных компьютеров пользователей.
Также существуют клиентские приложения для смартфонов. С помощью .NET Core и Xamarin.Forms вы можете написать приложение, опубликовать его в Apple Store или Play Market, и оно станет доступно каждому обладателю смартфона или планшета.
Game Development
С помощью .NET можно писать игры под Unity. Это платформа, которая базируется на реализации .NET – Mono. Под Unity написаны такие известные игры, как Inside, Kerbal Space Program, Endless Legend и даже Pokemon Go.
Для создания игры достаточно знать язык C# и использовать библиотеки платформ Mono и Unity. Это намного проще и быстрее, так как не придётся изучать C++, а всю работу по преобразованию C# кода возьмут на себя Mono и Unity.
Internet of Things (IoT)
Internet of Things (рус. «Интернет вещей») – направление разработки технологий для девайсов, которые могут взаимодействовать друг с другом, с внешней средой и интернетом. Здесь также можно применять .NET, например, если вы используете Raspberry PI с Windows 10 IoT Core и хотите управлять умными чайниками, системами домашнего освещения, беспилотными автомобилями, системами распознавания речи и автоматизированных диалогов на базе готовых фреймворков. Если вы планируете развиваться в данном направлении, то для начала почитайте про Azure IoT, Azure IoT Hub и про то, каким образом обеспечена двухсторонняя коммуникация с сервером (хабом) и вашими умными устройствами.
Enterprise
Enterprise – это область разработки продуктов для решения проблем бизнеса, а не конечных пользователей. К таким продуктам можно отнести CRM-системы для отслеживания поведения клиентов, а также системы менеджмента информации или документооборота.
Enterprise-системы являются комбинацией разработки web, desktop и mobile. Несмотря на некоторую степень универсальности, они создаются для решения конкретного спектра задач. Например, если клиент заинтересован в организации сложного корпоративного документооборота, возможным решением для него станет платформа MS SharePoint / SharePoint Online. А если речь идёт о создании глобальной торговой интернет-площадки для крупной retail-компании, то неплохим вариантом может стать платформа Sitecore.
Если вы хотите разрабатывать под Enterprise, вам потребуется знание не только C#, .NET и JavaScript, но и инструментов, которые являются базой для проектируемого enterprise-продукта. Например, для продукта на основе SharePoint потребуются изучить SharePoint-компоненты: workflows, web parts, timerjobs, custom fields, content types, features.
Почему стоит развиваться в .NET
Привлекательность .NET для молодых специалистов можно объяснить не только разнообразием продуктовых направлений. Знания основ .NET позволят вам быть гибкими в выборе специализации и сферы программирования.
Можно пойти в Backend, стать профессионалом в WCF и в ASP.NET Core и писать сервисы для приложений. А использование Razor или Blazor позволит создавать под .NET полноценные web-приложения как с клиентской, так и с серверной частью. Если же требуется переход к какому-то современному движку (React/NG/Vue), то обучение для backend-разработчика станет более понятным с ипользованием TypeScript – языка-обёртки над JavaScript, который разработан Microsoft специально для C#-программистов.
Есть ещё один аргумент в пользу выбора .NET – это её дружественность к начальному этапу обучения. У большинства на домашнем компьютере установлена ОС Windows. Гораздо проще начинать карьеру, взяв именно .NET-платформу, потому что она будет работать на Windows без установки и конфигурации дополнительного программного обеспечения. Другие платформы требуют специальной настройки Windows. Скажем, если вы соберётесь осваивать Java, то сначала на компьютер нужно поставить виртуальную машину Java. А для iOS и вовсе приобрести MacBook и редактор XCode.
Дополнительное преимущество .NET для начинающих специалистов – развитое .NET-комьюнити. На таких популярных ресурсах, как GitHub или Stack Overflow, можно найти ответы на неизбежно возникающие у начинающих специалистов вопросы, и даже посмотреть примеры кода.
Денис Чесноков, Lead Software Engineer:
Я не рекомендую новичкам слишком увлекаться заимствованием кода. Если постоянно заимствовать код из Stack Overflow, скорее всего, это приведёт к ухудшению качества приложения, множеству внешних зависимостей и полному непониманию, почему код написан именно так.
Советы начинающему разработчику
Прежде чем выбрать .NET или любую другую платформу, в первую очередь стоит изучить основы – теорию алгоритмов и теорию информации.
Лишь после изучения основ можно переходить к выбору платформы, и только после этого – к языку, который поддерживается данной платформой. Чтобы сделать правильный выбор, необходимо знание актуальных платформ и технологий, а также понимание, как они взаимодействуют друг с другом, какие протоколы передачи информации используют и так далее.
Выбор платформы напрямую зависит от того, какие программные продукты вы хотите создавать. Предположим, для решения вашей задачи нужны нейронные сети. Тогда есть возможность использовать .NET или, скажем, Anaconda. У этих платформ различные функции и возможности для работы с нейронными сетями. Выбор зависит от того, какие именно функции и возможности нужны для решения конкретной задачи. Если вы предпочтёте .NET, то в вашем распоряжении будет ML.NET фреймворк и язык С#. Если же выбор падёт на Anaconda, тогда в вашем распоряжении будет Keras и язык Python.
После выбора платформы и изучения языка полезно почитать про микросервисную архитектуру: сейчас многие программные продукты проектируются именно с использованием данного подхода для обеспечения взаимозаменяемости, простоты и снижения степени зависимости между компонентами/технологиями/платформами.
Кроме того, важно обратить внимание на базы данных и системы управления ими.
Порой у тех, кто приходит в Лабораторию EPAM, полностью отсутствуют знания по базам данных. А ведь чаще всего приложения обрабатывают какую-то информацию. Поэтому нужно знать хотя бы одну СУБД (систему управления базами данных). Например, Microsoft SQL Server и, соответственно, язык T-SQL. Также полезно почитать про теорему CAP и NoSQL базы данных – сегодня они широко применяются.
Если вы избрали .NET в качестве направления своего профессионального развития, то основным источником информации для вас станет MSDN (Microsoft Developer Network) – официальный портал со справочной информацией по всем продуктам Microsoft, а также TechNet – форум, где ведутся обсуждения этих продуктов.
.NET – это платформа, которая отражает новейшие тенденции в разработке и предлагает начинающим специалистам множество возможностей. Если вы хотите развиваться в .NET-разработке, то эффективнее это делать при поддержке опытных наставников, таких, как Денис. Регистрируйтесь на наши обучающие программы по .NET и набирайтесь опыта у преподавателей с богатым опытом практической разработки.