自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Scala難在哪里?

開發(fā) 前端
我過去以為Scala很簡(jiǎn)單。它過去確實(shí)很簡(jiǎn)單,而且一直很簡(jiǎn)單,它是治療Java里很多問題的良方。從“有些使用Java顯的異常的困難或不可能的事,使用Scala卻非常容易”的角度,Scala是一種非常簡(jiǎn)單的語言。那么,Scala難在哪里?

本文是從 Yes, Virginia, Scala is hard 這篇文章翻譯而來。

首先要說的是,我是一個(gè)Scala粉絲,我作為一個(gè)Scala語言的倡導(dǎo)者差不多有5年歷史了。我寫了不少Scala語言方面的書和文章。我曾在數(shù)十個(gè)公司里做過Scala和Lift框架項(xiàng)目的開發(fā)。我對(duì)很多的Scala項(xiàng)目進(jìn)行過代碼審查。

我過去以為Scala很簡(jiǎn)單。它過去確實(shí)很簡(jiǎn)單,而且一直很簡(jiǎn)單,它是治療Java里很多問題的良方。從“有些使用Java顯的異常的困難或不可能的事,使用Scala卻非常容易”的角度,Scala是一種非常簡(jiǎn)單的語言。Scala處理集合問題超級(jí)的容易。業(yè)務(wù)邏輯的相互獨(dú)立會(huì)使程序變得更容易維護(hù),Scala相對(duì)Java來說更方便達(dá)到這樣的目標(biāo)。

51CTO推薦專題:Scala編程語言

那么,Scala難在哪里?下面是我能想出的最主要的幾條:

◆ Scala想要的東西太多。你可以拿Scala像Java那樣編程。這是一種福氣,也是一種詛咒,但我從長(zhǎng)遠(yuǎn)的角度看,更多的是一種詛咒。關(guān)于它的面向?qū)ο髒s 面向函數(shù)的爭(zhēng)議太多。對(duì)于小的開發(fā)團(tuán)隊(duì),這些爭(zhēng)議和你所采取的選擇關(guān)系不大,但當(dāng)你的團(tuán)隊(duì)有相當(dāng)?shù)娜藬?shù),你試圖教會(huì)這些Java程序員使用Scala,而他們又非真心的想學(xué)時(shí),這成了相當(dāng)討厭的事。Scala語言的巨大優(yōu)勢(shì)會(huì)在你使用函數(shù)式編程時(shí)不言自明的顯露出來,但如果你只把自己當(dāng)成面向?qū)ο蟮某绦騿T,它的優(yōu)勢(shì)你是不可能看到的。對(duì)于這種情況,較少功能特征/可選性的語言(例如Java或Ruby)就顯得容易些。你不用費(fèi)腦筋去做出選擇。

◆ 集成開發(fā)工具對(duì)它的支持很弱,而且以后也不會(huì)改善。Scala的Eclipse插件很差勁。從此我開始使用Scala語言五年來一直很差勁,它總是讓人感覺“可以做的更好”,但卻一直這樣差勁。IntelliJ對(duì)Scala的支持還湊合。但在IDE里需要使用各種模式的人會(huì)找不到一個(gè)好用的。Scala的模式各式各樣又互不關(guān)聯(lián),如果你不討厭使用Emacs或Vi或TextMate編程,那使用IntelliJ開發(fā)Scala是個(gè)不錯(cuò)的選擇。如果你期待著一個(gè)像Java IDE那樣的東西,你找不到,而且永遠(yuǎn)找不到,因?yàn)镾cala的強(qiáng)大能力是不能通過簡(jiǎn)單的模板表現(xiàn)出來的,你需要提供太多的信息資源給IDE,它里面的類型安全(TypeSafe)檢查的復(fù)雜,即使你銀行里有3百萬美元,也沒有公司敢出來擔(dān)保。

