Scala:在適合的領域做王者就夠了,主流不主流沒那麼重要

Scala是一門現代的多範式編程語言,設計初衷是要集成面向對象編程和函數式編程的各種特性。Scala允許用戶使用命令和函數範式編寫代碼,它運行在JVM之上,可以直接調用Java類庫。對於Scala在國內的發展,有人非常樂觀,也有人異常悲觀。樂觀的人認爲Scala可以與Java並存,並逐漸擴大自己的影響範圍;悲觀的人認爲Scala前路黯淡,根本無法取代Java,而不取代Java就是失敗。對於圍繞Scala的爭論,InfoQ記者近日採訪了字節跳動大數據工程師、Scala 程序員王石衝以及另外幾位來自Scala社區的專家,從社區發展、生產實踐等多個維度,幾位專家給出了他們對Scala的觀點和判斷。其中有一個觀點給記者留下深刻印象:Scala爲什麼非要成爲主流呢?它在自己適合的領域做王者就夠了,主流不主流其實並不是那麼重要。

以下是此次訪談的全部內容,如果你對Scala有更進一步的興趣,王石衝將在即將召開的QCon 全球軟件開發大會(上海站)2019上,帶來《Scala 和反應式架構》的演講,更多精彩內容可以點擊這裏進行了解。

InfoQ:不久前InfoQ 英文站發佈2019年Java趨勢報告,把 Scala 歸在技術採用生命週期的第四階段——晚期大衆階段,對於Scala在國內的發展,您認爲應被歸爲哪個階段、爲什麼

王石衝:在我看來,Scala在中國的發展比較符合早期大衆的市場定義。

從社區發展來看,Scala在中國的主流應用框架只有三個:Play、Akka 和 Spark,其它非主流的應用大部分都沒有被發掘出來。相對於歐美來說,在中國沒有一個明確的Scala社區做資料交換,這一點我們跟歐美還是有差距。應該說國內的Scala愛好者的溝通和交流渠道還是比較散亂的,大多集中在論壇、QQ羣或者微信羣裏,並從這些渠道獲得一些正面或負面的反饋。從這個角度來說,Scala在中國符合早期大衆的市場定義。

從生產實踐來看,無論是老公司的新部門,還是新成立的公司,如果涉及到大數據、廣告、流媒體、遊戲、銀行以及一些領域模型比較複雜的場景(包括現在火熱的 AI 和區塊鏈),大多數企業還是會嘗試調研一下 Scala 生態,畢竟 Scala 生態在這方面具有一定的優勢,並且也有成功案例。然而這其間也有一個不容忽視的事實:少數企業是在嘗試過 Scala 後,轉而放棄了 Scala。箇中原因,正如 Charles Humble 所說:因爲各種問題逐漸棄用它。這類文章我們也見得不少了,而這類嘗試過 Scala 後又放棄的公司在國內外都有。

所以從這個角度來看,似乎把Scala歸爲晚期大衆階段也說得過去。不過有的時候這也是一種倖存者偏差:採用並一直停留在Scala的公司並沒有大規模地宣傳Scala的使用案例。小公司的聲音沒有影響力,而大公司則忙於業務,並沒有精力做太多的宣傳。譬如在字節跳動,我也是來了以後才發現有這麼多項目是採用Scala進行構建和服務支撐的。

InfoQ:您認爲目前 Scala 在國內的發展和採用情況如何?

王石衝:其實國內的廣告、電商、數據分析、流媒體、銀行等行業,都有采用Scala(及生態圈)作爲基建語言和框架,但因爲缺乏一個廣而告知並且長期堅持的傳播渠道,對於Scala究竟在國內發展和採用情況如何,誰也沒有明確的數據。

Scala 從誕生之初就缺乏成爲主流語言的特點,相比現在很多的流行編程語言,Scala 知道什麼是好,並且盡力通過語言特性來讓程序員將好的一面全力發揮。而這就對程序員的水平提出了一定要求。Martin Odersky(Scala 之父) 是編程語言理論大神,他通過完善的類型系統以及函數式的支持,使得反應式應用很輕鬆就能基於Scala進行構建。所以Scala社區的大多數框架要麼是無副作用的純函數式(scalaz、cats),要麼則是高性能、全異步框架(Akka、Play、Lagom)。而說實話,普通水平的程序員可能對Java 8的lamda表達式、對異步都有所牴觸,更遑論Scala這種通過特殊模式將函數和各種副作用玩弄於股掌之間的語言。

所以這就造成了一種詭異的形勢:喜歡Scala的程序員愛不釋手;玩不來的則談之色變。實際上Scala語言很簡單,再不濟也可以把它當成一門可以少寫很多字符的Better Java來用。但是因爲社區整體支撐都是按照高階模式來進行的,所以不懂這些模式,就沒法發揮Scala生態的巨大力量,因而就造成了在應用的過程中,一道無形的門檻橫在那裏。但是如果團隊一旦邁過這道門檻,就是肉眼可見的大優勢。

在我看來,Scala 無論是在國內還是在國外,都稱不上是主流語言。但是有部分團隊水平很高的公司,還是深度應用Scala來做事情。成名的例子就有Twitter、LinkedIn、Verizon等。金融行業則有摩根士丹利、渣打等(但是他們作爲悶聲發大財的典型,很少對外宣傳自己的技術選型)。而很多硅谷的初創團隊早期爲了快速開發,也是採用的Scala。

