羞羞久久久久久,久久精品国产WWW456C0M,国产精品自产拍高潮在线观看,国产精品久久久久影院嫩草

MENU 服務(wù) 案例
網(wǎng)站建設(shè)-網(wǎng)站設(shè)計(jì)-北京網(wǎng)站建設(shè)-高端網(wǎng)站制作公司-尚品中國(guó)
我們通過(guò)擁抱變化創(chuàng)造
360°的品牌價(jià)值__
簡(jiǎn)體
簡(jiǎn)體中文 English

尚品簽約辰欣藥業(yè)股份有限公司官網(wǎng)建設(shè)

類型:尚品動(dòng)態(tài) 了解更多

[北京網(wǎng)站制作]學(xué)習(xí)函數(shù)式編程的理由

來(lái)源:尚品中國(guó)| 類型:網(wǎng)站百科| 時(shí)間:2011-10-20

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

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

使用Lisp開(kāi)發(fā)使我們的開(kāi)發(fā)周期迭代的如此之快,以至于有時(shí)當(dāng)競(jìng)爭(zhēng)對(duì)手在新聞發(fā)布會(huì)上推出他們的新功能一兩天后,我們就能復(fù)制出同樣的功能。當(dāng)報(bào)道產(chǎn)品發(fā)布的新聞?dòng)浾叽螂娫捊o我們時(shí),我們的產(chǎn)品已經(jīng)擁有了同樣的功能特征。

那些皈依函數(shù)式編程的人中,一直常見(jiàn)的考慮是:學(xué)習(xí)這種新的、函數(shù)式的語(yǔ)言“對(duì)你有好處”;就像是某些人建議說(shuō)每天30分鐘的健身房活動(dòng)會(huì)“讓你的身體健康”一樣。但這也同時(shí)暗示了這樣做的難度和需要的付出。Lisp語(yǔ)言跟Haskell、Ocaml和Scala語(yǔ)言不同,被認(rèn)為是出了名的難學(xué),可以說(shuō)是臭名昭著。文雅的人說(shuō)這是Lisp語(yǔ)言的“深度&廣度”的體現(xiàn)。不文雅的人說(shuō)這是“意淫”或“玩弄學(xué)術(shù)”或簡(jiǎn)單的“沒(méi)必要”。我認(rèn)為,它的難度跟你對(duì)它熟不熟悉有關(guān),而且,這種難度是一種重要指標(biāo)顯示:學(xué)習(xí)這樣的一種語(yǔ)言會(huì)讓你編程更有效率、能力更強(qiáng)。

它給你的初次印象不友善

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

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

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

新奇事物

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

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

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

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

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

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

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

眼見(jiàn)為實(shí)

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

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


 
  1. mapReducer data partitioner mapper reducer =  
  2. let partitions = partitioner data  
  3. in reduce reducer (map mapper partitions)  

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

讓我們花點(diǎn)時(shí)間考慮一下,如何用一種面向?qū)ο蟮恼Z(yǔ)言,以一種常見(jiàn)的面向?qū)ο蟮哪J絹?lái)清楚的描述這種架構(gòu)。至少你需要做的事情是定義用來(lái)描述mapper和reducer的聲明。如果你有好奇心,請(qǐng)?jiān)囍媚阆矚g的面向?qū)ο笳Z(yǔ)言描述一個(gè)最小化的“面向?qū)ο?rdquo;的MapReduce。我發(fā)現(xiàn)那是非常羅嗦的。如果使用Java風(fēng)格的語(yǔ)言,它會(huì)像這樣:

  1. interface Mapper {  
  2. B map(A input);  
  3. }  
  4.  
  5. interface Reducer {  
  6. Y reduce(X a, X b);  
  7. }  
  8.  
  9. abstract class MapReduce {  
  10. private Mapper mapper;  
  11. private Reducer reducer;  
  12.  
  13. public MapReduce(Mapper map, Reducer reduce) {  
  14. // ...  
  15. }  
  16.  
  17. public run(SeqenceType data) {  
  18. // ...  
  19. }  
  20. }  
  21.  

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

各有所求

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

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

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

補(bǔ)充

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

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

