如何看待TIOBE2016年預測scala將停留在前20內?

(摘自原文:TIOBE 2016年1月編程語言排行榜 Java拿下2015年度編程語言)

2015年其他有趣的變化是:Groovy(從#82至#17),Erlang(從#89至# 35),Haskell(從#96至#39)和Rust(從#126?#47),而Go,Hack和Clojure的即將進入前50名。


么,什麼是對2016年的前景如何?我期望的Java,PHP(隨著PHP7發布),JavaScript和Swift將是前10名獲獎者。

2016年
Scala可能會獲得一個永久的前20位,而Rust,Clojure,Julia和TypeScript也將在圖表顯示走高趨勢。


1. 從Scala語言外看

我覺得一個語言好不好,看有沒有成功的企業或人就好了。 按這個邏輯,go出了docker,所以go是好語言;haskel幫研究人員出來很多學術成果,所以也是好語言;rust 至今還沒有一個大型成功的例子,所以還有待觀察。

1.1 框架

Scala在大數據領域出了Spark,成為繼Hadoop MapReduce後大數據分析領域的領導。Kafka成為集群消息系統的最佳選擇。然後是新並發模型Actor的JVM實現--AkkA.

Spark, Kafka和AkkA在自己所解決的領域內都基本上成為唯一選擇了。

我另外一個觀點是新技術提供十倍以上的生產力就會被很快採用。無疑Spark,Kafka和AkkA在自己的領域比以前的技術都是提升10倍以上,所以很快成為主流。

Play是Scala實現的Web MVC框架,它非常優秀。但和Spring boot等其他JVM WEB框架比較提升的效率沒有10倍以上,很難馬上成為主流。

1.2 公司

Scala成功的公司有Twitter, LinkedIn,Gilt,Foursqure等, 後端服務都是大量採用Scala的。

另外像摩根斯坦利,高盛等金融公司也是Scala傳統企業的主要用戶。

有這些好的故事來說明Scala已經成功我想是可信的了,所以說Scala已經在部分領域逐漸成為主流。

2. 從Scala內看

採用Scala的那些項目是偶然成功的嗎,還是有必然原因。這些因素能不能擴展到其他領域將決定Scala能否成為主流。

2.1 Scala項目的成功不是偶然的

Scala有很多優點我不想一一說明。上面所舉的框架和公司的持續成功已經很好的說明採用Scala項目成功不是偶然的。我再舉個實際的例子來說明。

2014年我接手一個新產品開發,上一個版本大概有11萬行Java代碼。我們開發團隊6個人,其實3個是當年剛畢業的,基於Play框架做了5個月左右完成,後端代碼大概1萬行。而且我們至少一半時間在做前端開發。(代碼行只有原來的十分之一Scala是主要因素,ThoughtWorks開發團隊比之前其他外包公司開發團隊優秀一個量級也是一個重要因素)

只不過我剛才說了用Scala/Play做業務系統生產效率沒有提升10倍,所以沒有很快成為主流。

我覺得Scala和Java比有絕對的優勢,但生產效率提升衡量比較複雜。

對於高級Scala/Java程序員來說,Scala能帶來10倍生產效率的提升。對於我來說,很多設計想法用Scala可能就是幾行代碼,而用Java的話可能需要幾個類才能搞定。甚至有些類型安全/元編程相關的想法Java乾脆實現不了,或者必須藉助外部類庫才能搞定。

而對於初中級Scala/Java程序員,Scala給他們帶來的估計只有2~3倍的生產效率提升。再加上Scala是門易學難精的語言,把很多初級程序員擋住門外,這也是很多項目考慮是否用Scala的重要因素。

按照我的10倍生產率選擇理論,對於已經熟悉Scala程序員要回去用Java是很痛苦的,就像開汽車的變回成趕馬車了。

說得Scala這麼好為什麼沒有成為主流語言呢?

2.2 什麼阻礙Scala成為主流語言

2.2.1 難學

普遍反映Scala難學,有兩個原因

a. 函數式的概念比較多

函數式編程對應的概念是體系性的,往往會引申到數學甚至哲學。而面向對象的概念更多的只是實踐層面,而且很少。所以從其他編程語言轉成學Scala會覺得很難,但從Haskel轉學Scala就會覺得比較容易。

b. OO-FP融合的妥協

Scala作為OO-FP語言,融合了兩種範式,同時又追求強類型系統,導致有些地方需要妥協,造成語言層面不一致。這種不一致造成了一定程度上的混亂,並且Scala提供了非常豐富的特性。Scala把潘多拉魔盒打開,希望用戶自己根據不同情況挑選不同的特性。很不幸的是對於大部分人來說做出明智的選擇太難了。go語言用自帶的工具做了獨裁,讓用戶沒得選擇。

我一直覺得Scala有很容易的部分,大概2~3個星期就能掌握去完成應用開發工作。但項目要選用Scala確需要一個資深的Scala程序員,不然的話初級程序員不能做出明智的特性選擇,會導致寫出來的Scala代碼很難看。

所以我想需要一本如何簡單使用Scala的書, 來指導Scala學習和項目應用。

2.2.2 其他

兼容性 -- Scala 2.12版本會部分解決。並且我覺得不兼容也有個好處,就是能促使公司投資新技術,而不是保守地躺著老技術棧上,不做一點點冒險和創新。

編譯慢 -- Scala 新編譯器會採用增量式編譯方式。並且機器總是會越來越快,而Scala編譯速度的問題卻會隨著演算法的優化逐漸提升,所以我覺得隨著時間推移就不是問題了。

我覺得Scala成為障礙是OO-FP特性上的妥協造成一定的混亂,需要使用者明智的進行選擇,而很不幸的是業界沒有公認的指導原則。

結論

一旦入了Scala的門,就不太會再會回去用Java。這導致人員單向流動,時間就站在Scala這端了。

所以我覺得Scala能成為主流語言。

但是中國採用Scala會比較慢,因為我發現中國缺乏10年以上的程序員,普遍認為30年以後還寫程序沒做成項目經理的都是屌絲,所以很難沉下心來深入學習一門語言。

缺乏存量的資深程序員市場導致go語言在中國能更流行(相對速度),因為go簡單容易上手,對於新人來說是門理想的語言。

但這波互聯網+浪潮又使得技術人員吃香起來,所以我覺得這波年輕的程序員中有志於一輩子寫程序的也會多起來,願意花3年時間不斷努力得去深入學習一門語言。


我選一個語言,是先考慮自己的需求,通過自己的需求,在相關領域找最好的工具,由這個工具來決定用哪個語言。

來看一下Scala有哪些好的工具:大數據處理Spark, 消息隊列 Kafka, 比Erlang OTP更好的AKKA 等等,Scala這門語言已經誕生了一些很流行很有用的工具,這門語言是死不了了,學它肯定沒錯


如果利用框架,Scala也還好入門;最近也看了go,確實容易上手,至少不怕被隨便反編譯;Rust倒是可以再等一兩年,等庫多了你再去用不遲。


Scala這種語言你要是掉坑裡就基本爬不出來了(多範式語言特性、Java無縫交互、代碼精簡),所以用的人只會越來越多。隨著IDE功能越來越完善,等後期再出幾個reactive的微服務的基本開源框架,然後大家提到分散式微服務架構會不再只想到dubbo,提到Scala不再只是Spark的時候,前十都是妥妥的。


不知道依據是什麼。作為Scala粉當然希望越靠前越好,但印象里下半年名次就一直不上不下了。作為一種燒腦的語言,是逃不了不瘟不火的命運的。


說明spark完全勝利了


推薦閱讀:

模式匹配是語法糖嗎?
如何評價scalaz這個庫?
scala 和 haskell哪個更適合 新人去學習?
F# 是比 Scala 更好的語言嗎?
如何看待reactive web框架Binding.scala ?

TAG:編程語言 | Scala |