20 тенденций в разработке программного обеспечения на 2020 год

20 тенденций в разработке программного обеспечения на 2020 год

Прогнозы – дело сложное. Прогнозировать будущее разработки программного обеспечения – еще сложнее. Но в то же время интересно потом сравнить, что сбылось, а что опровергло наши ожидания.

1. Инфраструктура: все дороги ведут в Облако

2019 год был прекрасным годом для облачных сервисов. Даже компании, занимающиеся вопросами безопасности (в том числе Пентагон), правительственные организации, здравоохранение, банки, страховые компании движутся в направлении облачного хранения данных и вычислений. Эта тенденция определенно сохранится и в 2020 году.

Gartner опубликовал прогноз, что рынок облачных сервисов при сохранении тренда вырастет в 2020 г. еще на 17%, достигнув 266.4 миллиарда долларов.

20 тенденций в разработке программного обеспечения на 2020 год

Крупные облачные провайдеры (Amazon, Microsoft, Google) предлагают бесплатные предложения для практического ознакомления с работой в облаке. Например, Google предоставляет купон на 300 долларов и один год обслуживания.

2. Облако: Amazon хорош, но другие догоняют

Публикация компании Canalys за третий квартал 2019 года указывает на то, что поставщики Big Cloud (AWS, Azure, GCP) занимают 56% рынка, при этом на AWS приходится 32,6% всего рынка.

20 тенденций в разработке программного обеспечения на 2020 год

Другие облачные провайдеры также сокращают разрыв с AWS. Недавно Microsoft заключила контракт с Пентагоном на 10 миллиардов долларов для проекта JEDI.

В то же время Google развивает фонд Cloud Native Computation для стандартизации облачных вычислений. Долгосрочная цель состоит в упрощении миграции в облако, чтобы другие компании могли легко перейти с AWS на GCP.

3. Контейнеризация: Kubernetes станет сильнее

Из битвы за контейнеризацию между Kubernetes, Docker Swarm и Mesos явным победителем вышел первый сервис, продолжив впоследствии закрепляться на рынке. Если облако – это распределенная система, то Kubernetes – его операционная система (распределенный Linux).

20 тенденций в разработке программного обеспечения на 2020 год

На Северноамериканской конференции Kubecon + CloudNativeCon в 2019 году приняло участие 12 тыс. человек. В ближайшем будущем не ожидается замедления роста Kubernetes. Для сравнения платформа Docker Enterprise недавно была продана компании Mirantis.

4. Архитектура программного обеспечения: микросервисы станут мейнстримом

Относительно парадигмы архитектуры программного обеспечения, как показывает Google Trends, продолжается переход к микросервисной архитектуре.

20 тенденций в разработке программного обеспечения на 2020 год

Одна из причин развития микросервисной архитектуры заключается в том, что она идеально подходит для быстрой разработки программного обеспечения в Cloud Native. Однако, как мы уже отмечали, во многих случаях использование такого типа архитектуры – задача не из простых. Поэтому монолитная архитектура не исчезнет из виду.

5. Языки программирования: Python съест мир

Будь то машинное обучение, анализ и обработка данных, веб, разработка корпоративного программного обеспечения или фотографирование черных дыр, Python везде. Известный сервис ранжирования языков программирования TIOBE оценил Python как третий по популярности язык программирования после Java и C:

20 тенденций в разработке программного обеспечения на 2020 год

Что еще интереснее, популярность Python в 2019 году удвоилась (с 5% до 10%). В рейтинге TIOBE есть много недостатков, но он наиболее распространен.

6. Программирование: Java и JVM

Как показывает индекс TIOBE, Java остается доминирующим языком программирования на планете и вряд ли сильно потеряет позиции в 2020 году. JVM – один из лучших компонентов разработки программного обеспечения. Kotlin, Scala, Clojure, Groovy используют JVM в качестве среды выполнения. Однако недавно Oracle изменила лицензию на JVM.

20 тенденций в разработке программного обеспечения на 2020 год