◆ Scala的類型系統(tǒng)異常的強(qiáng)大,但它卻讓你茫然不知所措。在ScalaDocs里,類型符號(hào)復(fù)雜的讓人恐怖??粗鴉latMap [B, That] (f: (A) ⇒ Traversable[B])(implicit bf: CanBuildFrom[List[A], B, That]) : That,是不是會(huì)讓你有想逃的感覺?這是一個(gè)初學(xué)者每天都會(huì)用,一天用20次的方法,很恐怖吧。Scala的文檔須要一種調(diào)整來隱藏它的復(fù)雜度,讓人們?cè)趯?shí)際使用中更容易的獲取這flatMap的強(qiáng)大能力。類型系統(tǒng)以及相關(guān)的文檔需要一種更簡(jiǎn)化的形式,把復(fù)雜性隱藏在程序包內(nèi),對(duì)最終用戶要表現(xiàn)出簡(jiǎn)單的接口。(Adobe架構(gòu)師談Scala:功能強(qiáng)大但令人困惑

◆ 當(dāng)新程序員來維護(hù)老程序員寫的Scala代碼時(shí),需要去理解代碼中的風(fēng)格和模式。Scala的代碼會(huì)使業(yè)務(wù)邏輯直接表現(xiàn)在最外層(而不是循環(huán)語句或復(fù)雜IF語句四處分布),如果代碼中存在風(fēng)格習(xí)慣,業(yè)務(wù)邏輯就不是那么直接。沒有風(fēng)格也是個(gè)問題,但最終,整個(gè)團(tuán)隊(duì)需要統(tǒng)一接受這樣的風(fēng)格模式。在Ruby和Rails編程中也是這樣,hashmap替代了所有其它種的編程方法。但在Rails里,風(fēng)格是統(tǒng)一的(盡管沒有類型檢查),人們很容易理解,因?yàn)樗褪沁@種“方式”。在Java里,代碼模板由IDE生成,程序員養(yǎng)成了很容易發(fā)現(xiàn)其中的模式的能力。但在Scala中卻不是這樣,各種風(fēng)格迥異,每個(gè)開發(fā)團(tuán)隊(duì)里都不相同。

我知道有很多的開發(fā)團(tuán)隊(duì),在他們的團(tuán)隊(duì)組織形式里,采用Scala語言會(huì)比使用Java或Ruby或其它語言要合適的多,Twitter公司就是這樣的一個(gè)典型例子。他們需要一個(gè)簡(jiǎn)潔的,具有類型檢查的,高性能的語言和運(yùn)行環(huán)境。Scala滿足了他們的這些需求。Foursquare公司以Scala的難度作為一種過濾制度。你只有學(xué)好了Scala語言才能在這個(gè)公司立足。

但如果你的團(tuán)隊(duì)的技術(shù)水平很一般,Scala也許對(duì)你們公司來說并不是一個(gè)好的選項(xiàng)。Scala的難度導(dǎo)致很陡的學(xué)習(xí)曲線,會(huì)遭到原有的程序員的反對(duì),形成不了統(tǒng)一的風(fēng)格。你需要一個(gè)強(qiáng)有力的CTO或架構(gòu)師來強(qiáng)迫這種風(fēng)格,而不是讓他們自己從書中學(xué)習(xí)。

那么,如何能看出Scala在你們的團(tuán)隊(duì)中會(huì)是很“簡(jiǎn)單”還是很“難”呢?

如果你的公司在JavaOne大會(huì),或OSCON,Strangle Loop,或QCon大會(huì)上有出席發(fā)言的人:Scala對(duì)于你們來說會(huì)很簡(jiǎn)單

如果吃飯時(shí)間你們還在討論如何從一個(gè)普通程序員成長(zhǎng)成高級(jí)程序員:Scala對(duì)你們來說會(huì)很難

如果需要的話,你可以用NotePad編程:容易

當(dāng)看到”Zed Shaw”時(shí),你的程序員面無表情或連說3聲“萬?,斃麃?”:Scala==難

程序員在Twitter上關(guān)注Dean Wampler:Scala 簡(jiǎn)單

你的程序員9:15到公司,晚上不看有沒有郵件:難

現(xiàn)在你們知道了。我完全同意這樣的觀點(diǎn):對(duì)于水平一般的團(tuán)隊(duì),Scala很難。并不是它本身很難,而是因?yàn)樗谒揭话愕膱F(tuán)隊(duì)中不會(huì)產(chǎn)生那種由技術(shù)很好的人組成的團(tuán)隊(duì)中產(chǎn)生的短期或長(zhǎng)期的益處。

