談談為什麼上scala?

1. 感覺太複雜,沒有信心能handle

2. 開發速度不敢保證

3. node用了一段時間,感覺很好用,開發效率很高

4. 學了一下Clojure,發覺比scala簡單很多,上scala不如上clojure

這樣我們的storm上了clojure,web server 和 backend上了node。我們的service可以

handle 5M RPM,server response time 5 ms.

有了一年多的coffee/JS和clojure的經驗,再回過頭來看scala已經覺得比較容易了。

另外Spark很明顯是未來的趨勢也是使用scala的一大直接推動力。

我們的數據量越來越多,演算法越來越複雜,node這個情況已經不太適合做後台了,因此

我這段時間主要研究尋找另外一種支持高並發的語言。選Scala有一下幾個原因

1. 當然是spark了, spark streaming 可以替代storm,因此scala一個語言就可以搞

定了

2. go的語言設計實在是不符合我們的胃口,雖然並發做的很吸引人

3. haskell的並發看樣子相當牛逼,但是純FP還是太不方便了

4. Scala有actor,STM,future等等,做並發的手段相當豐富

5. Clojure有STM,Scala也有,Clojure copy了Go的CSP模式,但是是個半成品,感覺

用處還是不太大

Scala的主要問題就是太複雜了,所以下一步就需要搞清楚,什麼用,什麼不用,如何

規範了。

補充一下:不選擇Java的原因也很直接,Java不適合我們team的culture。我們的路徑

是Ruby-&>Coffee-&>Clojure-&>Scala。我們是favor functional的。當然Java8也加入了

更多的支持,這個還需要觀察一下。

這是一位大牛說的,我自己覺得挺贊同的,拋磚引玉,希望大牛都來說說,理性討論,共同進步,謝謝


Scala有actor,STM,future等等,做並發的手段相當豐富

請加入 core.async,這才是 Clojure 對 Scala / Akka 的回答。如果找例子,看看 Home | http-kit, high performance HTTP Client/Server for Clojure

Scala 的好處是,有編譯器保證部分錯誤能儘早被查出來,而不是像 Clojure 一樣必須一遍一遍折磨 repl 。


因為在spark上跑程序,不用scala的話感覺就像在參加殘奧會。


題主你的感覺沒錯,scala是現在太陽系裡複雜程度超過C++的唯一的語言。不過他跟C++不同的是,學會C++你充其量只是對代數有了點理解,而不懂的類型系統的理論你scala是絕對學不會的。而且從可操作性來看,scala跟C++一樣是全能的,只要你完全學會了他們,什麼東西都能封裝出來。所以為啥不學scala呢?


上Scala的原因,是基於對開發生態環境和工具的便利程度這兩個因素的考慮。

現公司本來就是Java系,生態環境足夠好,所以基礎平台已定。

至於工具因素,因為對Java語言的表達能力不滿意,尤其是標準庫對集合操作的支持讓人捉急,所以需要考慮JVM上的其他語言。

Scala是OOP和FP的混合,有利於團隊過渡;表達能力強(比如類型推斷、FP等),對開發效率的提高很有幫助;內置很贊的集合操作庫;所以這是我的選擇。

此外還有akka這種東西,媽媽再也不用擔心我系統的底層設施了。


因為Scala是全能型的語言,這意味著你能想到的大部分東西我都能在Scala里給你捏一個出來。。。


java8的函數式本質上還是語法糖,favor functional的不會有啥興趣的。輪子哥說得對,scala太複雜了,這是我們放棄scala的原因,但對於能夠cover這些複雜度的團隊來說,的確無所謂。


轉一發廣告

https://vimeo.com/147697498


能用Java庫,比Java簡潔,開發速度快。比python運行速度快。比lisp對object支持更好。對一些比較繁瑣的功能如string parsing和xml提供很簡單的解決方法。

除非問題絕對需要,不要為了用高級功能而用高級功能。寫程序不是寫作文,不需要炫技。implicit適合給別人寫庫,自己維護起來麻煩。太複雜的object design我覺得意義也不大。就把它當一個好用的Java+Lisp完全可以。


