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

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

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

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

     

    冒號課堂

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

    課前導(dǎo)讀

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

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

    1.開班發(fā)言

    2.首輪提問

    3.語言選擇

    4.初識范式

    5.軟件技術(shù)



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

    授人以魚不如授人以漁                                                                ——古語

     

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

    摘要:對程序員的一些忠告和建議


      提問

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


    講解

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

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

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

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

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

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

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

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

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

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

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

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

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

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


    總結(jié)

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

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

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

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

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

    被動——師命生從的被動式接受知識

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

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

    • “知識之上是思想,思想之上是精神。”

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

     

    1.2首輪提問——什么語言好?

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

     

    關(guān)鍵詞:計算機語言,程序語言

    摘要:討論流行的計算機語言


      提問

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

     

    講解

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

    冒號也不說話,只是微笑地望著大家。

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

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

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

    冒號笑道:“這個問題很典型,很實在,也很初級。”

    問號被“初級”這個字眼刺得面上一紅。

    “如果信奉流行的就是好的,那么也許可以給你一個參考答案。”冒號轉(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)計結(jié)果,選出以上流行度超過1%的12種程序語言。從中可以看出,它們的總占有率超過90%,應(yīng)該算得上是當(dāng)今主流語言的代表。盡管有人置疑TIOBE排名的權(quán)威性和合理性,但這份名單應(yīng)該還是八九不離十的。”

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

    “對啊,”逗號附和著,“還有HTMLXML怎么不算呢?”

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

    問號殺了個回馬槍:“那CSSRSS算是程序語言嗎?”

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

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

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

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

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

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

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

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

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

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


    插語

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

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


     總結(jié)

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

     

    1.3語言選擇——合適的就是好的

    尺有所短,寸有所長                                                                ——《楚辭》

    關(guān)鍵詞:計算機語言,低級語言,高級語言,中級語言

    摘要:簡要回顧計算機語言

     

      提問

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

     

     講解

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

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

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

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

    句號若有所悟:“所以好的語言就是適合編程者和解決對象的語言。”

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

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

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

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

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

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

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

    第一代語言(1GL):機器語言

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

    第三代語言(3GL):高級語言——FortranPascalCJavaVB

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

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

    “誰能簡要地談?wù)勥@段歷史?”冒號又開始踢回傳球了。

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

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

    一種暈眩感向引號襲來。

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

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

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

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

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

    嘆號身形微顫:“坐這種車我可不放心。”

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

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

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

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

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

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

    引號提出:“好像有些書上把C語言稱為中級語言。”

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

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

    大家會心地笑了。

    逗號冷不防冒出一句:“我會跆拳道哦!”

    句號一樂:“哈哈,等你打贏了陸小鳳,就封你為機器語言。”

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

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


    插語

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

     總結(jié)

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

     

    1.4初識范式——程序王國中的世界觀與方法論

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

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

    摘要:初步引入編程范式


     提問

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

     講解

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

    冒號微嘆:“高級語言大概有近千種,流行的也不下幾十種,有時候選擇過多反而無所適從啊。”

    逗號不以為然:“最流行的不就那么幾個:JavaC++C#還有VB嗎?”

    不意此言遭到冒號連珠炮似的反問:“可你知道它們?yōu)槭裁磿餍袉幔渴遣皇菍W(xué)會這幾樣就是一個合格的程序員了?它們會不會變得不那么流行,甚至被其他語言取代?如果不會,為什么?如果會,又怎么辦?”

    逗號赧然語塞。

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

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

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

    嘆號吸口氣:“好抽象哦!”

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

    大家不禁莞爾。

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

    大家都被冒號詩化的語言感染了,沒想到編程也可以如此感性。

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

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

    全班笑倒。

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

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

    全班再倒。

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

    眾人稱絕。

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


    插語

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

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

     總結(jié)

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

    “”參考

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

    [2] Stephen H. KaislerSOFTWARE PARADIGMSNew JerseyWiley200521-22


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

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

    ——《霧里看花》

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

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


     提問

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

     講解

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    “從某種意義上說,是這樣。”冒號點點頭。

    逗號很不甘心:“我就想啃最甜的部分。”

    “當(dāng)心別把牙給崩掉。”冒號笑道,“不是打擊你,首先你還沒那本事;其次即使你有本事也未必有機會;最后即使有本事也有機會,重新設(shè)計框架也未必是好的選擇。就說大名鼎鼎的Struts吧,哪怕你設(shè)計出比它更高明的框架也不會被采用,因為前者早已成為Java平臺上網(wǎng)絡(luò)開發(fā)的事實(De Facto)標(biāo)準(zhǔn),公司很容易從市場上招到懂Struts的程序員,不必培訓(xùn)即可上手,成本低見效快。過去許多公司都有自己的網(wǎng)絡(luò)框架,但最后大多都放棄了,并不是因為Struts更優(yōu)秀,而是因為它更普及。畢竟大多數(shù)軟件開發(fā)是以金錢而不是技術(shù)為中心的。”

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

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

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

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

    下面開始交頭接耳竊竊私語起來。

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

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

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

    眾人受了鼓動,個個把頭搖得跟撥浪鼓似的。

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

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

    “準(zhǔn)備好了就下課吧。”冒號狡笑著,“下節(jié)課,下節(jié)課我們再談。”


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

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


    總結(jié)

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


    “”
    參考

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



    課后思考

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

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

    評論

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

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

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

    又要開始了 不錯不錯  回復(fù)  更多評論   

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

    哈哈, 語言幽默、詼諧。。。

    有點意思  回復(fù)  更多評論   

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    確實很好  回復(fù)  更多評論   

    導(dǎo)航

    統(tǒng)計

    公告

    博客搬家:http://blog.zhenghui.org
    《冒號課堂》一書于2009年10月上市,詳情請見
    冒號課堂

    留言簿(17)

    隨筆分類(61)

    隨筆檔案(61)

    文章分類(1)

    文章檔案(1)

    最新隨筆

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲午夜精品国产电影在线观看| 亚洲jizzjizz在线播放久| 永久免费av无码网站yy| 亚洲精品成人图区| 老司机永久免费网站在线观看| 一级做a爰片久久毛片免费陪| 久久精品国产亚洲夜色AV网站| 成人毛片18女人毛片免费96| 国产伦精品一区二区免费| 亚洲成a人片在线观看中文app| 亚洲日韩中文字幕日韩在线 | 亚洲va久久久噜噜噜久久男同| 亚洲色精品vr一区二区三区| 免费观看成人毛片a片2008| 久久久久久毛片免费看| 中文字幕在线免费看线人| 直接进入免费看黄的网站| 亚洲国产综合自在线另类| 亚洲videos| 亚洲电影在线免费观看| 亚洲人成网网址在线看| 亚洲伊人久久大香线蕉AV| 亚洲综合一区二区精品导航| 亚洲国产成人a精品不卡在线| 无人在线观看完整免费版视频| 成人爽a毛片免费| 99re视频精品全部免费| 国产精品玖玖美女张开腿让男人桶爽免费看 | 亚洲永久永久永久永久永久精品| 亚洲福利电影在线观看| 亚洲砖码砖专无区2023| 国产成人综合亚洲| a在线观看免费视频| 0588影视手机免费看片| 成人免费av一区二区三区| jizz免费观看视频| 午夜视频在线免费观看| 免费萌白酱国产一区二区三区| 91禁漫免费进入| av无码国产在线看免费网站 | 污污视频网站免费观看|