scala 和 haskell哪個更適合 新人去學習?
主要作為 學習函數式編程 的工具, 從社區, 資料, github適合學習的代碼等多個方面來看?
這兩個其實都不太好學。
建議工作過的直接看Scala,雖然很多概念用Scala沒有Haskell整潔,但是可以看Functional Programming in Scala那本書。我覺得這本書要比純函數語言的教程還好,也通俗易懂,也有相當的實用性(不是LYAH那種看完之後還是沒法幹活級別的通俗易懂)。
上學的同志建議Haskell,因為更簡單更純粹。就說最簡單的泛型就比Java和Scala自然太多了,比較適合成體系地看。
其實這點就引申出來工作業餘學習和全職學生的不同——工作之後學東西很多時候只能漸進著來,最終更容易保證多少學到東西,不然很容易太監。但是成體系地看長期效率更高,不會在中間學很多沒用的。
我最早也是通過C、C++進入到程序員世界的,後面了解到FP,以及受部分LISP的鼓吹者步道,開始學習FP,也是從Haskell入手的。應該說,Hashkell給到了我們一個暫新的思維模式,幫助我們更好的了解了函數式的編程思想。
不過,真正的對我理解FP起到幫助的是scala,倒不是scala在這一方面更優秀,而是因為scala基於JVM,可以和Java無縫的配合,可以真實的在工程實踐中應用。只有真實的工程實踐,你寫出個幾千上萬行代碼,並且真實的解決一些問題,才能夠真實的體會到函數式編程帶給你的快樂、痛苦,適應和不適應的地方。而Haskell,則可能難以為你提供這個實踐的機會。如果僅僅是做幾道演算法習題的話,我想,未必能夠很好的理解函數式編程。
所以,如果你目前的工程實踐以Java為主的話,那麼scala可能會是很好的學習函數式編程的入手語言。其實,不要太理會網上描述的Scala是多麼多麼的複雜難學,你只要真正的用起來,剩下的只是時間問題:最差的話,你也可以用scala來寫java代碼,然後在此基礎上逐步應用scala的優秀特性尤其是函數式特性,你不會失去太多(IDE支持稍弱、調試稍弱、編譯慢),但會得到很多很多。
在團隊中推廣scala是一件很困難的事情,我個人是摔過跟頭的。對scala最大的障礙其實不是學習,而是一班有一定工作經驗的熟悉Java的「資深」程序員或者項目經理,他們其實自己並不怎麼寫代碼了,但卻控制著團隊的技術選型。如果你沒有決定權,你可能無法決定在項目中應用scala,但你至少可以在自己的業餘時間,寫一些小的工具軟體,或者做一些項目外的實驗,通過這種方式來學習scala。但讀書或者做幾道習題是遠遠不夠的。Haskell
Haskell, 把它當成是有強類型的Python入門,寫一些小段的代碼,會能保障學習的趣味性,Scala的話,因為多種概念的糅合度,會把基本功不紮實的人亂開支線任務,把主線任務忘了。
Haskell。因為東西少,而且跟Scala比起來並沒有失去什麼能力。
Haskell還有另一個好處就是,如果你不認真學習一定學不會,不像scala你學不會還總是可以用跟java等價的那部分糟粕來讓你把程序超難看地寫出來,這樣不利於程序員的成長。
怎麼定義新人?是剛剛入門學編程,還是有一定基礎但是相對這兩種語言或者函數式語音來說是新人?如果是剛剛入門學編程的話,Haskell吧;如果是有一定基礎但是想學習函數式語音的話,這兩個都行吧。主要還是看你幹啥了。
it『s a Python! No, it』s a Haskell!
With Haskell"s syntax but none of its type system, dg is the best way to make fans of static typing shut up already.
java程序員,scala愛好者,也寫過一些scala的小項目最初接觸函數式編程是覺得可以拓寬自己的思路,因為我總覺得不要局限於一種思路去解決問題。所以題主主要看你的目的是什麼。如果只是為了學習函數式編程的理論,學習一門純函數式的、比較學術的語言更加好。如果,你本身一門指令式語言的程序員,學習一門很工業結合比較緊密的函數式編程語言對你的職業道路更加有直接的好處。但是,這樣的話,你在工作中難免會有負面情緒,比如我在初略掌握scala以後,在工作中寫java代碼,總會邊寫邊在心裡吐槽:我艹,這是傻逼嗎,我在一個List裡面要過濾到某些元素還要單獨寫一個方法。好比,你和桃谷繪里香有過一夜情之後,每天還必須面面對著自己長得像鳳姐的糟糠之妻。沒辦法,這就是生活。以上
兩種語言都學習過,都有過工程實踐。如果僅僅從你的問題來回答的話,我會推薦 Scala.
1. 基於JVM,有很多穩定完善的庫供使用 (這一點Haskell是弱一點的)。這能夠讓你快速動手並且看到成效——這樣會極大的增強你的信心和帶來很大的成就感,為進一步深入學習增強動力. 2. Github上具有很多大公司使用並(twitter, LinkedIn ...)開源出來的代碼,這樣你可以通過閱讀不錯的代碼學到更多更優雅和更高效的用法。比如 Twitter 開源出來的 Finage,能夠和 Thrift 完全兼容,這樣如果有其他的服務是基於Thrift ,可以無縫進行對接。3. Scala社區我個人覺得還是不錯的,有很多是以前的java程序員,如果有疑問提出是能夠得到較為詳細的解答4. Scala 不是一個特別純粹的FP (不比Haskell),但是還是有很多FP的設計理念;對於以後深入學習其他的比如 Ocaml, Haskell 做一定的基礎。5. Scala新手寫出來的代碼,除開優雅上考慮,其實性能一般也不會太差(假設你之前是有過比如c++/c的編程經驗); 但是,Haskell就不同了,性能調優會是一個很trick的事情(Lazy Evaluation... ),需要經驗的積累和學習。所以一個Haskell新手可能寫出來的程序性能會存在問題。不過,如果是選一個編程語言能夠在接下來20年都願意很開心的使用和學習,那我毫不猶豫推薦Haskell 只不過學習曲線會比較陡峭。但是,這一切都會很值得的.haskell
Haskell可以迅速積累函數式思想。適合教學。Scala工程性更強,學完haskell再看scala更好
去年兩個都學過,Haskell更乾淨,寫起來更舒服。Scala寫起來不自覺就往Java上靠了。
其實這種事還是要看人的心性,人和人不一樣。有的人適合直接上scala這種高度複雜的語言,有的人適合先學haskell這種高度純粹的語言。有一個方便的判斷標準就是你喜不喜歡python,越喜歡python越應該先去學haskell,反之就可以直接上scala。為什麼呢?對於一個普通程序員來說,學習haskell的最大原因是,人都是有惰性的,需要一個haskell這樣的語言逼你丟掉過程式思維,趟進學習區。那麼,惰性越小的人,越不需要這麼一個角色趕他,可以直接進入工業應用的函數式語言來學習。判斷惰性一個很好的標準就是python這個簡單、快樂的語言,有惰性又簡單的人最喜歡。而不喜歡python的基本都有一定程度的強迫症和M傾向,他們不需要haskell來鞭策自己。
學好Haskell, 然後去寫Scala!!!
haskell學概念 scala幹活
我的回答只能做參考,只能說說感受,因為haskell 和scala都是剛了解,scala正在練習使用中。
haskell,函數編程的點范;
scala,結合java,C++,javascript,haskell各家所長的一種東西,形式上走函數編程風格,里子是面向對象編程支持。
兩者都可以學習,以上回答的都是兩者都學的。
我也面臨過這個問題。
首先定位是作為學習函數式語言的工具,既然是以學習為目的,在怎麼用上就可以不那麼考慮。從可以找到的入門資料來看,其實兩者豐富程度差不多。Scala有Martin Odersky的《Progamming in Scala》以及他在Cousera上的公開課(官網上有介紹),Haskell也有像《Learn You a Haskell for Great Good》和《real world haskell》這種圖書,edx上也有相應的公開課。Scala現在的火其實與Spark在數據分析中應用有一定的關係(個人感受,身邊學Scala的人都是用來做Spark的,而且很多都是把函數式特性當做語法糖,像Java一樣寫代碼),Haskell在這種應用就比較少。剩下就是對你的目的,函數式語言學習上來比較,Scala因為並不是純函數式語言,所以經常能寫出來能跑,但是不好看的代碼,而Haskell就沒這種選項了,就是大家經常說的寫起來更舒服,這對你拋棄之前的習慣有很大的好處,所以就這一項,Haskell更好。不過,我感覺就算你先學Scala,只要你認真想學函數式編程最終總會面臨想要去看看Haskell的時候,然後你就再也回不來了(我就是這樣的)。您要是對java比較熟悉,同時想兼顧就業,就學scala
要是想漲見識,掌握最前沿的編程技術,就學haskell
這有什麼好糾結的,當然是兩個都學啊。或者再搭車看看別的東西。七周七語言:理解多種編程范型
Scala絕對不適合新人學習,因為這個語言需要你了解Java和JVM基礎,在面向對象思維的基礎上學習函數式編程。Scala為了實用和兼容Java,再加上自身對函數式變成的追求,語言本身參雜了太多的特性和語法糖,顯得很不純粹。
scala.scala有coursera的視頻,可以立馬上手。還有intellij,很適合我這種編程小白上手。學了之後出了fp還能接觸一點面對對象的只是。會發現學c++會快一些(為啥?)haskell 沒有特別適合小白的書。要不然是太小白,要不然就是太難。&>&>&>&>&>&>&>&>&>&>&>&>&>囧了
樓主說接觸fp的工具
毫無疑問haskell, 很乾凈推薦閱讀:
※F# 是比 Scala 更好的語言嗎?
※如何看待reactive web框架Binding.scala ?
※現在有沒有公司使用 Scala 進行 Android 開發,如果有那麼使用哪些工具呢?
※到底該如何理解閉包?
※scala相對於python有何優缺點?