Почему я выбрал Python вместо .net core?

Начало

Начать стоит с того, как я пришел в .net. Это произошло сразу после погружения в ООП в виде Visual Basic. После знакомства с VB стало понятно, что такое программирование на ООП и что это очень мощная штука. Стал вопрос куда развиваться дальше. Уже существовал .NET Framework и VB.NET, было очевидно, что это не та платформа, за которой будущее. Это было примерно в 2006. Предстояло первый раз выбрать платформу, в которую погружаться. То, что выбор пал на C# - стечение обстоятельств, пусть и счастливое.

Первое время я испытывал эйфорию создавая объекты, классы. Еще ничего не знал о настоящем ООП. Позже пришли абстрактные классы и интерфейсы. К паттернам я испытывал отдельную любовь, красота с которой решаются проблемы проектирования завораживала. И да, много времени уходило на проектирование любого сложного участва программы. Зачастую паттерны были использованы ради паттернов. Делал маленькие проекты, рос, делал средние и ближе к 13 году уже большие сайты с отдельным бекендом, службами, базами. Почувствовал мощь платформы.

Средние века

В далеком 2002, когда был представлен C# и .NET это было революцией, революцией как платформа. Хотя это было не ново, уже существовала Java, но C# был призван решить всю боль Java (не вышло). Вместо VB появился VB.NET, который не получал обновлений и развития, а лишь убил VB. Зачем? Одним из минусов, который Microsoft решила исправить недавно было то, что C# / VB.NET работали только на Windows. В то время распространение интернета и технологий было не таким обширным. Количество людей, работающих на других платформах было низкое и это работало. В 2010+ годах стало видно серьезное развание в ubuntu и mac платформах, и это оказалось тоже удобно. Люди пробовали новое и им нравилось. Порог входа в linux снизился.

В те годы не было мысли, что есть альтернатива .net. Появились такие плюшки как LINQ, WPF, async/await, WCF. Так много сахара всегда приятно. Ни одна другая платформа не могла предложить что-то похожее. LINQ to SQL сильно упростило погружение в мир баз данных. Но, я бы сказал что это минус, когда начинающие разработчики не разобравшись как оно работает начинают использовать технологию, и я в том числе. Я уже получил сертификат в Microsoft по C# и довольно подробно знал как все внутри устроено. То что я увидел меня обеспокоило. Я сделал статью о коллекциях в C#.

.NET вчера

Знакомство с альтернативными платформами началось с погружения в мир Xamarin. Впервые попробовав разработку на Mac понял, что есть что-то кроме Windows разработки. Именно тогда родилась мысль, что альтернативы .net существуют. Однако не было причин менять его. Все больше погружаясь в мобильную разработку я в одно и то же время разрабатывал API на .net и автоматизировал рутину на ruby. Мне очень понравилась простота, с которой можно выполнить скрипты на руби. Они выполняются практически всегда одинакого на разных версиях, платформах. Были мысли реализовать аналоги на .net, но, количество кода, которое нужно написать и скорость работы не устраивали совсем. Я с этим мирился. Но это только начало боли. Компиляция в несколько десятков секунд 🐌.

Также очень крутой технологией был ASP.NET. Правда классический ASP.NET мне не нравился совсем. К счастью я не успел в нем погрязнуть и разочароваться. ASP.NET MVC был принят как новый стандарт. Версии стряпались каждый код, и практически каждый год изобретались заново. 3-я версия MVC мне кажется хорошей версией, и ее нужно было развивать (а не переделывать). Все это работало тоже только на Windows. В целом ничего критичного. Но цена серверов была и есть выше, весь софт лицензируемый и тоже стоит денег. В качестве надежности всегда можно привести примеры самого сайта Microsoft и Stackoverflow. Большие сайты, выдерживают огромную нагрузку. Технология Microsoft работает.

Что еще было в 2010-2016 годах

Если кто помнит, был еще такой зверь как Windows Mobile 2003. На .net я успешно делал программки. Одну из них опубликовал на форуме 4pda. Называлась она Расписание студента. Появились первые пользователи, отзывы и пожелания. Вот парочка скриншотов.

Расписание студента

Microsoft представляет Mango (Windows Phone 7.5). Она не совместима с предыдущими мобильными операционными системами. Это отдельная операционка для телефонов, и там есть что-то вроде .NET, но свой, урезанный. Не было возможности приобрести телефон и попытать счастье в разработке для этой операционки. Потом вышла 7.8.

Я познакомился с Windows Phone уже версии 8.0. Появился магазин приложений. Он был пустой, был шанс быстро выбраться в топ. Было сделано 2 приложения. Это курс валют и простая казуальная игра Точки. Курс валют брал валюты с ЦБ РФ, установок было порядка 10к. Оба приложения выбрались в топ. Но, точки получили почти 150к установок за неделю. Я никак не монетизировал приложения, было интересно попробовать платформу и магазин приложений. В то время у меня уже был опыт разработки для мобильных устройств на iOS и опыт работы с iTunesConnect (сейчас который AppStoreConnect). Не без костылей, но приложения завелись. На Windows Phone модерация была примерно неделю, что было очень странно для компании, у которой нет ничего для удержания разработчиков. Даже у Apple модерация была в среднем 3-5 дней. Это потом Microsoft сделали модерацию приложений за сутки, но возможно было уже поздно.

Что сделали Microsoft с Windows Phone и где он сейчас? Обидно.

Курсы валют

