




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第1章簡介不走尋常路七周七語言:理解多種編程范型本書共介紹了七種不同的編程語言。對(duì)于每種語言,分別介紹了各自的特性、應(yīng)用,以及編程入門知識(shí)和關(guān)鍵編程范型,還帶領(lǐng)讀者使用能夠代表該語言最重要特性的技術(shù),解決某個(gè)不尋常的問題,使其充分掌握每種語言。本節(jié)為大家介紹不走尋常路。第1章簡介人們出于各種目的學(xué)習(xí)自然語言。學(xué)母語是為了生存,為了日常生活中與人正常交往。學(xué)外語的目的可就五花八門了。有時(shí)候,為了未來的職業(yè)發(fā)展或?yàn)榱诉m應(yīng)日益變化的生活環(huán)境,你不得不學(xué)習(xí)外語;但有時(shí)候,你決心征服一門外語,不是因?yàn)椴坏貌贿@么做,而是因?yàn)榘l(fā)自內(nèi)心地想學(xué)。外語能帶你領(lǐng)略一片未曾見過的風(fēng)景。你甚至可能領(lǐng)悟一個(gè)道理:每學(xué)一門
2、新的語言,思維方式都會(huì)發(fā)生改變。編程語言亦是如此。在這本書中,我將為你介紹七門各不相同的語言。不過,我不會(huì)像你的媽媽那樣將吃的直接喂到你嘴邊。我更愿意做你的導(dǎo)游,帶你體驗(yàn)一次啟迪心智之旅,并由此改變你看待編程的視角。寫這書的目的不是讓你成為專家,而是教會(huì)你比更實(shí)用的知識(shí)1.1不走尋常路假如我想新學(xué)一門編程語言或一種編程框架,一般會(huì)找一篇速成互動(dòng)教程看看。因?yàn)檫@類教程中,先做什么、后做什么都已精心設(shè)計(jì)好。通過它們,我們可以更容易體會(huì)語言的妙處所在。當(dāng)然,扔掉教程,直接動(dòng)手實(shí)踐也未嘗不可,但說白了,我就是想盡快發(fā)現(xiàn)語言的動(dòng)人心弦之處,盡快對(duì)它的語法糖和核心概念有個(gè)大體印象。然而多數(shù)情況下,我找不到
3、稱心如意的教程。受到篇幅限制,那些教程往往只介紹各門語言間相去無幾的皮毛。而這些皮毛,我又早已熟知。若想領(lǐng)會(huì)一門語言的精髓,它可就無能為力了。我想要的是那種痛快淋漓、深入探索語言本質(zhì)的感覺。本書將會(huì)給你這種感覺。不是一次,而是七次。你將從書中找到以下問題的答案。語言的類型模型是什么?強(qiáng)類型()或弱類型(語言),靜態(tài)類型()或動(dòng)態(tài)類型()。本書側(cè)重于介紹強(qiáng)類型語言,但各種靜態(tài)類型和動(dòng)態(tài)類型語言也都有所涉及。你將看到,語言在類型模型間的權(quán)衡會(huì)對(duì)開發(fā)者產(chǎn)生何種影響。語言的類型模型會(huì)改變你對(duì)問題的處理方式,還會(huì)控制語言的運(yùn)行方式。就類型模型而言,書中的每門語言都堪稱獨(dú)樹一幟。語言的編程范型是什么?是面
4、向?qū)ο螅?,)、函?shù)式、過程式,還是它們的綜合體?本書介紹的語言涵蓋了種編程范型,有些語言還由幾種范型組合而成。你將看到一門基于邏輯的編程語言()、兩門完全支持面向?qū)ο笏枷氲恼Z言(和)、四門帶有函數(shù)式特性的語言(、和)及一門原型語言()。這里有這樣的多范型()語言,也有這種多方法()語言,后者甚至允許你實(shí)現(xiàn)自定義范型。本書最重要的任務(wù)之一,就是學(xué)習(xí)新的編程范型。怎樣和語言交互?語言可編譯也可解釋,可以有虛擬機(jī)也可以沒有。在本書中,如果某門語言帶交互命令行,將先通過交互命令行探索這門語言,當(dāng)我們處理規(guī)模較大的項(xiàng)目時(shí),還會(huì)轉(zhuǎn)而采用文件編程。我們接觸的項(xiàng)目不會(huì)特別大,因此無需深入研究打包()模型。語言
5、的判斷結(jié)構(gòu)()和核心數(shù)據(jù)結(jié)構(gòu)是什么?或許你會(huì)驚訝,在作判斷時(shí),居然如此多的語言都用到了與和的各種變型都不相同的結(jié)構(gòu)。你會(huì)見識(shí)到的模式匹配,還有的合一)。至于數(shù)據(jù)結(jié)構(gòu),集合()在任何語言中都扮演著至關(guān)重要的角色。對(duì)這類語言,集合刻畫了語言特征,而在和等語言中,集合更可謂無所不在,它們決定著用戶體驗(yàn),若沒了它們,語言勢必成為一盤散沙。因此,無論用哪一類語言,都必須全面、透徹地理解集合。哪些核心特性讓這門語言與眾不同?有些語言支持并發(fā)編程的高級(jí)特性,有些語言提供獨(dú)一無二的高級(jí)結(jié)構(gòu),比如的宏()和的消息解釋();有些語言包含性能強(qiáng)勁的虛擬機(jī),如的A它能讓構(gòu)建的容錯(cuò)分布式系統(tǒng)遠(yuǎn)遠(yuǎn)快于其他語言;有些語言提
6、供專門針對(duì)特定問題的編程模型,比如利用邏輯規(guī)則解決約束問題。就算這些問題全被你弄個(gè)一清二楚,你仍然成不了語言專家,哪怕只是其中一門語言。但你會(huì)明白,這幾門語言各自擁有哪些獨(dú)門絕技。下面,我們先看看本書介紹了哪幾門語言。1.2語言從眾多語言中,挑出本書包含的幾門語言,這一過程也許不像你想得那么復(fù)雜。我們只不過發(fā)了些調(diào)查問卷,向本書的潛在讀者請(qǐng)教了一番。調(diào)查數(shù)據(jù)匯總上來時(shí),有八門語言入選希望最大。不過,我先把踢了出去,因?yàn)樗鼘?shí)在是過于熱門了,取而代之的是原型語言中熱門程度僅次于的。隨后,我又把踢了出去,因?yàn)槲抑幌虢o面向?qū)ο笳Z言一個(gè)名額,而的票數(shù)多于。同時(shí),這也給一個(gè)出人意料的候選者讓出了位置名單上
7、位列前十的1下面,我給出成功入圍本書的最終名單以及挑選它們的理由。b這門面向?qū)ο笳Z言高票當(dāng)選,因?yàn)樗粌H好用,而且好讀。我曾經(jīng)考慮過不介紹任何一門面向?qū)ο笳Z言,但我又想在其他編程范型與面向?qū)ο缶幊讨g作一些比較,因此,至少介紹一門面向?qū)ο笳Z言還是有必要的。相比于大多數(shù)程序員的日常用法,我想把它挖掘得更深入一些,以揭示設(shè)計(jì)者的良苦用心。我最終決定重點(diǎn)介紹元編程()r因?yàn)樗梢杂脕頂U(kuò)展的語法。對(duì)于榜上有名的結(jié)果,我還是相當(dāng)認(rèn)可的。o和一樣,也是本書頗具爭議的語言。它雖與商業(yè)成功無緣,但其兼具簡單性和語法一致性的并發(fā)結(jié)構(gòu),卻是十分重要的思想。它的最簡語法()功能強(qiáng)大,與的相似性也頗能給人留下幾分印象
8、。不僅和一樣同為原型語言,還有著獨(dú)一無二、韻味無窮的消息分發(fā)機(jī)制,因此在眾多編程語言之中,它也占有小小的一席之地。1沒錯(cuò),年事已高,但它仍然威力無窮。它能輕松解出數(shù)獨(dú)問題,這著實(shí)讓我大開眼界。用或語言時(shí),有些難題我殫精竭慮方能解決,用卻能干凈利落地搞定。承蒙發(fā)明者出手相助,我得以深刻體會(huì)到之妙,而且也正是深受影響,才得以問世。如果你此前從未用過,我保證,它定會(huì)帶給你驚喜。,作為運(yùn)行于虛擬機(jī)上的新一代語言,為系統(tǒng)引入了強(qiáng)大的函數(shù)式思想,同時(shí)也并未丟棄面向?qū)ο缶幊??;仡櫄v史,我發(fā)現(xiàn)和有著驚人的相似之處,因?yàn)閺倪^程式編程過渡到面向?qū)ο缶幊唐陂g,同樣起到了舉足輕重的作用。當(dāng)你真正融入社區(qū)之后,你就會(huì)明
9、白,為什么對(duì)于函數(shù)式語言程序員來說,是異端邪說,而對(duì)于開發(fā)者來說,是天降福音。,作為名單上歷史最悠久的語言之一,不僅是一門函數(shù)式語言,而且在并發(fā)、分布式編程、容錯(cuò)等諸多方面都有優(yōu)異表現(xiàn),真是想不火都難。(新興的基于云的數(shù)據(jù)庫)的創(chuàng)始人就選擇了,并且義無反顧地一直用它,只要花上點(diǎn)時(shí)間了解這門分布式語言,你就會(huì)明白原因所在。在幫助下,設(shè)計(jì)帶有并發(fā)、分布式、容錯(cuò)等特征的應(yīng)用程序?qū)⒆兊脽o比簡單。這又是一門虛擬機(jī)語言,但正是這門方言,徹底顛覆了我們?cè)谔摂M機(jī)上并發(fā)編程的思考方式。它是本書唯一在版本數(shù)據(jù)庫中使用同一種策略管理并發(fā)的語言。作為方言,或許擁有本書所有語言中最靈活的編程模型,因此絕不缺乏號(hào)召力。與
10、其他方言不同的是,它不會(huì)帶那么多括號(hào),還有眾多庫和在各平臺(tái)上的廣泛部署作為堅(jiān)強(qiáng)后盾。它是本書唯一的純函數(shù)式語言,這也意味著,它根本不存在可變狀態(tài):只要使用相同的輸入?yún)?shù),去調(diào)用相同的函數(shù),就會(huì)返回相同的輸出。在所有強(qiáng)類型語言中,擁有最令人稱羨的類型模型。和一樣,它也需要你花一些時(shí)間理解,但你得到的回報(bào)絕對(duì)物超所值。如果名單上沒有你鐘愛的語言,我深感抱歉。老實(shí)說,還真有語言狂熱分子給我發(fā)過好幾封恐嚇信。在本節(jié)開始提到的民意調(diào)查中,我們總共列出了幾十門語言。我挑的這幾門語言未必是其中最出色的,但它們特點(diǎn)突出、個(gè)性鮮明,都具有重要的學(xué)習(xí)價(jià)值。學(xué)會(huì)如何學(xué)習(xí)1.3誰應(yīng)該買這本書如果你是一名稱職的程序員,
11、想提高自己的編程水平,那你應(yīng)該買這本書。這話說來有幾分含糊,請(qǐng)容我解釋一二。學(xué)1會(huì)如何學(xué)習(xí)是出版社的創(chuàng)始人之一,我這本書就是他們出版的。他每年都鼓勵(lì)數(shù)以千計(jì)的學(xué)生去學(xué)一門新語言。學(xué)過各式各樣的語言后,你最少也能挑出一門得心應(yīng)手的語言用用,并把其他語言的精華思想融入到這門語言的代碼中去。這本書的寫作過程已經(jīng)深刻影響了我所編寫的代碼。相比于過去,我編寫的代碼中,函數(shù)式味道更加濃郁,且因重復(fù)部分變少而增加了可讀性。我在代碼中盡量縮減了可變變量的數(shù)量,還利用代碼塊和高階函數(shù)寫出了更有效的代碼。此外,我也用到一些不大符合慣例,但會(huì)讓代碼更簡明的技巧。學(xué)語言最理想的情況,是由它引領(lǐng)你踏上一條嶄新的職業(yè)道路
12、。每十年左右,編程范型都會(huì)發(fā)生一次變革。幾年前,我感覺越來越別扭,于是就去體驗(yàn)了一把,看看怎么用它進(jìn)行開發(fā)。經(jīng)過幾個(gè)過渡項(xiàng)目的磨合,我開始重點(diǎn)發(fā)展方向上的業(yè)務(wù),從此徹底告別。我的生涯始于玩票,但隨之而來的,卻是事業(yè)的不斷發(fā)展壯大。亂世英雄亂2世英雄說到本書讀者,他們大概還沒那么老,不至于經(jīng)歷過上一次編程范型的更新?lián)Q代?;叵雱倱Q到面向?qū)ο缶幊棠菚?huì)兒,我們遇到過好幾次挫折,不過話說回來,當(dāng)時(shí)的結(jié)構(gòu)化編程范型已完全無法應(yīng)付現(xiàn)代應(yīng)用的復(fù)雜性。編程語言的成功為應(yīng)用開發(fā)打了一針強(qiáng)心劑,也因此奠定了面向?qū)ο缶幊踢@種新編程范型的地位。不過,當(dāng)時(shí)很多開發(fā)者已深深陷入了過時(shí)技術(shù)的桎梏中。他們?nèi)粝腠樌^渡到新編程范
13、型,必須由內(nèi)到外重新打造思考編程的方式、手頭用于開發(fā)的工具、設(shè)計(jì)應(yīng)用程序的方法等才行。現(xiàn)在,我們可能正身處又一次變革的進(jìn)程當(dāng)中。這一次變革,新的計(jì)算機(jī)設(shè)計(jì)架構(gòu)將成為主要推動(dòng)力。在本書的七門語言中,五門都擁有強(qiáng)大的并發(fā)模型(和不在其列)。無論你用的編程語言會(huì)不會(huì)一夜之間物是人非,我敢向你保證,在應(yīng)對(duì)這場變革之時(shí),本書介紹的所有語言都能拿出令人信服的策略??纯磳?duì)的實(shí)現(xiàn)、的、的任其崩潰()哲學(xué),再看看如何把可變狀態(tài)拋到九霄云外、如何利用版本控制解決最為棘手的并發(fā)問題,你就會(huì)相信這一點(diǎn)。當(dāng)然,那些看似平凡的語言也不可小覷,它們帶來的啟示同樣讓人嘖嘖稱奇。這門用于多個(gè)云數(shù)據(jù)庫后臺(tái)的語言就是個(gè)極佳的例子。
14、正是以為基礎(chǔ),博士創(chuàng)立了這門語言。超越語法誰不應(yīng)該買這本書如果你沒有讀過本節(jié),或讀過但不認(rèn)同其中觀點(diǎn),那你不應(yīng)該買這本書。買這本書等于跟我做了筆買賣:你認(rèn)可我把重點(diǎn)放在編程語言本身而非詳盡的安裝過程上,我承諾在有限時(shí)間內(nèi)盡可能多地授業(yè)解惑。你要學(xué)會(huì)利用搜索那些細(xì)枝末節(jié),可別指望我會(huì)幫你解決各種安裝問題。如此一來,我才有空間深入挖掘語言本身,而你在讀過本書后,也才能了解更多語言方面的細(xì)節(jié)。請(qǐng)務(wù)必明白,這七門語言,無論教還是學(xué),對(duì)我們而言都是一個(gè)宏偉目標(biāo)。作為讀者,你的腦袋必須多騰出點(diǎn)地方,以容納七種不同的語法風(fēng)格、四種編程范型、四十年語言開發(fā)的寶貴經(jīng)驗(yàn);作為作者,我必須盡量全面地涵蓋各個(gè)主題以便
15、讓你更好地理解語言。為了寫好這本書,我老早就學(xué)過了這七門語言中的幾門,但若想完美地兼顧每門語言所有最重要的細(xì)節(jié),還需要一些化繁為簡的本事才行。超1越語法想真正理解語言設(shè)計(jì)者的思路,就必須有超越基本語法的覺悟。這意味著,你不能僅僅停留在編寫這種普通代碼,甚至斐波那契數(shù)列代碼的水平。如果是,你得會(huì)寫一些元編程代碼;如果是,你必須會(huì)解決完整的數(shù)獨(dú)問題;如果是,你要懂得如何寫一個(gè)監(jiān)控程序,這程序不僅能檢測崩潰進(jìn)程,還能啟動(dòng)另一進(jìn)程以接替崩潰進(jìn)程的工作,或?qū)⒈罎⑦M(jìn)程的相關(guān)信息告知用戶。在地帶你超越語法之前,我要先向你作個(gè)承諾,同時(shí)也不得不作個(gè)讓步。承諾是:決不會(huì)淺嘗輒止、敷衍了事;讓步是:無法像專業(yè)語言
16、書籍那樣涵蓋所有基礎(chǔ)知識(shí)。我?guī)缀鯖]有涉及異常處理,除非它是哪一門語言的基本特性;我也沒有詳細(xì)介紹包模型,因?yàn)槲覀冏龅亩际切№?xiàng)目,沒有必要用到打包模型;還有,不少原始類型()我也只字未提,因?yàn)榻鉀Q本書提出的基本問題時(shí),用不到的原始類型自然不必提到。不是安裝指南不是安裝指南寫這書最大的挑戰(zhàn)來自于平臺(tái)。我與各種書的不少讀者都有過直接接觸,他們所用的平臺(tái)包括三種平臺(tái)、以及至少五種系統(tǒng)。我也在各大留言板上看過數(shù)不勝數(shù)的平臺(tái)之爭。把七門語言安裝到七種平臺(tái)上,這別說一位作者,就算多位作者合著,估計(jì)也是無解難題。我無意解決七門語言的安裝問題,所以就不費(fèi)那精力去琢磨多平臺(tái)了。我猜你不會(huì)有興趣讀一份老掉牙的安裝指
17、南。語言和平臺(tái)都在不斷發(fā)生變化。我只要告訴你去哪里安裝語言、我用的是什么版本就夠了。這樣你就可以和大家一樣,照著最新的安裝指南去做。一步步地教你安裝語言真沒什么必要。不是編程參考不3是編程參考為保證本書質(zhì)量,我們盡最大努力對(duì)書中代碼進(jìn)行了審閱,其中一部分還有幸請(qǐng)到了語言設(shè)計(jì)者親自審閱。在經(jīng)歷出版前的層層嚴(yán)格審閱之后,我確信,這些代碼足以深刻闡釋每一門語言的精髓。不過,當(dāng)你自己試著上手用這七門語言編程時(shí),我再怎么玩命,也不可能把一份全面的語言參考擺在你面前。請(qǐng)你多多諒解。關(guān)于這點(diǎn),我想拿平時(shí)會(huì)話所用的語言打個(gè)比方。觀光旅游時(shí)學(xué)到的語言,和作為母語而熟知的語言相去甚遠(yuǎn)。我英語說得流暢自然,西班牙語
18、卻磕磕絆絆。還有三門語言,我也會(huì)說若干短語。我能在日本吃飯時(shí)點(diǎn)魚,也能在意大利問人找洗手間。但我心知肚明的是,自己非母語的表達(dá)能力實(shí)在有限。說到編程,我的、等幾門語言都十分熟練。不甚熟練的語言也不少,其中還包括本書介紹的幾門語言。說老實(shí)話,以我現(xiàn)在的水平,七門語言中有六門都不是非常得心應(yīng)手。近五年當(dāng)中,我一直全職編寫代碼,但說到其他語言,我是既說不出怎么用編個(gè)服務(wù)器,也說不出如何用編個(gè)數(shù)據(jù)庫。如果真去寫一本這七門語言的參考大全,那我一定死得很慘。就算從中隨便挑一門語言寫編程指南,也至少會(huì)有咱們這本書差不多厚。我能提供各種材料,幫你輕松入門;也能帶你體驗(yàn)每門語言的真實(shí)范例,讓你親眼見識(shí)它們的程序代碼;還能盡量編譯所有代碼,確保它們正常運(yùn)行。但如果你在試驗(yàn)這些語言時(shí),也希望我能提供指導(dǎo),那我真是心有余而力不足。這七門語言都有非常優(yōu)秀的支持社區(qū),這也是我選擇它們的原因之一。而且在每個(gè)習(xí)題環(huán)節(jié),我還盡量保留了一個(gè)搜索語言相關(guān)資源的問題。用意很明顯讓你學(xué)會(huì)自力更生。嚴(yán)格督促嚴(yán)格督促本書為你鋪就的學(xué)習(xí)途徑,較之網(wǎng)上那些分鐘教程可謂略勝一籌。我知道,你我同為善用之人,隨便搜索書中某門語言的簡明教程自是不在話下。不過本書的高明之處在于,它會(huì)帶你踏上快速成長的互動(dòng)之旅。你每周都會(huì)遇到一些小型的編程挑戰(zhàn)和一個(gè)實(shí)戰(zhàn)項(xiàng)目。解決它們雖非易事,但這既能增長你的見識(shí),還可讓你體驗(yàn)編程之樂
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 緊固件銷售與市場拓展考核試卷
- 幕墻施工中的精細(xì)化管理考核試卷
- 原油加工過程質(zhì)量控制考核試卷
- 紡織品企業(yè)綠色供應(yīng)鏈與環(huán)保措施考核試卷
- 生命體征測量技術(shù)
- 5-11序列信號(hào)發(fā)生器1-分析與設(shè)計(jì)
- 1-6碼制-二-十進(jìn)制碼
- 小學(xué)一年級(jí)下冊(cè)數(shù)學(xué)期末考試試卷及答案
- 2025年北京大興區(qū)中考一模物理試卷試題(含答案詳解)
- 統(tǒng)編版語文五年級(jí)下冊(cè)第14課《刷子李》精美課件
- 全息投影技術(shù)課件
- 西政安徽校友會(huì)通訊錄
- 2017沂源縣新醫(yī)藥產(chǎn)業(yè)園區(qū)控制性詳細(xì)規(guī)劃
- 初中語文人教七年級(jí)下冊(cè)驛路梨花寫作順序
- 養(yǎng)老護(hù)理員第一章職業(yè)道德
- 深層平板載荷試驗(yàn)檢測地基承載力作業(yè)指導(dǎo)書
- (完整)EHS培訓(xùn)考核題庫及答案
- GB/T 27007-2011合格評(píng)定合格評(píng)定用規(guī)范性文件的編寫指南
- GB/T 25744-2010鋼件滲碳淬火回火金相檢驗(yàn)
- GB/T 23445-2009聚合物水泥防水涂料
- 項(xiàng)目啟動(dòng)會(huì)監(jiān)理方講話稿
評(píng)論
0/150
提交評(píng)論