<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    冒號(hào)課堂§1.0:開班導(dǎo)言

     

    冒號(hào)課堂

    第一課 開班導(dǎo)言

    課前導(dǎo)讀

    第一課為整個(gè)課堂學(xué)習(xí)的內(nèi)容和風(fēng)格定調(diào),并圍繞三個(gè)問題進(jìn)行展開:要成為一個(gè)優(yōu)秀的程序員,最需要學(xué)習(xí)什么知識(shí)?領(lǐng)會(huì)什么思想?具備什么精神?

    本課共分五節(jié)——

    1.開班發(fā)言

    2.首輪提問

    3.語(yǔ)言選擇

    4.初識(shí)范式

    5.軟件技術(shù)



    1.1
    開班發(fā)言——程序員的四層境界

    授人以魚不如授人以漁                                                                ——古語(yǔ)

     

    關(guān)鍵詞:程序員,知識(shí),思想,精神

    摘要:對(duì)程序員的一些忠告和建議


      提問

    • 軟件開發(fā)者的成長(zhǎng)需要經(jīng)歷有哪些階段?
    • 要想在IT業(yè)中生存與發(fā)展,傳統(tǒng)的學(xué)習(xí)方式是否夠用?
    • 優(yōu)秀程序員應(yīng)該具備哪些素質(zhì)?


    講解

     冒號(hào)開了個(gè)程序員提高班,今天迎來了首期學(xué)員,他們是問號(hào)、句號(hào)、逗號(hào)、引號(hào)和嘆號(hào),皆為IT業(yè)的新兵。望著臺(tái)下洋溢著青春與渴望的臉龐,冒號(hào)開始了他的開班發(fā)言——

    大家好!先自我介紹一下,本人姓冒名號(hào)字解之。諸位不必叫我老師,就叫老冒好了。比在座各位癡長(zhǎng)幾歲,“老”是擔(dān)得的,“師”卻不敢妄言。在下編程多年,自覺小有所成,不敢專藏,特開此班與眾共享。雖系一家之言、一孔之見,若能拋磚引玉,又何懼方家之哂?疏謬之處,還望海涵斧正,不致自誤誤人。

    客套已畢,言歸正傳。本班主要采取討論的形式,只要是軟件開發(fā)中值得討論的,但凡本人力之所及,均可共同探討。

    本班的宗旨是:學(xué)會(huì)不如會(huì)學(xué),會(huì)學(xué)不如會(huì)用,會(huì)用不如被用。對(duì)于一個(gè)軟件開發(fā)者來說,這意味著四個(gè)階段:

    學(xué)會(huì)(知其所然)——掌握一些具體編程知識(shí)的初級(jí)程序員

    會(huì)學(xué)知所以然)——能快速而深刻地理解技術(shù)并舉一反三的程序員

    會(huì)用人為我用)——能將所學(xué)靈活運(yùn)用到實(shí)際編程設(shè)計(jì)之中的高級(jí)程序員

    被用我為人用)——能設(shè)計(jì)出廣為人用的應(yīng)用程序(application)、庫(kù)(library)、工具包(toolkit)、框架(framework)等的系統(tǒng)分析員和架構(gòu)師

    至于被用的更高層次,如發(fā)明出主流的設(shè)計(jì)模式、算法、語(yǔ)言乃至理論等,則可稱得上計(jì)算機(jī)專家了。本班的目的,正是為各位向更高階段的提升助一臂之力。

    大家可能都習(xí)慣了在小學(xué)、中學(xué)和大學(xué)里的課堂,那里的知識(shí)大多是系統(tǒng)而完備且貌似終極的,那里的學(xué)習(xí)大多是單向而被動(dòng)的。但習(xí)慣并不意味著享受,更多的是因?yàn)閯e無(wú)選擇。你們?cè)灰胍蛔R(shí)殿堂,被告知它們?nèi)绾蚊垒喢缞J、巧奪天工,盡管很多時(shí)候你們或不以為然、或不解其妙,但還是不得不記下每一處被指點(diǎn)的細(xì)微結(jié)構(gòu)。很少有人帶你們看看當(dāng)初為建造這些殿堂而打下的地基、搭設(shè)的腳手架,哪怕只是上漆前的模樣也好,更遑論一瞻數(shù)易其稿的設(shè)計(jì)圖紙了。那些與殿堂相比顯得有些原始、甚至丑陋的東西,被有意無(wú)意地?fù)踉谝暰€之外。可沒有那些,你們將來如何為這些宮殿添磚加瓦,又如何另起樓閣呢?

    中國(guó)學(xué)生恐怕是世界上最擅長(zhǎng)考試、最習(xí)慣考試、也最厭倦考試的群體了。你們告別了學(xué)生生涯,踏上了職業(yè)之旅。首先我要恭喜你們,脫離苦海了!同時(shí)也要悲告你們,掉進(jìn)火坑了!危言聳聽嗎?如果你選擇了做程序員,你時(shí)時(shí)都得學(xué)習(xí),沒有手把手教你的老師,沒有指定的教科書和參考書,有的是層出不窮令人眼花繚亂的新概念、新技術(shù)、新問題,好不容易學(xué)到一些皮毛,有的已成明日黃花。你時(shí)時(shí)都得考試,每提交一段代碼就是上交一份答卷,你不知道什么時(shí)候、什么人會(huì)批改,直到——開發(fā)組同事發(fā)現(xiàn)你的代碼難以看懂,系統(tǒng)分析員指出你的程序不符合規(guī)范,測(cè)試工程師檢驗(yàn)到你的軟件有缺陷,客戶抱怨你的產(chǎn)品太慢太難用,最后老板倒可能告訴你一個(gè)好消息:明天起放長(zhǎng)假!

    其實(shí),又有哪行哪業(yè)的人不需要學(xué)習(xí)和考試呢?IT業(yè)只是相對(duì)更激烈、更富挑戰(zhàn)性而已。在這個(gè)瞬息萬(wàn)變、適者生存的時(shí)代,如果還沿用封閉、被動(dòng)的學(xué)習(xí)方式,恐有淘汰之虞。有鑒于此,本班的風(fēng)格與你們習(xí)慣的課堂有所不同:這里的知識(shí)不一定是系統(tǒng)或完備的,但一定是生動(dòng)鮮活的。如果知識(shí)是水,我們要挖掘最先涌動(dòng)的泉眼,還要探究最終流淌的曲線;如果知識(shí)是火,我們要捕捉起初點(diǎn)燃的火花,還要前瞻未來綿延的軌跡。這里的問題不一定是預(yù)設(shè)的,結(jié)論不一定是終極的,甚至不一定是正確的,但一定是有的放矢、發(fā)人深思的。由此決定了這里的學(xué)習(xí)方式將是開放多元、雙向互動(dòng)的。

    越是喧囂的世界,越需要寧?kù)o的思考,讓躁動(dòng)的心靈得以平息,讓蘊(yùn)藏的靈性得以釋放。學(xué)習(xí)編程沒有速成大法、沒有必殺之技、沒有錦囊秘笈、沒有終南捷徑,只有思考、實(shí)踐、再思考、再實(shí)踐。中國(guó)的IT界乃至整個(gè)學(xué)術(shù)界過于浮躁和急功近利了,既盲從又自大,缺乏務(wù)實(shí)精神與研究精神、獨(dú)立精神與合作精神、批判精神與自省精神。如果一個(gè)程序員沾染這種風(fēng)氣,哪怕有再好的學(xué)習(xí)方法和學(xué)習(xí)能力,他都注定與“優(yōu)秀”絕緣。這就是本班極力倡導(dǎo)并將貫穿始終的理念——知識(shí)之上是思想,思想之上是精神

    我的開場(chǎng)白到此為止,現(xiàn)在把話語(yǔ)權(quán)交給你們,大家自由發(fā)問吧。


    總結(jié)

    • 軟件開發(fā)者的成長(zhǎng)階段:學(xué)會(huì)?會(huì)學(xué)?會(huì)用?被用。

    這是一個(gè)從“知其所然”到“知所以然”、從“人為我用”到“我為人用”的歷程。

    • 傳統(tǒng)的學(xué)習(xí)方式大多有如下特征:

    封閉——系統(tǒng)完備的終極式知識(shí)

    單向——師教生學(xué)的單向式傳輸知識(shí)

    被動(dòng)——師命生從的被動(dòng)式接受知識(shí)

    靜態(tài)——注重知識(shí)的現(xiàn)狀,而不是起源、歷程和未來發(fā)展

    繼續(xù)沿襲這種學(xué)習(xí)方式,是很難在競(jìng)爭(zhēng)日趨激烈、技術(shù)日新月異的IT業(yè)中求生存、謀發(fā)展的。開放多元、雙向互動(dòng)的現(xiàn)代課堂乃大勢(shì)所趨。

    • “知識(shí)之上是思想,思想之上是精神。”

    一個(gè)優(yōu)秀的程序員,除了要迅速掌握知識(shí)、善于領(lǐng)悟思想外,還必須具備務(wù)實(shí)與研究精神、獨(dú)立與合作精神、批判與自省精神。

     

    1.2首輪提問——什么語(yǔ)言好?

    敬畏老師莫如敬畏真理                                                                ——題記

     

    關(guān)鍵詞:計(jì)算機(jī)語(yǔ)言,程序語(yǔ)言

    摘要:討論流行的計(jì)算機(jī)語(yǔ)言


      提問

    • 誰(shuí)是你真正的老師?
    • 程序員是吃青春飯的嗎?
    • 計(jì)算機(jī)語(yǔ)言這么多,到底學(xué)哪個(gè)好?

     

    講解

    眾人面面相覷,一陣沉默后開始竊竊私語(yǔ),顯然有些不太習(xí)慣這種教學(xué)方式——筆記本上還沒寫兩個(gè)字呢,老師就把球給踢回來了。

    冒號(hào)也不說話,只是微笑地望著大家。

    還是問號(hào)打破僵局,開始發(fā)問:“老師——”

    冒號(hào)揚(yáng)手打斷他:“請(qǐng)不要管我叫老師,真正的老師是你自己。本班的一個(gè)特色是:師生角色模糊,大家自主學(xué)習(xí),相互啟發(fā),教學(xué)相長(zhǎng)。”

    “老冒——”問號(hào)頓了頓,全班哄堂大笑,“學(xué)軟件開發(fā),當(dāng)然得先學(xué)語(yǔ)言,計(jì)算機(jī)語(yǔ)言這么多,到底哪個(gè)好,或者說學(xué)哪個(gè)好?”

    冒號(hào)笑道:“這個(gè)問題很典型,很實(shí)在,也很初級(jí)。”

    問號(hào)被“初級(jí)”這個(gè)字眼刺得面上一紅。

    “如果信奉流行的就是好的,那么也許可以給你一個(gè)參考答案。”冒號(hào)轉(zhuǎn)身在黑板上寫下一串清單­——

    Java(20.72%) C(15.38%) C++(10.72%) VB(10.49%) PHP(9.24%) Python(5.01%)

    Perl(4.84%)C#(4.33%) JavaScript(3.13%) Delphi(3.06%) Ruby(2.76%) D(1.27%)

    “根據(jù)TIOBE[1]截至20089月份的統(tǒng)計(jì)結(jié)果,選出以上流行度超過1%的12種程序語(yǔ)言。從中可以看出,它們的總占有率超過90%,應(yīng)該算得上是當(dāng)今主流語(yǔ)言的代表。盡管有人置疑TIOBE排名的權(quán)威性和合理性,但這份名單應(yīng)該還是八九不離十的。”

    引號(hào)很疑惑:“怎么可能那么流行的ASPJSP都不在其中呢?”

    “對(duì)啊,”逗號(hào)附和著,“還有HTMLXML怎么不算呢?”

    冒號(hào)解釋道:“ASPJSPPHP是動(dòng)態(tài)網(wǎng)頁(yè)最流行的三種解決方案。動(dòng)態(tài)網(wǎng)頁(yè)的實(shí)現(xiàn)方式很多,但它們采取的幾乎是同樣的方式——在靜態(tài)網(wǎng)頁(yè)中植入一些能在服務(wù)器端運(yùn)行的代碼。在ASPJSP中,這些代碼并不涉及新的語(yǔ)言,故稱之為模板、框架或腳本環(huán)境更合適些。PHP則不同,本身是一種新的程序語(yǔ)言,并且除了應(yīng)用于服務(wù)端外,還能編寫命令行腳本和桌面應(yīng)用程序。至于HTMLXML,還有XHTMLWML等,均為SGMLStandard Generalized Markup Language)的子集,屬于標(biāo)記語(yǔ)言Markup Language)。與通常意義上的程序語(yǔ)言有所不同,它們是處理的對(duì)象而不是處理的主體。可以說它們更接近數(shù)據(jù)格式標(biāo)準(zhǔn),正如CSVJSON一樣。當(dāng)然也不絕對(duì),XSLT是一種特殊的XML,但卻包含變量定義和處理邏輯,更學(xué)術(shù)地說,它是圖靈完備的(Turing-complete[2],應(yīng)當(dāng)屬于程序語(yǔ)言。”

    問號(hào)殺了個(gè)回馬槍:“那CSSRSS算是程序語(yǔ)言嗎?”

    冒號(hào)從容作答:“與XSLT類似,CSS是一種樣式語(yǔ)言Stylesheet Language),但不是以XML的形式出現(xiàn)。它將傳統(tǒng)的HTML中的樣式邏輯提煉出來,大大豐富和簡(jiǎn)化了HTML。不過它沒有執(zhí)行指令或運(yùn)算,更談不上圖靈完備,因此不屬程序語(yǔ)言。至于RSS,只是一種用XML來描述的數(shù)據(jù)交換規(guī)范,甚至連語(yǔ)言都算不上。”

    嘆號(hào)也插了進(jìn)來:“近來網(wǎng)絡(luò)開發(fā)語(yǔ)言AJAX特別火,難道不算程序語(yǔ)言嗎?”

    冒號(hào)搖頭道:“的確有不少人以為AJAX是一門語(yǔ)言,但如果知道AJAXAsynchronous JavaScript.And XML的簡(jiǎn)稱,便知其謬矣。事實(shí)上,它是綜合了JavaScriptXMLHTMLCSS等多種語(yǔ)言的一種網(wǎng)絡(luò)應(yīng)用技術(shù)。”

    “就算這些不是程序語(yǔ)言,那也是計(jì)算機(jī)語(yǔ)言或者與語(yǔ)言密切相關(guān)的技術(shù),該學(xué)的還是得學(xué)。”句號(hào)想起問號(hào)開始問的是計(jì)算機(jī)語(yǔ)言,老冒有偷換概念之嫌。

    “不錯(cuò),”冒號(hào)點(diǎn)點(diǎn)頭,“不僅要學(xué)語(yǔ)言,還要熟悉相應(yīng)的開發(fā)環(huán)境和開發(fā)工具等等,當(dāng)然最重要的是學(xué)習(xí)其中的思想。”

    “唉,學(xué)完這些頭發(fā)都白了,程序員可是吃青春飯的。”嘆號(hào)嘆息道。

    冒號(hào)掃視了一下,說道:“現(xiàn)在班上每個(gè)人都尊口已開,這是一個(gè)很好的開始。開放言論才能解放思想,思想解放了才能產(chǎn)生靈感和激情。缺乏靈感和激情的程序員,學(xué)習(xí)起來吃力,工作起來辛苦,最后就會(huì)感慨這是吃青春飯的職業(yè)。”

    嘆號(hào)不好意思地?fù)狭藫项^。

    逗號(hào)接言:“靈感嘛,偶爾也許能閃一下,激情可就難嘍!

    冒號(hào)注視著他,一字一頓地說:“沒有激情作氧氣,靈感的火花注定轉(zhuǎn)瞬即滅。”


    插語(yǔ)

    [1] TIOBEhttp://www.tiobe.com)是一家評(píng)估編程語(yǔ)言流行度的權(quán)威機(jī)構(gòu),每月公布一次編程語(yǔ)言排行榜。

    [2] 一個(gè)能計(jì)算出每個(gè)圖靈可計(jì)算函數(shù)Turing-computable function)的計(jì)算系統(tǒng)被稱為圖靈完備的。一個(gè)語(yǔ)言是圖靈完備的,意味著該語(yǔ)言的計(jì)算能力與一個(gè)通用圖靈機(jī)Universal Turing Machine)相當(dāng),這也是現(xiàn)代計(jì)算機(jī)語(yǔ)言所能擁有的最高能力。


     總結(jié)

    • 本班倡導(dǎo)自主學(xué)習(xí)、相互啟發(fā),真正的老師不是別人,正是自己。
    • 當(dāng)今主流語(yǔ)言的代表:JavaCC++VBPHPPythonPerlC#JavaScriptDelphi RubyD
    • “程序員是吃青春飯的職業(yè)”出自那些缺乏靈感和激情的人之口。

     

    1.3語(yǔ)言選擇——合適的就是好的

    尺有所短,寸有所長(zhǎng)                                                                ——《楚辭》

    關(guān)鍵詞:計(jì)算機(jī)語(yǔ)言,低級(jí)語(yǔ)言,高級(jí)語(yǔ)言,中級(jí)語(yǔ)言

    摘要:簡(jiǎn)要回顧計(jì)算機(jī)語(yǔ)言

     

      提問

    • 語(yǔ)言好壞的標(biāo)準(zhǔn)是什么?
    • 計(jì)算機(jī)語(yǔ)言的發(fā)展經(jīng)歷了哪幾個(gè)階段?
    • 第四代語(yǔ)言和第五代語(yǔ)言與前三代語(yǔ)言相比,有什么不同?
    • 什么是低級(jí)語(yǔ)言和高級(jí)語(yǔ)言?各自的特點(diǎn)與應(yīng)用范圍是什么?
    • 為什么稱C語(yǔ)言為中級(jí)語(yǔ)言?

     

     講解

    問號(hào)覺得自己的問題并未解決,追問:“這么多種語(yǔ)言,僅憑流行度就能分出主次優(yōu)劣嗎?”

    “流行度當(dāng)然不是唯一的指標(biāo)。”冒號(hào)答道,“語(yǔ)言的主次優(yōu)劣因人而異,答案在你們自己身上。還是剛才那句話,真正的老師就是你自己。”

    期待的目光如風(fēng)中之燭般開始黯淡。

    冒號(hào)又道:“評(píng)書里名師授藝時(shí),常常要徒弟自己挑選稱手的兵器。威武的刀,靈活的槍,飄逸的劍,渾厚的棍,粗獷的斧,霸道的錘,詭異的鞭,無(wú)不諳合武者的個(gè)性。評(píng)判語(yǔ)言優(yōu)劣,如同爭(zhēng)論兵器高下,倘若撇開使用的主體和對(duì)象,皆為空泛之談。”

    句號(hào)若有所悟:“所以好的語(yǔ)言就是適合編程者和解決對(duì)象的語(yǔ)言。”

    “非常正確!”冒號(hào)贊許道,“這就是問號(hào)同學(xué)要的答案。”

    引號(hào)并不滿足:“可我記得評(píng)書里經(jīng)常描述高手的一句話­:十八般兵器樣樣精通。”

    冒號(hào)一笑:“兵器雖多,其理相通,高手精通多種兵器何足為奇?但如果讓趙云使錘,李元霸使槍,武力恐怕還是要大打折扣吧?”

    逗號(hào)依然困惑:“我們?nèi)绾闻袛嘁环N語(yǔ)言是否適合自己,是否適合解決對(duì)象呢?”

    冒號(hào)看出大家共同的疑惑,不緊不慢地說:“要想從中選擇,自然先得了解,不然怎知兵器稱不稱手、合不合用?現(xiàn)在進(jìn)入正題,我們先對(duì)計(jì)算機(jī)語(yǔ)言作個(gè)簡(jiǎn)要的回顧。”

    大伙均想,總算要撓著癢處了。

    “計(jì)算機(jī)語(yǔ)言按其發(fā)展歷程通常分為五代。”冒號(hào)說完,在黑板上寫下——

    第一代語(yǔ)言(1GL):機(jī)器語(yǔ)言

    第二代語(yǔ)言(2GL):匯編語(yǔ)言——IA-32 AssemblySPARC Assembly

    第三代語(yǔ)言(3GL):高級(jí)語(yǔ)言——FortranPascalCJavaVB

    第四代語(yǔ)言(4GL):面向問題語(yǔ)言­——SQLSASSPSS

    第五代語(yǔ)言(5GL):人工智能語(yǔ)言——PrologMercuryOPS5

    “誰(shuí)能簡(jiǎn)要地談?wù)勥@段歷史?”冒號(hào)又開始踢回傳球了。

     “最新的兩代語(yǔ)言我不是特別熟悉,就說一下前幾代吧。” 一陣沉默后,引號(hào)終于毛遂自薦,“計(jì)算機(jī)語(yǔ)言是人用來指揮計(jì)算機(jī)的語(yǔ)言,而計(jì)算機(jī)只懂一種語(yǔ)言——由01組成的機(jī)器語(yǔ)言machine language)。最初人們直接用這種語(yǔ)言下達(dá)指令,可它們實(shí)在太難記憶和閱讀了,開發(fā)和維護(hù)起來既費(fèi)時(shí)又易錯(cuò),嚴(yán)重桎梏了程序員的生產(chǎn)力。后來人們發(fā)明了匯編語(yǔ)言assembly language),用接近英語(yǔ)單詞的助記碼mnemonic code)來代替01串,由助手——匯編器assembler)將其轉(zhuǎn)化為機(jī)器語(yǔ)言。這些助手很稱職,但有兩個(gè)缺點(diǎn):一是毫無(wú)主見,基本上只會(huì)一一對(duì)應(yīng)地翻譯,程序員必須不厭其煩地交代每一個(gè)細(xì)節(jié);二是不知變通,換種機(jī)器就傻眼了。于是人們陸續(xù)引進(jìn)了各種高級(jí)語(yǔ)言high-level programming language),同時(shí)啟用更得力的助手——編譯器(compiler)和解釋器(interpreter)。這些助手除了能理解更簡(jiǎn)潔更抽象的高級(jí)語(yǔ)言外,還能因地制宜地對(duì)一些指令進(jìn)行優(yōu)化處理。程序員的勞動(dòng)力得以極大的解放,生產(chǎn)效率得以大幅的提升。直到現(xiàn)在,高級(jí)語(yǔ)言還是最主要的開發(fā)語(yǔ)言,包括前面提到的十二種最流行的語(yǔ)言。”

    引號(hào)發(fā)言甫畢,冒號(hào)立即獻(xiàn)上溢美之詞:“精彩!精當(dāng)!一氣呵成!看看,你還懷疑自己不夠格作老師嗎?”

    一種暈眩感向引號(hào)襲來。

    冒號(hào)繼續(xù)引號(hào)的講述:“從機(jī)器語(yǔ)言到匯編語(yǔ)言、再到高級(jí)語(yǔ)言的演變,堪比從徒步行走到乘自行車、再到乘汽車的變革,越來越省時(shí)、省力、省心。循此方向,第四代語(yǔ)言更專注業(yè)務(wù)邏輯和問題領(lǐng)域。程序員主要負(fù)責(zé)分析和描述問題,不再花大量時(shí)間去考慮具體的算法和邏輯。事實(shí)上,最初提出第四代語(yǔ)言的概念,就是希望非專業(yè)程序員都能做應(yīng)用開發(fā)。”

    逗號(hào)心下一驚:“那我等豈不是要失業(yè)了?”

    冒號(hào)寬慰道:“倒不用太擔(dān)心。正如引號(hào)所說的,語(yǔ)言越來越高級(jí),背后靠的是越來越能干的助手。這些助手本身就是軟件,還是需要專業(yè)程序員開發(fā)的。更何況,這種理想的全面實(shí)現(xiàn)依然任重而道遠(yuǎn)。”

    問號(hào)百思莫解:“第四代語(yǔ)言到第五代語(yǔ)言的發(fā)展路線似乎不夠清晰,在邏輯上如何解釋呢?”

    冒號(hào)作出解答:“第四代語(yǔ)言雖然足夠強(qiáng)大,但過于局限某些特定領(lǐng)域,基本上屬于領(lǐng)域特定語(yǔ)言[1]Domain Specific Language,簡(jiǎn)稱DSL),而不是我們所熟悉的通用編程語(yǔ)言General-Purpose Programming Language,簡(jiǎn)稱GPPL)。專門用于數(shù)據(jù)庫(kù)操作的SQL、用于統(tǒng)計(jì)分析的SASSPSS、用于科學(xué)計(jì)算的Mathematica都是典型的第四代語(yǔ)言。然而一個(gè)系統(tǒng)往往橫跨多個(gè)領(lǐng)域,如果每個(gè)領(lǐng)域使用不同的語(yǔ)言,并且不同領(lǐng)域的語(yǔ)言在概念和方法上也不統(tǒng)一,必然會(huì)給集成和整合帶來的困難。第五代語(yǔ)言在保持第三代語(yǔ)言的通用性的前提下,繼承了第四代語(yǔ)言的優(yōu)點(diǎn),即重在目標(biāo)而非過程、重在描述而非實(shí)現(xiàn)。如果把這種優(yōu)點(diǎn)用在汽車上,那么下一代的交通工具也許是無(wú)人駕駛的智能汽車。只要輸入目的地,它會(huì)自動(dòng)通過GPS尋找最佳路徑,自動(dòng)根據(jù)路況變速轉(zhuǎn)向,一直駛到終點(diǎn)。”

    嘆號(hào)身形微顫:“坐這種車我可不放心。”

    冒號(hào)一撇嘴:“這當(dāng)然只是一種假想。同樣地,第五代語(yǔ)言號(hào)稱人工智能語(yǔ)言,雖然雄心勃勃,試圖讓機(jī)器理解人類的自然語(yǔ)言,并且具備人類的思維能力,但目前看來這一目標(biāo)還顯得遙不可及。”

    句號(hào)很贊同:“是啊,超級(jí)計(jì)算機(jī)雖然可以戰(zhàn)勝國(guó)際象棋的世界冠軍,但在圍棋上弱智得很。”

    冒號(hào)提綱挈領(lǐng):“也有人簡(jiǎn)單地將前兩代語(yǔ)言統(tǒng)稱為低級(jí)語(yǔ)言,其他的統(tǒng)稱為高級(jí)語(yǔ)言。語(yǔ)言從低級(jí)到高級(jí),離機(jī)器語(yǔ)言更遠(yuǎn),離人類語(yǔ)言更近,因而更易讀寫、調(diào)試和維護(hù),安全性、通用性和可移植性更強(qiáng),開發(fā)效率更高,更加抽象和宏觀;但同時(shí)運(yùn)行速度和效率下降,用法和功能上局限性更大。如果拿兵器作比,高級(jí)語(yǔ)言好比長(zhǎng)兵器,威力強(qiáng)大卻難免滯重,長(zhǎng)于大型應(yīng)用,可謂‘一寸長(zhǎng),一寸強(qiáng)’;低級(jí)語(yǔ)言好比短兵器,輕便靈活卻難免風(fēng)險(xiǎn),長(zhǎng)于底層應(yīng)用,可謂‘一寸短,一寸險(xiǎn)’。”

    大伙心里話,敢情來這兒不是學(xué)編程,是學(xué)武術(shù)的。

    嘆號(hào)說道:“我看還是高級(jí)語(yǔ)言好,現(xiàn)在誰(shuí)還學(xué)低級(jí)語(yǔ)言啊?”

    冒號(hào)糾正道:“低級(jí)語(yǔ)言并不低級(jí),只是隨著高級(jí)語(yǔ)言的出現(xiàn),計(jì)算機(jī)硬件性能的提高,漸漸有些邊緣化了。雖然幾乎沒有人再用機(jī)器語(yǔ)言編程了,匯編語(yǔ)言仍有其用武之地。常見的有:包括嵌入式系統(tǒng)在內(nèi)的系統(tǒng)開發(fā),如操作系統(tǒng)、編譯器、驅(qū)動(dòng)程序、無(wú)線通訊、DSPPDAGPS等;其他對(duì)資源、性能、速度和效率極為敏感的軟件開發(fā);以信息安全、軟件維護(hù)與破解等為目的的逆向工程等等。即使你不打算從事系統(tǒng)開發(fā),也不想作紅客、黑客或駭客,掌握匯編語(yǔ)言對(duì)你深入了解計(jì)算機(jī)內(nèi)部運(yùn)行機(jī)制、調(diào)試軟件和改進(jìn)程序中某些關(guān)鍵代碼的算法也是有幫助的。”

    引號(hào)提出:“好像有些書上把C語(yǔ)言稱為中級(jí)語(yǔ)言。”

    冒號(hào)答道:“這是因?yàn)?/span>C兼具高級(jí)語(yǔ)言和低級(jí)語(yǔ)言的特征。一方面它提供了高層抽象和可移植性,使程序員更多地專注問題邏輯而不是機(jī)器邏輯;另一方面它也提供諸如指針、位字段(bitfield)等工具進(jìn)行底層操作,甚至可直接內(nèi)嵌匯編代碼。C語(yǔ)言既簡(jiǎn)潔靈活又高效強(qiáng)大,是迄今為止最具影響力的語(yǔ)言。幾乎所有的操作系統(tǒng)和大多數(shù)高級(jí)語(yǔ)言都用它來實(shí)現(xiàn),C家族的語(yǔ)言CC++JavaC#DObjective C等占據(jù)主流語(yǔ)言的半壁江山。如果再拿兵器作比,C語(yǔ)言就是一把劍,輕靈飄逸、銳利快捷。一名武將無(wú)論擅用什么兵器,往往都會(huì)腰懸寶劍。不會(huì)C的程序員正如不會(huì)使劍的武將,無(wú)論如何都是一種缺憾。相比之下,匯編語(yǔ)言就像小刀匕首,而機(jī)器語(yǔ)言則近乎赤手空拳了。”

    句號(hào)靈光一閃:“我明白了——西門吹雪的西來一劍,那是C語(yǔ)言;李尋歡的小李飛刀,那是匯編語(yǔ)言;陸小鳳的靈犀一指,那是機(jī)器語(yǔ)言。”

    大家會(huì)心地笑了。

    逗號(hào)冷不防冒出一句:“我會(huì)跆拳道哦!”

    句號(hào)一樂:“哈哈,等你打贏了陸小鳳,就封你為機(jī)器語(yǔ)言。”

    冒號(hào)也笑言:“這位是古龍的粉絲吧?武俠小說里的俠客多輕功高絕且喜單打獨(dú)斗,故使用輕、短兵器居多;而歷史小說里的戰(zhàn)將多騎馬進(jìn)行大規(guī)模作戰(zhàn),故除了佩劍外,使用重、長(zhǎng)兵器居多。這就是前面提到的,中低級(jí)語(yǔ)言更適合中小型或底層應(yīng)用,高級(jí)語(yǔ)言更適合大型應(yīng)用。”

    眾人活躍起來,開始議論紛紛。冒號(hào)放耳聽去,凈是些古龍金庸、三國(guó)水滸里的人物情節(jié),暗想:通俗小說到底比計(jì)算機(jī)編程吸引人啊。


    插語(yǔ)

    [1] 領(lǐng)域特定語(yǔ)言,簡(jiǎn)稱DSL。它區(qū)別于通用語(yǔ)言,一般用于特定的問題領(lǐng)域,多屬于第四代語(yǔ)言。比如SQL是專門針對(duì)數(shù)據(jù)庫(kù)的語(yǔ)言,LaTeX是專門用于排版的語(yǔ)言,正則表達(dá)式(regular expression)是專門處理字符匹配的語(yǔ)言。

     總結(jié)

    • 評(píng)判語(yǔ)言優(yōu)劣,不能離開使用語(yǔ)言的主體和對(duì)象。好的語(yǔ)言就是適合編程者和解決對(duì)象的語(yǔ)言。
    • 計(jì)算機(jī)語(yǔ)言按其發(fā)展歷程分為五代,依次為:機(jī)器語(yǔ)言、匯編語(yǔ)言、高級(jí)語(yǔ)言、面向問題語(yǔ)言和人工智能語(yǔ)言。通常,前兩代統(tǒng)稱為低級(jí)語(yǔ)言,后面的統(tǒng)稱為高級(jí)語(yǔ)言。
    • 第四代語(yǔ)言和第五代語(yǔ)言與前三代語(yǔ)言最大的不同在于:重目標(biāo)輕過程、重描述輕實(shí)現(xiàn)。
    • C兼具高級(jí)語(yǔ)言和低級(jí)語(yǔ)言的特征,因此也被稱為中級(jí)語(yǔ)言。
    • 計(jì)算機(jī)語(yǔ)言從低級(jí)發(fā)展到高級(jí),漸漸遠(yuǎn)離機(jī)器,靠近人類,以犧牲部分性能和效率為代價(jià),換來更高的開發(fā)效率和可維護(hù)性。中低級(jí)語(yǔ)言更適合中小型或底層應(yīng)用,高級(jí)語(yǔ)言更適合大型應(yīng)用。

     

    1.4初識(shí)范式——程序王國(guó)中的世界觀與方法論

    言者所以在意,得意而忘言                                                ——《莊子·外物》

    關(guān)鍵詞:編程范式,編程語(yǔ)言,Object-Oriented

    摘要:初步引入編程范式


     提問

    • 什么是編程范式?
    • 編程范式與編程語(yǔ)言的關(guān)系是什么?

     講解

    問號(hào)第一個(gè)從小說里走出來,問道:“剛才談到了低級(jí)語(yǔ)言和中級(jí)語(yǔ)言,現(xiàn)在該談高級(jí)語(yǔ)言了吧?”

    冒號(hào)微嘆:“高級(jí)語(yǔ)言大概有近千種,流行的也不下幾十種,有時(shí)候選擇過多反而無(wú)所適從啊。”

    逗號(hào)不以為然:“最流行的不就那么幾個(gè):JavaC++C#還有VB嗎?”

    不意此言遭到冒號(hào)連珠炮似的反問:“可你知道它們?yōu)槭裁磿?huì)流行嗎?是不是學(xué)會(huì)這幾樣就是一個(gè)合格的程序員了?它們會(huì)不會(huì)變得不那么流行,甚至被其他語(yǔ)言取代?如果不會(huì),為什么?如果會(huì),又怎么辦?”

    逗號(hào)赧然語(yǔ)塞。

    冒號(hào)口氣放緩:“掌握一門語(yǔ)言的語(yǔ)法、工具和技巧固然重要,但那只相當(dāng)于學(xué)會(huì)一門兵器的招法,更重要的當(dāng)然是心法。招法重形,心法重意。得形而忘意,無(wú)異舍本逐末;得意而忘形,方能游刃有余。下面要談的就是一種心法:編程范式。”

    問號(hào)不解:“編程范式?聽上去很學(xué)究,那是什么東東?”

    冒號(hào)續(xù)道:“范式譯自英文的paradigm,也有譯作典范、范型、范例的。所謂編程范式programming paradigm),指的是計(jì)算機(jī)編程的基本風(fēng)格或典范模式。借用哲學(xué)的術(shù)語(yǔ),如果說每個(gè)編程者都在創(chuàng)造虛擬世界,那么編程范式就是他們置身其中自覺不自覺采用的世界觀和方法論。”

    嘆號(hào)吸口氣:“好抽象哦!”

    句號(hào)心中一動(dòng):“您是說我們都是虛擬世界的創(chuàng)造者,都在創(chuàng)造自己的黑客帝國(guó)?”

    大家不禁莞爾。

    冒號(hào)動(dòng)情地說:“難道不是嗎?只不過帝國(guó)有大小之分、優(yōu)劣之別罷了。當(dāng)你編程之時(shí),便進(jìn)入到自己創(chuàng)造的世界之中。這是你的世界,只有注入你的想象力、創(chuàng)造力和激情,它才有勃勃生機(jī)。你編寫的豈止是代碼,分明還有樂曲;你敲擊的豈止是鍵盤,分明還有琴鍵;你運(yùn)行的豈止是程序,分明還有世界。當(dāng)優(yōu)美的旋律奏起,整個(gè)世界都隨之翩然起舞,一種莫可名狀的滿足是否會(huì)充溢你的全身?”

    大家都被冒號(hào)詩(shī)化的語(yǔ)言感染了,沒想到編程也可以如此感性。

    良久,引號(hào)試探地問:“面向?qū)ο缶幊叹褪且环N編程范式吧?”

    冒號(hào)點(diǎn)頭:“不錯(cuò),它是時(shí)下最流行的一種編程范式。順便說一句,‘面向?qū)ο?#8217; 譯自Object-Oriented,但‘面向’二字令人費(fèi)解。據(jù)說有本書叫‘面向?qū)ο蠓椒?#8217;,比別的計(jì)算機(jī)書都暢銷,知道為什么嗎?不少同學(xué)把它當(dāng)成戀愛指南買走了。”

    全班笑倒。

    冒號(hào)認(rèn)真地說:“將Object-Oriented譯成‘對(duì)象導(dǎo)向’[1],雖然稍嫌拗口,但更貼切。并非刻意要咬文嚼字,這關(guān)系到對(duì)編程范式的理解。我們知道,編程是為了解決問題,而解決問題可以有多種視角和思路,其中普適且行之有效的模式被歸結(jié)為范式。由于著眼點(diǎn)和思維方式的不同,相應(yīng)的范式自然各有側(cè)重和傾向,因此一些范式常用‘oriented’來描述。換言之,每種范式都引導(dǎo)人們帶著某種的傾向去分析問題、解決問題,這不就是‘導(dǎo)向’嗎?而‘面向’ 的賓語(yǔ)往往是預(yù)先確定的目標(biāo),如面向世界、面向未來、面向用戶、面向問題等等。此外,‘面向’強(qiáng)調(diào)靜態(tài)結(jié)果,而‘導(dǎo)向’強(qiáng)調(diào)動(dòng)態(tài)趨勢(shì),顯然后者更生動(dòng),也更符合編程的特質(zhì)[2]。”

    句號(hào)一語(yǔ)驚人:“找對(duì)象是‘對(duì)象導(dǎo)向’的,去約會(huì)是‘面向?qū)ο?#8217;的。”

    全班再倒。

    句號(hào)得意地解釋:“按夢(mèng)中情人的標(biāo)準(zhǔn)去找對(duì)象,目標(biāo)未定但傾向已定,這就是一種導(dǎo)向,而且是對(duì)象導(dǎo)向。找到之后再約會(huì),不就面向?qū)ο罅藛幔?#8221;

    眾人稱絕。

     “我們是來談編程范式的,不是來談對(duì)象的。” 冒號(hào)一臉的道貌岸然,“編程范式是抽象的,必須通過具體的編程語(yǔ)言來體現(xiàn)。它代表的世界觀往往體現(xiàn)在語(yǔ)言的核心概念中,代表的方法論往往體現(xiàn)在語(yǔ)言的表達(dá)機(jī)制中。一種范式可以在不同的語(yǔ)言中實(shí)現(xiàn),一種語(yǔ)言也可以同時(shí)支持多種范式。任何語(yǔ)言在設(shè)計(jì)時(shí)都會(huì)傾向某些范式、同時(shí)回避某些范式,由此形成了不同的語(yǔ)法特征和語(yǔ)言風(fēng)格。”


    插語(yǔ)

    [1]港澳臺(tái)地區(qū)將其譯為“物件導(dǎo)向”。即使單從字面上翻譯,oriented是“以...為方向的;以...為目的的;導(dǎo)向的;定向的”的意思,也比譯為“面向”更合適。

    [2]作為類比,經(jīng)濟(jì)學(xué)中的“market-oriented”譯為“市場(chǎng)導(dǎo)向(或取向)的”的遠(yuǎn)多于譯為“面向市場(chǎng)的”。

     總結(jié)

    • 編程范式是計(jì)算機(jī)編程中的基本風(fēng)格和典范模式,是編程者在其所創(chuàng)造的虛擬世界中自覺不自覺采用的世界觀和方法論。每種范式都引導(dǎo)人們帶著其特有的傾向和思路去分析和解決問題。OOP就是一種編程范式。
    • Object-Oriented多譯作“面向?qū)ο?#8221;,不如“對(duì)象導(dǎo)向”貼切。
    • 如果把一門編程語(yǔ)言比作兵器,它的語(yǔ)法、工具和技巧等是招法,它采用的編程范式則是心法。
    • 抽象的編程范式需要通過具體的編程語(yǔ)言來體現(xiàn)。范式的世界觀體現(xiàn)在語(yǔ)言的核心概念之中,范式的方法論體現(xiàn)在語(yǔ)言的表達(dá)機(jī)制中。一種語(yǔ)言的語(yǔ)法和風(fēng)格與其所支持的編程范式密切相關(guān)。

    “”參考

    [1] WikipediaProgramming paradigmhttp://en.wikipedia.org/wiki/Programming_paradigm

    [2] Stephen H. KaislerSOFTWARE PARADIGMSNew JerseyWiley200521-22


    1.5
    軟件技術(shù)——實(shí)用還是時(shí)髦?

    借我借我一雙慧眼吧,讓我把這紛擾看得清清楚楚明明白白真真切切                                    

    ——《霧里看花》

    關(guān)鍵詞:編程范式,框架,設(shè)計(jì)模式,架構(gòu),庫(kù),工具包

    摘要:關(guān)于框架、設(shè)計(jì)模式、架構(gòu)和編程范式的討論


     提問

    • 庫(kù)和工具包與框架有何不同?
    • 什么是設(shè)計(jì)模式和架構(gòu)?
    • 為什么要談編程范式,而不是框架、設(shè)計(jì)模式或者架構(gòu)? 

     講解

    “現(xiàn)在我們具體介紹一下編程范式。”冒號(hào)忽然頓住,隱覺一抹失望從眾人臉上掠過,問號(hào)更是欲言又止,便鼓勵(lì)他開口。

    問號(hào)略顯遲疑:“您說編程范式是一種心法,那框架、設(shè)計(jì)模式還有架構(gòu)呢?”

    “原來如此!”冒號(hào)心下了然,“讓我說說你們最想聽些什么吧。”

    眾現(xiàn)不信之色。

    冒號(hào)說道:“一種是具體而實(shí)用的,最好能立馬解決學(xué)習(xí)和工作中的問題;一種是時(shí)髦而花哨的,管他有用沒用,不學(xué)點(diǎn)心里就是不踏實(shí)。”

    眾人雖覺此話有些尖刻,細(xì)想起來也有幾分道理,但老冒明知而不為,不走群眾路線,偏去扯什么勞什子的范式——當(dāng)然,直接談OOP倒是不錯(cuò)的。

    自以為懂的未必真的懂,自以為不懂的未必真的不懂。” 冒號(hào)玩起了玄學(xué),“有些概念和技術(shù)即使背得爛熟,甚至用得爛熟,那也不代表真正掌握;有些概念和技術(shù)看起來很新奇,卻不過是新瓶裝舊酒。”

    引號(hào)頗不服氣:“用得爛熟都不算掌握,難不成只有發(fā)明概念和技術(shù)才算掌握?”

    “哈哈,那倒不必。”冒號(hào)笑道,“用得爛熟不等于用得恰到好處,能解決問題不等于沒有后顧之憂。”

    逗號(hào)問道:“那掌握的標(biāo)準(zhǔn)是什么?”

    “許多應(yīng)聘者喜歡在簡(jiǎn)歷中言必稱精通某某語(yǔ)言、某某技術(shù)云云,大多不必面試即知其大言炎炎——倘若真的精通,他當(dāng)應(yīng)聘更高的職位。”冒號(hào)有感而發(fā)卻又似不著邊際,“任何概念和技術(shù)都不是孤立的,如果不能在縱向的時(shí)間和橫向的聯(lián)系中找準(zhǔn)坐標(biāo),便似那群摸象的盲人,各執(zhí)一端卻又自以為是。”

    眾人心想,老冒雖言辭旦旦卻有鑿空之嫌,一節(jié)課下來,天馬行空的扯了不少,真刀真槍的一個(gè)也無(wú),該不是只會(huì)紙上談兵吧?

    句號(hào)緊扣主題:“您為何選擇談編程范式,而不是框架、設(shè)計(jì)模式還有架構(gòu)呢?難道它們真如您所說只是時(shí)髦而花哨的東西嗎?”

    “我可沒這么說。”冒號(hào)矢口否認(rèn),“但在弄清一樣?xùn)|西存在的意義之前就隨眾跟風(fēng),早晚會(huì)跟丟的。我先問問你們:什么是框架framework)?它與一般的庫(kù)library)和工具toolkit)有何不同?”

    引號(hào)應(yīng)答:“框架就是一組協(xié)同工作的類,它們?yōu)樘囟愋偷能浖?gòu)筑了一個(gè)可重用的設(shè)計(jì)。與庫(kù)和工具包不同之處在于前者側(cè)重設(shè)計(jì)重用而后兩者側(cè)重代碼重用。”

    “嗯,有點(diǎn)標(biāo)準(zhǔn)答案的味道。”冒號(hào)夸道,“如果吹毛求疵的話,框架并不限于OOP,可以是協(xié)同工作的,也可以是協(xié)同工作的函數(shù)。一個(gè)足夠復(fù)雜的應(yīng)用軟件開發(fā),為確保快速有效,通常采取的方式是:在宏觀管理上選取一些框架以控制整體的結(jié)構(gòu)和流程;在微觀實(shí)現(xiàn)上利用庫(kù)和工具包來解決具體的細(xì)節(jié)問題。框架的意義在于使設(shè)計(jì)者在特定領(lǐng)域的整體設(shè)計(jì)上不必重新發(fā)明輪子;庫(kù)和工具包的意義在于使開發(fā)者擺脫底層編碼,專注特定問題和業(yè)務(wù)邏輯。”

    問號(hào)提出問題:“框架與庫(kù)和工具包看起來很相似——都是一些代碼集合,都提供一些API(應(yīng)用編程接口),是什么使得它們不同呢?”

    “問得好!”冒號(hào)贊言,“框架與工具包最大的差別在截然相反的設(shè)計(jì)理念上:庫(kù)和工具包是為程序員帶來自由的,框架是為程序員帶來約束的。具體地說,庫(kù)和工具包是為程序員提供武器裝備的,框架則利用控制反轉(zhuǎn)IoC[1]機(jī)制實(shí)現(xiàn)對(duì)各模塊的統(tǒng)一調(diào)度從而剝奪了程序員對(duì)全局的掌控權(quán),使他們成為手執(zhí)編程武器、隨時(shí)聽候調(diào)遣的士兵。”

    嘆號(hào)苦著臉:“程序員原來就是一小卒子啊!”

    “哪個(gè)將軍不是從小卒做起的?”冒號(hào)反問道,“不錯(cuò),框架是在語(yǔ)言的語(yǔ)法規(guī)則之外施加于程序員的又一層枷鎖,但沒有規(guī)矩不成方圓。正如行軍打仗,講究排兵布陣,程序員就是那兵,框架就是那陣。”

    句號(hào)說:“可不可以這么理解,框架就是一些人——也就是框架設(shè)計(jì)者,把一個(gè)軟件開發(fā)中最甜的部分啃掉了,剩下部分留給下面的人?”

    “從某種意義上說,是這樣。”冒號(hào)點(diǎn)點(diǎn)頭。

    逗號(hào)很不甘心:“我就想啃最甜的部分。”

    “當(dāng)心別把牙給崩掉。”冒號(hào)笑道,“不是打擊你,首先你還沒那本事;其次即使你有本事也未必有機(jī)會(huì);最后即使有本事也有機(jī)會(huì),重新設(shè)計(jì)框架也未必是好的選擇。就說大名鼎鼎的Struts吧,哪怕你設(shè)計(jì)出比它更高明的框架也不會(huì)被采用,因?yàn)榍罢咴缫殉蔀?/span>Java平臺(tái)上網(wǎng)絡(luò)開發(fā)的事實(shí)(De Facto)標(biāo)準(zhǔn),公司很容易從市場(chǎng)上招到懂Struts的程序員,不必培訓(xùn)即可上手,成本低見效快。過去許多公司都有自己的網(wǎng)絡(luò)框架,但最后大多都放棄了,并不是因?yàn)?/span>Struts更優(yōu)秀,而是因?yàn)樗占啊.吘勾蠖鄶?shù)軟件開發(fā)是以金錢而不是技術(shù)為中心的。”

    問號(hào)提議:“您能談?wù)勗O(shè)計(jì)模式和架構(gòu)嗎?”

    冒號(hào)侃侃而談:“與框架與庫(kù)和工具包不同,設(shè)計(jì)模式design Pattern)和架構(gòu)architecture)不是軟件產(chǎn)品,而是軟件思想設(shè)計(jì)模式是軟件的戰(zhàn)術(shù)思想,架構(gòu)是軟件的戰(zhàn)略決策。設(shè)計(jì)模式是針對(duì)某些經(jīng)常出現(xiàn)的問題而提出的行之有效的設(shè)計(jì)解決方案,它側(cè)重思想重用,因此比框架更抽象、更普適,但多限于局部解決方案,沒有框架的整體性。與之相似的還有慣用法(idiom),也是針對(duì)常發(fā)問題的解決方案,但偏重實(shí)現(xiàn)而非設(shè)計(jì),與實(shí)現(xiàn)語(yǔ)言密切相關(guān),是一種更底層更具體的編程技巧。至于架構(gòu),一般指一個(gè)軟件系統(tǒng)的最高層次的整體結(jié)構(gòu)和規(guī)劃,一個(gè)架構(gòu)可能包含多個(gè)框架,而一個(gè)框架可能包含多個(gè)設(shè)計(jì)模式。”

    引號(hào)愈發(fā)疑惑:“這些不是都很重要嗎?”

    “當(dāng)然都很重要。不過——”冒號(hào)話鋒一轉(zhuǎn),“在沒有打好基礎(chǔ)前,架構(gòu)只是空中樓閣,因此不可能現(xiàn)在談它。至于框架,不同的應(yīng)用領(lǐng)域有不同的框架,如表現(xiàn)層的Struts、業(yè)務(wù)層的Spring、持久層的Hibernate等等,即使相同領(lǐng)域的框架也有多個(gè)選擇,更不用說不同的語(yǔ)言框架還不一樣,從何談起?再說框架其實(shí)一點(diǎn)也不高深,完全可以無(wú)師自通,關(guān)鍵是領(lǐng)會(huì)思想,多學(xué)習(xí)多實(shí)踐。說到設(shè)計(jì)模式,一共就那么幾十個(gè),一本‘四人幫’(GoF[2]的書足矣,自己慢慢去啃,又何須多談?簡(jiǎn)言之,一個(gè)談之過早,一個(gè)無(wú)從談起,一個(gè)不必多談。”

    下面開始交頭接耳竊竊私語(yǔ)起來。

    “知識(shí)的學(xué)習(xí)有幾種方式:一種靠記憶,一種靠練習(xí),一種靠培養(yǎng)。就拿英語(yǔ)學(xué)習(xí)來說吧,學(xué)單詞,單靠記憶即可;學(xué)句型、語(yǔ)法,光記憶是不夠的,需要勤加練習(xí)方可熟能生巧;而要講出地道的英語(yǔ),光記憶和練習(xí)是遠(yuǎn)遠(yuǎn)不夠的。從小學(xué)到大學(xué),甚至博士畢業(yè),除了英語(yǔ)類專業(yè)的學(xué)生外,大多數(shù)人英語(yǔ)練了一二十年,水平如何?不客氣但很客觀地說:一個(gè)字,爛;兩個(gè)字,很爛;三個(gè)字,相當(dāng)爛!口語(yǔ)甚至連一個(gè)英語(yǔ)國(guó)家的三歲小孩都不如。”冒號(hào)越說越激動(dòng),“原因只有一個(gè),那就是國(guó)內(nèi)的英語(yǔ)教學(xué)方式嚴(yán)重失策。教學(xué)總是圍繞單詞、詞組、句型、語(yǔ)法轉(zhuǎn),缺乏對(duì)語(yǔ)感的重視和培養(yǎng),導(dǎo)致學(xué)生只會(huì)‘中式英語(yǔ)’。同樣道理,一個(gè)慣用C語(yǔ)言編程的人也許很快就能寫一些C++程序,但如果他只注重C++的語(yǔ)法而不注重培養(yǎng)OOP的語(yǔ)感,那么寫出的程序一定是‘CC++’。與其如此,倒不如直接用C呢。”

    句號(hào)悟道:“您是想告訴我們,學(xué)習(xí)編程范式能增強(qiáng)編程語(yǔ)言的語(yǔ)感?”

    “一語(yǔ)中的!”冒號(hào)慶幸總算沒有白費(fèi)口舌,“語(yǔ)感是一個(gè)人對(duì)語(yǔ)言的敏銳感知力,反映了他在語(yǔ)言方面的整體上的直覺把握能力。語(yǔ)感強(qiáng)者,能聽弦外之音,能說雙關(guān)之語(yǔ),能讀雋永之作,能寫曉暢之文。這是一種綜合的素質(zhì)和修養(yǎng),其重要性是不言而喻的。那么如何培養(yǎng)語(yǔ)感呢?普通的學(xué)習(xí)和訓(xùn)練固不可少,但如果忽視語(yǔ)言背后的文化背景和思維方式,終究只是緣木求魚。編程范式正體現(xiàn)了編程的思維方式,因而是培養(yǎng)編程語(yǔ)言的語(yǔ)感的關(guān)鍵。現(xiàn)在如果我開始介紹范式,你們還有意見嗎?”

    眾人受了鼓動(dòng),個(gè)個(gè)把頭搖得跟撥浪鼓似的。

    冒號(hào)語(yǔ)重心長(zhǎng)地說:“既然范式關(guān)乎語(yǔ)感,就需要慢慢的培養(yǎng)和滲透,不可能一蹴而就,因此有些地方不太明白也沒關(guān)系。現(xiàn)在只是撒下一些種子,慢慢的會(huì)生根發(fā)芽,直至長(zhǎng)成大樹。到那時(shí),你們個(gè)頂個(gè)的都是內(nèi)外兼修的武林高手了。怎么樣?大家準(zhǔn)備好了嗎?”

    “準(zhǔn)備好了!”眾人齊聲道,求知的目光再度點(diǎn)燃。

    “準(zhǔn)備好了就下課吧。”冒號(hào)狡笑著,“下節(jié)課,下節(jié)課我們?cè)僬劇?#8221;


     插語(yǔ)
     [1] 控制反轉(zhuǎn)(Inversion of Control)是一種軟件設(shè)計(jì)原則。與通常的用戶代碼調(diào)用可重用的庫(kù)(library)代碼不同,IoC倒轉(zhuǎn)了控制流方向:由庫(kù)代碼調(diào)用用戶代碼。有人將此比作好萊塢法則:“不要打電話給我們,我們會(huì)打給你的”。

    [2] 設(shè)計(jì)模式最經(jīng)典書籍《Design Patterns: Elements of Reusable Object-Oriented Software》的四位作者常被稱為GoFGang of Four


    總結(jié)

    • 庫(kù)和工具包側(cè)重代碼重用,框架側(cè)重設(shè)計(jì)重用。庫(kù)和工具包從微觀上解決具體問題,是為程序員帶來自由的;框架從宏觀上控制軟件整體的結(jié)構(gòu)和流程,是為程序員帶來約束的。框架是通過控制反轉(zhuǎn)(IoC)機(jī)制反客為主的。
    • 設(shè)計(jì)模式是軟件的戰(zhàn)術(shù)思想,架構(gòu)是軟件的戰(zhàn)略決策。與框架、庫(kù)和工具包不同,它們不是軟件產(chǎn)品,而是軟件思想。
    • 設(shè)計(jì)模式與慣用法都是針對(duì)常發(fā)問題的解決方案,但前者偏重設(shè)計(jì),后者偏重實(shí)現(xiàn)。
    • 架構(gòu)太高,談之過早;框架太多,無(wú)從談起;設(shè)計(jì)模式太少,不必多談。至于編程范式,對(duì)培養(yǎng)編程語(yǔ)言的語(yǔ)感至關(guān)重要,需要充分的重視和長(zhǎng)期的積累,方能悟其精髓。


    “”
    參考

    [1] Erich GammaRichard HelmRalph JohnsonJohn VlissidesDesign Patterns: Elements of Reusable Object-Oriented SoftwareBostonAddison-Wesley199426-28



    課后思考

    • 作為一個(gè)軟件開發(fā)者,你現(xiàn)在處于哪個(gè)階段?你未來的目標(biāo)是什么?
    • 傳統(tǒng)的學(xué)習(xí)方式的弊端在哪里?你是否有切膚之痛?
    • 你認(rèn)為一個(gè)優(yōu)秀的程序員需要具備什么素質(zhì)和精神?
    • 你了解哪些計(jì)算機(jī)語(yǔ)言?你對(duì)一門語(yǔ)言的取舍與喜惡的根據(jù)是什么?
    • 你認(rèn)為計(jì)算機(jī)語(yǔ)言未來的發(fā)展方向是什么?
    • 你能否在編程中感受到自己的激情和靈性?
    • 你了解哪些框架?它們的應(yīng)用范圍是什么?實(shí)現(xiàn)的機(jī)理是什么?
    • 你了解哪些設(shè)計(jì)模式?它們?yōu)槭裁茨艹善錇槟J剑?/span>
    • 學(xué)習(xí)編程范式的意義何在?

    posted on 2008-10-14 09:37 鄭暉 閱讀(4752) 評(píng)論(18)  編輯  收藏 所屬分類: 冒號(hào)課堂

    評(píng)論

    # re: 冒號(hào)課堂——第一課:開班導(dǎo)言 2008-10-14 10:05 久城

    寫的very good!~  回復(fù)  更多評(píng)論   

    # re: 冒號(hào)課堂——第一課:開班導(dǎo)言 2008-10-14 10:34 kuku

    又要開始了 不錯(cuò)不錯(cuò)  回復(fù)  更多評(píng)論   

    # re: 冒號(hào)課堂——第一課:開班導(dǎo)言 2008-10-14 10:39 Dragon_sxw

    哈哈, 語(yǔ)言幽默、詼諧。。。

    有點(diǎn)意思  回復(fù)  更多評(píng)論   

    # re: 冒號(hào)課堂——第一課:開班導(dǎo)言 2008-10-14 11:59 gillspent

    經(jīng)常閑逛blogjava,很久沒有看到這么風(fēng)趣幽默的文章,在風(fēng)趣幽默中又隱含了大量的知識(shí),不錯(cuò)。  回復(fù)  更多評(píng)論   

    # re: 冒號(hào)課堂——第一課:開班導(dǎo)言 2008-10-14 17:47 yangyusong

    老師寫的真好,我要好好拜讀  回復(fù)  更多評(píng)論   

    # re: 冒號(hào)課堂——第一課:開班導(dǎo)言 2008-10-17 18:15 Reeze

    很有意思的文章。。看得我都忘了下班了哦。。。
    下班咯。。  回復(fù)  更多評(píng)論   

    # re: 冒號(hào)課堂——第一課:開班導(dǎo)言 2008-10-20 13:04 liuzhujun

    老冒,太有才了  回復(fù)  更多評(píng)論   

    # re: 冒號(hào)課堂——第一課:開班導(dǎo)言[未登錄] 2008-11-06 11:45 fighter

    非常好,持續(xù)關(guān)注中。。。  回復(fù)  更多評(píng)論   

    # re: 冒號(hào)課堂§1.0:開班導(dǎo)言 2008-12-22 11:51 小五

    第一次看到,學(xué)習(xí)了  回復(fù)  更多評(píng)論   

    # re: 冒號(hào)課堂§1.0:開班導(dǎo)言 2008-12-24 12:07 龍T

    感謝我遇到這么優(yōu)秀的文字,對(duì)于我這種初學(xué)者來說撥開云霧之感,我一定要一口氣讀完它 然后再細(xì)細(xì)揣摩
    非常感謝  回復(fù)  更多評(píng)論   

    # re: 冒號(hào)課堂§1.0:開班導(dǎo)言 2008-12-24 12:56 技術(shù)狂熱者

    寫的很有見地  回復(fù)  更多評(píng)論   

    # re: 冒號(hào)課堂§1.0:開班導(dǎo)言 2009-01-19 14:20 duxu

    今天又寫不成文檔了,哎  回復(fù)  更多評(píng)論   

    # re: 冒號(hào)課堂§1.0:開班導(dǎo)言 2009-02-09 14:56 Todd

    老師的文章對(duì)一般在校學(xué)生而言稍微高了點(diǎn)兒,對(duì)科班出生,有兩三年工作經(jīng)驗(yàn)的人很有幫助。老師講的這些,我感到很親切,就像穿衣吃飯一樣,天天接觸,但很佩服您能這些系統(tǒng),這些生動(dòng)的講出來。  回復(fù)  更多評(píng)論   

    # re: 冒號(hào)課堂§1.0:開班導(dǎo)言 2009-02-13 23:51 Todd

    關(guān)系數(shù)據(jù)庫(kù)用到的關(guān)系理論算是范式嗎? 個(gè)人認(rèn)為和OO應(yīng)該是并列關(guān)系,所以應(yīng)該列進(jìn)來。  回復(fù)  更多評(píng)論   

    # re: 冒號(hào)課堂§1.0:開班導(dǎo)言 2009-02-13 23:54 鄭暉

    @Todd
    算是,但不是編程范式,而是數(shù)據(jù)庫(kù)范式。數(shù)據(jù)庫(kù)范式中也包括OO范式,后文中將會(huì)提到。  回復(fù)  更多評(píng)論   

    # re: 冒號(hào)課堂§1.0:開班導(dǎo)言 2009-02-24 22:43 安生

    老冒 你的冒號(hào)課堂 有書面教材么?  回復(fù)  更多評(píng)論   

    # re: 冒號(hào)課堂§1.0:開班導(dǎo)言 2009-02-24 22:47 鄭暉

    @安生
    該系列尚未完稿,預(yù)計(jì)年中出版。  回復(fù)  更多評(píng)論   

    # re: 冒號(hào)課堂§1.0:開班導(dǎo)言 2011-06-29 20:37 Excalibur

    確實(shí)很好  回復(fù)  更多評(píng)論   

    導(dǎo)航

    統(tǒng)計(jì)

    公告

    博客搬家:http://blog.zhenghui.org
    《冒號(hào)課堂》一書于2009年10月上市,詳情請(qǐng)見
    冒號(hào)課堂

    留言簿(17)

    隨筆分類(61)

    隨筆檔案(61)

    文章分類(1)

    文章檔案(1)

    最新隨筆

    積分與排名

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲精品二三区伊人久久| 国产免费av片在线无码免费看| 免费看少妇高潮成人片| 大妹子影视剧在线观看全集免费 | 亚洲成人激情在线| 亚洲AV无码一区二区二三区软件| 伊人久久大香线蕉亚洲| 国产成人精品日本亚洲| 亚洲精品免费观看| 亚洲第一香蕉视频| 最新亚洲精品国偷自产在线| 亚洲国产精品无码中文lv| 亚洲精品色在线网站| jizz免费在线观看| 精品视频在线免费观看| 114级毛片免费观看| 在线观看av永久免费| 国产成人免费福利网站| 国产精品亚洲综合专区片高清久久久| 国产亚洲av片在线观看18女人 | 免费国产黄线在线观看| 日本不卡在线观看免费v| 亚洲日本va午夜中文字幕久久| 亚洲日韩精品一区二区三区| 久久亚洲精品国产精品| 国产午夜亚洲精品| 无人视频免费观看免费视频 | 亚洲综合一区无码精品| 美女又黄又免费的视频| 免费精品久久天干天干| 成人免费的性色视频| 国产无遮挡吃胸膜奶免费看 | 免费电视剧在线观看| 免费一级毛片一级毛片aa| 欧洲亚洲国产清在高| 亚洲mv国产精品mv日本mv| 国产99久久亚洲综合精品| 免费精品久久天干天干| a级毛片无码免费真人| 亚洲一区精品伊人久久伊人| 久久亚洲中文字幕精品有坂深雪|