2020 年软件开发趋势预测!

作者 | Md Kamaruzzaman

译者 | 苏本如,责编 | 郭芮

2020年已经到来。

对于软件开发行业来说,即将过去的2019年是个伟大的一年,因为软件和数字化深入地影响到了每个行业。这一趋势将延续下去,并将在2020年对全球各行各业产生更大的影响。

那么2020年软件发展又会呈现出怎样的趋势呢/p>

以下为译文:

预测未来是困难的。预测软件开发的未来更加具风险和挑战性。虽然我没有任何水晶球,但是我可以运用我的“人类学习”能力对2020年的软件发展趋势作一番预测。

在本文中,我将对软件开发最重要的技术堆栈:从云计算/服务,到字节码(ByteCode),做出我的预测。

云计算/云服务、容器技术、编程语言、数据库、深度学习、软件架构、Web开发技术、应用程序、批处理、流处理、数据湖、字节码(ByteCode)、无代码(No-code)。

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

2020 年软件开发趋势预测!

资料来源:Gartner网站

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

2020 年软件开发趋势预测!

资料来源:Canalys

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

2020 年软件开发趋势预测!

资料来源:TechCrunch

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

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

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

2020 年软件开发趋势预测!

资料来源:Migrantis

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

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

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

2020 年软件开发趋势预测!

资料来源: 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的许可证:

2020 年软件开发趋势预测!

资料来源:Java Code Geeks

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

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

2020 年软件开发趋势预测!

图片来源:Micronaut

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

2020 年软件开发趋势预测!

资料来源:Stackoverflow

在之前的一篇博文中(https://towardsdatascience.com/effective-microservices-10-best-practices-c6e4ba0c6ee2),我已经在技术上对一些编程语言,特别是close-to-Metal类的编程语言,如Rust, Go,进行了深入的研究,并且论证了现在为什么是采用这些新一代语言的时候了。

最近,微软宣布他们正在深入研究Rust编程语言,以帮助其开发安全的软件(如下文所示):

2020 年软件开发趋势预测!

资料来源:Techbeacon

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

2020 年软件开发趋势预测!

图源: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下载统计数据可以看出:

2020 年软件开发趋势预测!

资料来源:Github

2020年,React也将成为新项目的必选Web框架。其他前端Web框架,如Angular (Angular2+)和Vue会怎么样呢ngular也是一个可靠的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的采用者来说是个好消息:

2020 年软件开发趋势预测!

资料来源:谷歌趋势

由于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:

2020 年软件开发趋势预测!

数据来源: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提供了一种独立于云平台的数据湖:

2020 年软件开发趋势预测!

资料来湖: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):

2020 年软件开发趋势预测!

资料来源:无代码(no_code)

这项工作的目标是任何人都可以开发软件,只要他/她有一个很酷的想法即可,不需要任何编码经验。

虽然我仍然怀疑在生产中使用LCNC框架的可行性,但这项工作可以为其他人奠定基础。像亚马逊、谷歌这样的公司可以在这个基础上构建一个可靠坚实的产品(就像AWS LAMBDA在谷歌App Engine的基础上蓬勃发展一样)。

值得一看的是,LCNC运动是否将在2020年获得更大的动力/p>

谢谢你的阅读!

原文:https://towardsdatascience.com/20-predictions-about-software-development-trends-in-2020-afb8b110d9a0

来源:互联网架构

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年1月16日
下一篇 2020年1月16日

相关推荐