- PVSM.RU - https://www.pvsm.ru -
Добрый вечер, читатели! Сегодня хотелось бы написать о кросс-платформенной разработке в целом. Ведь по сути люди сейчас делят десктоп, сервер и мобильных клиентов и стараются искать кросс-платформенные тулы внутри каждого сектора, не заглядывая за рамки каждого из секторов. Это бывает по различным причинам. Одна из причин — Вася знает как делать десктоп на Java, а Петя — как делать приложеньки под iPhone на Objective-C. И никто даже догадаться не может что есть технологии, объединяющие все платформы воедино.
За катом много текста и статистики :)
Мое выступление на Apps4All Forum. Выступление первое, все ошибки подачи материала уже намотал на ус :)
Для чего люди вообще идут в кросс-платформенную разработку? Для чего она? Давайте попробуем собрать список проблем, которые возникают если писать под каждую платформу в отдельности.
У менеджмента проблем не меньше:
Что бы решило перечисленные проблемы? Их бы решило если бы все люди использовали бы единую платформу и максимально единый код. Тогда все изменения вносились бы только один раз, и ошибки исправлялись бы только один раз. И если вы пройдетесь по пунктам выше, то поймете что такой подход сократил бы практически все из них.
Что ни говори, а разработку определяют инструменты. Ведь если они удобные и позволяют быстро рефакторить, упрощают ввод рутинного текста, автодополняют ввод, помогая работать в неизвестном API, то код становится качественнее и боле быстро написан, а значит — дешевле. Понимание этого приводит к мысли использовать лучшие средства разработки, которые есть на рынке, не жадничая на покупке лицензий. Зачастую имеено отсутствие грамотной IDE не позволяет программистам сделать выбор в сторону нового игрока на рынке инструментов для разработки. IDE — страшная? Не работает переход к определению символа? Ваша IDE не станет популярной. Согласитесь: переход на кросс-платформенную разработку означает что API вы скорее всего знать не будете. Причем зачастую там будет абсолютно свое API и его придется учить. Если IDE при этом не дает поддержки документации к коду и путем вывода в тултипах документации при наведении на методы и классы, становится совсем тяжко и начинаешь испытывать ненависть, поскольку любое обращение в Интернет — потеря времени и выход из потока сознания.
Эта группа — группа не решаемых проблем. Вернее, их можно решить, сделав единый GUI для всех платформ, однако ни одному пользователю такое решение не понравится: оно будет не удобным и не привычным. Я слышал что эту проблему попытались решить в Delphi, однако продукт достаточно новый и я его не трогал: сказать ничего не могу. Так какие отличия делают решение проблем таким трудно выполнимым?
Однако давайте попробуем выделить плюсы и минусы обоих подходов:
Какие выводы можно подчерпнуть отсюда? Для того чтобы мы могли выпускать продукт не для себя, а для пользователя, нам необходимо иметь тулсет, позволяющий писать UI для каждой платформы в отдельности.
Итак, кретерии выбраны:
Для того чтобы понимать самостоятельно, придется лично воспользоваться огромным числом средств кросс-платформеной разработки, которых сейчас существует около 90 штук (по данным research2guidance). Причем не просто воспользоваться, а написать на каждом из них достаточно сложное приложение и сдать его в магазин приложений. Это достаточно трудоемкий и затратный процесс, поэтому я решил поискать исследования на эту тему. Расследование привело меня на сайты двух организаций: research2guidance и VisionMobile.
Рассмотрим, пожалуй, не всю статистику, а только ту, где говорится о компании Xamarin, поскольку полная статистика занимает 40 страниц и обширна как для чтения так и для понимания. Полную статистику сможет прочитать каждый, а вот лично мои выводы — ниже и коротко.
Достаточно важный фактор как для разработчика так и для заказчика — узнаваемость того, что будет использоваться. Для разработчика узнаваемость важна поскольку при поиске работы легче вступить в дискуссию с работодателем, да на резюме смотреть чаще будут. А для заказчика узнаваемость тулсета важна, поскольку при выборе подрядчика скурпулезный заказчик будет искать знакомые буквы в услугах компании. Если при этом он не поленился поискать в Интернете что сейчас используется, то если вы назовете в качестве используемых инструментов что-то из набора столбцов слева, это повысит шансы на начало сотрудничества. Как вы видите, самыми узнаваемыми сейчас являются Adobe Air, Phone Gap, Xamarin, jQuery Mobile, Unity и Titanium. Среди этих платформ Adobe стоит особняком. Возможно, это связанно прежде с известностью самой фирмы Adobe. Однако полный спектр платформ покрывает только она, Xamarin и Unity 3D. Причем Unity же — игровая платформа и не заточена под обычные приложения. И для игр — она — номер один. Однако для бизнес-приложений выбор идет таким образом: Если выбираем Web frameworks, надо смотреть более детально. Если же cross-platform IDE, то в данной категории выигрывает Ксамарин.
Вторая немаловажная статистика: сколько человек уже используют в разработке тулсет.
Однако, напомню что эта диаграмма крайне не благодарно относится к новичкам. Например, Delphi XE3, которая вышла за несколько месяцев до того как провели это исследование. Чудо что она вообще сюда попала. Однако, вернусь к фаворитам и добавлю дату первого релиза для каждой из платформ:
C QT Cretor лично у меня возникли вопросы: он не отрелизился для мобильных платформ и, возможно, в отчете закралась ошибка. Однако если посмотреть на индекс роста и текущей популярности, я выделю следующих фаворитов:
Но вспомнив наши кретерии, понимаем что ни jQuery ни Marmelade нам не подходят. Ни первая ни вторая не дают доступа к платформенным фичам, что для нас — важно. И в этой категории остается Xamarin.
Эта диаграмма говорит, насколько разработка на том или ином средства разработки ускоряет процесс разработки и тестирования, вплоть до сдачи в маркет. Из диаграммы можно сделать выводы, что самыми быстрыми в разработке тулсетами являются Unity 3D и Xamarin, а самыми проигрышными — Marmelade и Titanium. Причем, заметьте, что оба фаворита основаны на одной и той же технологии.
Ну и последняя диаграмма: если я до сих пор не сагитировал использовать cross-platform tools
Итак начнем. Если копнуть немного истории, то мы выясним, что платформа компании Ксамарин, о которой я веду речь, далеко не новая. Она достаточно древняя и берет свои корни с кроссплатформенной реализации .Net Framework от компании Microsoft. Реализация эта называется mono runtime и содержит она практически все из мира .Net за исключением библиотек графического вывода (они есть, но сделаны не полностью). Однако этот минус с легкостью компенсируется огромным плюсом: на десктопах она работает везде. На Windows, Linux и на Mac OS и при этом прекрасно отлажена.
Поскольку платформа распространяется с исходниками, и является бесплатной, денег с нее никаких разработчики не имели и однажды решили начать ее монитезировать при помощи мобильных приложений. Ведь если посравнивать, то получится что для десктопа не так много поводов искать заказы на разработку кроссплатформенных приложений. А вот для мобильных устройств заказов сделать приложение под часть платформ или под все платформы намного больше. Причем есть убрать из .Net Framework все что относится к UI, получится богатейшая инфраструктура с превосходной архитектурой, отлаженном кодом и прекрасной поддержкой среди уже существующих IDE.
Основная проблема — пробросить платформенный API для каждой платформы.
Для Java поднимается своя виртуальная машина, поскольку Джавовская не устраивает по нескольким параметрам, среди которых — не честные дженерики (о которых — позже), а в iOS используется трансляция готовых сборок, полученных из C#, в Obj-C. Что мы имеем на выходе?
Я вижу перед собой непаханное поле для компаний-разработчиков и фрилансеров. Я ведь сам пришел с разработки под Windows и считаю эту платформу прекрасным тулсетом для быстрого старта. Придя в компанию Touch Instinct чуть больше чем пол-года назад, сегодня я могу писать под под любую платформу.
Статистики, опубликовавшие индекс популярности языков программирования за 2012 год назвали C# языком года. Они подсчитали что популярность C# выросла аж на 2.3%, что стало самой большой цифрой из всех языков, находящихся в индексе. Конечно же свою роль сыграло и то, что Microsoft запустила Windows 8, где C# является основным языком программирования. Но на самом деле все обстоит несколько иначе. Нэт Фридман, сооснователь компании Xamarin, выделил в своем посте 8 причин, по которым C# является лучшим языком программирования для мобильных платформ:
И потом, когда заказчик приходит к вам в офис, он хочет заказать не приложение под Андроид, например… Или под айФон. Заказчик прежде всего хочет мобильное приложение. Чтобы его приложение стояло на максимальном количестве устройств. И если вы находитесь на данной платформе, это позволяет вам говорить о снижении затрат на разработку. Ведь вы не только сокращаете саму разработку. Но и выправку ошибок. Код бизнес-логики будет исправляться и на Андроиде, и на iOS, и на Windows Phone. Да, необходимо разработать все что относится к UI заново на каждой из платформ. Но весь остальной код будет общим, без изменений. Работа с базой данных, игровая логика, да все что угодно.
Среди такого разнообразия плюсов было бы не честным не рассказать о некоторых минусах. Тут, я думаю, те из вас кто начинает засыпать, резко приосанились в краслах. Ну наконец-то, мол, дошли. Как и у любой разработки такого масштаба, минусы, естественно, имеются.
Однако эти минусы с лихвой компенсируются той легкостью и наслаждением разработки поистине кроссплатформенного кода, где выделив общую логику приложения в отдельую библиотеку и заюзав, например, MVVM, можно сделать платформенно-зависимым только UI приложения. И тем самым сократить время разработки кода для конечной платформы до 80%. Это огромный процент.
Как вы все, может быть, знаете, чтобы программировать под iOS необходимо иметь Маки. Это некоторе финансовое ограничение, которое может вас расстроить. Особенно если вы идете с платформы Windows. Однако не стоит печалиться. Если у вас уже есть лицензии на Visual Studio, есть любимый всеми нами, продукт компании JetBrains, ReSharper и прочие прелести платформы Windows, вы можете поставить всего один Мак Мини или любой другой мак и использовать его в качестве билд-сервера, разрабатывая при этом в Visual Studio.
Если же денег на столь не дешевый инструмент как Visual Studio у вас нет, у компании Xamarin есть решение и на это. Для вас абсолютно бесплатно поставляется IDE Xamarin Studio, которая является MonoDevelop 4.0 версии и содежащая огромное количество рефакторингов и прочих удобных плюшек, коотрые необходимы в разработке. Также вы можете разрабатывать под Маком. Вся наша компания так и делает. Windows мы используем только для WinPhone приложений.
Использовать язык C# и семейство платформ .Net следует как минимум рассматривать каджый раз, когда вы начинаете новую разработку. И как максимум — выжимать из платформы максимум возможностей. Ведь если вы пишите на несколько платформ:
Мой лично опыт. Я, как разработчик под .Net Framework, пришедший с Windows счастлив, что могу писать под все мобилки на языке, который знаю и используя SDK, который знаю. Отказываться не собираюсь никогда.
Официальное разрешение на использование результатов исследования компании research2guidance (research2guidance.com [12]) в докладе
Автор: sidristij
Источник [13]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/50333
Ссылки в тексте:
[1] Image: http://sidristij.ru/wp-content/uploads/2013/12/Screen-Shot-2013-12-05-at-19.30.20.png
[2] Image: http://habr.habrastorage.org/post_images/5ee/f44/d48/5eef44d484cae73a2e5d698c832a7ed2.jpg
[3] Image: http://habr.habrastorage.org/post_images/be5/517/f64/be5517f64c688fa21eb205421292c60b.png
[4] Image: http://habr.habrastorage.org/post_images/a50/17b/b53/a5017bb53243e857324a72ae51a27321.png
[5] Image: http://habr.habrastorage.org/post_images/a9d/4e5/38f/a9d4e538ff5e489b49382bb6175a4c0f.png
[6] research2guidance: http://www.research2guidance.com/
[7] Cross-platform tool benchmarking 2013: http://www.research2guidance.com/cross-platform-tool-benchmarking-2013/
[8] Cross-platform tools can save more than 30% of app development time: http://www.research2guidance.com/cross-platform-tools-can-save-more-than-30-of-app-development-time/
[9] Cross-Platform Tools: The hidden champions of the app economics: http://www.research2guidance.com/cross-platform-tools-the-hidden-champions-of-the-app-economy/
[10] Only few app projects will benefit from using multi-platform development solutions: http://www.research2guidance.com/only-few-app-projects-will-benefit-from-using-multi-platform-development-solutions/
[11] VisionMobile: http://www.visionmobile.com/products/research/
[12] research2guidance.com: http://www.research2guidance.com
[13] Источник: http://habrahabr.ru/post/205386/
Нажмите здесь для печати.