После выхода Windows 8 и Windows 8.1 и сравнивая Windows Phone 8 и Windows Phone 8.1 оказалось, что это совершенно разные платформы. Как раз появилась возможность сделать “одно” приложение для обоих магазинов. Кстати, сами магазины приложения были совершенно разными и было видно, что их делали разыне команды, разные требования, интерфейс и вообще все. Я попробовал сделать приложение для обоих магазинов. Это было Судоку. Опубликова билды на 4pda, на хабре, и описал по горящим следам впечатления:

Сама игра до сих пор опубликована в магазине Windows Store.

Сильно раздражало, что Microsoft пропагандирует, что это одна платформа и что в Windows 10 будет одна кодовая база. А на самом деле нет. Я сделал очень простое приложение судоку, а на деле получил информацию, что это абсолютно разные платформы. Да, классы называются похоже. Но локалазация в Windows Phone делается одним способом, в Windows Store другим, нельзя переиспользовать строки (локализацию пришлось копипастить). Layout делается для каждой платформы свой. Да, Xaml это отлично, но плохо, что верстка разная. Внутри было 2 проекта для Windows Store и Windows Phone.

Забегая вперед, Microsoft обещали сделать все хорошо в Windows 10. Придумали UWP (Universal Windows Platform). Завелось? Технологии порождаются с бешенной скоростью, а вот качество этих технологий распыляется. Вот список технологий, ключевых слов, за которыми Microsoft пророчили будущее:

У каждой технологии отличная идея. Но, только зарелизив .net core 1.0 его сразу же задеприкейтили и прекратили поддержку. Я поверив в светлое будущее переделал свой сайт на .net core. С чем я столкнулся? С тем, что экосистема Windows сама по себе не преспособлена для этой технологии. Чтобы запустить его на сервере Windows все равно используются костыли, Kestrel, еще куча библиотек. Отличная технология, которая собирает и деплоит проект через WebDeploy не работает. А есть вообще нормальный способ собрать и задеплоить проект .net core?

А помните как раскатывался .net core первый раз? Придумали package.json. Все выучили, смирились, удобный формат. В следующем обновлении Visual Studio уже этого файла нет, и все по новым рельсам. Об HTTP2 .net core 1.0 не слышал, и не услышал 🐤.

.NET core сегодня

Если посмотреть что произошло с .net и .net core за последние 3-5 лет. Если кратко описать - ничего. Была стабильная технология .net framework. Со своими плюсами и минусами, но жила и работала. Мне кажется больше использовалась в корпоративном секторе. После цели все в облако и популяризации Azure да и в целом популяризации linux стало понятно, что .net в таком виде долго не проживет. Microsoft принял стратегически верный шаг в открытости платформы, идеологии, но сделали по своему. На 3 года прекратив активное развитие платформы на переписывание всего и вся.

Куда делся Silverlight? Отличная технология, я на ней пилил админку красивую с анимациями. WPF очень мощная технология для реализации пользовательских интерфейсов. Это как html только для нативных приложений. .NET Core его разумеется не поддерживает. Как быть с этой технологией? Писать на старом C#, старой Visual Studio, под старым фреймворком. Когда Microsoft надоест поддерживать это, а вдруг завтра? Это важно, потому что .net core не имеет графического интерфейса.

Есть такие порталы как channel9 и user voice. Используются ли они для принятия решений? Не думаю. Сама IDE без сторонних решений не юзабельна. На одной из конференций Microsoft сказали, что гордятся тем, что для их продукта создаются сторонние решения, что разработчикам нравится делать продукты для Visual Studio. Это потому, что без них это жутко тормозной редактор кода. А новый, сверхскоростной редактор кода на javascript VS Code? Серьезно?

Каждый раз приходилось ждать сторонних расширений, чтобы завелся WebPack gulp или другие сегодня обязательные фреймворки. Боль.

На macOS есть Visual Studio. Но она не имеет ничего общего с VS на Windows. Это все тот же MonoDevelop -> Xamarin Studio -> VS в новой обертке. Она очень медленно поддерживает обновления .net core.

Я всегда был сторонником идеи, что и на Windows можно сделать все то же самое что и на linux. Профилирование приложений, статистика, память и прочее. Но, то, что на ubuntu делается просто (Elastic Kibana Logstash или Prometheus), на Windows боль. У Microsoft на все потребности пытается сделать что-то свое, а не использовать уже готовое, годами отработанное решение.

Не хочу выносить в отдельный пункт nuget. Везде есть проблемы, но тут прямо мне не везет. Я боюсь обновлять либы, потому что откатиться будет очень трудно.

Куда идти с .net core?

К этому решению я шел примерно полтора года. Каждый раз у меня возникало ощущение, что я все что угодно могу сделать на net. Тем более на .net core. Разве может быть что-то другое, на чем я с легкостью могу реализовать сложное решение быстро и надежно?

В моих рабочих задачах обработки данных было много Python. Распробовав этот язык я попробовал реализовать несколько Api проектов и сайтов на Python. И это работает. Кроме того, деплой обновлений происходит крайне быстро, стабильно и предсказуемо. Для этого есть простейший маленький rsync. Кроме того, основной рабочий инструмент это Macbook, а на нем разработка даже в Rider это боль. Долго и невкусно. Определенно есть задачи, которые .NET (не .net core) решает лучше и быстрее, но не у меня 🦚. PyCharm сейчас является основной средой разработки. Консоль обрела новую жизнь.

Я получаю огромное удовольствие от разработки, деплоя, поддержки всего на Python. Очень трудно все с нуля делать на Python, было много вопросов по самым простым процедурам. Например запись в файл и прочее. Но лаконичность, количество кода, стабильность. И самое главное - сообщество и экосистема!

Комментарии

comments powered by Disqus