請(qǐng)記住,我們?cè)谶@里要做的這些目的是為了實(shí)際的技能和自我進(jìn)步。如果你能騰出時(shí)間學(xué)這些,就走出你的安逸環(huán)境,挑戰(zhàn)自己。

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

標(biāo)簽:網(wǎng)站制作

來(lái)源聲明:本文章系尚品中國(guó)編輯原創(chuàng)或采編整理,如需轉(zhuǎn)載請(qǐng)注明來(lái)自尚品中國(guó)。以上內(nèi)容部分(包含圖片、文字)來(lái)源于網(wǎng)絡(luò),如有侵權(quán),請(qǐng)及時(shí)與本站聯(lián)系(010-60259772)。
TAG標(biāo)簽:

如果您的網(wǎng)站可以增加轉(zhuǎn)化次數(shù)并提高客戶滿意度,該怎么辦?

預(yù)約專業(yè)咨詢顧問(wèn)溝通!

*尚品專業(yè)顧問(wèn)將盡快與您聯(lián)系

免責(zé)聲明

非常感謝您訪問(wèn)我們的網(wǎng)站。在您使用本網(wǎng)站之前,請(qǐng)您仔細(xì)閱讀本聲明的所有條款。

1、本站部分內(nèi)容來(lái)源自網(wǎng)絡(luò),涉及到的部分文章和圖片版權(quán)屬于原作者,本站轉(zhuǎn)載僅供大家學(xué)習(xí)和交流,切勿用于任何商業(yè)活動(dòng)。

2、本站不承擔(dān)用戶因使用這些資源對(duì)自己和他人造成任何形式的損失或傷害。

3、本聲明未涉及的問(wèn)題參見(jiàn)國(guó)家有關(guān)法律法規(guī),當(dāng)本聲明與國(guó)家法律法規(guī)沖突時(shí),以國(guó)家法律法規(guī)為準(zhǔn)。

4、如果侵害了您的合法權(quán)益,請(qǐng)您及時(shí)與我們,我們會(huì)在第一時(shí)間刪除相關(guān)內(nèi)容!

聯(lián)系方式:010-60259772
電子郵件:394588593@qq.com

現(xiàn)在就與專業(yè)咨詢顧問(wèn)溝通!

  • 全國(guó)服務(wù)熱線

    400-700-4979

  • 北京服務(wù)熱線

    010-60259772

信息保護(hù)中請(qǐng)放心填寫(xiě)
在線咨詢

免責(zé)聲明

非常感謝您訪問(wèn)我們的網(wǎng)站。在您使用本網(wǎng)站之前,請(qǐng)您仔細(xì)閱讀本聲明的所有條款。

1、本站部分內(nèi)容來(lái)源自網(wǎng)絡(luò),涉及到的部分文章和圖片版權(quán)屬于原作者,本站轉(zhuǎn)載僅供大家學(xué)習(xí)和交流,切勿用于任何商業(yè)活動(dòng)。

2、本站不承擔(dān)用戶因使用這些資源對(duì)自己和他人造成任何形式的損失或傷害。

3、本聲明未涉及的問(wèn)題參見(jiàn)國(guó)家有關(guān)法律法規(guī),當(dāng)本聲明與國(guó)家法律法規(guī)沖突時(shí),以國(guó)家法律法規(guī)為準(zhǔn)。

4、如果侵害了您的合法權(quán)益,請(qǐng)您及時(shí)與我們,我們會(huì)在第一時(shí)間刪除相關(guān)內(nèi)容!

聯(lián)系方式:010-60259772
電子郵件:394588593@qq.com

开阳县| 寻甸| 长春市| 高安市| 兴宁市| 安宁市| 长顺县| 韩城市| 玉林市| 邵阳县| 丽水市| 博客| 泸定县| 乐陵市| 遵化市| 龙山县| 深州市| 大冶市| 苗栗市| 寻乌县| 福海县| 晋中市| 张家界市| 齐齐哈尔市| 伽师县| 汤原县| 高密市| 平南县| 礼泉县| 若羌县| 东光县| 板桥市| 昌平区| 家居| 明星| 观塘区| 西青区| 施甸县| 孝感市| 金华市| 张家口市|