如果你覺得clojure簡單易上手,那也很好,就用唄。

我現在熟悉Scala 了,覺得用起來簡單,也並不複雜,偶爾也需要查查prog in Scala(官方書),但並不太多需要。

而clojure,我也嘗試過,卻未能入門,單一個use,import的諸多用法我就暈菜了,根本記不住。在我心中比scala複雜多了。

所以,只要你覺得好,並能架馭,能提高工作效率,提高質量,那就可以了。


我們項目選擇scala的原因很簡單,因為它是JVM上用來打倒裹腳布語言的利器[機智]


為啥上scala?大半年前還沒接觸過

1. 組裡都是java環境,一堆現成的公司內lib

2. java過於sb

3. 需要並發,無論是future還是actor

4. twitter用他

5. lib豐富,隨手搜了幾個,包括做mock的,做json的,db的,都不錯的樣子

6. 要靜態語言

7. 新項目,scope不大,self contained,沒有別人depend,核心比較簡單,一個人就能基本搞定,風險小

8. 組裡別的人同意幫忙code review,沒有反對意見

9. 好玩

10. 太tm好玩了

11. java太tm sb了


看完之後, 感覺LZ應該是做分析類型的軟體?

我之前的公司上scala的原因很簡單, 因為用Spark, 然後有一些其他的小功能是用Clojure寫的, 現在想統一, core是java, 所以scala是比較自然的選擇.

我到還沒有碰到要換語言才能解決系統的境界...

願聽LZ細說Ruby-&>Coffee-&>Clojure-&>Scala的原因


spark


學習過大部分主流語言 c c++ java python 團隊在用scala,最近自學ruby。

Scala的優點:

1 並發支持優秀,future 模型,閉包,function,這是我最喜歡Scala的一個原因,讓非同步編程變的很自然。

2 語法力求平衡 可讀性和簡潔性,lisp類型的語言是可以寫的很短,但是可讀性很差,很難勾起新手的學習慾望。scala的大部分代碼都是自然可讀的,使用成本並不高。同時Scala的語法都力求最簡,代碼量遠小於java。

3 融合function 和 oo ,這點和許多語言如ruby一樣,讓Scala能以最自然的方式解決問題。我討厭java的原因是 java 不支持function,所以衍生了許多模式,以很彆扭的方式解決問題。支持function的語言能以更細粒度單元重用代碼。

4 類型推導 靜態編譯,這點是Scala不同於大部分腳步語言的原因。解釋型語言不適合大型工程,因為沒法在編寫代碼時發現問題,這樣帶來的一個最直接的壞處是bug不容易發現,因為一切都要延遲到運行時才發生。

暫時想到這麼多吧,以後再補-


19樓的SBS系統是用Scala寫的,團隊內有不少scala的牛人,我們是實幹型的技術團隊,歡迎小夥伴加入~~~


scala 提供更強的抽象能力(邏輯組織),頂層業務邏輯寫起來速度快的不要不要


因為漂亮....


這個是mitbbs上的peking2說的吧,江湖人稱「二哥」 :)

前公司(兩個MS之一)的一個大型項目(超過100萬行級別的code base)上Scala的原因是需要對語言進行擴展和額外的控制而又不想修改語言本身(也沒法修改語言本身)。主流點的語言里貌似只有python(暴露了compiler API,可以操縱ast)和Scala(有compiler plugin和macro)能做到這點。後來的痛點就是scalac太慢,也有不少bug。再就是scala reflection到現在還沒做到線程安全。總之遇到不少typesafe的scala team都沒預料到的問題.


推薦閱讀:

把「hotkey」翻譯為「熱鍵」是否不妥?
500GB三星筆記本硬碟標本
家用一體機電腦該如何選擇?
我的電腦中了「暗雲」木馬怎麼辦?求助!!
作為一個專業的It人士或者黑客,如何檢查確認自己的個人電腦沒中木馬/病毒?

TAG:調查類問題 | 編程 | 計算機 | 信息技術IT | Scala |