函數式編程一年體會

jopen 10年前發布 | 12K 次閱讀 函數式編程

一開始:Scala

很高效的Java,因為它用一半的代碼實現同樣的功能

深入:Haskell

在社區遇到一個笑話:Scala是Haskell的入門誘餌。別人拿Haskell當笑話,但我發現Haskell確實強大。

深入:Scala庫

連函數和參數都看不懂,比如G[_], A → C, F[X → G[Y]],F.boo_(f(x))(g)(x)。

它們在哪個領域有用?那些聰明絕頂的人發明這些有什么用意?我現在有了答案,它們適合任意領域。不會抽象你就會重復發明輪子。

基礎

不可變性(immutability)
可組合性(composability)
透鏡(lenses)

函數式編程深深的吸引了我

數學
我一直以為自己數學好,直到遇上函數式編程。曾經花了3個月時間才完全理解一個問題。

感到恐慌

推薦Functional Programming in Scala,很棒的書,幫你渡過學習難關

感悟:抽象

最近回顧了一下8個月以前寫的代碼,驚了。

良好的oo風格的,很多繼承和代碼重用,“這不就是一個幺半群(monoid )和一堆翔嘛我怎么沒意識到這是一個幺半群”,然后用三分之一的代碼量重寫了一下,而且靈活性翻倍。

然后我又看到一個文件,“誒這不就是自函子(endofunctor)嗎”,又用三分之一的代碼量重寫了一下,用起來更容易而且更強大了。

現在我比以前越來越多的感受到抽象。而且在代碼之外也這樣,比如UI設計,比如軟件需求。

感悟:自信

我以前總是想方設法測試代碼。而函數式編程的靜態類型系統讓我更安心,很多時候,只要代碼能編譯,它就是正確的。就這么簡單。
如果你真的需要測試,你可以用一條語句測試一堆函數,使用類似于ScalaCheck 的庫,它們會幫你自動生成測試數據。

下一步?

我再也回不去動態類型語言了。

我會一直用Scala,也愿意更多的接觸Haskell。最近還盯上了Idris。

學術!

我以前發現新的庫都會很激動,現在則是研究和學術論文。他們其實是一樣的,不過論文更短小精悍、可靠,更靈活。接下來一年我會學習更多的函數式編程和計算理論。

不要人云亦云,教條主義,說什么學術在現實世界沒有應用價值。

學術對現實有巨大的指導意義,哪怕一開始有很大的學習成本,它依然能幫你節約可觀的時間和精力,實現你的目標。

就好像你可以花6個小時寫1000行代碼,其中有10個bug和10個功能,但如果你首先花一點時間去學習,你可以用4個小時寫400行代碼,其中有1個bug和20個功能。我在工業界呆了許多年,但不僅僅是個碼農,我多么希望早一點懂函數式編程,因為那會節約我很多的時間、精力,免去更多的壓力。工業界往往對學術有一種輕蔑的態度。不要跟風。那些是讓自己的無知、懶和短視顯得正當的借口,是錯誤的。我希望你來試試。

閱讀原文 ?

</div>
來自:http://top.jobbole.com/901/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!