查看原文
其他

2020 年软件开发趋势预测!

作者 | Md Kamaruzzaman
译者 | 苏本如,责编 | 郭芮
2020年已经到来。
对于软件开发行业来说,即将过去的2019年是个伟大的一年,因为软件和数字化深入地影响到了每个行业。这一趋势将延续下去,并将在2020年对全球各行各业产生更大的影响。
那么2020年软件发展又会呈现出怎样的趋势呢?
以下为译文:
预测未来是困难的。预测软件开发的未来更加具风险和挑战性。虽然我没有任何水晶球,但是我可以运用我的“人类学习”能力对2020年的软件发展趋势作一番预测。
在本文中,我将对软件开发最重要的技术堆栈:从云计算/服务,到字节码(ByteCode),做出我的预测。
云计算/云服务、容器技术、编程语言、数据库、深度学习、软件架构、Web开发技术、应用程序、批处理、流处理、数据湖、字节码(ByteCode)、无代码(No-code)。

1、基础设施:条条道路通向云(计算)

图源:Unsplash,由Patrick Tomasso拍摄
2019年对云服务提供商来说是一个伟大的一年。不仅初创企业已经在使用云服务,一些保守的和注重安全的行业和机构,如政府、医疗保健、采矿业、银行、保险,甚至五角大楼都在转向云计算技术。这一趋势将在2020年继续下去,届时所有规模和所有类型的公司都将采纳,或者至少计划采纳云计算技术。Gartner最近公布了2020年云计算/服务的预测数据(如下图):

资料来源:Gartner网站
所以,如果你是一个决策者,还在对是否转向云服务举棋不定的话,也许你应该重新考虑你的策略。如果你是一个独立的开发人员,还没有尝试过云服务,那么2020年将是一个尝试的最佳时机。大多数大型云服务提供商(亚马逊、微软、谷歌)都提供免费使用额度,让用户可以体验云服务。谷歌在这方面最慷慨:它提供一年300美元的免费额度。

谷歌云的免费层

2、云服务:AWS难以撼动,但其他人会赶上

作为第一个云服务提供商,2019年亚马逊AWS的统治地位仍然牢不可撼。凭借最广泛的服务组合,亚马逊AWS也将在2020年继续占据统治地位。Canalys发布了2019年第三季度的统计数据:大型云服务提供商(AWS, Azure, GCP)占据了56%的市场份额,而仅仅AWS一家就占据了32.6%的市场份额:

资料来源:Canalys

但是其他云服务提供商也在积极行动,力争缩小与亚马逊AWS之间的差距。微软已经将目标专门对准了大型企业。最近微软击败了亚马逊,从五角大楼手中赢得了价值100亿美元的云服务项目——“绝地”。这项交易可以大大提升Azure的声誉,并且大大削弱AWS的统治地位:

资料来源:Marketwatch

谷歌也正在推动云原生计算基金会(CNCF - Cloud Native Computation Foundation)实现云服务操作的标准化。谷歌的长期目标是让云迁移变得更容易,以帮助公司以后可以更方便地从AWS迁移到GCP。IBM最近以高达360亿美元的价格收购了RedHat,目的是帮助它在云服务市场抢占一席之地:

资料来源:TechCrunch

2020年将有更多的收购和合并。此外,许多初创企业也将带来新的创意和创新(例如“多云服务”这项创新)。从云厂商的殊死搏斗中,只有更低的价格和更多的创新才能让企业从中获益。

3、容器化:Kubernetes将继续火爆

在容器编排领域,Kubernetes, Docker Swarm和Mesos之间曾经发生过一场大战。结局很明显,Kubernetes已经成为这场战斗的赢家,并且只会变得更强。云是分布式系统,Kubernetes是它的操作系统(分布式Linux)。在2019年北美举办的Kubernetes官方技术论坛Kubecon + CloudNativeCon上,有12,000名与会者参加,这一数字与2018年的同一活动相比增长了50%。下图反映了过去四年来Kubecon+ CloudNativeCon的指数增长情况:

