從Java和JavaScript來學(xué)習(xí)Haskell和Groovy
來源:易賢網(wǎng) 閱讀:645 次 日期:2015-04-13 14:12:53
溫馨提示:易賢網(wǎng)小編為您整理了“從Java和JavaScript來學(xué)習(xí)Haskell和Groovy”,方便廣大網(wǎng)友查閱!

我記得剛接觸計算機的時候,我就受到了兩個非常巨大的錯誤觀念的影響,這個觀念最初是來自于老師的傳授還是學(xué)長的教誨已經(jīng)記不清了,但是直到我工作幾年以后,才慢慢有了實際的體會:

學(xué)習(xí)和使用什么編程語言不重要,重要的是算法和設(shè)計;

程序員學(xué)習(xí)的精髓是面向?qū)ο蟮脑O(shè)計模式,掌握以后,一通百通。

簡直就是是胡扯啊。也許在某個極其狹隘的上下文中還能這樣說,但是泛泛而談,這樣的態(tài)度無疑是誤人子弟的。

就說第一條,編程語言不但重要,而且太重要了。換句話說,學(xué)習(xí)一門新的編程語言,可能學(xué)習(xí)的是背后的范型和思考問題的方式。如果這個部分能帶來新的東西,那就是值得花時間投入的。

可能很多人和我的背景一樣,熟悉Java和JavaScript,一門是經(jīng)典的靜態(tài)語言,一門是經(jīng)典的動態(tài)語言。有人說相較而言,搞C++背景的人算法和數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)更加扎實;而起初搞Java背景的人可能設(shè)計方面懂的多一點,但是水貨更多;而說起JavaScript,就似乎更“低廉”了,雖說學(xué)好太難,但入門門檻超低。于是針對像我這樣背景的工程師,我打算用類比Java和JavaScript的方式寫一些新的編程語言的學(xué)習(xí)筆記,因為在我看來,用“類比”的方式是學(xué)習(xí)印象深刻,而且容易更容易理解的有效方式。以前也用類似的方式寫過一些新技術(shù)的學(xué)習(xí)筆記,比如《GWT初體驗》。但是通常要學(xué)習(xí)一門新的編程語言,尤其是從未熟悉的一個新的編程范型,學(xué)習(xí)曲線要比這個高得多。在我的腦海里有這樣一個清單,記載了最想接觸和熟悉的編程語言,這個清單最首要就包括:

Groovy。學(xué)習(xí)Groovy就是奔著“動態(tài)語言”去的,而動態(tài)語言,就是奔著“元編程”去的?!皠討B(tài)”,是指在程序運行過程中可以改變數(shù)據(jù)類型的結(jié)構(gòu)。也就是說,是圍繞著“元編程”產(chǎn)生的特性。元編程,指的是在運行時改變“類”的定義,例如訪問、增加或修改等等。一言以蔽之,就是“用程序來寫程序”。Groovy是和Java最親近的動態(tài)語言。07年底接觸過一段時間Groovy程序,還混過當(dāng)時Groovy中國社區(qū)的斑竹,只可惜本人如此喜愛掛念的東西,現(xiàn)在依然不算多活躍,在最新的TIOBE排行上面,列在36位,有趣的是,35位的是Scala,真可謂難兄難弟。這里有個小段子,Groovy的作者James Strachan說,如果當(dāng)年他看到了Scala,就不會有Groovy什么事兒了。即便是這種自掘墳?zāi)故降淖放酰缃窨磥鞸cala的下場也沒見得好到哪去。JavaScript也一樣是動態(tài)語言,為什么還要接觸Groovy?其中一個重要原因是其中的元編程特性太豐富。

Haskell。純粹的函數(shù)式語言??梢赃@樣理解“純粹”一說:有一些語言“可以”進(jìn)行函數(shù)式編程,但是有的則是“不得不”進(jìn)行函數(shù)式編程。編程語言發(fā)展的兩大趨勢就是動態(tài)語言和函數(shù)式語言。因此有了Groovy代表動態(tài)語言,接著我一直想學(xué)習(xí)一門函數(shù)式語言。函數(shù)式編程就像數(shù)學(xué)中的函數(shù)一樣,唯一給定了輸入?yún)?shù),就可以唯一確定輸出結(jié)果,沒有上下文的影響,沒有執(zhí)行次數(shù)的影響,或者說是天然冪等的。網(wǎng)上太多文章批Haskell太過學(xué)院派,連教科書里面要教授函數(shù)式編程都用Scheme(因為它更易學(xué),還沒有那么復(fù)雜的類型系統(tǒng)),但是開闊視野無疑是非常好的(“代碼原來可以這樣寫!”),尤其喜愛其中的模式匹配的特性。

當(dāng)然還有其它的,有代表性的語言想深入研究,比如邏輯式的Prolog,還有可以寫詩的Perl……但是也害怕吃得太多就會撐著。

Haskell之于函數(shù),就像Perl之于字符串,就像Prolog之于謎題,就像Groovy之于DSL。

我會記錄和討論一些語言特性,但是不會去討論大多數(shù)語法糖這樣可能重要但是瑣碎的部分。如果只是純粹的學(xué)習(xí)筆記那多無聊啊,還不如把它寫成吐槽帖。我爭取從Java和JavaScript到Haskell和Groovy,對這四門語言,一個特性一個特性地橫向比較,比如站在類型系統(tǒng)的角度,弱類型、強類型,靜態(tài)的、動態(tài)的,類型之間的關(guān)系、類型創(chuàng)建等等;再比如元編程方面,Java的反射和代理系統(tǒng),JavaScript的prototype,Groovy強大的元編程體系,還有Haskell的編譯期元編程實現(xiàn)等等。

更多信息請查看IT技術(shù)專欄

更多信息請查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機網(wǎng)站地址:從Java和JavaScript來學(xué)習(xí)Haskell和Groovy
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報警專用圖標(biāo)