以下是翻译:
预测未来是困难的。预测软件开发的未来更具风险和挑战性。尽管我没有水晶球,但我可以利用我的“人类学习”能力对2020年软件开发趋势进行预测。

在本文中,我将为软件开发提供最重要的技术堆栈:从云计算/服务到字节码(ByteCode)。
云计算/云服务,容器技术,编程语言,数据库,深度学习,软件体系结构,Web开发技术,应用程序,批处理,流处理,数据湖,字节码(ByteCode),无代码。
基础架构:条条大路通云(计算)
资料来源:Unsplash,Patrick Tomasso拍摄
对于云服务提供商而言,2019年是伟大的一年。不仅初创企业已经在使用云服务,而且一些保守且对安全性敏感的行业和机构,例如政府,医疗保健,采矿,银行,保险,甚至五角大楼,都在转向云计算技术。这种趋势将在2020年继续,届时各种规模和类型的公司将采用或至少计划采用云计算技术。 Gartner最近发布了2020年云计算/服务的预测数据(如下所示):
资料来源:Gartner网站
因此,如果您是决策者,但仍不确定是否要切换到云服务,则应该重新考虑您的策略。如果您是独立开发人员并且没有尝试过云服务,那么2020年将是最佳尝试时间。大多数大型云服务提供商(亚马逊,微软,谷歌)都提供免费使用配额,以便用户可以体验云服务。 Google在这方面最慷慨:它每年提供300美元的免费配额。
Google Cloud免费套餐
云服务:AWS很难动摇,但其他服务会赶上
作为第一家云服务提供商,Amazon AWS在2019年的主导地位仍然不可动摇。凭借最广泛的服务组合,亚马逊AWS将在2020年继续占据主导地位。Canalys发布了2019年第三季度的统计数据:大型云服务提供商(AWS,Azure,GCP)占据了市场的56%,而仅AWS便占据了32.6%。市场份额:
资料来源:Canalys
但是其他云服务提供商也正在积极采取行动,以缩小与Amazon AWS的差距。微软专门针对大型企业。最近,微软击败了亚马逊,赢得了五角大楼一个价值100亿美元的云服务项目“杰迪”。该交易可以大大提高Azure的声誉并大大削弱AWS的优势:
资料来源:Marketwatch
Google还在推广Cloud Native Computing Foundation(CNCF-Cloud Native计算基金会)以标准化云服务运营。 Google的长期目标是使云迁移更容易,以帮助公司将来更轻松地从AWS迁移到GCP。 IBM最近以高达360亿美元的价格收购了RedHat,目的是帮助其在云服务市场中占据一席之地:
资料来源:TechCrunch
2020年将有更多的收购和合并。此外,许多创业公司还将带来新的想法和创新(例如“多云服务”创新)。从云供应商的拼搏中,只有更低的价格和更多的创新才能使企业受益。
容器化:Kubernetes将继续炙手可热
在容器编排领域,Kubernetes,Docker Swarm和Mesos之间进行了一场激战。结局显而易见,Kubernetes已成为这场战斗的胜利者,并且只会变得更强大。云是一个分布式系统,而Kubernetes是其操作系统(分布式Linux)。在Kubecon + CloudNativeCon上,2019年在北美举行的官方Kubernetes技术论坛上,有12,000名参与者参加了会议。与2018年的同一事件相比,这个数字增加了50%。下图反映了Kubecon + CloudNativeCon在过去四年中的指数增长:
资料来源:Cloud Native Computing Foundation(CNCF)/ Linux Foundation
可以预见的是,在不久的将来,Kubernetes的增长速度不会放缓,并且只会在2020年变得更强劲。您可以肯定地说,在2020年,Kubernetes将成为云原生计算运动的骨干力量。顺便说一句,最近将Docker Enterprise出售给Migrantis,金额不详:
资料来源:Migrantis
就在几年前,一切仍与Docker有关,但现在,一切都与Kubernetes有关。在鼎盛时期,Docker无法获利。几年后,当这个行业退出时,他试图赚钱,但是为时已晚。这个例子再次证明:在现代科学技术世界中,时间就是一切。
软件体系结构:微服务将成为主流
在软件架构范式中,向微服务架构的过渡在2019年继续进行,如以下Google趋势所示:
Google趋势:微服务
随着该行业在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),回答这个问题可能会有所帮助。
编程(常见):Python将继续崛起
无论是机器学习,数据分析,数据处理,Web开发,企业软件开发还是冒黑洞:Python无处不在。
此外,流行的编程语言排名网站TIOBE将Python列为仅次于Java和C的第三大流行编程语言:
资料来源:TIOBE
更有趣的是,Python的流行度在2019年翻了一番(从5%增至10%)。我知道TIOBE的统计数据有很多局限性和不足之处,但是它现在是最广泛接受的编程语言排名。
Python的兴起将在2020年继续,它将弥合Java和C之间的鸿沟。另一种无处不在的编程语言JavaScript面临着下降的趋势(JavaScript框架疲倦吗?)。为什么Python会如此繁荣?因为它降低了编程领域的门槛,所以它同时拥有一个优秀的社区,深受数据科学家和下一代开发人员的喜爱。
编程(企业):Java和JVM仍然占主导地位
如上一节中的TIOBE排名所示,Java仍然是地球上最重要的编程语言,并将在2020年继续占据主导地位。JAVA的运行时JVM是最好的软件项目之一,它为Java提供了坚实的基础。 Kotlin,Scala,Clojure和Groovy等许多流行语言都将JVM用作运行时。最近,Oracle更新了JVM许可证:
资料来源:Infoworld
许可证更新意味着所有使用Java,Kotlin,Scala或任何其他JVM语言的公司都将受到影响,并且需要支付巨额订阅费。幸运的是,OpenJDK计划仍将使JVM免费。一些公司将为JVM提供企业支持:
资料来源:Java Code Geeks
由于像“大型货轮”一样庞大且速度慢,JVM语言不再最适合当今的无服务器计算。 Oracle正在推广“ GraalVM”程序,该程序旨在使Java灵活,快速且更好地适应无服务器世界。但是,由于除了Java之外没有其他选择可以提供企业级的稳定性和可靠性,因此Java将在2020年及以后继续统治世界。
Java企业应用程序:Spring成为第一框架
资料来源:spring.io
曾几何时,在企业软件开发中,Spring Framework和Java Enterprise Edition(JavaEE)之间存在激烈的竞争。但是Oracle在JavaEE中的不活跃使其在竞争中处于劣势。这导致了“ Micro Profile”平台的创建,并最终形成了JakartaEE,这是JakartaEE中Oracle开源Java EE源代码。
当所有政治和运动都围绕JavaEE展开时,Spring框架赢得了JVM企业框架之战。它的开发非常活跃,可以快速响应不断变化的环境,例如云原生支持。到2020年,Spring框架将成为JVM生态系统中排名第一的框架。
当前,有两个非常有吸引力的项目正在开发中,旨在使Java变得更小,更灵活,从而使其成为无服务器计算的不错选择。
一个项目是Micronaut框架(见下文):
图片来源:Micronaut
另一个项目是Quarkus框架(见下文):
图片来源:Quarkus
Micronaut和Quarkus都旨在使用GraalVM,并将在2020年吸引更多Java社区。
编程:Rust,Swift,Kotlin,TypeScript将取得突破
在21世纪的前十年,编程语言领域出现了停滞。大多数人认为不再需要一种新的编程语言,因为Java,C,C ++,JavaScript和Python已满足所有需求。谷歌通过创建Go语言为新的编程语言打开了一扇门。在过去的十年中,出现了许多有趣的编程语言,例如Rust,Swift,Kotlin,TypeScript。进行这种开发的原因之一是现有的编程语言通常无法利用最新的硬件更改(例如,多核,更快的网络,云计算)。另一个因素是现代语言特别关注旨在使开发人员更快,更轻松地开发的人机工程学。在Stackoverflow开发人员调查中,大多数现代语言占据首位(Rust连续4年排名第一):
资料来源:Stackoverflow
在先前的博客文章(https://towardsdatascience.com/effective-microservices-10-best-practices-c6e4ba0c6ee2)中,我在技术上已经熟悉某些编程语言,尤其是接近金属的编程语言,例如Rust, Go进行了深入的研究,并演示了为什么现在该采用这些新一代语言了。
最近,Microsoft宣布他们正在研究Rust编程语言,以帮助他们开发安全的软件(如下所示):
资料来源:Techbeacon
此外,亚马逊最近宣布他们将赞助Rust:
资料来源:Techbeacon
随着Google正式支持Android中的Kotlin编程语言的宣布,Kotlin也已成为Java在JVM领域的主要竞争对手之一:
资料来源:Android
Angular支持TypeScript作为主要的编程语言,而不是使用普通的JavaScript。其他JavaScript框架(例如React和Vue)也已开始为TypeScript提供更多支持。
这种趋势将在2020年继续下去,许多其他大公司可能已经在近距离研究了新一代的编程语言(例如Rust,Swift,TypeScript,Kotlin),它们将在2020年脱颖而出以宣布其支持。 。
Web前端开发:JavaScript将继续占据主导地位
资料来源:Unsplash,由Pankaj Patel拍摄
很久以前,JavaScript并不是一种足够强大的编程语言。前端开发主要使用JSF,Ruby on Rails,Django,Laravel和其他后端框架,并在服务器端进行渲染。当AngularJS于2014年问世时,情况永远发生了变化。从那时起,出现了更多的JavaScript Web框架(例如Angular 2 +,React,Vue.js,Meteor.js等),使JavaScript成为现代主流Web开发框架。随着JavaScript框架的不断创新和微服务架构的兴起,JavaScript框架将在2020年继续主导前端开发。
JavaScript Web Framework:React坚如磐石
尽管React是在AngularJS之后推出的,但它在过去十年中对Web开发的影响最大,并且使Facebook在与Google+的竞争中脱颖而出。 React在前端开发中带来了一些新颖的创新思想,例如事件源,虚拟Dom,单向数据绑定,基于组件的开发等。它对社区的影响是如此之大,以至于Google放弃了AngularJS并完全重写了Angular2 +通过借鉴React的想法。到目前为止,React是最重要,最稳定的JavaScript Web框架。从以下NPM下载统计信息中可以看出:
资料来源:npm趋势
最近,Facebook宣布了React-Fiber项目,该项目将完全重写核心React算法,以实现更好的并发性和用户体验:
资料来源:Github
在2020年,React也将成为新项目的必备Web框架。诸如Angular(Angular2 +)和Vue之类的其他前端Web框架又如何呢? Angular还是一个可靠的Web开发框架,特别适合于企业应用程序开发。我相信Google会在未来几年内对Angular进行大量投资。 Vue是另一个非常流行的Web框架,受到社区和几家大型中国公司的支持。如果您已经在使用Angular或Vue,则无需在2020年迁移到React。
应用程序开发(APP):本机应用程序受企业青睐
在移动应用程序开发方面,围绕混合应用程序开发的炒作有所放缓。混合应用程序开发提供了更快的开发速度,因为您只需要一个团队而不是两个团队。但是本机应用程序提供了更好的用户体验和更好的性能。同样在混合应用程序开发中,始终需要调整应用程序以获得高级功能。对于企业而言,本机应用程序开发仍然是首选的解决方案,并且这一趋势将在2020年继续。Airbnb最近发布了详细的博客文章(https://medium.com/airbnb-engineering/sunsetting-react-native-1868ba28e30a),解释了原因他们放弃了领先的混合应用程序开发平台“ React Native”。
尽管Facebook一直在努力改进React Native,但Google也在大力推广自己的混合应用程序开发平台Flutter,但它们主要适合于Prototype(原型),POC(概念验证),MVP(最小可用产品)的开发。或特色照明应用,原生应用的开发将在2020年继续占据主导地位。
本机应用程序开发中的一个有趣事实是,谷歌正在推广Kotlin,苹果公司正在推广Swift作为主要的编程语言,因为这两种开发语言都具有现代的,对开发人员友好的功能。 Google最近重申了对Kotlin的支持,这对于Kotlin的采用者而言是个好消息:
资料来源:Phoronix
混合应用程序开发:React Native继续占主导地位
对于许多应用程序场景而言,混合应用程序是一个更实际的选择。这个领域有很多选择:已经存在的Xamarin和Ionic,以及新生的React Native和Flutter。 Facebook在极其成功且高度成熟的Web框架React的基础上构建了React Native。像在Web开发领域中一样,React Native在混合应用程序开发框架中也占据着主导地位(有关详细信息,请参见下面的统计结果):
资料来源:Google趋势
由于React Native和React共享相同的基本代码库,因此它们提供了很高的代码可重用性,并保证“一次编写,随处运行”。使用React Native(或其他Facebook框架)的另一个附加优点是,Facebook自己的移动应用程序也使用React Native开发。 Google在这方面起步较晚,但去年它的混合应用程序框架Flutter赢得了极大的吸引力。 Flutter提供了更好的性能,但需要另一种不太流行的编程语言Dirt的配合。考虑到React生态系统的所有变化,React Native也将在2020年继续主导该领域。
API:休息很平静
REST在API世界中就像一只800磅的大猩猩。实际上,它是服务之间基于API的通信中使用最广泛的技术。该区域还有其他选择。如果仔细阅读本文,您可能已经猜到了:Google的gRPC和Facebook的GraphQL。
这两种技术都很出色,但是提供不同的功能。 Google已开发了gRPC作为远程过程调用(RPC)技术(例如SOAP)的替代方法,但它仍处于起步阶段。它使用Protobuf而不是JSON作为消息格式。另一方面,Facebook开发了GraphQL作为聚合层,以避免随机和频繁的REST调用。 gRPC和GraphQL都已经成功,并且在应用程序中表现良好。到2020年,REST仍将是最重要的API技术,而GraphQL和gRPC将被用作补充技术。
人工智能:Tensorflow 2.0将占主导地位
在深度学习/神经网络领域,Google和Facebook也是主要参与者。 Google推出了TensorFlow,这是一个深度学习框架,它基于流行的深度学习框架Theano。它迅速成为深度学习/神经网络计算的主要算法库。 Google甚至提供了专门设计的GPU(TPU)来加速TensorFlow计算。
Facebook在深度学习领域并不落后,因为它们可能拥有最多的图片和视频集合。 Facebook已经推出了深度学习框架PyTorch,该框架基于另一个流行的深度学习库Torch。这两个框架的工作方式略有不同。 TensorFlow使用静态图进行计算,而PyTorch使用动态图进行计算。使用动态图的优点是它可以在运行时进行自我校正。此外,PyTorch对Python更友好,它是数据科学中使用的主要编程语言。
随着PyTorch变得越来越流行,Google在2019年10月发布了TensorFlow 2.0。该版本使用动态图表和更友好的Python:
资料来源:TensorFlow
2020年,TensorFlow 2和PyTorch将齐头并进。考虑到更大的TensorFlow社区,我预测TensorFlow 2将在2020年成为主导的深度学习库。
数据库:SQL是无与伦比的,但分布式SQL将是圣杯
在NoSQL炒作的时代,许多人嘲笑SQL并指出了它的局限性。许多文章都在解释NoSQL如何更好,并将取代SQL。但是,一旦炒作结束,人们就会很快意识到,如果没有SQL数据库,世界将无法生存。以下是最受欢迎的数据库排名:
数据源:数据库引擎
如上图所示,SQL数据库仍然占据前四名。 SQL数据库之所以占主导地位,是因为它提供了持久的ACID事务保证,这是业务应用程序的最基本要求。 NoSQL数据库提供了水平扩展,但是以ACID事务保证为代价。
互联网巨头正在寻找这样的“主数据库”,即既可以提供ACID交易保证(如SQL数据库)又可以提供水平扩展(如NoSQL数据库)的数据库。当前,有两种可以部分满足此类“主数据库”要求的解决方案:Microsoft的Aurora和Google的Spanner。 Aurora提供了几乎所有的SQL功能,但不提供水平写扩展,而Spanner提供了水平写扩展,但不支持许多SQL功能。
到2020年,这两个数据库预计将更接近“主数据库”的要求,否则有人会提出“分布式SQL”的概念。如果能够实现,他很可能会获得图灵奖。
Data Lake:MinIO将会出现
如前一节所述,现代数据平台非常复杂。企业通常使用OLTP数据库(SQL)支持ACID事务,并使用OLAP数据库(NoSQL)进行数据分析。此外,企业还具有其他类型的数据存储,例如用于搜索(Solr,弹性搜索)或计算(Apache Spark)。企业基于数据湖构建数据平台,即将数据从OLTP数据库复制到数据湖。所有其他类型的数据应用程序(例如OLAP,搜索)都使用数据湖作为其黄金来源。
Hadoop分布式文件系统(HDFS)是事实上的数据湖,直到Amazon推出了对象存储S3。 S3的可伸缩性和廉价迅速使它成为许多公司事实上的数据湖。唯一的问题是,使用S3需要将数据平台紧密绑定到Amazon AWS云平台。尽管Microsoft Azure具有Blob存储并且Google具有类似的对象存储,但是它们与AWS S3不兼容。
一种新的,兼容S3的开源对象存储MinIO可能成为许多公司的救星。借助企业级支持和云原生环境的构建,MinIO提供了独立于云平台的数据湖:
资料来源:MinIO
微软最近在Azure云应用程序商店上发布了MinIO,其口号是:“提供与用于Azure Blob存储服务的Amazon S3 API兼容的数据访问。”如果Google GCP和其他公司也提供MinIO,那么这将是促进多云计算的一大步。
大数据计算:Spark将继续为王
现代企业通常需要对大规模数据集执行计算,这需要分布式批处理操作。 Hadoop Map-Reduce是第一个分布式批处理平台。最近,Apache Spark取代了Hadoop,成为批处理计算之王。 Apache Spark如何提供比Hadoop更好的性能?我以前写过一篇博客文章(https://towardsdatascience.com/programming-language-that-rules-the-data-tensive-big-data-fast-data-frameworks-6cd7d5f754b0),该文章使现代数据平台变得有些深入分析。
Spark专门针对Hadoop Map-Reduce的局限性提出了一种解决方案,也就是说,每次昂贵的操作之后,都必须处理内存中的所有内容,而不是将数据存储在存储中。尽管Spark使用CPU和需要大量内存的JVM进行批处理,但它将在2020年及以后继续主导批处理框架。我希望有人可以使用Rust开发一个更高效的批处理框架,该框架可以替代Spark并节省公司庞大的云服务费用。
大数据流: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,并且用户需要支付高昂的云服务平台费用。
ByteCode(ByteCode):WebAssembly将被广泛采用
我通过接受JavaScript创作者Brandon Eich的采访中学到了WebAssembly。现代JavaScript(在es5之后)是一种出色的编程语言。但是,与其他编程语言一样,它也有局限性。 JavaScript的最大局限性在于它的速度较慢,因为JavaScript引擎需要读取,解析和处理JavaScript文本的“抽象语法树”。 JavaScript的另一个问题是它是单线程的,无法利用现代硬件(例如,多核,GPU)的特性。因此,许多计算密集型应用程序(例如游戏,3D图形)无法在浏览器上运行。
一些公司(由Mozilla领导)已经开发了WebAssembly(浏览器的低级字节码格式),以在Web上运行任何受支持的编程语言。 WebAssembly的MVP版本已经发布。它支持所有接近元编程语言(例如C ++,Rust):
资料来源:WebAssembly
WebAssembly使计算密集型应用程序(例如游戏和Autocad)可以在浏览器中运行。 WebAssembly的目标更大,它希望在浏览器之外运行。由于其Web支持,WebAssembly还可以提供固有的安全性和沙箱。这也意味着WebAssembly可用于以下“浏览器外”方案:
移动设备上的混合本机应用程序。
没有冷启动问题的无服务器计算((云计算))。
不可信代码的服务器端计算(CDN)。
在我的预测中,2020年可能是WebAssembly突破性的一年,许多大公司(包括云服务提供商)和社区都将接受它。
编码:低代码和无代码将获得动力
迅速的数字化和工业4.0革命意味着软件开发人员的供需差距巨大。由于缺乏开发人员,许多人或公司无法实现他们的想法。为了降低进入软件开发的门槛,一些人试图使软件开发工作不编写代码(无代码)或仅编写少量代码(低代码)。这项工作称为LCNC(低码无码),并在2019年取得了一些成功:
来源:无代码(no_code)
这项工作的目标是,只要有一个不错的主意并且不需要任何编码经验,任何人都可以开发软件。
尽管我仍然怀疑在生产中使用LCNC框架的可行性,但这项工作可以为其他工作奠定基础。像亚马逊和谷歌这样的公司可以在此基础上构建可靠而可靠的产品(就像AWS LAMBDA借助Google App Engine蓬勃发展一样)。
值得一提的是,LCNC运动是否会在2020年下半年获得更大的发展动力?
感谢您的阅读!