2020年软件开发趋势预测和分析内容(下篇)
adinnet/2019-12-25 10:55/洞察
预测未来是困难的。预测软件开发的未来更加具风险和挑战性。虽然我没有任何水晶球,但是我可以运用我的“人类学习”能力对2020年的软件发展趋势作一番预测。
在本文中,将对软件开发最重要的技术堆栈:从云计算/服务,到字节码(ByteCode),做出我的预测。包括:云计算/云服务、容器技术、编程语言、数据库、深度学习、软件架构、Web开发技术、应用程序、批处理、流处理、数据湖、字节码(ByteCode)、无代码(No-code)。
十一、应用程序(APP)开发:原生应用受企业青睐
在移动应用程序开发方面,围绕混合应用程序(Hybrid App)开发的炒作有所放缓。混合应用程序开发提供了更快的开发速度,因为你只需要一个团队而不是两个团队。但是原生应用程序提供了更好的用户体验和更好的性能。同样在混合应用程序开发中,应用程序总是需要经过调整才能获得高级功能。对于企业来说,原生应用程序开发仍然是首选解决方案,这一趋势将在2020年继续。
尽管Facebook正在努力改进React Native,谷歌也在大力推动自己的混合应用开发平台Flutter,但它们主要适用于Prototype(原型)、POC(概念验证)、MVP(最小可用产品)或特色轻应用的开发,而原生应用程序的开发将在2020年继续占据主导地位。
原生应用程序开发中一个有趣的事实是,谷歌正在推广Kotlin,而苹果正在推广Swift作为主要编程语言,这是因为这两种开发语言具有对开发人员友好的现代特性。谷歌最近重申了对Kotlin的支持,这对Kotlin的采用者来说是个好消息:

▲ 资料来源:Phoronix
十二、混合应用程序开发: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年继续在该领域占据主导地位。
十三、API:Rest风平浪静
REST就像API领域中的800磅的大猩猩。它是事实上的基于API的服务间通信中最广泛使用的技术。在这个领域还有其他一些选择。如果你仔细阅读了这篇文章,你可能已经猜到了:谷歌的gRPC和Facebook的GraphQL。
这两种技术都有过人之处,但是提供了不同的功能。谷歌已经开发了gRPC,作为远程过程调用(RPC)技术(例如SOAP)的一个替代品,但是它还处于初级阶段。它使用Protobuf而不是JSON作为消息格式。另一方面,Facebook开发了GraphQL作为一个聚合层,以避免随意的和频繁的REST调用。gRPC和GraphQL都取得了成功,并在应用的地方表现出色。2020年,REST仍然将是最主要的API技术,而GraphQL和gRPC将作为一种补充技术。
十四、人工智能: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年将会成为占主导地位的深度学习库。
十五、数据库: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”的构想。如果真能实现的话,那他很可能会获得图灵奖。
十六、数据湖: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,那么这将是促进多云计算的一大步。
十七、大数据计算:Spark将继续称王
现代企业通常需要在大规模的数据集上进行计算,这就需要分布式的批量作业。Hadoop Map-Reduce是第一个分布式批处理平台。最近,Apache Spark取代Hadoop成为批量计算之王。Apache Spark如何提供比Hadoop更好的性能呢?
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):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可以用于以下“浏览器外”的场景:
(1)移动设备上的混合原生应用程序。
(2)无冷启动问题的无服务器计算((云计算)。
(3)不可信代码的服务器端计算(CDN)。
在我的预测中,2020年对WebAssembly来说可能是一个突破性的一年,许多大公司(包括云服务提供商)和社区都将接受它。
二十、编码:低代码(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年获得更大的动力?若您需要软件开发服务,欢迎您咨询上海艾艺软件开发公司客服:17702199087(同微信),发送您的需求,即可免费获取一站式软件开发解决方案哦 ~感觉拿起手机联系艾艺客服吧!
- 最新文章
- 1.智慧教育:智慧教育业务分析
- 2.智慧社区建设的背景、现状及发展前景分析
- 3.2020年中国线上教育行业市场现状及发展前景分析
- 4.未来软件开发的技术趋势分析
- 5.5G看移动互联网 | 赋能智慧医疗,5G大有作为!

