.NET. Прошлое. Настоящее. Будущее
Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті.
Привет. Меня зовут Алексей Голубев, и я Lead Software Engineer в компании SoftServe. Вот уже 8 лет я так или иначе связан с .NET, и мне она реально нравится.
.NET за свою долгую жизнь переживалa как взлеты, так и падения. В этой статье мы ретроспективно посмотрим на то, через что прошла платформа, что в ней менялось с годами и в какое светлое будущее ведет она нас.
История развития .NET
В 2000 году Java доминировала по всем фронтам, в том числе в качестве основной платформы для реализации серверных приложений. Созданная компанией Sun Microsystems, Java, реализовала клинг фичу тех лет. Более того, принципы заложенные еще тогда до сих пор актуальны и находят свое воплощение во многих проектах.
Это, конечно же, виртуальная машина Java Virtual Machine (сокращённо JVM). Она позволяла писать и компилировать код всего единожды для разных платформ и процессоров плюс брала на себя все общение с ОС и интерпретацию для процессора. Более того, JWM как платформа позволяла нам использовать разные языки программирования, просто после компиляции они должны превратиться в код, понятный для виртуальной машины. И тут у вас может возникнуть вопрос, а причем тут .NET?
А при том, что в 2000 году компания Microsoft сперва представила, а в
Это, конечно, была не случайность, и Microsoft готовила .NET именно как ответ Java. В то время уже предполагалось (небезосновательно, как выяснилось в дальнейшем), что лицензирование Java для Microsoft не будет продлено в 2003 году (в
Основное, на мой взгляд, что привнесла .NET, это общение через XML как стандарт. Что нам это дает? Главным образом то, что наш клиент и наш сервер могут быть написаны и работать на чем угодно. Это как выходцы из разных стран, которые общаются на общем английском. Но не стандартом единым, Microsoft еще и предоставила удобные инструменты для автогенерации XML, а ранее разработчики были вынуждены создавать их вручную.
Таким образом .NET позволила Microsoft замкнуть на себе весь процесс разработки как веб-, так и десктоп-приложений. У «майков» был свой веб-сервер IIS, который принимал запросы от пользователя и передавал их в ASP.NET, которая использовала как правило майкрософтовский SQL Server. Клиентом мог быть Internet Explorer, доминант той эпохи, или десктопные приложения, написанные при помощи WinForms. Microsoft сделала все, чтобы замкнуть разработчика на себе и на своих продуктах. Продукты между собой отлично взаимодействовали, а использование чего-то со стороны предполагало страдания.
Популярность .NET росла, в том числе за счет крупных корпораций. .NET зарекомендовала себя не только как стабильная и безопасная платформа. Но и как легко кастомизируемая вещь. То есть бизнес на базе этой платформы мог построить абсолютно любое приложение, плюс не нужно использовать компоненты от малоизвестных вендоров. Тут как в некоторых странах «все свое». Стоит отметить также любовь разработчиков к этой платформе, хотя, конечно, за поддержку только Windows их не критиковал лишь ленивый. В основном рост популярности давал ASP.NET со своими решениями для веб-приложений.
Вышедшие в 2009 году ASP.NET MVC и Web API были настолько хороши, что используются и поддерживаются до сих пор, правда, с припиской Core. Об этом поговорим дальше. Два этих фреймворка обеспечили .NET новый виток роста и дали сигнал всей индустрии.
Стоит отметить, что Microsoft никогда не зарабатывала на .NET напрямую. Сама платформа и ее компоненты, например ASP, были всегда бесплатными. Они зарабатывали на сопутствующем ПО, таком как сама операционная система Windows Server, база данных SQL Server, с которой так хорошо работал ASP.NET, и с самой среды разработки Visual Studio.
Но как бы ни был хорош .NET, его постоянно ругали за поддержку только Windows. Это попыталась исправить стороння компания Xamarin, и уже в
В 2016 году вышла первая версия .NET Core. Она позволяла запускать в начале только ASP.NET MVC, а позже и другие продукты на операционных системах от Apple и Linux. Помимо поддержки других систем, .NET Core имела множество других новшеств. Однако сообщество не сразу поверило в новинку и долгое время избегало ее, стараясь не отходить от канонов и от классики .NET. И их можно понять. После версии 4.5 и 2012 года особо ничего не менялось, каждый год мы получали новую версию. Тем не менее множество нужных фич, таких как поддержка асинхронности, уже была реализовано и не было запроса на изменения.
Все поменялось с приходом все большей компьютеризации и облачных вычислений. Потребности рынка росли, нужно было наращивать мощности. А обслуживание и лицензия на Windows сервера были довольно дорогими, в отличие от бесплатного Linux. Конечно, Linux более требователен в плане настроек, но есть облака, где можно легко поднять приложение на любой операционной системе и где все настройки уже сделаны до тебя. И бизнес начал считать деньги. Чтобы не потерять рынок, .NET была вынуждена адаптироваться. Конечно, плохо терять доходы с лицензий, но если переориентировать .NET уже под облако, то можно стричь доллары уже внутри облака. Поэтому переход на кроссплатформенность — это просто прагматичный шаг, а не милосердие.
.NET сейчас
Если вы интересовались .NET и читали последние новости, то не могли пропустить выход .NET 5. .NET 5 призвана убрать всю эту путаницу с двумя версиями .NET обычной и Core. Теперь .NET только одна и она кроссплатформенная, сочетающая в себе и классическую и версию Core. На этой картинке вы видите, что есть .NET сейчас.
Web
.NET по-прежнему верна паттерну MVC, если вы предпочитаете более олдскульные веб-приложения с полной генерацией HTML на сервере. Только теперь эти приложения работают под любой операционной системой и более не привязаны к Windows.
Так же как и ASP.NET Core API, который представляет собой обычную апишку, куда мы можем послать запросы и получить ответы как в JSON, так и по старинке в XML. Отлично работает с фронтенд-фреймворками типа Angular или React. Кстати, .NET плюс Angular — это классический стек и самый часто встречаемый. В эру больших веб-фреймворков, мобильных приложений, интернета вещей web API как никогда актуальны, и ASP.NET решает эту проблему отлично. Сейчас это самый популярный тип нового проекта.
ML
Стоит отметить и такой проект, как ML.NET, кроссплатформенную и открытую систему машинного обучения для разработчиков .NET. Разработчики могут обучать модель машинного обучения или повторно использовать существующую модель третьей стороной и запускать ее в любой среде в автономном режиме. Это означает, что разработчикам не нужно иметь опыт работы в Data Science, чтобы использовать фреймворк. Первый стабильный релиз фреймворка 1.0 был анонсирован в 2019 году. Так что это довольно свежий, но при этом уже стабильный инструмент. Дотнетчик или дотнетчица могут быть и дата-саентистами тоже.
Mobile
Помните ту самую Xamarin, которая замутила Mono? Так вот, они создали одноименный фреймворк для построения кроссплатформенных производительных мобильных приложений, используя .NET, C# и XAML. XAML — это язык разметки типа HTML.
Благодаря Xamarin в среднем 90% кода приложения может использоваться без изменений на разных платформах. С помощью этого шаблона разработчик может написать всю бизнес-логику на одном языке (или использовать существующий код приложения), но при этом получить характеристики производительности, оформление и поведение, характерные для каждой соответствующей платформы. Приложения Xamarin можно писать на ПК или Mac и компилировать в собственные пакеты приложений, например в файлы с расширением .apk для Android или .ipa для iOS.
Любой дотнетчик или дотнетчица могут быть и мобильными разработчиками тоже.
Desktop
Не оставила .NET в покое и десктопные приложения. У нас все также есть и поддерживаются WPF, WinForms и UWP. Есть, конечно, тут один минус, у всех их так или иначе проблемы с кроссплатформой. Их в принципе можно решить с помощью сторонних библиотек, но пока из коробки только винда. Поддержка всех платформ у WPF ожидается только с приходом .NET 6 (читай — не скоро). Однако если вам нужно ПО только под Windows, то это хорошие инструменты. А winform с большим выбором готовых кнопок, инпутов и так далее позволяет строить приложения ну очень быстро.
IoT
С недавних пор в семействе .NET появился новичок. .NET nanoFramework — это бесплатная платформа с открытым исходным кодом, основанная на .NET и предназначена для малых встраиваемых устройств, микроконтроллеров. С ее помощью можно разрабатывать различные устройства для интернета вещей, носимые устройства, научные приборы, робототехнические устройства, можно создавать прототипы и даже использовать на промышленном оборудовании.
.NET nanoFramework является малой версией «большого» .NET Framework, предназначенного для настольных систем. Разработка приложений ведется на языке C# в среде разработки Visual Studio. Сама платформа — исполнительная среда .NET-кода, это позволяет абстрагироваться от аппаратного обеспечения и дает возможность переносить программный код с одного микроконтроллера на другой, который тоже поддерживает .NET nanoFramework. Программный код на C# для настольных систем, без изменений или с небольшой адаптацией (необходимо помнить про малый объем оперативной памяти) исполнится на микроконтроллере. Благодаря этому разработчики на .NET с минимальными знаниями в области микроэлектроники смогут разрабатывать различные устройства на .NET nanoFramework.
Gaming
Как ни странно, но .NET-разработчику доступна такая опция, как разработка игр. Так как Unity — межплатформенная среда разработки компьютерных игр, поддерживает C# как язык написания игровых скриптов. Unity позволяет создавать приложения, работающие на более чем 25 различных платформах, включающих персональные компьютеры, игровые консоли, мобильные устройства, веб-приложения и другие. На Unity написаны тысячи игр, приложений, визуализации математических моделей, которые охватывают множество платформ и жанров. При этом Unity используется как крупными разработчиками, так и независимыми студиями.
Cloud
Microsoft вовремя адаптировалась и выпустила собственное облако Azure, с которым .NET работает чуть ли не из коробки. Там есть все что нужно для работы любого .NET-приложения (кроме прозрачного биллинга — Microsoft за что вы меня все время чаржите?). Плюс поддержка других языков и систем, конечно.
Что же ждет .NET в будущем
Я считаю, что надо:
1. Сделать .NET более понятным для новичков. Когда-то существовал язык, который, хотя и неуклюже, преодолевал разрыв между настоящими программистами и начинающими любителями. Но Microsoft несколько лет назад отказалась от Visual Basic, а заслуженная репутация Microsoft в области решений с закрытым исходным кодом помешала ей участвовать в образовании в пользу Java и Python. Маловероятно, что что-то, что делает Microsoft сегодня, быстро изменит эту ситуацию. Но некоторые из их целей по снижению входных барьеров в .NET интересны — в частности, идея создания учебной программы по информатике с открытым исходным кодом, которая могла бы выполняться полностью онлайн, то есть даже без Visual Studio, а просто в браузере. Как, например, это реализовано в Jupyter Notebook.
2. Реализовать использование Blazor на декстопе. Платформа Blazor предназначена для создания интерактивного веб-интерфейса на стороне клиента с использованием .NET. То есть, по сути, создание многофункциональных интерактивных пользовательских интерфейсов на C# вместо JavaScript. Microsoft предложила возможность использовать его и при создании интерфейса десктопных приложений. Может ли это направление развиться во что-то вроде Electron? Пока непонятно, есть только предварительные эксперименты. Независимо от формы, разрыв в реализации различных типов приложений — мобильных, настольных и веб-приложений — остается одной из непреодолимых проблем .NET.
3. Улучшить экосистему .NET. Существует множество причин: некоторые практические, некоторые исторические — почему многие разработчики избегают сторонних инструментов при создании своего стека разработки .NET и используют только решения от Microsoft. Но если .NET будет продолжать развиваться, она должна помочь другим разработчикам добиться успеха, особенно тем, у кого есть проекты с открытым исходным кодом, которые может использовать все сообщество. Не существует единого шага, который решает эту проблему, но Microsoft может многое сделать, чтобы предоставить разработчикам открытого ПО лучшую поддержку, руководство и продвижение.
4. Увеличить скорость разработки. Это включает в себя долгожданные улучшения, такие как горячая перезагрузка в ASP.NET и заблаговременная компиляция для Blazor. Но производительность разработки также охватывает более широкие вопросы, например скорость сборки проекта и компиляции кода. Это область, в которой, по словам Microsoft, конкурирующие платформы все еще вытесняют .NET.
5. Демократизировать ML.NET. Сегодня мы говорили о ML.NET, библиотеке Microsoft для машинного обучения в .NET. Многие разработчики попробовали это на пробном проекте. Но помимо этого? Разрыв между игрушечными примерами в ML.NET и практической интеграцией огромен — многие разработчики срываются с этого обрыва в момент энтузиазма. Разработчики Microsoft предложили множество небольших улучшений, которые могут помочь неспециалистам интегрировать функции машинного обучения в свои приложения.
.NET 5 уже сейчас предоставляет библиотеки, фреймворки, инструменты и API для создания, тестирования, запуска и развертывания программного обеспечения, предназначенного для всех платформ, включая Windows, Linux, IoT, macOS, iOS, Android, tvOS, watchOS и WebAssembly. А также все устройства, включая настольные компьютеры, веб-браузеры, устройства IoT, планшеты, мобильные телефоны и многое другое. Это серьезная экспансия, и я думаю, Microsoft ее потянет. Xbox же до сих пор жив.
96 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів