久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx

[成都網(wǎng)站制作]函數(shù)式編程很難,這正是你要學(xué)習(xí)它的原因

2023-01-15    分類: 網(wǎng)站制作

函數(shù)式編程很難,這正是你要學(xué)習(xí)它的原因

本文是從 Functional Programming Is Hard,That's Why It's Good 這篇文章翻譯而來。

很奇怪不是,很少有人每天都使用函數(shù)式編程語言。如果你用Scala,Haskell,Erlang,F(xiàn)#或某個Lisp方言來編程,很可能沒有公司會花錢聘你。這個行業(yè)里的絕大部分人都是使用像Python,Ruby,Java或C#等面向?qū)ο蟮木幊陶Z言——它們用起來很順手。不錯,你也許會偶然用到一兩個“函數(shù)式語言特征”,例如“block”,但人們不會去做函數(shù)式編程。

然而,很多年來,我們一直被教導(dǎo)說函數(shù)式編程語言很好很棒。我仍然記得當(dāng)我第一次閱讀ESR的著名的關(guān)于學(xué)習(xí)Lisp語言的論文時的困惑。也許大多數(shù)的人對Paul Graham 的《Beating The Averages》這篇文章更加熟悉:

使用Lisp開發(fā)使我們的開發(fā)周期迭代的如此之快,以至于有時當(dāng)競爭對手在新聞發(fā)布會上推出他們的新功能一兩天后,我們就能復(fù)制出同樣的功能。當(dāng)報道產(chǎn)品發(fā)布的新聞記者打電話給我們時,我們的產(chǎn)品已經(jīng)擁有了同樣的功能特征。那些皈依函數(shù)式編程的人中,一直常見的考慮是:學(xué)習(xí)這種新的、函數(shù)式的語言“對你有好處”;就像是某些人建議說每天30分鐘的健身房活動會“讓你的身體健康”一樣。但這也同時暗示了這樣做的難度和需要的付出。Lisp語言跟Haskell、Ocaml和Scala語言不同,被認(rèn)為是出了名的難學(xué),可以說是臭名昭著。

文雅的人說這是Lisp語言的“深度&廣度”的體現(xiàn)。不文雅的人說這是“意淫”或“玩弄學(xué)術(shù)”或簡單的“沒必要”。我認(rèn)為,它的難度跟你對它熟不熟悉有關(guān),而且,這種難度是一種重要指標(biāo)顯示:學(xué)習(xí)這樣的一種語言會讓你編程更有效率、能力更強。

它給你的初次印象不友善

我7歲時就開始編程,在漫長無聊的郊區(qū)夏季里,在我祖父的計算機上瞎搞一氣。我學(xué)了BASIC,用它在屏幕上畫一個蹦跳的球。我學(xué)了Pascal,用它寫了一個能通過PC喇叭放音樂的程序。大概10歲時我學(xué)了C語言,但遇到了一堵越不過去的墻,直到我上了高中。那就是:指針。即使不算這些該死的指針,我寫、讀、學(xué)習(xí)、練習(xí)中,同樣遭遇無數(shù)的失敗。我把祖父的硬盤給毀掉了兩次(一次屬意外),最后弄得不少次要自己重裝操作系統(tǒng)。我失敗,一遍遍的失敗。

也許你也有跟我相似的故事,也許是完全不同的一個。但我想,差不多所有學(xué)過編程的人都有過遇到困難的經(jīng)歷。我們在學(xué)了一些基本知識后,必然會遇到一些公認(rèn)的概念上的關(guān)口,比如“指針”。很多計算機科學(xué)教授會把指針描述為他們課程上的過濾網(wǎng)。如果你想成為一名優(yōu)秀的程序員,你必須要能理解指針。很少人能輕松的掌握它們。大多數(shù)人,包括我,則需要不斷的練習(xí)和參考例子來理解什么是指針、為什么它們很重要。

這種艱難的努力過程不是偶然的,是一種幾乎普遍的現(xiàn)象。指針是一種非常強大和基礎(chǔ)功能的概念。學(xué)會它能讓你成為一名更好的程序員,能讓你的思考更加形象化。即使你使用的語言并不提供指針這樣的特征,但跟指針類似的數(shù)據(jù)結(jié)構(gòu)和概念卻隨處可見。(成都網(wǎng)站制作)