资料来源:云原生计算基金会(CNCF)/Linux 基金会

可以预见,在不久的将来,Kubernetes的增长速度不会放缓,而且在2020年它只会变得更强。你可以放心地打赌,2020年,Kubernetes将成为云原生计算运动的中坚力量。顺便说一句,Docker Enterprise最近被卖给了Migrantis,金额不详:

资料来源:Migrantis

而就在几年前,一切还都是关于Docker的,但现在变成都是关于Kubernetes的了。Docker在其鼎盛时期未能实现货币化,几年后,当这个行业已经离开时,他试图赚钱,但是为时已晚。这个例子又一次证明:在现代科技界,时间就是一切。

4、软件架构:微服务将成为主流

在软件架构范式中,向微服务架构的转变在2019年一直继续,正如如下的谷歌趋势(Google Trends)所显示的:

谷歌趋势:微服务

随着该行业在2020年及以后继续朝着云计算的方向发展,微服务架构将占据更大的主导地位。微服务架构兴起的一个主要原因是,它是和云计算完全契合的、快速的软件开发方式。在之前的一篇博文中(https://towardsdatascience.com/microservice-architecture-a-brief-overview-and-why-you-should-use-it-in-your-next-project-a17b6e19adfd),我解释了微服务架构的基本原理及其优缺点。
我认为也会有一个趋势,那就是回归到一体化软件架构。因为对于许多用例,微服务架构有些过犹不及了,而且设计微服务架构也非常具有挑战性。什么是设计微服务架构的最佳实践呢?我之前写过一篇总结性的博文(https://towardsdatascience.com/effective-microservices-10-best-practices-c6e4ba0c6ee2),可能它对回答这个问题有所帮助。

5、编程(普通的):Python将继续崛起

无论是机器学习、数据分析、数据处理、Web开发、企业软件开发,还是拍摄黑洞:Python无处不在。
此外,流行编程语言排名网站TIOBE已经将Python列为仅次于Java和C的第三大流行编程语言:

资料来源: TIOBE

更有趣的是,Python在2019年的受欢迎程度翻了一番(从5%增至10%)。我知道TIOBE的统计有很多局限性和缺陷,但它是现在最被广泛接受的编程语言排名。
Python的崛起将在2020年继续下去,它将缩小与Java和C之间的差距。另一种无所不在的编程语言JavaScript正面临下降趋势(JavaScript框架疲劳疹?)。为什么Python会出现这样的热潮?因为它降低了编程领域的门槛,同时它拥有一个优秀的,深受数据科学家和新一代开发人员喜爱的社区。

6、编程(企业级的):Java和JVM仍然占据主导地位

如前一节的TIOBE排名所示,Java仍然是这个星球上最主要的编程语言,并将在2020年继续占据主导地位。JAVA的运行时JVM是最好的软件工程之一,它为Java提供了坚实的基础。许多流行语言如Kotlin、Scala、Clojure、Groovy都使用JVM作为运行时。最近,甲骨文公司更新了JVM的许可证:

资料来源:Infoworld

许可证的更新意味着所有使用Java、Kotlin、Scala或任何其他JVM语言的公司都将受到影响,需要支付巨额的订阅费。幸运的是,OpenJDK计划仍将使JVM免费。一些公司将为JVM提供企业支持:

资料来源:Java Code Geeks

由于其像“大货船”般的庞大而且速度慢,JVM语言已经不能最好地适合当今的无服务器计算。甲骨文正在推动“GraalVM”计划,旨在使Java能够灵活、快速、更好地适应无服务器世界。但是,由于除了Java之外,没有其他的选择能够提供企业级的稳定性和可靠性,因此,在2020年及以后,Java仍将继续统治世界。

7、Java企业应用: Spring成为头号框架

资料来源:spring.io

曾几何时,Spring框架和Java企业版(JavaEE)在企业软件开发方面存在着激烈的竞争。但甲骨文在JavaEE中的不活跃使它在竞争中处于劣势。这导致了“Micro Profile”平台的产生,并最终形成了JakartaEE,甲骨文在JakartaEE中开源了Java EE源代码。
当所有的政治和运动都围绕着JavaEE发生时,Spring框架已经赢得了JVM企业框架战争的胜利,它的开发非常活跃,并且能够快速地应对不断变化的环境,例如云原生支持。到2020年,Spring框架将成为JVM生态系统中的头号框架。
目前,有两个非常有吸引力的项目正在开发中,旨在使得Java变得更小、更灵活,从而成为无服务器计算的良好选择。
一个项目是Micronaut框架(如下):

图片来源:Micronaut

另外一个项目是Quarkus框架(如下):

图片来源:Quarkus

Micronaut和Quarkus的目标都是使用GraalVM,并将在2020年吸引更多的Java社区。

8、编程:Rust,Swift,Kotlin,TypeScript将取得突破

21世纪头10年,编程语言领域出现了停滞。大多数人认为不再需要一种新的编程语言了,因为Java、C、C++、JavaScript和Python已经满足了所有的需求。谷歌通过创建Go语言打开了新编程语言的大门。在过去的十年里,许多有趣的编程语言出现了,如Rust, Swift, Kotlin, TypeScript。这种发展的一个原因是现有的编程语言往往不能利用硬件的最新变化(例如多核、更快的网络、云计算)的优势。另一个因素是现代语言特别注重旨在使开发人员能够更快更容易开发的人机工程学。在Stackoverflow开发者调查中,大多数现代语言占据了前几位(Rust连续4年排名第一):

资料来源:Stackoverflow

在之前的一篇博文中(https://towardsdatascience.com/effective-microservices-10-best-practices-c6e4ba0c6ee2),我已经在技术上对一些编程语言,特别是close-to-Metal类的编程语言,如Rust, Go,进行了深入的研究,并且论证了现在为什么是采用这些新一代语言的时候了。
最近,微软宣布他们正在深入研究Rust编程语言,以帮助其开发安全的软件(如下文所示):

资料来源:Techbeacon

此外,亚马逊最近也宣布,他们正在赞助Rust:

资料来源:Techbeacon

随着谷歌宣布在安卓系统中正式支持Kotlin编程语言, Kotlin也成为了Java在JVM领域的主要竞争对手之一:

资料来源:安卓

Angular支持将TypeScript作为主要编程语言,而不是使用普通的JavaScript。其他JavaScript框架,例如React和Vue也开始提供对TypeScript的更多支持。
这一趋势在2020年将会继续下去,许多其他的大公司可能已经近距离深入研究了新一代编程语言(如Rust、Swift、TypeScript、Kotlin),他们在2020年会站出来公开宣布他们的支持。

9、Web前端开发:JavaScript将继续占据主导地位

图源:Unsplash,由Pankaj Patel拍摄

很久以前,JavaScript还不是一门足够强大的编程语言,前端开发主要使用JSF、Ruby on Rails、Django、Laravel等后端框架开发,并在服务器端渲染。2014年AngularJS一面世,情况就永远改变了。从那时起,更多的JavaScript Web框架(如Angular 2+, React, Vue.js, Meteor.js等)涌现出来,使得JavaScript变成了现代主流的Web开发框架。随着JavaScript框架的不断创新和微服务架构的兴起,JavaScript框架将继续在2020年主导前端开发。

10、JavaScript Web框架:React稳如磐石

尽管React是在AngularJS之后推出的,但它在过去十年中对Web开发的影响最大,并在与Google+的竞争中拯救了Facebook。React在前端开发中带来了一些新颖的创新思想,如事件溯源(Event Sourcing)、虚拟Dom、单向数据绑定、基于组件开发等等。它对社区的影响如此之大,以至于谷歌放弃了AngularJS,并通过借鉴React的思想完全重写了Angular2+。React是迄今为止最主要和最稳定的JavaScript Web框架,这一点从下面的NPM下载统计数据可以看出:

资料来源:npm trends

最近,Facebook宣布了React-Fiber项目,将彻底重写React核心算法,以获得更好的并发性和用户体验:

资料来源:Github
2020年,React也将成为新项目的必选Web框架。其他前端Web框架,如Angular (Angular2+)和Vue会怎么样呢?Angular也是一个可靠的Web开发框架,特别适合于企业应用开发。我相信谷歌在未来几年会在Angular上投入巨资。Vue是另一个非常流行的Web框架,它得到了社区和几家中国大公司的支持。如果你已经在使用Angular或Vue,则无需在2020年迁移到React。

11、应用程序(APP)开发:原生应用受企业青睐

在移动应用程序开发方面,围绕混合应用程序(Hybrid App)开发的炒作有所放缓。混合应用程序开发提供了更快的开发速度,因为你只需要一个团队而不是两个团队。但是原生应用程序提供了更好的用户体验和更好的性能。同样在混合应用程序开发中,应用程序总是需要经过调整才能获得高级功能。对于企业来说,原生应用程序开发仍然是首选解决方案,这一趋势将在2020年继续。爱彼迎(Airbnb)最近发表了一篇详细的博客文章(https://medium.com/airbnb-engineering/sunsetting-react-native-1868ba28e30a),解释了他们为何放弃领先的混合应用开发平台“React Native”。
尽管Facebook正在努力改进React Native,谷歌也在大力推动自己的混合应用开发平台Flutter,但它们主要适用于Prototype(原型)、POC(概念验证)、MVP(最小可用产品)或特色轻应用的开发,而原生应用程序的开发将在2020年继续占据主导地位。
原生应用程序开发中一个有趣的事实是,谷歌正在推广Kotlin,而苹果正在推广Swift作为主要编程语言,这是因为这两种开发语言具有对开发人员友好的现代特性。谷歌最近重申了对Kotlin的支持,这对Kotlin的采用者来说是个好消息:

资料来源:Phoronix

12、混合应用程序开发:React Native继续主导

混合应用程序对很多应用场景是一种比较实用的选择。这个领域存在着很多选择:早已存在的Xamarin和Ionic,以及新生的React Native和Flutter。Facebook在极其成功的和高度成熟的Web框架React的基础上构建了React Native。与它的Web开发领域的对等物一样,React Native也占据了混合应用程序开发框架的主导地位(详情见如下统计结果):

资料来源:谷歌趋势

由于React Native和React共享相同的基础代码库,它们提供了代码的高可重用性,并保证了“编写一次,到处运行”。使用React Native(或其他Facebook框架)的另一个附加优势是Facebook自己的移动应用程序也是使用React Native开发的。谷歌在这一领域起步较晚,但去年凭借自己的混合应用程序框架Flutter获得了巨大的吸引力。Flutter提供了更好的性能,但需要另一种不那么流行的编程语言Dirt的配合。考虑到React生态系统中发生的所有变化,React Native也将在2020年继续在该领域占据主导地位。

13、API:Rest风平浪静

REST就像API领域中的800磅的大猩猩。它是事实上的基于API的服务间通信中最广泛使用的技术。在这个领域还有其他一些选择。如果你仔细阅读了这篇文章,你可能已经猜到了:谷歌的gRPC和Facebook的GraphQL。
这两种技术都有过人之处,但是提供了不同的功能。谷歌已经开发了gRPC,作为远程过程调用(RPC)技术(例如SOAP)的一个替代品,但是它还处于初级阶段。它使用Protobuf而不是JSON作为消息格式。另一方面,Facebook开发了GraphQL作为一个聚合层,以避免随意的和频繁的REST调用。gRPC和GraphQL都取得了成功,并在应用的地方表现出色。2020年,REST仍然将是最主要的API技术,而GraphQL和gRPC将作为一种补充技术。

14、人工智能:Tensorflow 2.0将占据主导地位

在深度学习/神经网络领域,谷歌和Facebook也是主要参与者。谷歌推出了深度学习框架TensorFlow,它是基于一个流行的深度学习框架Theano开发的。它很快成为深度学习/神经网络计算的主要算法库。谷歌甚至提供了一个专门设计的GPU(TPU)来加速TensorFlow的计算。
Facebook在深度学习领域并不落后,因为他们可能拥有最多的图片和视频收藏。Facebook推出了一个深度学习框架PyTorch,它是基于另一个流行的深度学习库Torch开发的。两个框架的工作方式有细微的不同。TensorFlow使用静态图进行计算,而PyTorch使用动态图进行计算。使用动态图的优点是它可以在运行时进行自我校正。另外,PyTorch对Python更加友好,而后者是数据科学使用的主要编程语言。
随着PyTorch越来越受欢迎,谷歌在2019年10月发布了TensorFlow 2.0,这个版本使用了动态图表和更加友好的Python:

资料来源:TensorFlow

2020年,TensorFlow 2和PyTorch将并驾齐驱。考虑到TensorFlow的社区更大,我预测TensorFlow 2在2020年将会成为占主导地位的深度学习库。

15、数据库:SQL无人能及,但分布式SQL将会是圣杯

在NoSQL大肆炒作的日子里,许多人嘲笑SQL并指出它的局限性。许多文章都在解释NoSQL如何更好,并将取代SQL。然而,一旦炒作结束,人们很快意识到,没有SQL数据库,世界就无法生存。以下是最受欢迎的数据库排名:

数据来源:DB Engines

如上图所示,SQL数据库仍然占据了前4位。SQL数据库之所以占主导地位,是因为它提供了持久的ACID事务保证,这是业务应用程序最基本的需求。NoSQL数据库提供了水平扩展,但代价是牺牲了ACID事务保证。
互联网巨型公司正在寻找这样的“Master数据库”,即一个数据库,它既能提供像SQL数据库一样的ACID事务保证,同时也能提供像NoSQL数据库一样的水平扩展。目前,有两个解决方案能部分地满足这样的“Master数据库”的要求:微软的Aurora和谷歌的Spanner。Aurora提供了几乎所有的SQL特性,但不提供水平写扩展,而Spanner提供了水平写扩展,但不支持许多SQL特性。
到2020年,这两个数据库有望更接近“Master数据库”的要求,或者会有人提出“分布式SQL”的构想。如果真能实现的话,那他很可能会获得图灵奖。

16、数据湖:MinIO将崭露头角

如前一节所述,现代数据平台是复杂的。企业通常使用OLTP数据库(SQL)来支持ACID事务,并使用OLAP数据库(NoSQL)进行数据分析。此外,企业还有其他类型的数据存储,例如用于搜索(Solr、弹性搜索)或计算(Apache Spark)。企业基于数据湖(data Lake)来构建数据平台,即数据从OLTP数据库复制到数据湖。所有其他类型的数据应用程序(如OLAP、搜索)都使用数据湖作为它们的黄金来源。
Hadoop分布式文件系统(HDFS)是事实上的数据湖,直到Amazon推出了对象存储S3。S3的可扩展性和廉价性很快使它成为了许多公司事实上的数据湖。唯一的问题是使用S3需要将数据平台与Amazon AWS云平台紧密绑定。尽管微软的Azure有Blob存储,谷歌也有类似的对象存储,但它们与AWS S3并不兼容。
一个新的开源的,兼容S3的对象存储MinIO可能会成为许多公司的救星。借助企业级支持和针对云原生环境的构建,MinIO提供了一种独立于云平台的数据湖:

资料来源: MinIO

微软最近在Azure 云应用商店上发布了MinIO,其口号为:“为Azure Blob存储服务提供与Amazon S3 API兼容的数据访问”。如果谷歌 GCP和其他公司也提供MinIO,那么这将是促进多云计算的一大步。

17、大数据计算:Spark将继续称王

现代企业通常需要在大规模的数据集上进行计算,这就需要分布式的批量作业。Hadoop Map-Reduce是第一个分布式批处理平台。最近,Apache Spark取代Hadoop成为批量计算之王。Apache Spark如何提供比Hadoop更好的性能呢?我之前曾写过一篇博文(https://towardsdatascience.com/programming-language-that-rules-the-data-intensive-big-data-fast-data-frameworks-6cd7d5f754b0),对现代数据平台作了一番深入分析。
Spark特别针对Hadoop Map-Reduce的局限性提出的解决方案,即在每次代价高昂的操作之后,都要处理内存中的所有内容,而不是将数据保存在存储中。尽管Spark使用了CPU和内存饥渴模式的JVM进行批处理,但它将在2020年及以后继续占据批处理框架的统治地位。我希望有人能用Rust开发一个更高效的批量处理框架,它可以取代Spark,并节省公司巨大的云服务账单。

18、大数据流:Apache Flink是未来希望

几年前,实时流处理还是不可能的事情。通常的做法是采用Spark Streaming等微批处理框架,来实现“近似的”实时流处理。然而,Apache Flink横穿出世,它通过提供实时流处理功能改变了现状。
在2019年之前,Apache Flink无法获得足够的吸引力,因为它无法与Spark的营销竞争。但是当中国科技巨头阿里巴巴在2019年1月收购了Data Artisan(Apache Flink背后的公司)之后,情况就发生了变化:

资料来湖:TechCrunch

如果公司希望在2020年及以后能够实现实时流处理,Apache Flink应该是首选。尽管Apache Flink也遭受了与Spark同样的痛苦,它使用了需要高CPU的重量级的JVM,并且用户需要支付一笔高昂的云服务平台账单。

19、字节码(ByteCode):WebAssembly将被大量采用

我是从JavaScript的创建者Brandon Eich的一次采访中了解到WebAssembly的。现代JavaScript(es5之后)是一种优秀的编程语言。但它和其他编程语言一样,它也有局限性。JavaScript最大的局限是它的速度慢,因为JavaScript引擎需要读取、解析和处理JavaScript文本的“抽象语法树”。JavaScript的另一个问题是它是单线程的,不能利用现代硬件(如多核、GPU)的特性。因此,许多计算密集型应用程序(如游戏、三维图形)无法在浏览器上运行。
一些公司(以Mozilla为首)开发了WebAssembly(浏览器的低级字节码格式),以便在Web中运行任何受支持的编程语言。WebAssembly的MVP版本已经发布,它支持所有close-to-Meta编程语言(例如C++, Rust):

资料来源:WebAssembly

WebAssembly使得游戏和Autocad等计算密集型应用程序能够在浏览器上运行。WebAssembly的目标甚至更大,它希望在浏览器之外也能够运行。因为它的Web支持,WebAssembly还能够提供固有的安全性和沙箱。这也意味着WebAssembly可以用于以下“浏览器外”的场景:
  • 移动设备上的混合原生应用程序。

  • 无冷启动问题的无服务器计算((云计算)。 

  • 不可信代码的服务器端计算(CDN)。

在我的预测中,2020年对WebAssembly来说可能是一个突破性的一年,许多大公司(包括云服务提供商)和社区都将接受它。

20、编码:低代码(Low-Code)、无代码(No-Code)将获得动力

快速的数字化和工业4.0革命意味着软件开发人员的供需缺口巨大。由于缺乏开发人员,许多人或公司无法实现他们的想法。为了降低进入软件开发的门槛,有人试图让软件开发工作变得不需要编写代码(No-Code)或只需要编写少量代码(Low-Code)。这项工作被称为LCNC(Low-Code No-Code),并且在2019年取得了一些成功:
资料来源:无代码(no_code)
这项工作的目标是任何人都可以开发软件,只要他/她有一个很酷的想法即可,不需要任何编码经验。
虽然我仍然怀疑在生产中使用LCNC框架的可行性,但这项工作可以为其他人奠定基础。像亚马逊、谷歌这样的公司可以在这个基础上构建一个可靠坚实的产品(就像AWS LAMBDA在谷歌App Engine的基础上蓬勃发展一样)。
值得一看的是,LCNC运动是否将在2020年获得更大的动力?
谢谢你的阅读!
原文:https://towardsdatascience.com/20-predictions-about-software-development-trends-in-2020-afb8b110d9a0


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存