Прогнозы – дело сложное. Прогнозировать будущее разработки программного обеспечения – еще сложнее. Но в то же время интересно потом сравнить, что сбылось, а что опровергло наши ожидания.
1. Инфраструктура: все дороги ведут в Облако
2019 год был прекрасным годом для облачных сервисов. Даже компании, занимающиеся вопросами безопасности (в том числе Пентагон), правительственные организации, здравоохранение, банки, страховые компании движутся в направлении облачного хранения данных и вычислений. Эта тенденция определенно сохранится и в 2020 году.
Gartner опубликовал прогноз, что рынок облачных сервисов при сохранении тренда вырастет в 2020 г. еще на 17%, достигнув 266.4 миллиарда долларов.
Крупные облачные провайдеры (Amazon, Microsoft, Google) предлагают бесплатные предложения для практического ознакомления с работой в облаке. Например, Google предоставляет купон на 300 долларов и один год обслуживания.
2. Облако: Amazon хорош, но другие догоняют
Публикация компании Canalys за третий квартал 2019 года указывает на то, что поставщики Big Cloud (AWS, Azure, GCP) занимают 56% рынка, при этом на AWS приходится 32,6% всего рынка.
Другие облачные провайдеры также сокращают разрыв с AWS. Недавно Microsoft заключила контракт с Пентагоном на 10 миллиардов долларов для проекта JEDI.
В то же время Google развивает фонд Cloud Native Computation для стандартизации облачных вычислений. Долгосрочная цель состоит в упрощении миграции в облако, чтобы другие компании могли легко перейти с AWS на GCP.
3. Контейнеризация: Kubernetes станет сильнее
Из битвы за контейнеризацию между Kubernetes, Docker Swarm и Mesos явным победителем вышел первый сервис, продолжив впоследствии закрепляться на рынке. Если облако – это распределенная система, то Kubernetes – его операционная система (распределенный Linux).
На Северноамериканской конференции Kubecon + CloudNativeCon в 2019 году приняло участие 12 тыс. человек. В ближайшем будущем не ожидается замедления роста Kubernetes. Для сравнения платформа Docker Enterprise недавно была продана компании Mirantis.
4. Архитектура программного обеспечения: микросервисы станут мейнстримом
Относительно парадигмы архитектуры программного обеспечения, как показывает Google Trends, продолжается переход к микросервисной архитектуре.
Одна из причин развития микросервисной архитектуры заключается в том, что она идеально подходит для быстрой разработки программного обеспечения в Cloud Native. Однако, как мы уже отмечали, во многих случаях использование такого типа архитектуры – задача не из простых. Поэтому монолитная архитектура не исчезнет из виду.
5. Языки программирования: Python съест мир
Будь то машинное обучение, анализ и обработка данных, веб, разработка корпоративного программного обеспечения или фотографирование черных дыр, Python везде. Известный сервис ранжирования языков программирования TIOBE оценил Python как третий по популярности язык программирования после Java и C:
Что еще интереснее, популярность Python в 2019 году удвоилась (с 5% до 10%). В рейтинге TIOBE есть много недостатков, но он наиболее распространен.
6. Программирование: Java и JVM
Как показывает индекс TIOBE, Java остается доминирующим языком программирования на планете и вряд ли сильно потеряет позиции в 2020 году. JVM – один из лучших компонентов разработки программного обеспечения. Kotlin, Scala, Clojure, Groovy используют JVM в качестве среды выполнения. Однако недавно Oracle изменила лицензию на JVM.
Изменение означает, что будут затронуты компании, использующие Java, Kotlin, Scala или любые другие JVM-языки. Компании будут обязаны заплатить сборы за подписку. К счастью, OpenJDK по-прежнему будет содержать JVM бесплатно.
JVM-языки, очевидно, не очень подходят для современных бессерверных вычислений. Поэтому Oracle, руководствуясь результатами GraalVM, стремится, чтобы Java стал более гибким, быстрым и лучше вписался в бессерверные вычисления. Существуют два привлекательных проекта, находящихся в стадии разработки, направленных на уменьшение и ускорение Java для бессерверных вычислений. Первый – фреймворк MicroNaut.
Второй проект – фреймворк Quarkus. Оба фреймворка используют GraalVM.
7. Java: Spring
Еще недавно в разработке корпоративного программного обеспечения существовала конкуренция между Spring Framework и Java Enterprise Edition (JavaEE). Но компания Oracle уступила конкурентам, не ведя активных действий относительно Java EE. Это привело к созданию Jakarta EE, когда Oracle открыла исходный код Java EE.
Spring Framework выиграл JVM Enterprise Framework, быстро среагировав на меняющуюся среду, в частности, поддержку Cloud Native. В 2020 году Spring Framework станет фреймворком номер один в экосистеме JVM.
8. Языки программирования: укрепление позиций Rust, Swift, Kotlin, TypeScript
В 2000-х годах в ландшафте языков программирования наблюдался явный застой. Разработчики были уверены в отсутствии необходимости новых языков программирования. Ведь Java, C, C++, JavaScript и Python отвечали насущным потребностям. Но вот Google создал Go, а в последнее десятилетие появилось много интересных ЯП, таких как Rust, Swift, Kotlin и TypeScript.
Старые языки программирования часто не способны использовать преимущества последних изменений в аппаратном обеспечении (например, многоядерность, более быстрые сети, облачные вычисления). Другим фактором является то, что современные языки ориентированы на удобство разработчика, то есть быструю и легкую разработку. В опросе разработчиков на StackOverflow о любимых языках лидируют современные языки (Rust занимает первое место четыре года подряд):
Недавно Microsoft объявила, что использует Rust в создании безопасного программного обеспечения. Компания Amazon сообщила о спонсировании проекта Rust. Язык программирования Kotlin стал основным конкурентом Java в мире JVM, когда Google объявила об официальной поддержке Kotlin в Android.
Angular поддерживает TypeScript в качестве основного языка программирования вместо стандартного JavaScript.
9. Web: JavaScript продолжит господствовать
Когда-то JavaScript не был сильным языком программирования, и фронтенд работал в основном с использованием бэкенд-фреймворков, таких как JSF, Ruby on Rails, Django, Laravel и рендеринга на стороне сервера. Положение изменилась, как только в 2014 году на сцену вышел AngularJS. С тех пор появилось много других JavaScript-фреймворков (Angular 2+, React, Vue.js, Meteor.js), и JavaScript теперь король веб-разработки. Благодаря развитию микросервисной архитектуры, JavaScript-фреймворки еще сильнее укрепят позиции во фронтенде в 2020 году.
10. Веб-фреймворки JavaScript: React рулит
React оказал наибольшее влияние на веб-разработку за последнее десятилетие и спас Facebook в борьбе с Google+. React привнес некоторые свежие и инновационные идеи во фронтенд-разработку, например, Event Sourcing, Virtual Dom, одностороннее связывание данных, разработку на основе компонентов и многое другое.
Эти идеи серьезно повлияли на сообщество, заставив Google отказаться от AngularJS и, позаимствовав многое у React, полностью переписать Angular2+. Как показывает нижеприведенная статистика загрузки NPM, React сегодня это доминирующая веб-платформа JavaScript.
Facebook объявил о проекте React Fiber, чтобы полностью переписать алгоритм ядра React для улучшения параллелизма и взаимодействия с пользователем.
11. Разработка приложений: нативные приложения
В сфере мобильных приложений постепенно затихает шум вокруг гибридной и кроссплатформенной разработки. Хотя эти подходы и обеспечивают высокую скорость создания приложений, нативная разработка дает лучшие пользовательский опыт и производительность. Для крупных компаний такой тип разработки остается в приоритете.
Например, Airbnb опубликовала подробное сообщение, почему компания отказалась от платформы гибридных приложений React Native.
Хотя Facebook и пытается усовершенствовать React Native, а Google продвигает собственную платформу Flutter, они в основном подходят для прототипирования или легких приложений. В то же время Google и Apple продолжают продвигать языки нативных приложений собственных платформ (соответственно Kotlin и Swift).
12. Разработка гибридных и кроссплатформенных приложений: React Native
Существует ряд случаев, когда гибридная или кроссплатформенная разработка представляет собой прагматичное решение. Facebook создал React Native на основе успешного и зрелого веб-фреймворка React. Как и его веб-аналог, React Native это доминирующая среда для создания таких приложений.
Flutter от Google более производителен, но использует пока что не очень распространенный язык программирования Dart.
13. API: REST
REST стал самым широко используемым методом коммуникации между службами на основе API. Хотя есть и такие инструменты как gRPC (Google) или GraphQL (Facebook). Оба сервиса представляют интересные технологии, но с разными возможностями.
Google разработал gRPC как реинкарнацию техник удаленных вызовов процедур (например, SOAP). Вместо JSON для обмена сообщениями используется Protobuf. С другой стороны, Facebook в качестве агрегирующего слоя разработал GraphQL, чтобы избежать многословных и частых вызовов REST. Как gRPC, так и GraphQL превосходны в тех областях, где они используются. Но в сравнении с REST это лишь дополнительные методы.
14. Искусственный интеллект: TensorFlow 2.0
В области глубокого обучения ведущими игроками являются Google и Facebook. TensorFlow быстро стал основной библиотекой Deep Learning. Google даже представил специальный тензорный процессор для ускорения вычислений TensorFlow.
Facebook же выпустил библиотеку глубокого обучения PyTorch. Существует небольшая разница в том, как работают эти платформы. TensorFlow использует для своих вычислений статический граф, тогда как PyTorch применяет динамический подход. Преимущество использования динамического графа состоит в том, что он может корректироваться на лету. Кроме того, PyTorch дружественен к Python, который укоренился как основной язык программирования в Data Science.
И вот, пока PyTorch набирал популярность, в октябре 2019 года Google выпустил TensorFlow 2.0, который использует динамический граф и более удобен для Python. Учитывая развитое сообщество TensorFlow, можно предположить, что TensorFlow второй версии будет доминирующей библиотекой для глубокого обучения в 2020 году.
15. Базы данных: верховенство SQL
Когда-то на волне интереса к NoSQL многие говорили об ограничениях SQL. Прошло время, шумиха утихла, люди поняли, что мир не может жить без SQL. Ниже представлен рейтинг самых популярных баз данных.
Как показывает таблица, базы данных SQL занимают первые четыре места. Причина доминирования SQL состоит в том, что он предоставляет долгосрочные транснациональные гарантии ACID, которые являются наиболее важным требованием для бизнес-приложений. Базы данных NoSQL предлагают горизонтальное масштабирование, но ценой нарушения гарантии ACID.
Два решения частично соответствуют требованиям «основной базы данных»: Amazon Aurora и Google Spanner. Aurora предоставляет практически все функции SQL, но не горизонтальное масштабирование записи, тогда как Spanner предлагает горизонтальное масштабирование записи, но не поддерживает многие функции SQL. Надеемся, что в 2020 году две базы данных станут ближе, или кто-то третий предложит «распределенную SQL-БД».
16. Data Lake: MinIO выйдет на первое место
Многие компании хранят данные и в OLTP- и в OLAP-системах, чтобы поддерживать соответственно ACID-требования и решать аналитические задачи. Обычно имеются и другие виды хранения, например, для поиска (Solr, Elasticsearch) или вычислений (Apache Spark). Компании строят свою платформу на основе озера данных (Data Lake): информация копируется в него из OLTP-баз, а другие типы приложений (например, OLAP, поиск) используют озеро данных в качестве своего источника.
Распределенная файловая система Hadoop (HDFS) была де-факто озером данных до тех пор, пока Amazon не выпустила Amazon S3. Масштабируемая и дешевая, служба S3 вскоре стала Data Lake для многих компаний. Единственная проблема заключается в том, что использование S3 тесно связывает платформу данных с облаком Amazon AWS. Хотя в Microsoft Azure есть хранилище BLOB-объектов, а в Google – аналогичное хранилище объектов, они не совместимы с AWS S3.
Новое S3-совместимое хранилище MinIO может стать спасением для многих компаний.
Microsoft анонсировала обслуживание MinIO в Azure Marketplace. Если Google GCP и другие платформы также введут поддержку MinIO, это будет большим шагом на пути к мультиоблачным решениям.
17. Расчет больших данных: Spark продолжит сверкать
Apache Spark занял место Hadoop как короля обработки пакетов распределенных данных. Spark намеренно работал с такими ограничением MapReduce, как сохранение данных в хранилище после каждой дорогостоящей операции. Хотя Spark использует для пакетной обработки и процессор, и съедающую память JVM, похоже, что он будет хорошо справляться со своими основными задачами и в 2020 году.
18. Поток больших данных: взгляд в будущее
Еще несколько лет назад обработка потоков в реальном времени была невозможна. Обычно использовалась микропакетная среда, такая как Spark Streaming, обрабатывавшая поток «почти» в реальном времени. Однако ситуацию изменил Apache Flink. Конкурировать со Spark он смог после того, как в январе китайский технический гигант Alibaba купил Data Artisan – компанию, стоявшую за Apache Flink.
19. ByteCode: WebAssembly увидит массовое внедрение
Самое большое ограничение JavaScript состоит в том, что он медленный, поскольку движок JavaScript должен читать, анализировать и обрабатывать текстовое «абстрактное синтаксическое дерево» JavaScript. Другая проблема JavaScript в том, что он однопоточный и не может использовать преимущества современного оборудования (многоядерных графических процессоров). В результате многие приложения, требующие большого объема вычислений (игры, трехмерная графика) не могут нормально работать в браузере.
Содружество нескольких компаний во главе с Mozilla создали WebAssembly – низкоуровневый формат байт-кода для браузера. И уже выпущено MVP WebAssembly, поддерживающиее С++ и Rust.
20. Кодинг: стратегии Low-Code / No-Code будут набирать обороты
Быстрая цифровизация показала, что существует огромный разрыв в спросе и предложении разработчиков. Многие компании не могут реализовать свои идеи из-за нехватки программистов. Чтобы снизить барьер вхождения, делается попытка сделать разработку программного обеспечения без кода (No Code) или с минимальным его количеством (Low Code).
Цель этого движения заключается в том, что любой мог создавать ПО, если у него есть отличная идея, но нет опыта программирования. Хотя можно скептически относиться к использованию подобных каркасов в производстве, они могут заложить основу для других проектов.
Комментарии