新奇事物

一旦你學(xué)會了幾種語言后,所有的語言都開始看起來都很相似。知道Python的人學(xué)習(xí)Ruby可能不會遇到太多的問題,知道Java的人學(xué)習(xí)C#會感到很熟悉。不錯,也有意外的地方。Ruby愛好者在學(xué)習(xí)Python時會對它的comprehension感到吃驚,Java用戶會對C#里的委派摸不著頭腦。還是那句話,如果你只瞟一眼,它們都很相似。我可以打保票的說,如果你還不曾有過這樣的認(rèn)識,一旦你學(xué)了一種Lisp語言,你會發(fā)現(xiàn)所有的Lisp變種都很相似。

有人說,大部分人第一次使用Haskell或Ocaml時都完全的不知所措。見鬼了,在Haskell里,連分號都跟別人不一樣。這并不是語法的問題;Haskell和ML語言完全基于一種不同的概念、一種新的語言范式。你需要用不同的方式開發(fā)應(yīng)用,不同的方式組織應(yīng)用,不同的方式擴展應(yīng)用。

很多這樣的新概念都具有不可思議的強大力量。Haskell里的Monads 是跟指針一樣基礎(chǔ)且強大的概念(你很可能在不知道它叫什么的情況下就已經(jīng)使用過它們了)。所以,跟學(xué)了Java后再學(xué)C#不一樣,有志向?qū)W習(xí)函數(shù)式語言的人需要往回走的更遠,去學(xué)習(xí)更加基礎(chǔ)的概念后才能接下去學(xué)習(xí)。就像是完全再學(xué)習(xí)一次指針。并且,就像是當(dāng)年我們剛開始學(xué)習(xí)編程一樣,一些很大的概念看起來會讓人迷惑茫然,讓人沮喪,直到你去攻克(以及失敗)它們。

吃下你的藥丸,找到你的藥劑師

盡管不好學(xué),但我堅信,學(xué)習(xí)這些函數(shù)式編程語言會在職業(yè)上對你有好處。我相信有些人讀到這點時會眼睛翻起來向天看,很難想象出這些monoids 或 monad 會對他們在使用Java或C#時有用處。對我而言,我已經(jīng)不驚奇于由于這樣的思維而阻止他們學(xué)習(xí)函數(shù)式語言的現(xiàn)象;他們需要學(xué)習(xí)一種跟指針和遞歸一樣基礎(chǔ)的新概念。他們需要有一種只有專業(yè)人員在完成清晰的商業(yè)目標(biāo)時才具有的耐心和斗志。很少人能在過了可塑的年齡后還受得了挫折——一次又一次的挫折——否則我們現(xiàn)在都早成專家了,不是嗎?

還有更復(fù)雜的東西,有大量的語言和算法研究都是用函數(shù)式語言實施的(尤其是Haskell)。你很容易會被這些不熟悉的概念——例如分類學(xué)理論, half-finished abstractions,一些失敗的研究——弄的迷失方向。沒有一個清晰的指導(dǎo)(比如由一個實用主義的作者寫的一本好書),本來已經(jīng)很困難的學(xué)習(xí)任務(wù)變的更加可怕。

這些疊加起來的復(fù)雜因素導(dǎo)致了不出意外的結(jié)果:很多人不情愿在函數(shù)式編程學(xué)習(xí)中投入時間。很容易理解這種不情愿,“我干嘛不把花在學(xué)習(xí)這些東西的時間用在實現(xiàn)什么東西上呢?”但這種思路也表明了你永遠不愿意在任何新技術(shù)上浪費時間(只用自己熟悉的)。在一個像軟件技術(shù)這樣日新月異的產(chǎn)業(yè)里,我不認(rèn)為這是正確的判斷。

眼見為實