Изменение означает, что будут затронуты компании, использующие Java, Kotlin, Scala или любые другие JVM-языки. Компании будут обязаны заплатить сборы за подписку. К счастью, OpenJDK по-прежнему будет содержать JVM бесплатно.

20 тенденций в разработке программного обеспечения на 2020 год

JVM-языки, очевидно, не очень подходят для современных бессерверных вычислений. Поэтому Oracle, руководствуясь результатами GraalVM, стремится, чтобы Java стал более гибким, быстрым и лучше вписался в бессерверные вычисления. Существуют два привлекательных проекта, находящихся в стадии разработки, направленных на уменьшение и ускорение Java для бессерверных вычислений. Первый – фреймворк MicroNaut.

20 тенденций в разработке программного обеспечения на 2020 год

Второй проект – фреймворк Quarkus. Оба фреймворка используют GraalVM.

20 тенденций в разработке программного обеспечения на 2020 год

Еще недавно в разработке корпоративного программного обеспечения существовала конкуренция между Spring Framework и Java Enterprise Edition (JavaEE). Но компания Oracle уступила конкурентам, не ведя активных действий относительно Java EE. Это привело к созданию Jakarta EE, когда Oracle открыла исходный код Java EE.

20 тенденций в разработке программного обеспечения на 2020 год

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 занимает первое место четыре года подряд):

20 тенденций в разработке программного обеспечения на 2020 год

Недавно Microsoft объявила, что использует Rust в создании безопасного программного обеспечения. Компания Amazon сообщила о спонсировании проекта Rust. Язык программирования Kotlin стал основным конкурентом Java в мире JVM, когда Google объявила об официальной поддержке Kotlin в Android.

20 тенденций в разработке программного обеспечения на 2020 год

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.

20 тенденций в разработке программного обеспечения на 2020 год

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 это доминирующая среда для создания таких приложений.

20 тенденций в разработке программного обеспечения на 2020 год

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.

20 тенденций в разработке программного обеспечения на 2020 год

И вот, пока PyTorch набирал популярность, в октябре 2019 года Google выпустил TensorFlow 2.0, который использует динамический граф и более удобен для Python. Учитывая развитое сообщество TensorFlow, можно предположить, что TensorFlow второй версии будет доминирующей библиотекой для глубокого обучения в 2020 году.

15. Базы данных: верховенство SQL

Когда-то на волне интереса к NoSQL многие говорили об ограничениях SQL. Прошло время, шумиха утихла, люди поняли, что мир не может жить без SQL. Ниже представлен рейтинг самых популярных баз данных.

20 тенденций в разработке программного обеспечения на 2020 год

Как показывает таблица, базы данных 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 может стать спасением для многих компаний.

20 тенденций в разработке программного обеспечения на 2020 год

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 увидит массовое внедрение

20 тенденций в разработке программного обеспечения на 2020 год

Самое большое ограничение JavaScript состоит в том, что он медленный, поскольку движок JavaScript должен читать, анализировать и обрабатывать текстовое «абстрактное синтаксическое дерево» JavaScript. Другая проблема JavaScript в том, что он однопоточный и не может использовать преимущества современного оборудования (многоядерных графических процессоров). В результате многие приложения, требующие большого объема вычислений (игры, трехмерная графика) не могут нормально работать в браузере.

Содружество нескольких компаний во главе с Mozilla создали WebAssembly – низкоуровневый формат байт-кода для браузера. И уже выпущено MVP WebAssembly, поддерживающиее С++ и Rust.

20. Кодинг: стратегии Low-Code / No-Code будут набирать обороты

Быстрая цифровизация показала, что существует огромный разрыв в спросе и предложении разработчиков. Многие компании не могут реализовать свои идеи из-за нехватки программистов. Чтобы снизить барьер вхождения, делается попытка сделать разработку программного обеспечения без кода (No Code) или с минимальным его количеством (Low Code).

20 тенденций в разработке программного обеспечения на 2020 год

Цель этого движения заключается в том, что любой мог создавать ПО, если у него есть отличная идея, но нет опыта программирования. Хотя можно скептически относиться к использованию подобных каркасов в производстве, они могут заложить основу для других проектов.