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