20個2020年軟件開發趨勢預測

​基礎設施:條條道路通雲端

對於雲廠商來講,2019 年是碩果累累的一年。不只初創公司在使用雲計算,那些很注重安全的「保守派」公司(如政府機構、醫療保健機構、銀行、保險公司,甚至是美國五角大樓)也在遷移到雲端。這種趨勢在 2020 年將會繼續,大大小小的公司都將(或者至少有計劃)遷移到雲端。Gartner 公司最近發佈了一個數字:前端

若是你是一個還在考慮要不要遷移到雲端的決策者,不妨從新審視一下你的策略。若是你是一個獨立開發者,而且還沒使用過雲基礎設施,那麼徹底能夠在 2020 年嘗試一下。不少大型的雲廠商(如亞馬遜、微軟、谷歌)都提供了免費的體驗機會。谷歌在這方面作得特別大方,它提供了價值 300 美圓的一年免費服務。react

策劃注:阿里、騰訊、華爲等國內雲廠商一樣有免費雲服務試用產品。算法

雲平臺:亞馬遜領頭,其餘跟上

做爲第一大雲廠商,亞馬遜在 2019 年可謂風生水起。憑藉其豐富的產品組合,亞馬遜將把它的優點延續到 2020 年。Canalys 發佈的 2019 年第三季度報告指出,大型雲廠商(AWS、Azure、GCP)佔據 56% 的市場份額,其中 AWS 獨享 32.6%。數據庫

其餘雲廠商也在努力縮短與 AWS 之間的差距。微軟把主要目標轉向了大型企業。最近,微軟戰勝了亞馬遜,從美國五角大樓拿到了一個 100 億美圓的大單子。這個單子將提高 Azure 的聲譽,同時削弱 AWS 的士氣。編程

谷歌一直在推進 CNCF,實現雲計算運維的標準化。谷歌的長期目標是讓雲遷移變得更容易,方便企業從 AWS 遷移到 GCP。IBM 以前斥資 360 億美圓收購了 RedHat,也想要在雲計算市場佔有一席之地。後端

在亞太地區,阿里雲市場規模超過了 AWS、Azure 的總和,全球排名第三。中國國內騰訊雲等企業的增加勢頭也十分迅猛。react-native

2020 年將出現更多的併購。固然,不少初創公司將會帶來新的想法和創新,例如多雲服務。由於競爭激烈,這些公司只能從降價和推出更多的創新產品來獲取利潤。瀏覽器

容器化:Kubernetes 將會更酷

在容器編排領域,雖然一度出現了「三足鼎立」(Kubernetes、Docker Swarm 和 Mesos),但 Kubernetes 最終脫穎而出,成爲絕對的贏家。雲是一個分佈式系統,而 Kubernetes 是它的 OS(分佈式的 Linux)。2019 年北美 KubeCon+CloudNativeCon 大會的參會者達到了 12000 名,比 2018 年增加了 50%。如下是過去 4 年參會人數的增加狀況。安全

在 2020 年,Kubernetes 不只不會後退,只會變得愈來愈強,你徹底能夠把賭注壓在 Kubernetes 身上。另外值得一提的是,Migrantis 最近收購了 Docker Enterprise,不過收購數額不詳。服務器

幾年前,人們張口閉口說的都是 Docker,而如今換成了 Kubernetes。Docker 在它的全盛時期未能盈利,反而在優點漸退幾年以後才嘗試變現。這再次說明,在現代技術世界,時機就是一切。

軟件架構:微服務將成爲主流

谷歌趨勢代表,微服務架構範式在 2019 年持續增加了一全年。

隨着軟件行業總體逐步遷移到雲端,微服務也將成爲占主導地位的架構範式。微服務架構崛起的一個主要緣由是它與雲原生完美契合,能夠實現快速的軟件開發。我在以前的一篇博文中解釋了微服務架構的基本原則及其優點和劣勢。

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 語言。

更有意思的是,在 2019 年,Python 的流行度翻了一番(從 5% 到 10%)。