一些評(píng)論:

不錯(cuò),Scala的類型系統(tǒng)很強(qiáng)大,由它產(chǎn)生了很多優(yōu)美的程序代碼,例如Scala的集合。參考See http://stackoverflow.com/questions/1722726/is-the-scala-2-8-collections-library-a-case-of-the-longest-suicide-note-in-histo http://www.scala-lang.org/docu/files/collections-api/collections-impl.html。但是,對(duì)于Scala,從一個(gè)語言設(shè)計(jì)者/程序庫創(chuàng)造者的角度,和從一個(gè)普通程序員的角度,他們的需求是不同的。我個(gè)人認(rèn)為,在開發(fā)Lift框架時(shí),我認(rèn)為沒有第二種語言能像強(qiáng)大的Scala語言那樣讓我準(zhǔn)確的表達(dá)。所以,作為一個(gè)程序庫的開發(fā)者,我喜歡Scala語言。我還慢慢認(rèn)識(shí)到,Lift框架對(duì)于一般程序員來說似乎太難。作為一個(gè)懂得類型標(biāo)記(signature)的程序庫使用者,我喜歡Scala。但我不是一個(gè)普通水平的程序員,大多數(shù)并不認(rèn)為Scala很難的程序員都不是普通水平。

不錯(cuò),改進(jìn)ScalaDocs,讓它有“簡(jiǎn)單”視角和“架構(gòu)”視角,這將帶來巨大好處。但這些只是個(gè)開始,遠(yuǎn)沒有結(jié)束。

我明確的反對(duì)“那好,我們找更好的程序員”的做法。我們可以通過提高我們的程序員的水平來解決“Scala很難”的問題。但這不是問題的癥結(jié)。癥結(jié)在于,Scala并不夠足夠的好,沒有能力迫使在培訓(xùn)、教育、招聘領(lǐng)域產(chǎn)生變革,迫使廣大的一般水平的程序員提高技術(shù)來適應(yīng)Scala的難度。

我并不懷疑閱讀這篇文章或看我的Twitter的人都是很有水平的程序員,Paul Snively,你水平這么高,Scala對(duì)你來說是小兒科了。

轉(zhuǎn)載自:http://www.aqee.net/

【編輯推薦】

  1. Clojure語言叫板Scala語言 我們不怕內(nèi)存溢出
  2. Groovy創(chuàng)始人:Java面臨終結(jié) Scala將取而代之
  3. Ruby高手點(diǎn)評(píng)Scala編程語言十大絕招
  4. Java程序員,你為什么要關(guān)注Scala
  5. 51CTO專訪Scala創(chuàng)始人:Scala拒絕學(xué)術(shù)化
責(zé)任編輯:陳貽新 來源: 外刊IT評(píng)論
相關(guān)推薦

2023-06-27 17:30:13

數(shù)字化

2018-09-10 15:24:23

分詞方案算法

2023-11-03 07:47:12

機(jī)器資源大模型:

2020-12-02 09:51:06

C++語言學(xué)習(xí)

2017-09-13 14:06:32

數(shù)據(jù)可視化數(shù)據(jù)圖表數(shù)據(jù)

2016-03-17 20:17:02

人臉識(shí)別技術(shù)

2009-06-23 09:07:38

2017-04-07 09:32:20

機(jī)器學(xué)習(xí)調(diào)試算法

2021-07-01 08:31:25

數(shù)字化轉(zhuǎn)型大數(shù)據(jù)數(shù)據(jù)采集

2010-01-07 10:30:26

80后

2021-02-01 10:46:32

多云云安全云計(jì)算

2018-11-26 15:04:49

SDN網(wǎng)絡(luò)數(shù)據(jù)中心

2020-09-27 16:15:42

新基建5G人工智能

2021-01-25 14:39:19

新基建

2022-04-13 08:02:29

數(shù)據(jù)中心網(wǎng)絡(luò)自動(dòng)化

2022-07-01 21:13:46

NFT加密SuperRare

2017-09-18 14:56:27

VMwarePhoton平臺(tái)

2012-11-08 14:25:03

Office 2013

2021-09-18 10:51:09

分布式存儲(chǔ)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)