選Scala還是Go,一個很現實的問題

知乎有一個問答:如果對方是一個 Scala 愛好者,有什麼辦法說服他使用 Go?

有朋友表示,你不被他說服用 Scala 就很不錯了。

也有不少朋友十分有原則:請打錢,謝謝,雙倍工資也可以,不挑。反正只要錢到位,你讓我寫彙編都行。

還有一位 PHP/C 程序員趁機發問,假設你是 Go 的愛好者,我該如何說服你用 PHP?另一位回:殺了我吧,寧死不屈。

直鉤釣魚,又是一場語言之戰,但從這個問題底下的回答來看,Scala 愛好者的心並不是那麼容易動搖。

Scala vs Go

但在比較 Scala 與 Go 時,國外的垂直化產品推薦社區 Slant 卻爲大多數人推薦 Go。

在“首先學習的最佳編程語言是什麼?”這一問題中, Go 排名第 13,Scala 排名第 17。在“什麼是最好的服務器端編程語言”和“後端開發人員學習的最佳編程語言是什麼?”以及“併發編程的最佳語言是什麼”等問題中,Go 的排名都高於 Scala。

程序員們還分別就 Scala 和 Go 的優缺點展開了小範圍的討論,從支持者的氣勢來看,Go 語言無疑是贏家——關於 Scala 的評論數量遠小於 Go 語言。

一些 Scala 的擁護者表示——

  • Scala 支持函數式和麪向對象的編程風格。新玩家可以學習這兩種範式而無需學習新語言,資深玩家可以根據當時最適合他們需求的方式在兩者之間切換。

  • Scala 提供類型推斷,雖然它提供與 Java 類型系統相同的安全性,但允許程序員專注於代碼本身,而不是更新類型註釋。

  • 除了 Java 本身,Scala 在JVM 語言中的熱度算得上是數一數二的。如果你正在做 Android 或類似的 JVM-only 平臺開發,或者既要開箱即用的跨平臺兼容性,又要性能,Scala 是一條可行之路。

  • 它的不可變值使其非常適合處理併發。

  • 它有針對可重用和安全代碼的富有表現力的函數式編程抽象。

Go 語言的優勢也很明顯——簡單,快速,有爸爸。

  • 人們選擇 Go 的一個重要原因是,Goroutines 是運行在 OS 線程上的“輕量級線程”。它們爲併發操作提供了一種簡單的方法——在函數前加上 go 將同時執行它。它利用 Goroutine 之間的通信渠道,防止衝突,並使跨 Goroutine 的同步執行變得毫不費力。還可以在編譯時使用 GOMAXPROCS 變量定義 goroutine 可以運行的最大 OS 線程數。

  • Go 非常快速,其性能與 Java 或 C++ 相似,但比 Python,JS,Ruby 或許多其他動態語言更容易編寫。它簡化了語法,只有被認爲是關鍵的功能纔會添加到語言中,這使得它足夠小,容易記憶,減輕了程序員和編譯器開發人員的負擔。

  • 另外,Go 語言還有一個閃亮的身份,富二代。它出身於 Google,背後站着一堆牛氣哄哄的作者,Facebook、Uber、今日頭條、滴滴等公司都在使用它、研究它,這代表着,有一大堆優秀工程師正在爲它的發展添磚添瓦。

瞧瞧這世道,不僅人要拼爹,語言也得拼爹。

從 Scala 到 Go

如果是你來做選擇,你會選擇選 Scala 還是 Go?

這是一道很現實的問題。國內用 Scala 寫後端的公司並不多,大部分都是用來做數據開發,如果你想找一個不做 Spark 的 Scala 工作,還真挺難……

究其原因,可能有以下幾點:Scala 爲新開發人員帶來了較爲陡峭的學習曲線,那麼團隊新血液的加入註定是一份不小的花銷,所以一般的公司還真有點拿不下Scala。設想一下,假如Scala項目的核心人員離職了……Scala還有一些難點,比如 SBT、IDE 環境、構建緩慢、JAR 文件較大,等等。

這些問題也是令 Scala 採用先驅之一的 Twitter 頭痛的原因,Raffi Krikorian曾任 Twitter 平臺工程副總裁,他負責 Twitter 的後端基礎架構,也是負責在推特上引入 Scala 的人之一。當他被問到如果必須再次選擇是否還會選擇 Scala 的問題時,他的答案是,不確定。

因爲 Scala 的諸多痛點,曾把 Scala 當成技術棧重要組成部分的網絡安全服務提供商 CrowdStrike,在工程師團隊由早期的 5 人擴大到 200 多人的時候,決定遷移到 Go 語言技術棧。在引入 Go 之後,他們發現,原來 Scala 可能會遇到的問題,比如構建速度、SBT 等,對 Go 語言來說,都不是問題。Code Base 好維護了,代碼容易看懂了,新人可以快速上崗了,工程師可以跨項目交流了。CrowdStrike 的雲工程高級總監 Jim Plush 不由感嘆,如果是小團隊,使用 Scala 會非常高效,但當團隊規模擴大到 50 人以上,你就會面臨很大的挑戰。

2017 年,Vista Group International Ltd 旗下的電影行業營銷數據分析和活動管理解決方案公司 Movio 曾發佈一篇文章,Making The Move From Scala To Go, And Why We’re Not Going Back,用中文說就是從 Scala 遷移到 Go,永不回頭。這篇文章發佈後受到了很多關注,一些讀者認爲這是對 Scala 的 diss。面對諸多質疑,Movio 解釋了他們從 Scala 遷移到 Go 的原因,列舉了 Scala 的部分問題和 Go 的優點,並表示,雖然他們選擇從 Scala 遷移到 Go,並逐步將 Scala 代碼庫的一部分重寫爲 Go,但 Scala 仍然是 Movio 的一些小隊的主要語言,也就是說,在 Movio ,Scala 和 Go 共存。

文章的最後有一句話,技術棧需要根據自身情況去選擇,所以他們選擇了 Go。確實如此,雖然語言愛好者會爲自己使用的語言進行辯護,但其實大家都知道,每一種語言都有自己的適用場景,想用一種語言幹完所有的事情絕無可能。所以現在公司很多都是多語言公司,他們會把對的語言用在對的產品上,就像 Go 語言適合做網絡併發的服務,那它就會被用於推送監控等項目,而 Scala 適合大型工程項目,寫起來很爽,可以替代 Java 做應用級開發。

編程語言是程序員的第一工具,啓動一個新項目,少不了編程語言的選型問題。QCon 上海 2019 設置“編程語言”專題,和你從冷門但有趣的Pony、不那麼主流但實用的Scala、JavaScript 的新特性,聊到老而彌堅的Java、冉冉升起的新星Go,你會發現自己從來沒有真正認識過SQL,還將知道爲何使用 .NET 的公司很少 996,點此瞭解詳情。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章