學(xué)習(xí)一種函數(shù)式編程語言最顯而易見的好處是,你能學(xué)會這種類型語言中的函數(shù)式概念。它能幫助你的大腦,讓它具有能非常清晰的思考和處理一些驚人的重大概念的能力。這并不是函數(shù)式編程具有魔法;各種語言和范式的出現(xiàn)都是為了應(yīng)對某一特定類別的問題。函數(shù)式編程的殺手锏正是應(yīng)對了當(dāng)今世界上日益增長的并行性編程和元數(shù)據(jù)編程趨勢。

例如,我們研究一個簡化的、本地版本化的Google著名的MapReduce范例。用函數(shù)式方式描述這種范例是不可思議的清晰簡潔: mapReducerdatapartitionermapperreducer= letpartitions=partitionerdata

inreducereducer(mapmapperpartitions)

讓這樣的代碼支持并行計算或分布式并行計算是輕而易舉的(對于本地并行計算,很多的功能包都支持“pmap”和“preduce“——只需要利用函數(shù)式語言的一些簡單特性)。像maps, partitions, generators, streams, reductions, folds, 已以及 function chaining等概念在各種的函數(shù)式編程語言中都大同小異,所以,任何對Lisp,Haskell,OCaml,甚至帶點函數(shù)式語言特征的語言——Python和Ruby熟悉的人,都會很容易的理解這里面的思想精華。