在國內,除了小米、阿里和騰訊的部分團隊以及類似於GrowingIO、水滴這樣的初創公司和一些廣告公司外,大部分開發者都是應用Scala來做Spark開發。因爲沒有典型的、具有號召力的大公司主導,所以Scala 在社區方面做得也一般。國內社區人員的結構比例沒有形成一個熱門社區的"金字塔"特點。沒有足夠多的基礎使用者,只有寥寥幾個高手和有限數量的初中級選手,撐不起一個熱鬧的社區,也撐不起一個主流的語言。更神奇的事情是,Scala和Spark可能還不是同一個社區。

InfoQ:對 Scala 在國內的發展趨勢以及所遇到的挑戰,請您做下分析和點評。

王石衝:我認爲 Scala 在可預見的未來都會是小衆:有一少部分人非常喜愛它;有一少部分團隊或公司在使用它;大部分人最多隻是聽說過它而已。

造成以上情況的原因有以下幾點:

1)Scala 生態一直在持續完善,但它的門檻並沒有降低,相反可能還提高了。一個普通的初學者,如果只是獨立自學而不是在一個有效率的 Scala 團隊裏,基本上很難真正進入 Scala 的世界。

2)Scala本身的一些設計理念並沒有被大衆所接受(比如隱式轉換、宏、協變逆變);Scala的一些黑科技甚至成爲了一些類庫作者的炫技資本;此外,還有被國內程序員詬病最深的sbt的下載依賴包的速度(1.3.0之後會有所改善)和難度問題,這些都是Scala推廣的幾座大山。

3)Scala 在國內,特別缺乏有份量公司的強力支持。它的號召力不強,大公司較少應用且少推廣,小公司則無法產生足夠的影響力。

4)另外一個原因,正如上文所說,國內 Scala 社區的核心成員有點過於理智,不太像 Go、Kotlin 那樣一直有狂熱的支持者在力推。他們總是安安靜靜的,不太喜歡爭論,沒有足夠熱情及精力去大力推廣Scala 。國內 Scala 社區基本上還是資深的專家們在撐着,新鮮血液太少了。

InfoQ:如果Scala在國內的發展形勢如此嚴峻,那麼Scala在未來還有機會嗎?

王石衝:其實多年 Scala 使用下來,我們大可放棄把 Scala 推向主流的這個想法。我們應該認清和接受 Scala 的定位:在大公司內部,它用於開發某個核心組件或基礎設置,由少數人蔘與並把控質量;在新興的特定垂直領域的小公司,利用 Scala 的優點與其生態提供的工具,打造解決特定問題的工具和服務,這可能纔是 Scala 最好的歸宿。

這點和 Erlang 一樣,在自己適合的領域做王者就可以了,主流不主流其實並不是那麼重要。

當然認清現實並不意味着Scala 就沒有發展機會了,它在自己的領域裏邊,還是擁有比較好的發展前景的,主要有以下幾點:

1)Scala 的生態一直在堅定地、卓有成效地完善着,這會極大加大 Scala 作爲後端通用語言的競爭力。

2)國內越來越多的人蔘與到 Scala 和它的生態建設裏去了。

3) 國內還是有一些中小型的團隊在 Scala 實踐上突破了“大數據專用語言”的限制,在整體的應用上擁有不少成功案例。

4)Akka 生態系統的影響力已經超出了 Scala 的範疇,可能會吸引一部分需要 Akka 的 Java 用戶過來。

5)Java 在Oracle的帶領下發生的微妙變化,可能是Scala的一個機遇。

有人覺得 AI 和區塊鏈是 Scala 可以嘗試彎道超車的點,但目前看來,AI 和區塊鏈領域分別被 Python 和 Go/Javascript 領先幾個身位,所以與其搬出 AI 和區塊鏈,不如看看大數據領域帶了一波節奏的 Spark,這個曾經最有機會把 Scala 帶向主流的 Killer App ,後續能不能有什麼驚喜出現。

InfoQ:有人認爲 Scala的語言特性有一些問題:很容易寫出一些不宜讀的代碼。針對這觀點,您怎麼看?

王石衝:這個太具有爭議性,但一般的業界實踐是Scala開發團隊在15人或以下時,會比較好控制風格和質量。而且,對比其他語言,比如js,一百個js開發者裏面好的、頂尖的開發者不到2、3 個,但是Scala開發者中,好的、頂尖的比例會高很多。雖然絕對數少,但是相對比例高,所以在開發資源和水平控制上,其實比其它語言社區更有利。

Scala語言特性的問題也是在一點點地改善,Martin 現在也開始覺得,爲 Scala 塞入那麼多語言特性,對許多開發人員來說其實是弊大於利的,所以無論是在 Scala 2 的後續版本,還是 Scala 3,都在一點點地改善。

InfoQ:您怎麼看待Java當前的發展?您認爲國內是否在某個相對完整的領域,形成甚至開始引領技術趨勢?

王石衝:Scala語言目前有兩個大的目標運行平臺——JVM 和js,所以Scala作爲一個語言和生態並不敢完全投資在單一目標平臺上。雖然JVM本身在不斷進步,但是Java已經被同平臺的多種語言趕超,比如Kotlin、Clojure、Groovy。

嘉賓介紹:

王石衝,字節跳動大數據工程師,Scala 程序員。譯著有《反應式設計模式》。主要專注於基於 Scala 構建的反應式架構以及相關應用的實現。之前在從事中小型企業的實時數據流分析系統的開發。第四屆阿里中間件性能大賽優勝獎,第一屆阿里雲 PolarDB 性能大賽季軍。

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