Python 的崛起將在 2020 年延續,並縮短與 Java 和 C 語言之間的差距。另外一門無所不在的編程語言 JavaScript 正面臨下行的風險。爲何 Python 的勢頭會如此強勁?由於它的入手門檻低,有一個優秀的社區在支持,並受到數據科學家和新生代開發者的喜好。

編程語言(企業方面):Java 將佔主導

以前的 TIOBE 網站截圖顯示,Java 仍然是一門占主導地位的編程語言,並將在 2020 年繼續保持這種地位。JVM 是 Java 的基石,其餘編程語言(如 Kotlin、Scala、Clojure、Groovy)也將 JVM 做爲運行時。最近,Oracle 修改了 JVM 的許可協議。

新的許可協議意味着使用 Java、Kotlin、Scala 或其餘 JVM 編程語言的公司須要向 Oracle 支付大額費用。所幸的是,OpenJDK 讓 JVM 繼續免費。另外,還有其餘一些公司爲 JVM 提供企業支持。

由於體積和速度方面的問題,基於 JVM 的編程語言並不適合用在今天的無服務器環境中。Oracle 正在推進 GraalVM 計劃,旨在讓 Java 變得更加敏捷和快速,讓它更適合用在無服務器環境中。由於除了 Java,沒有其餘編程語言能夠提供企業級的穩定性和可靠性,因此 Java 將在 2020 年繼續占主導地位。

企業版 Java:Spring 繼續發力

曾幾什麼時候,在企業開發領域,Spring 和 JavaEE 之間存在着白熱化的競爭。但由於 Oracle 在 JavaEE 方面沒有做爲,在競爭中慘敗,這致使了「MicroProfile」計劃的造成,並最終促成了 JakartaEE。

雖然全部的政策和活動都是圍繞 JavaEE 展開,但 Spring 事實上已經贏得了這場企業 JVM 之爭。2020 年,Spring 將成爲 JVM 生態系統的頭牌。

有兩個正在進展中的項目,它們旨在減少 Java 的體積,讓它更適合用在無服務器環境中。