讓我們花點時間考慮一下,如何用一種面向?qū)ο蟮恼Z言,以一種常見的面向?qū)ο蟮哪J絹砬宄拿枋鲞@種架構(gòu)。至少你需要做的事情是定義用來描述mapper和reducer的聲明。如果你有好奇心,請試著用你喜歡的面向?qū)ο笳Z言描述一個最小化的“面向?qū)ο?rdquo;的MapReduce。我發(fā)現(xiàn)那是非常羅嗦的。如果使用Java風(fēng)格的語言,它會像這樣: interfaceMapper{ Bmap(Ainput); } interfaceReducer{ Yreduce(Xa,Xb); } abstractclassMapReduce{ privateMappermapper; privateReducerreducer; publicMapReduce(Mappermap,Reducerreduce){ //... } publicrun(SeqenceTypedata){ //... }

}

即使是沒有加入循環(huán)邏輯,這種缺乏函數(shù)式模式中常見的名詞和動詞的使用,使得MapReduce這種技術(shù)很難被定義。這種定義方式幾乎是滑稽可笑的,但它能讓你想到函數(shù)式概念。另外一個好例子是Scala語言如何利用完備的Java Fork/Join 類庫,把它輕松的集成的自己的自有語法中。

各有所求

所以,我鼓勵任何想進步的程序員:請考慮學(xué)習(xí)一種函數(shù)式語言。Haskell和OCaml都是極好的選擇,F(xiàn)#和Erlang也相當(dāng)?shù)牟诲e。它們都不好學(xué),但也許這是個好事。努力弄清楚你遇到的復(fù)雜的概念,看看是否有其他人正在利用這些概念;經(jīng)常的,你會在尋找這些不熟悉的概念的真正用意的時候?qū)崿F(xiàn)思想上的突破。

當(dāng)你開始學(xué)的時候,請注意,不要過于在意。就像其他任何需要你花時間和精力的事情一樣,過度的在函數(shù)式編程上進行精力上的投資是很危險的。掉進了認(rèn)知能力的陷阱后你的投資會血本無歸。你很容易會忘掉世界上還有無數(shù)種計算模型,你更容易忘掉有多少種優(yōu)秀的軟件根本沒有使用任何的函數(shù)式概念。

學(xué)習(xí)的道路會越來越難走,但從另一方面說,在你日常的編程中,你會發(fā)現(xiàn)有越來越多的可以使用的重要概念和模型。對于這樣緊湊的編程風(fēng)格你會越來越適應(yīng),必然,你也會對如何成為一名更好的軟件工程師有了新的認(rèn)識。

補充

有不少校對這篇文章的人在看完文章后都問了我一個同樣的問題:“聽起來不錯,大衛(wèi),可是我應(yīng)該學(xué)習(xí)那種語言呢?”當(dāng)然,這是他們給我出的難題。

我想,如果你是一個很有經(jīng)驗的程序員,這最能“應(yīng)付”這個問題的答案是:“選一種符合你的需求的”。如果你需要在JVM上工作,選擇Scala或Clojure。如果你想能快速的開發(fā)大型分布式軟件系統(tǒng),選擇Erlang。如果你想要一種具有超強編譯器的超能干活的語言,請選擇Haskell或RCaml。如果你想要一種比Ruby或Python更有能力的原型工具,選擇Scheme。

請記住,我們在這里要做的這些目的是為了實際的技能和自我進步。如果你能騰出時間學(xué)這些,就走出你的安逸環(huán)境,挑戰(zhàn)自己。

因為我已經(jīng)學(xué)習(xí)了Lisp和Erlang,而且使用OCaml做專業(yè)工作,我決定研究一下Haskell,這完全是另外一個世界。我發(fā)現(xiàn)唯一能幫助我參透這種語言的途徑是依賴Learn You A Haskell和 Real World Haskell 這兩本有用的指導(dǎo)材料。這些書寫的非常好,很有價值,而且可以免費在網(wǎng)上找到。如果你想試一下Haskell,這些書可以當(dāng)作你的尋寶圖。(高端網(wǎng)站建設(shè))

當(dāng)前名稱:[成都網(wǎng)站制作]函數(shù)式編程很難,這正是你要學(xué)習(xí)它的原因
鏈接分享:http://www.js-pz168.com/news30/230430.html

網(wǎng)站建設(shè)、網(wǎng)絡(luò)推廣公司-創(chuàng)新互聯(lián),是專注品牌與效果的網(wǎng)站制作,網(wǎng)絡(luò)營銷seo公司;服務(wù)項目有網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx
亚洲免费观看在线视频| 青青青爽久久午夜综合久久午夜 | 久久久久久久久久久电影| 国产精华液一区二区三区| 日本中文在线一区| 日韩中文字幕1| 国产成人综合视频| 精选一区二区三区四区五区| 色一情一乱一乱一91av| 精品国产乱码久久久久久1区2区 | 久久久国产精华| 亚洲精品福利视频网站| 国产在线一区观看| 亚洲成人激情自拍| 成人午夜电影小说| 欧美午夜视频在线| 91精品福利在线一区二区三区| 国产精品久久久久aaaa| 久久av中文字幕片| 国产一区再线| 欧美日韩精品一区二区三区四区 | 色妞www精品视频| 久久女同互慰一区二区三区| 午夜精品一区二区三区三上悠亚| 成人的网站免费观看| 亚洲春色在线视频| 久久亚洲私人国产精品va媚药| 亚洲高清免费视频| 91在线视频网址| 色综合激情五月| 国产女主播一区| 久久精品国产77777蜜臀| 国产精品伊人日日| 91精品午夜视频| 一区二区三区欧美久久| 成人h动漫精品一区二| 相泽南亚洲一区二区在线播放| 精品粉嫩aⅴ一区二区三区四区| 亚瑟在线精品视频| 99re在线视频上| 欧美日韩免费观看一区二区三区 | 欧美午夜不卡视频| 亚洲视频免费看| 成人黄色综合网站| 色综合激情久久| 中文字幕一区二区三区四区 | 亚洲欧美日韩国产一区二区三区| 国产成人免费视| 亚洲午夜精品久久| 国产精品麻豆一区二区| 国产高清精品久久久久| 夜夜爽www精品| 国产精品区一区二区三区| 国产激情偷乱视频一区二区三区| 丝袜美腿玉足3d专区一区| 国产情人综合久久777777| 国产一区二区不卡| 色综合视频在线观看| 亚洲同性gay激情无套| 成人激情黄色小说| 欧美日韩免费观看一区三区| 亚洲一区二区三区四区五区黄| 91文字幕巨乱亚洲香蕉| 91精品国产综合久久小美女| 天天操天天色综合| 狼狼综合久久久久综合网| 精品国产三级电影在线观看| 精品午夜一区二区三区在线观看| 日本一区二区三区www| 欧美国产亚洲另类动漫| 成人免费视频一区| 欧美日韩一区二区在线视频| 亚洲成人免费视频| 久久久久资源| 欧美精彩视频一区二区三区| 中文字幕第一页久久| 97se国产在线视频| 色哟哟一区二区三区| 亚洲综合免费观看高清完整版在线| 粉嫩av一区二区三区免费观看| 日韩精品一区二区三区中文不卡| 狠狠色2019综合网| 日本丰满少妇一区二区三区| 亚洲国产精品久久一线不卡| 欧美13一14另类| 国产精品久线观看视频| www久久99| 久久久国产午夜精品| 成人国产精品免费观看视频| 欧美一区二区三区成人| 国内精品伊人久久久久影院对白| 在线观看网站黄不卡| 五月天中文字幕一区二区| 日韩av高清在线播放| 亚洲精品视频在线看| 精品视频一区二区| 国产精品欧美精品| 国产98在线|日韩| 久久精品夜夜夜夜久久| 91亚洲资源网| 精品电影一区二区| av亚洲精华国产精华精华| 欧美xxxxxxxx| 波多野结衣欧美| 欧美不卡一区二区| 波多野结衣视频一区| 欧美成人免费网站| 99久久er热在这里只有精品15| 精品久久99ma| 99re在线视频这里只有精品| 久久久美女毛片| 94-欧美-setu| 国产欧美一区二区精品婷婷| 91视频91自| 国产拍欧美日韩视频二区| 成人区精品一区二区| 国产精品免费看片| 久久久99爱| 亚洲美女视频一区| 天天爽天天狠久久久| 亚洲成a人v欧美综合天堂| 一本色道久久99精品综合| 日韩av一区二| 欧美色涩在线第一页| 国产一区二区在线看| 日韩欧美国产综合一区 | 亚洲人成网站色在线观看| 欧美在线视频一区二区三区| 亚洲宅男天堂在线观看无病毒| 日韩在线观看电影完整版高清免费| 亚洲国产精品久久艾草纯爱 | 欧美性videosxxxxx| 另类人妖一区二区av| 欧美日韩的一区二区| 成人午夜激情片| 国产日韩三级在线| 久久久综合香蕉尹人综合网| 一区二区三区在线视频观看58 | 欧美亚男人的天堂| 国产激情一区二区三区| 久久亚洲欧美国产精品乐播| 国内精品视频免费| 亚洲一区二区三区四区五区黄| 色素色在线综合| 国产麻豆精品theporn| 精品国精品国产| 国产欧美日韩综合精品二区| 亚洲一区二区在线观看视频| 在线精品视频一区二区| 国产v综合v亚洲欧| 中文字幕欧美国产| 日本精品国语自产拍在线观看| 日韩经典中文字幕一区| 6080午夜不卡| 91精品综合久久| 一区二区久久久久久| 欧美性大战xxxxx久久久| 不卡的av在线播放| 亚洲色图色小说| 色999日韩国产欧美一区二区| 国产成人av一区二区| 国产精品网站在线观看| 亚洲 国产 日韩 综合一区| 国内精品伊人久久久久影院对白| 久久日一线二线三线suv| 欧美精品123| 捆绑变态av一区二区三区| 欧美精品一区二区三区高清aⅴ| 免费看污久久久| 久久aⅴ国产欧美74aaa| 久久久久久免费网| 日韩欧美手机在线| 国产精品99久久久| 一区视频在线播放| 欧美综合一区二区| 99re国产在线播放| 天堂在线一区二区| 精品免费日韩av| 欧美连裤袜在线视频| 国模少妇一区二区三区| 中文字幕国产一区| 91久久精品国产91性色tv| eeuss影院一区二区三区| 一区二区三区在线免费播放| 欧美肥大bbwbbw高潮| 精品亚洲一区二区三区四区五区高| 蜜桃久久久久久久| 国产人成一区二区三区影院| 色综合色综合色综合色综合色综合| 成人黄页毛片网站| 亚洲国产欧美日韩另类综合| 欧美一区二区三区日韩| 久久久久久九九| 国产一区二区三区四区五区入口| 国产精品第一页第二页第三页| 欧美三级日本三级少妇99| 国产日韩亚洲精品| 激情综合五月天| ...中文天堂在线一区| 538在线一区二区精品国产|