Каковы перспективы у «немодной» платформы .NET — мнения экспертов
Платформа .NET появилась в начале 2000-х годов. Она объединяла «под одной крышей» несколько языков программирования, что было в новинку для того времени. Но разработчики платформы утверждали, что это новшество несет несомненную пользу: программисты начали создавать свои приложения на тех языках, которые знали лучше всего, которые лучше подходили для решения своих задач.
Еще одним новшеством платформы .NET была технология активных серверных страниц ASP.NET (Active Server Page). С её помощью можно было относительно быстро разработать веб-приложения, взаимодействующие с базами данных. Важной особенностью ASP.NET считалась возможность использования всей мощи объектно-ориентированного программирования для веб-разработки. Приложения, написанные с использованием этой технологии, обладают лучшей производительностью и защитой. По крайней мере, в это верили инженеры Microsoft.
Сложно переоценить роль такого нововведения, как веб-сервисы. .NET предоставлял разработчикам инструментарий для их использования. Программисты получили возможность реализовывать взаимодействие с веб-сервисами на любом языке платформы .NET.
Однако слишком тесная интеграция ASP.NET с Windows IIS сделала невозможным использование альтернативного веб-сервера для хостинга приложений. Эти обстоятельства с течением времени вызывали все больше критики со стороны сообщества разработчиков и являлись неблагоприятным фактором для развития ASP.NET MVC.
Визуальное проектирование интерфейса — Web Forms, Windows Forms, затем WPF — также является существенным достижением разработчиков. Сейчас это может кому-то показаться смешным, но тогда качественный инструмент для создания GUI был в новинку.
Кроме классической реализации платформы появились также .NET Compact Framework (версия .NET Framework, предназначенная для запуска приложений на устройствах, основанных на платформе Windows CE.) и .NET Micro Framework (реализация платформы Microsoft .NET для встраиваемого применения в 32- и 64-разрядных микроконтроллерах).
Со временем платформа .NET менялась. Если изначально она выпускалась как инструментарий для пользователей операционной системы Windows, то в дальнейшем разработчики пошли навстречу поклонникам других ОС. Так, например, в сообществе open source появился проект Mono, который был официально признан реализацией .NET на Unix-подобных операционных системах.
А летом этого года Microsoft выпустила кроссплатформенный аналог .NET под названием .NET Core.
Тем не менее, многие критические замечания остаются актуальны, несмотря на то, что Microsoft уже много лет пытается ликвидировать последствия не совсем удачной реализации и архитектуры платформы .NET.
Главная претензия критиков — это нерациональное использование памяти системы. Якобы конкурирующие платформы используют память куда экономнее, и более того, многие из них являются бесплатными.
Конечно же, к настоящему времени платформа существенно изменилась и, скажем так, размножилась. Однако такое многообразие заставляет задаваться вопросами о том, какие перспективы у того или иного направления развития .NET, насколько эта платформа сегодня актуальна, как меняются требования к .NET-программистам и так далее.
О том, куда и зачем идет платформа, мы поговорили с экспертами отрасли.
Аркадий Кочетков, Софтнео, ведущий инженер-разработчик:
Прошла ли .NET свой пик? На каком этапе развития находится технология?
Не прошло, продукты MS никуда не делись из энтерпрайза. Но сейчас это определенно не модно.
Насколько актуальна .NET в условиях засилья мобильных технологий, больших данных, интернета вещей?
В условиях мобильных технологий и интернета вещей (Java популярнее, чем Xamarin, а Mono и всякие Netduino сильно на любителя, например) я бы смотрел в сторону других решений. Но если без .NET вам и жизнь не мила, то почему бы и нет?
В каких направлениях разработки у .NET больше шансов?
Web.
Если бы Microsoft не продвигал свое детище, какова могла быть судьба .NET?
Судьба была бы печальной. Кто-то подхватит разработку открытых сорсов, существующие решения будут поддерживаться, но создавать новые на основе технологии, потерявшей поддержку, побоятся. Проектов будет становиться все меньше, а со временем и не останется.
Или под «продвижением» понимался PR? Только ленивый не слышал про .NET.
Каковы преимущества .NET перед конкурирующими технологиями?
Синтаксический сахар c#, бОльшая продуманность (в сравнении с основным конкурентом), классные инструменты, простота в использовании с другими продуктами MS.
С какими перспективными технологиями посоветуете комбинировать .NET начинающим разработчикам?
Если вы начинающий разработчик, то начните с самого языка, алгоритмов и структур, а если вы по какой-то причине обратили свой взор на .NET, уже умея что-то, то и сами все прекрасно знаете. Но если как-то пропустили, то посмотрите на .NET Core.
Никита kekekeks Цуканов, Гуру велосипедостроения:
Прошла ли .NET свой пик? На каком этапе развития находится технология?
Не вижу кривой с одним экстремумом в развитии .NET. Зрелости технология в моём видении достигла ещё в дремучем 2005-ом году в момент выхода .NET 2.0, с тех пор непрерывно идёт динамичное развитие эволюционного характера, сочетающее в себе как качественные, так и количественные изменения. Помимо создания своего языки и инструментарий постоянно перенимают что-то из других языков и сред. Я не вижу никаких предпосылок к закату в ближайшем будущем.
Насколько актуальна .NET в условиях засилья мобильных технологий, больших данных, интернета вещей?
Одним из важных преимуществ .NET является тот факт, что писать можно что угодно и подо что угодно. Хотите мобильное приложение — берите Xamarin. Хотите что-то считать на сервере? Пожалуйста!
.NET долгое время затачивался под серверное использование. Интернет вещей? Смотря что понимать под устройством из IoT. Если это нечто с 64Кб оперативной памяти то, конечно, лучше всё же воспользоваться С (хотя при наличии желания и фанатизма можно взять .NET Micro). Если у вас есть возможность туда впихнуть хоть какую-то ОС, то вы можете продолжать писать на C#. С приходом CoreRT, который обеспечит возможность сборки в нативный код под любую платформу (в том числе средствами LLVM или трансляции в ANSI C) это станет ещё проще и удобнее.
В каких направлениях разработки у .NET больше шансов?
Традиционно C# и .NET использовались для серверных приложений и десктопных приложений с UI. И в этих традиционных для себя областях они чувствуют себя лучше всего. Сейчас с появлением Xamarin для мобильных устройств стал доступен стек для разработки UI с использованием нормальной системы биндингов, шаблонизированных контролов и XAML, так что предыдущее высказывание можно распространить и на мобильные устройства. Если меня спросить практически про любой проект, на чём его нам лучше делать, то я c высокой вероятностью отвечу, что на .NET.
Есть, правда, в покрытии технологии один большой пробел: кроссплатформенный UI, который пока толком не закрыт, хотя и есть решения.
Если бы Microsoft не продвигал свое детище, какова могла быть судьба .NET?
Вы можете сделать сколь угодно замечательный продукт, но если о нём никто не знает, то им никто не будет пользоваться.
Каковы преимущества .NET перед конкурирующими технологиями?
По сути мы сейчас получаем по переносимости аналог С, но со всеми преимуществами среды с управляемым кодом.
Как мне кажется, наибольший эффект можно получить от синергии, когда у вас на сервере, десктопе и всех мобильных устройствах используется один язык, одна технология. В таком сценарии переключаться между участками кодовой базы может практически любой разработчик из команды, вы так же можете разделять один и тот же код между элементами системы, если потребуется.
Также можно начать очередную дискуссию на тему преимуществ компилируемых языков со строгой статической типизацией, но тут очень много людей с разными мнениями.
Как вы оцениваете уровень разработчиков: появилось больше низкоквалифицированных .NET-программистов или их число уменьшилось, а уровень вырос? Или распределение выглядит по-другому?
Я не заметил роста числа низкоквалифицированной рабочей силы «работающей за еду», как это в своё время произошло с PHP, но и сильного кадрового голода тоже не наблюдаю.
С какими перспективными технологиями посоветуете комбинировать .NET начинающим разработчикам?
Это зависит о того, что вы хотите делать, изучите окружающий планируемую сферу деятельности стек технологий. Если хочется писать логику на сервере, разберитесь, как работает SQL (желательно посмотреть на несколько диалектов и понять, что всё равно будете использовать ORM), как работают nosql решения (mongodb, redis, да и на вещи типа elasticsearch посмотреть не мешает), на системы передачи сообщений (RabbitMQ, MSMQ, ActiveMQ, посмотрите на библиотеки типа MassTransit, EasyNetQ).
Если хочется быть чуть ближе к веб-фронтэнду, то нужно знать стандартный набор HTML/JS/CSS и как минимум научиться пользоваться инструментарием node.js, тем более, что он сейчас интегрирован в toolchain сборки нового ASP.NET.
Если вы хотите писать устанавливаемые приложения, работающие с пользователем, то для начала стоит освоить десктопный WPF и сопутствующие ему библиотеки (пощупать MVVM-фреймворки типа Caliburn.Micro, Prism, MvvmCross, разобраться с внутренностями XAML), а затем уже открывать для себя разработку под мобильные устройства, где придётся ещё и изучать их.
Максим Аршинов, CEO, HighTech:
Прошла ли .NET свой пик? На каком этапе развития находится технология?
Я думаю, что не прошла. .NET сейчас активно развивается сразу в нескольких направлениях. Хотите производительный сервер с горизонтальным масштабированием: берите .NET Core. Хотите кроссплатформенную мобильную разработку — Xamarin. Желаете писать C#-код на Mac — Rider IDE. Хотите Machine Learning и Data Science — F# вам в руки.
Конечно, многое из вышеперечисленного — абсолютный bleeding edge. Нужно понимать, что многие инструменты, к которым мы привыкли, все еще недоступны. Многих разработчиков привели в шок события ASP.NET Core RC1 — RC2. Но не будем забывать, что происходит в экосистеме JavaScript. По сравнению с этим в мире .NET все спокойно.
Можно сказать, что у .NET сейчас «период перестройки». С одной стороны, мы накопили значительный объем кода корпоративных приложений, который никто никогда не перепишет, а значит, мы будем поддерживать его еще десятки лет. С другой — Microsoft очень быстро трансформируется и трансформирует .NET под нужды бизнеса. Современный .NET делает ставку на Azure, Linux и мобильные платформы.
Как будут уживается кровавый энтерпрайз с «модными веяниями», покажет время.
Насколько актуальна .NET в условиях засилья мобильных технологий, больших данных, интернета вещей?
Нет никакого засилья больших данных, мобильных технологий и прочей ерунды. Это все marketing bullshit. Да, в США есть несколько известных всем компаний, которые занимаются подобными вещами. Но это совершенно иные задачи и бюджеты.
Почему-то многие считают, что если подключить к своей БД hadoop / spark / «впишите свое», то вдруг внезапно все станет замечательно и прибыли вырастут в квадриллион раз.
Современные СУБД успешно справляются с хранением данных в 90% случаев. Чаще всего, проблемы в плохом проектировании и неправильном использовании инструментов. Для мобильных технологий все-равно нужен server-side и его нужно написать. Почему бы не сделать это на .NET и не захостить в Azure, тем более, что Microsoft активно занимается поддержкой Docker?
В каких направлениях разработки у .NET больше шансов?
Я думаю, что на стороне сервера. Swift уже достаточно вменяемый язык, на Android есть Java. Windows Phone по прежнему не нашел свою нишу. Должно что-то очень серьезное произойти, чтобы руководители уровня CTO/CEO всерьез рассматривали Xamarin.
Если бы Microsoft не продвигал свое детище, какова могла быть судьба .NET?
.NET бы не было, потому что никто бы не выделил денег на его разработку. Писали бы на Java.
Каковы преимущества .NET перед конкурирующими технологиями?
Мультипарадигмальность, сильная типизация, быстрое развитие языка C#, поддержка Microsoft.
Как вы оцениваете уровень разработчиков: появилось больше низкоквалифицированных .NET-программистов или их число уменьшилось, а уровень вырос? Или распределение выглядит по-другому?
Сложно сказать. С появлением LINQ сильно упростились задачи манипуляций с данными, поэтому, в целом, с типовыми задачами разработчики справляются сравнительно неплохо.
Проблемы начинаются, когда нужно сделать шаг влево или вправо. Я заметил, что многие .NET-разработчики не понимают как работает TPL, LINQ или async/await. Бывает, что даже говорят, дескать «var приводит к не строгой типизации».
В итоге есть пропасть между «джуниорами» и «сеньорами». Либо человек умеет набивать строчки кода по примеру, не понимая, как это работает, либо может разбираться в платформе лучше тебя. Я ощущаю острую нехватку тим-лидов на рынке.
С какими перспективными технологиями посоветуете комбинировать .NET начинающим разработчикам?
ES6 + React или Type Script / Angular, NodeJS; Java / Scala. Очень рекомендую изучить Erlang или Haskell.
В одном из интервью ИТ-специалист и автор книг по .NET Джеффри Рихтер размышлял о том, как бы он спроектировал и реализовал платформу, если бы была возможность создать все «с нуля»:
Безусловно, в .NET и C# сегодня есть вещи, которые и Microsoft и лично я хотели бы реализовать иначе. Стоило бы сделать .NET более «чистым», минималистичным, чтобы он не использовал так много памяти, как это происходит сейчас, не был столь «тяжелым».Если сегодня всё это можно было бы написать «с нуля», я думаю, стоило бы выделить небольшое ядро всей платформы — систему CLR-типов и сборщик мусора. Это должна быть основа, а вот всё остальное уже могло бы подключаться к платформе чем-то вроде «плагинов».
Таким образом, одно и то же ядро работало бы во всех версиях платформы, что дало бы большую гибкость. А уже команды разработчиков конкретной платформы могли бы добавлять остальной функционал, по модели «plug-and-play».
Но .NET никогда не проектировался таким образом. Он изначально создавался, как цельная, монолитная платформа.