以函數編程語言作為入門的編程語言有什麼好處?
01-01
作為一名編程初學者,跳過C/C++/Java等大眾類語言,直接學習Lisp、Haskell等函數式編程語言有什麼好處?
瀉藥!和「大眾類語言」相比沒有顯著的好處
我個人覺得,其實你從哪裡開始都無所謂。你從C++入門跳Haskell也好,從Haskell入門跳C++也好,這個過程都是無比的困難的。但是一個靠譜的程序員,這兩類語言都得學會,所以隨便吧。話說從C#開始容易寫出一些好玩的東西,自信心建立了,學什麼都有毅力。如果你喜歡數學的話,從Haskell開始也可以讓你感受到無比的樂趣。
以函數式語言入門,應該會有更廣闊的視野,因為命令式語言的範圍應用太廣泛了,沒辦法躲過去。換句話說,現在還是需要你會一門命令式語言才能讓你比較容易找到工作。但工作中,你會發現編程思維以及視野會對你的編程能力有著很大的影響。
現在很多流行的語言,比如python,ruby尤其是javascript都對函數式編程提供了支持。有了函數式編程思維,可以更好的理解這些語言。
其實作為每天寫Scheme的碼農,我覺得不用擔心函數式語言沒有實際應用,而是要擔心大家用命令式的思維進行函數式編程。沒設么好處,其他範式你早晚要學。
我感覺Haskell很適合新手, 因為很多錯誤都會被compiler抓到.
學會讀compiler的error就完美解決問題了.而且會讓人寫東西的範式非常的general, 比如某些演算法是在array上的, 而其實可以輕易地改為演算法在任何一個滿足array那種讀取數據的方式的函數上... Int-&>a.實際上壞處是很明顯的, 很容易就會發現所有其他語言做很多事情異常的痛苦, 讓人流淚. 想要當個好的碼農也不是很容易. 這幾天才在慶幸自己再也不用寫java了.謝邀。
我完全符合題目描述,但我沒辦法比較兩者,因為我從一開始就學了lisp,一行java都不會。。。一個人沒法評價他不了解的那部分。
等我學了java啊,c啊什麼的,再來回答這個問題吧。
目測functional programming更抽象,更凝練,更美,更好寫(最後一點見仁見智)。壞處是只能自己high,找工作用不著,還會被人說,你學lisp幹啥?什麼?!你還學haskell???。。。都說了我不打算做程序員,我寫著玩不行嗎(此處插入噘嘴表情)。好處:會像bhuztez一樣整天安利奇怪的語言壞處:會像我一樣整天安利奇怪的語言
就像小學一年級老師對你說「為了更本質地理解自然數,為了讓大家一開始就不走歪路,我們學校決定從皮亞諾算術開始學數學!怎麼樣,很棒吧?」
我估計總有編程高手不熟悉任何一門函數式語言,這說明函數式不是必須的。但是相反不懂至少一門命令式語言的編程高手估計是沒有的。
函數式在這麼多年的語言戰爭中始終沒有壓倒對方,說明它在可普及性上還是有不足的。
我個人喜歡haskell,但是我不會推薦初學者跳過c++或者java,直接來學習。
說到底在我看來,關鍵是要有對比,只學java等你的思路會受限,但是只學haskell不也一樣思路受限了嗎?
而且說到底,還有一個重要的問題是你能去應用嗎?初學者可以找到的實習/工作機會裡面更可能需要的java還是haskell呢?好處就是,你不得不得為找工作再多學一門語言。
引用一下教我Haskell的教授說的話,Fucntioanal programming 可以給你一些獨特的編程思路,在你以後做其他編程的時候,你也能夠從中獲益。對於一個初學者來說,學習Haskell可以讓你更好得理解Recursion和Type,因為在C和Java裡面,很多type都可以在你不知道的情況下轉換。還有直接學C和Java 的話很多問題都會想用loop來解決,有時候遞歸是更好的辦法。同時你學了Haskell之後會驚喜地發現原來很多問題都是可以用這麼美麗地方法去解決。
兼聽則明
當然有好處!我是來反對上面一票說沒有好處的人。只是你要付出很多代價,你大約會比別人多花3倍的時間。回顧OOP的歷史,沒有對函數式編程的深刻理解是無法從本質上理解OOP里那些光輝的理念的。那種從痛苦中走出來的看見光明的一刻。另外,函數式編程的技能會讓你以後的代碼更有效率。編程沒什麼特別之處。 Keep coding,man.
如果你嘗試了下,發現挺難的,就應該立刻回到oop的方式,適合自己才是好的
推薦閱讀: