其他
2020 年软件开发趋势预测!
IT服务圈儿
有温度、有态度的IT自媒体平台
那么2020年软件发展又会呈现出怎样的趋势呢?
译者 | 苏本如,责编 | 郭芮
出品 | CSDN(ID:CSDNnews)以下为译文:预测未来是困难的。预测软件开发的未来更加具风险和挑战性。虽然我没有任何水晶球,但是我可以运用我的“人类学习”能力对2020年的软件发展趋势作一番预测。在本文中,我将对软件开发最重要的技术堆栈:从云计算/服务,到字节码(ByteCode),做出我的预测。
云计算/云服务、容器技术、编程语言、数据库、深度学习、软件架构、Web开发技术、应用程序、批处理、流处理、数据湖、字节码(ByteCode)、无代码(No-code)。
01
基础设施:条条道路通向云(计算)02
云服务: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年将有更多的收购和合并。此外,许多初创企业也将带来新的创意和创新(例如“多云服务”这项创新)。从云厂商的殊死搏斗中,只有更低的价格和更多的创新才能让企业从中获益。03
容器化: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在其鼎盛时期未能实现货币化,几年后,当这个行业已经离开时,他试图赚钱,但是为时已晚。这个例子又一次证明:在现代科技界,时间就是一切。04
软件架构:微服务将成为主流在软件架构范式中,向微服务架构的转变在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),可能它对回答这个问题有所帮助。05
编程(普通的):Python将继续崛起无论是机器学习、数据分析、数据处理、Web开发、企业软件开发,还是拍摄黑洞:Python无处不在。此外,流行编程语言排名网站TIOBE已经将Python列为仅次于Java和C的第三大流行编程语言:
资料来源: TIOBE
更有趣的是,Python在2019年的受欢迎程度翻了一番(从5%增至10%)。我知道TIOBE的统计有很多局限性和缺陷,但它是现在最被广泛接受的编程语言排名。Python的崛起将在2020年继续下去,它将缩小与Java和C之间的差距。另一种无所不在的编程语言JavaScript正面临下降趋势(JavaScript框架疲劳疹?)。为什么Python会出现这样的热潮?因为它降低了编程领域的门槛,同时它拥有一个优秀的,深受数据科学家和新一代开发人员喜爱的社区。06
编程(企业级的):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仍将继续统治世界。07
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社区。08
编程:Rust,Swift,Kotlin,TypeScript将取得突破
资料来源: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年会站出来公开宣布他们的支持。09
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稳如磐石
资料来源:npm trends
最近,Facebook宣布了React-Fiber项目,将彻底重写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)。
20
编码:低代码(Low-Code)、无代码(No-Code)将获得动力快速的数字化和工业4.0革命意味着软件开发人员的供需缺口巨大。由于缺乏开发人员,许多人或公司无法实现他们的想法。为了降低进入软件开发的门槛,有人试图让软件开发工作变得不需要编写代码(No-Code)或只需要编写少量代码(Low-Code)。这项工作被称为LCNC(Low-Code No-Code),并且在2019年取得了一些成功:*版权声明:转载文章和图片均来自公开网络,版权归作者本人所有,推送文章除非无法确认,我们都会注明作者和来源。如果出处有误或侵犯到原作者权益,请与我们联系删除或授权事宜。