《七週七語言》讀後感
在微博上看到Robbin老大推薦《七週七語言》一書,去豆瓣上查了一下發現大家對這本書的評價也是非常高,於是就想著去讀一下。書買了之後由於找工作一直沒有來得及看,隨著前段時間把工作定了,就著手對這本書的學習了。從書名來看,顧名思義就是講了七種不同的程式語言。自己瀏覽了一下目錄,心裡也大致衡量了一下,對於這七種語言,我覺得我以後會用到的或者說是能去學的應該也就Ruby、Scala兩個,所以就計劃大體地瀏覽一下這七門語言,先有個大概的瞭解就好。這樣每天利用上午的兩個小時,一共大約兩週的時間,大體把這本書看完了。
這本書一共講了四種程式設計範型:物件導向程式設計、原型程式設計、約束-邏輯程式設計、函數語言程式設計。物件導向程式設計有Ruby和Scala;原型程式設計是Io;約束-邏輯程式設計是Prolog;函數語言程式設計有Scala、Erlang、Clojure、Haskell。對於這幾種程式設計範型,書裡面最後一章進行了很好的總結,在這裡也就不重複了。
在閱讀這本書的過程中,經常會在看到某個語言的某個特性時讓自己有種狂喜的感覺,讓自己感到特別興奮,有一股強烈的衝動去學習它、去運用到實際中。自己在這過程中也產生了一些想法,思考了一些問題。
書的一開始是Ruby那一章。其實幾年前就曾聽聞Ruby on rails的威名,也知道ItEye就是使用的這個技術,知道Ruby以注重程式設計師效率為主。之前花了點時間進行了學習,但一直沒有一個練手的專案,所以也就停留在似懂非懂的地步。這次看這一章,第一感覺仍然是驚喜於Ruby語法的靈活。寫Ruby程式碼就覺得是在說話一樣,而且各種方式都可以,讓人非常舒服。另外,Ruby的純物件導向和動態型別特性都極大地提高了程式設計效率。對於Ruby在效能、併發方面的弱點,隨著現在硬體效能的提高以及Ruby自身的改進,已經越來越不是問題。
對於Io這個語言,自己很陌生,是第一次聽說。不過它的原型程式設計,自己曾在JavaScript中接觸過。Io的另一個特色是萬事萬物皆訊息,這個東西確實挺新穎,在處理併發的時候使用actor傳送訊息、處理訊息能達到不錯的效果。此外,它的future讓我想起了Java中的FutureTask和Future,不知道Java是不是參考Io的。這個機制在多執行緒環境中也是個很不錯的方案。
Prolog,也是第一次聽說,更是第一次聽說宣告式程式語言和邏輯程式語言。貌似只要描述一個事實和推論,就能寫出解決很多難題的程式來。裡面對於數獨和八皇后問題的編碼解決,讓我真的是歎為觀止。此外,自己也第一次知道了尾遞迴優化這個技術,對於遞迴呼叫,這個優化的確能夠大大節省記憶體佔用。但是真的對於這種語言很不適應,也就沒太仔細地看。不過,不得不承認的是DSL語言在特定領域確實是無可比擬的。
Scala,一門混合程式語言,算是面嚮物件語言與函式式語言之間的橋樑。其執行於JVM之上,加上對函數語言程式設計的支援,使得很多基於Java開發的系統可以在之前的基礎上進行改進,極大地提高了程式設計效率。而且其使用val關鍵字宣告值不可變的變數以及其actor使用了執行緒池的方式都是對併發不錯的解決方案。看到這個語言,我強烈地感覺Scala是一個能夠取代Java的高階語言,也特別想去學習一下。也有了計劃去進一步接觸和使用。
Erlang,這個語言之前看到過,知道是一個針對併發的程式語言。不過看了書才知道其是基於Prolog而來的。其“就讓它崩潰”的錯誤處理策略顯得非常健壯,另外併發方面採用的是開銷極小的輕量級程式也是一個優勢。最讓我驚歎的是它的列表解析功能,一個典型的例子就是能夠輕易的向一個列表中加入新的屬性。
Clojure,又一個陌生的語言,一個JVM上的Lisp實現,也就是一個Lisp方言。對於Lisp自己也是從未接觸過。不過從Lisp字面上的意思來看就是一個列表語言,即取列表第一個元素作函式,其餘元素做引數。另外就是在Lisp中資料即程式碼、程式碼即資料。這裡最讓我驚異的是其採用事務記憶體STM和原子來解決併發問題,算是一個亮點。此外,使用延遲計算解決斐波那契數列和階乘問題以及Clojure-Java互操作對Java語言的擴充套件也都是很突出的優勢。
最後一個語言Haskell是一個純函式程式語言,也是本書一個讓自己看了很久也沒搞明白的語言。可能是對於函數語言程式設計自己就是個小白的緣故吧。不過好歹是弄明白了柯里化的意思,也看到了惰性計算的好處。此外,對其中的monad這個為了彌補函數語言程式設計在命令式風格程式設計方面的缺陷採用的技術,自己看了好幾遍還是很迷糊。書上說這是Haskell的精髓,弄懂這個能學到很多東西。自己打算以後有時間再回過頭來好好研究一下這個東西。
總之,這本書確實是一本不可多得的好書,值得好好研讀一下。強烈推薦!
本文來自:ITeye 作者:superhj1987
相關文章
- Java語言學習報告第七週Java
- 《大道至簡》第七、八章讀後感
- 《程式設計師修煉之道》 讀後感(七)程式設計師
- 讀書筆記:組合語言(王爽)實驗七筆記組合語言
- SegmentFault 七週年丨寄語徵集
- 第七週
- 第七週週五
- 第七週週四
- 第七週週三
- 《Go 語言併發之道》讀後感 - 第二章Go
- 小白學習Golang(七)Go語言StringGolang
- 暑假第七週
- 《Go 語言併發之道》讀後感 - 第一章Go
- 《Go 語言併發之道》讀後感 - 第三章Go
- 《Go 語言併發之道》讀後感 - 第四章Go
- Go語言學習筆記(七)之方法Go筆記
- 第七週作業
- 第七週總結
- 區塊鏈特輯——solidity語言基礎(七)區塊鏈Solid
- 《大話資料結構》讀後總結(七)資料結構
- 【Go語言入門系列】(七)如何使用Go的方法?Go
- 學JAVA的第七週Java
- 暑假第七週規劃
- 學習Java第七週Java
- JAVA學習第七週Java
- jsp第七週作業JS
- 讀後感
- VPS折騰記七搭建稍後閱讀應用
- Go語言核心36講(Go語言實戰與應用七)--學習筆記Go筆記
- ASP.NET MVC下使用AngularJs語言(七):Cookie的使用ASP.NETMVCAngularJSCookie
- 第七章——程式設計語言基礎知識程式設計
- 2021 年 iOS 應用程式開發七種最佳語言iOS
- 《碧藍航線》七週年慶典:碧海如初,共赴佳七!
- 第七週運維作業運維
- 第七週學習進度
- 第七週學習報告
- 第七週進度報告
- 學習Java的第七週Java
- 2024暑假第七週總結