其中一個是 Micronaut(https://micronaut.io/)。

另外一個是 Quarkus(https://quarkus.io/)。

這兩個項目都使用了 GraalVM,它們在 2020 年將會獲得 Java 社區更多的關注。

編程語言:後起之秀的突破

2000 年代,編程語言的發展出現了停滯。大多數人認爲沒有必要再去開發新的編程語言,Java、C 語言、C++、JavaScript 和 Python 已經能夠知足全部的需求。可是,谷歌的 Go 語言爲新編程語言大門打開了一扇大門。在過去十年出現了不少有趣的編程語言,好比 Rust、Swift、Kotlin、TypeScript。致使這種狀況的一個主要緣由是已有的編程語言沒法充分利用硬件優點(例如多核、更快的網絡、雲)。另外一個緣由是現代編程語言更加關注開發者經濟,即實現更快速更容易的開發。在 Stackoverflow 提供的一份開發者報告中,排名靠前的現代編程語言以下所示(Rust 連續 4 年名列第一)。

在以前的一篇博文中,我深刻探討了現代編程語言,對比 Rust 和 Go 語言,並說明了爲何如今是採用這些語言的好時機。

https://towardsdatascience.com/back-to-the-metal-top-3-programming-language-to-develop-big-data-frameworks-in-2019-69a44a36a842

最近,微軟宣佈他們在探索使用 Rust 來開發更安全的軟件。

亞馬遜最近也宣佈要贊助 Rust。

谷歌宣佈將 Kotlin 做爲 Android 官方開發語言,因此,在 JVM 領域,Kotlin 成了 Java 的主要競爭對手。

Angular 使用 TypeScript 代替 JavaScript,將其做爲主要的編程語言,其餘 JavaScript 框架(如 React 和 Vue)也開始爲 TypeScript 提供更多的支持。

這種趨勢將在 2020 年延續下去,不少巨頭公司將會深刻了解新一代編程語言(如 Rust、Swift、TypeScript、Kotlin),它們會站出來公開表示支持。

Web:JavaScript 繼續占主導地位

曾幾什麼時候,JavaScript 並不被認爲是一門強大的編程語言。在當時,前端內容主要經過後端框架在服務器端進行渲染。2014 年,AngularJS 的出現改變了這種局面。從那個時候開始,更多的 JavaScript 框架開始涌現(Angular 2+、React、Vue、Meteor),JavaScript 已然成爲主流的 Web 開發語言。隨着 JavaScript 框架不斷創新以及微服務架構的崛起,JavaScript 框架在 2020 年將繼續主導前端開發。

JavaScript 框架:React 閃耀

雖然 React 是在 AngularJS 以後出現的,但在過去十年對 Web 開發產生了巨大的影響,這也讓 Facebook 在與 Google+ 的競爭中打了一場勝戰。React 爲前端開發帶來了一些新的想法,好比事件溯源、虛擬 DOM、單向數據綁定、基於組件的開發,等等。它對開發者社區產生了重大影響,以致於谷歌放棄了 AngularJS,並借鑑 React 的想法推出了完全重寫的 Angular 2+。React 是目前爲止最爲流行的 JavaScript 框架,下圖顯示了相關的 NPM 下載統計信息。

爲了得到更好的併發和用戶體驗,Facebook 宣佈徹底重寫 React 的核心算法,推出了 React-Fiber 項目。

2020 年,React 仍然是你開發新項目的首選 Web 框架。其餘框架(如 Angular/Angular 2+ 或 Vue)呢?Angular 仍然是一個不錯的 Web 開發框架,特別適合企業開發。我敢確定谷歌在將來幾年會在 Angular 上加大投入。Vue 是另外一個很是流行的 Web 框架,由中國的巨頭公司阿里巴巴提供支持。若是你已經在使用 Angular 或 Vue,就不必再遷移到 React 了。

App 開發:原生應用

在移動 App 開發方面,有關混合應用開發的炒做有所消停。混合開發提供了更快的開發速度,由於只須要一個開發團隊,而不是多個。但原生應用提供了更好的用戶體驗和性能。另外,混合應用須要通過調整才能使用一些高級特性。對於企業來講,原生應用仍然是首選的解決方案,這種趨勢將在 2020 年延續。Airbnb 在一篇博文中很是詳細地說明了爲何他們要放棄混合應用開發平臺 React Native。

https://medium.com/airbnb-engineering/sunsetting-react-native-1868ba28e30a

儘管 Facebook 嘗試改進 React Native,谷歌也很是努力地推進混合 App 開發平臺 Flutter,但它們仍然只適合用於原型、POC、MVP 或輕量級應用的開發。因此,原生應用在 2020 年仍將繼續占主導地位。

在原生應用開發方面,谷歌和蘋果分別將 Kotlin 和 Swift 做爲各自平臺主要的編程語言。谷歌最近再次重申了對 Kotlin 的支持,這對於 Kotlin 用戶來講無疑是個好消息。

混合應用開發:React Native

在不少狀況下,混合應用是個不錯的選擇。在這方面也有不少選擇:Xamarin、Inoic、React Native 和 Flutter。Facebook 基於成熟的 React 框架推出了 React Native。就像 React 在 Web 框架領域佔據主導地位同樣,React Native 在混合應用領域也佔據着主導地位,以下圖所示。

React Native 和 React 有共同的基因,都提供了高度的代碼重用性以及「一次開發,處處運行」的能力。React Native 的另外一個優點是 Facebook 自己也用它來開發移動應用。谷歌在這個領域起步較晚,但在去年,谷歌的混合應用開發框架 Flutter 得到了很多關注。Flutter 提供了更好的性能,但須要使用另外一門不是那麼流行的編程語言 Dart。React Native 在 2020 年將繼續占主導地位。

API:REST 將佔主導地位

REST 是 API 領域事實上的標準,被普遍用在基於 API 的服務間通訊上。固然,除了 REST,咱們還有其餘選擇,好比來自谷歌的 gRPC 和來自 Facebook 的 GraphQL。

它們提供了不一樣的能力。谷歌開發的 gRPC 做爲遠程過程調用(如 SOAP)的化身,使用 Protobuf 代替 JSON 做爲消息格式。Facebook 開發的 GraphQL 做爲一個集成層,避免頻繁的 REST 調用。gRPC 和 GraphQL 都在各自的領域取得了成功。2020 年,REST 仍然是占主導地位的 API 技術,而 GraphQL 和 gRPC 將做爲補充技術。

人工智能:Tensorflow 2.0 將佔主導地位

谷歌和 Facebook 也是深度學習 / 神經網絡領域的主要玩家。谷歌基於深度學習框架 Theano 推出了 TensorFlow,它很快就成爲深度學習 / 神經網絡的主要開發庫。谷歌還推出了特別設計的 GPU(TPU)來加速 TensorFlow 的計算。

Facebook 在深度學習領域也不甘落後,他們擁有世界上最大的圖像和視頻數據集合。Facebook 基於另外一個深度學習庫 Torch 推出了深度學習庫 PyTorch。TensorFlow 和 PyTorch 之間有一些區別,前者使用的是靜態圖進行計算,而 PyTorch 使用的是動態圖。使用動態圖的好處是能夠在運行時糾正本身。另外,PyTorch 對 Python 支持更好,而 Python 是數據科學領域的一門主要編程語言。

隨着 PyTorch 變得愈來愈流行,谷歌也趕忙在 2019 年 10 月推出了 TensorFlow 2.0,也使用了動態圖,對 Python 的支持也更好。

2020 年,TensorFlow 2.0 和 PyTorch 將齊頭並進。考慮到 TensorFlow 擁有更大的社區,我估計 TensorFlow 2.0 將成爲占主導地位的深度學習庫。

數據庫:SQL是王者,分佈式SQL是王后

在炒做 NoSQL 的日子裏,人們嘲笑 SQL,還指出了 SQL 的種種不足。有不少文章說 NoSQL 有多麼的好,並將要取代 SQL。但等到炒做的潮水褪去,人們很快就意識到,咱們的世界不能沒有 SQL。如下是最流行的數據庫的排名。

能夠看到,SQL 數據庫佔據了前四名。SQL 之因此占主導地位,是由於它提供了 ACID 事務保證,而 ACID 是業務系統最潛在的需求。NoSQL 數據庫提供了橫向伸縮能力,但代價是不提供 ACID 保證。

互聯網公司一直在尋找「大師級數據庫」,也就是既能提供 ACID 保證又能像 NoSQL 那樣可橫向伸縮的數據庫。目前有兩個解決方案能夠部分知足對「大師級數據庫」的要求,一個是亞馬遜的 Aurora,一個是谷歌的 Spanner。Aurora 提供了幾乎全部的 SQL 功能,但不支持橫向寫伸縮,而 Spanner 提供了橫向寫伸縮能力,但對 SQL 支持得很差。

2020 年,希望這兩個數據庫可以越走越近,或者有人會帶來一個「分佈式 SQL」數據庫。若是真有人作到了,那必定要給他頒發圖靈獎。

數據湖:MinIO 將要崛起

現代數據平臺很是的複雜。企業通常都會有支持 ACID 事務的 OLTP 數據庫(SQL),也會有用於數據分析的 OLAP 數據庫(NoSQL)。除此以外,它們還有其餘各類數據存儲系統,好比用於搜索的 Solr、ElasticSearch,用於計算的 Spark。企業基於數據庫構建本身的數據平臺,將 OLTP 數據庫的數據拷貝到數據湖中。各類類型的數據應用程序(好比 OLAP、搜索)將數據湖做爲它們的事實來源。

HDFS 本來是事實上的數據湖,直到亞馬遜推出了對象存儲 S3。S3 可伸縮,價格便宜,很快就成爲不少公司事實上的數據湖。使用 S3 惟一的問題是數據平臺被牢牢地綁定在亞馬遜的 AWS 雲平臺上。雖然微軟 Azure 推出了 Blob Storage,谷歌也有相似的對象存儲,但都不是 S3 的對手。

對於不少公司來講,MinIO 或許是它們的救星。MinIO 是一個開源的對象存儲,與 S3 兼容,提供了企業級的支持,並專門爲雲原生環境而構建,提供了與雲無關的數據湖。

微軟在 Azure Marketplace 是這麼描述 MinIO 的:「爲 Azure Blog Storage 服務提供與亞馬遜 S3 API 兼容的數據訪問」。若是谷歌 GCP 和其餘雲廠商也提供 MinIO,那麼咱們將會向多雲邁出一大步。

大數據批處理:Spark 將繼續閃耀

現現在,企業一般須要基於大規模數據執行計算,因此須要分佈式的批處理做業。Hadoop 的 Map-Reduce 是第一個分佈式批處理平臺,後來 Spark 取代了 Hadoop 的地位,成爲真正的批處理之王。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,併爲企業省下大量的雲資源費用。

大數據流式處理:Flink 是將來

幾年前,實現實時的流式處理幾乎是不可能的事情。一些微批次處理框架(好比 Spark Streaming)能夠提供「幾近」實時的流式處理能力。不過,Flink 改變了這一情況,它提供了實時的流式處理能力。

2019 年以前,Flink 未能獲得足夠的關注,由於它沒法撼動 Spark。直到 2019 年 1 月份,中國巨頭公司阿里巴巴收購了 Data Artisan(Flink 背後的公司)。

在 2020 年,企業若是想要進行實時流式處理,Flink 應該是不二之選。不過,跟 Spark 同樣,Flink 一樣重度依賴 CPU 和 JVM,而且須要使用大量的雲資源。

字節碼:WebAssembly將被普遍採用

我從 JavaScript 做者 Brandon Eich 的一次訪談中知道了 WebAssembly 這個東西。現代 JavaScript(ES5 以後的版本)是一門優秀的編程語言,但與其餘編程語言同樣,都有本身的侷限性。最大的侷限性是 JavaScript 引擎在執行 JavaScript 時須要讀取、解析和處理「抽象語法樹」。另外一個問題是 JavaScript 的單線程模型沒法充分利用現代硬件(如多核 CPU 或 GPU)。正由於這些緣由,不少計算密集型的應用程序(如遊戲、3D 圖像)沒法運行在瀏覽器中。

一些公司(由 Mozilla 帶領)開發了 WebAssembly,一種底層字節碼格式,讓任何一門編程語言均可以在瀏覽器中運行。目前發佈的 WebAssembly 版本能夠支持 C++、Rust 等。

WebAssembly 讓計算密集型應用程序(好比遊戲和 AutoCAD)能夠在瀏覽器中運行。不過,WebAssembly 的目標不只限於此,它還要讓應用程序能夠在瀏覽器以外運行。WebAssembly 能夠被用在如下這些「瀏覽器外」的場景中。

  • 移動設備上的混合原生應用。

  • 沒有冷啓動問題的無服務器計算。

  • 在服務器端執行不受信任的代碼。
    我預測,2020 年將是 WebAssembly 取得突破的一年,不少巨頭公司(包括雲廠商)和社區將會擁抱 WebAssembly。

代碼:低代碼 / 無代碼將更進一步

快速的數字化和工業 4.0 革命意味着軟件開發者的供需缺口巨大。因爲缺少開發人員,不少企業沒法實現它們的想法。爲了下降進入軟件開發的門檻,能夠嘗試無代碼(No Code)或低代碼(Low Code)軟件開發,也就是所謂的 LCNC(Low-Code No-Code)。它已經在 2019 年取得了一些成功。

LCNC 的目標是讓沒有編程經驗的人也能開發軟件,只要他們想要實現本身的想法。

雖然我對在正式環境中使用 LCNC 框架仍然心存疑慮,但它爲其餘公司奠基了良好的基礎,像亞馬遜和谷歌這樣的公司能夠基於這個基礎構建出有用的產品,就像 AWS Lambda 的蓬勃發展是以谷歌 App Engine 爲基礎。

2020 年,LCNC 將會得到更多關注

相關文章
相關標籤/搜索