冒號和他的學(xué)生們(連載5)——軟件技術(shù)

          冒號和他的學(xué)生們

          ——程序員提高班紀(jì)事

          1. 軟件技術(shù)

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

          ——《霧里看花》


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

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

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

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

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

          眾人雖覺此話有些尖刻,細想起來也有幾分道理,但老冒明知而不為,不走群眾路線,偏去扯什么勞什子的范式——當(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)呢?難道它們真如您所說只是時髦而花哨的東西嗎?”

          “我可沒這么說。”冒號矢口否認,“但在弄清一樣?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)上利用庫和工具包來解決具體的細節(jié)問題??蚣艿囊饬x在于使設(shè)計者在特定領(lǐng)域的整體設(shè)計上不必重新發(fā)明輪子;庫和工具包的意義在于使開發(fā)者擺脫底層編碼,專注具體問題。”

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

          “問得好!”冒號贊言,“框架與工具包最大的差別在截然相反的設(shè)計理念上:庫和工具包是為程序員帶來自由的,框架是為程序員帶來約束的。具體地說,庫和工具包是為程序員提供武器裝備的,框架則利用控制反轉(zhuǎn)IoC)機制實現(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),公司很容易從市場上招到懂Stuts的程序員,不必培訓(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è)重思想重用,因此比框架更抽象,更普適,但多限于局部解決方案,沒有框架的整體性。至于架構(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)的書足矣,又何須多談?簡言之,一個談之過早,一個無從談起,一個不必多談。”

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

          “知識的學(xué)習(xí)有幾種方式:一種靠記憶,一種靠練習(xí),一種靠培養(yǎng)。就拿英語學(xué)習(xí)來說吧,學(xué)單詞,單靠記憶即可;學(xué)句型、語法,光記憶是不夠的,需要勤加練習(xí)方可熟能生巧;而要講出地道的英語,光記憶和練習(xí)是遠遠不夠的。從小學(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呢。”

          句號悟道:“您是想告訴我們,編程范式就是編程語言的語感?”

          “一針見血!”冒號慶幸總算沒有白費口舌,“現(xiàn)在如果我開始介紹范式,你們還有意見嗎?”

          眾人個個把頭搖得跟撥浪鼓似的。

          冒號語重心長地說:“既然范式是一種語感,就需要慢慢的培養(yǎng)和滲透,不可能一蹴而就,因此有些地方不太明白也沒關(guān)系。現(xiàn)在只是撒下一些種子,慢慢的會生根發(fā)芽,直至長成大樹。大家準(zhǔn)備好了嗎?”

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

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

          posted on 2008-05-05 16:41 鄭暉 閱讀(2778) 評論(11)  編輯  收藏 所屬分類: 冒號和他的學(xué)生們

          評論

          # re: 冒號和他的學(xué)生們(連載5)——軟件技術(shù) 2008-05-05 17:28 隔葉黃鶯

          真棒,太有意思了,很有深度。  回復(fù)  更多評論   

          # re: 冒號和他的學(xué)生們(連載5)——軟件技術(shù) 2008-05-05 17:41 birdqin

          期待您的再次更行  回復(fù)  更多評論   

          # re: 冒號和他的學(xué)生們(連載5)——軟件技術(shù) 2008-05-05 22:45 viMory

          引號搬小板櫈來上課。^_^  回復(fù)  更多評論   

          # re: 冒號和他的學(xué)生們(連載5)——軟件技術(shù) 2008-05-19 15:52 Actually

          pretty good!  回復(fù)  更多評論   

          # re: 冒號和他的學(xué)生們(連載5)——軟件技術(shù) 2008-05-20 01:38 gopee

          "在宏觀管理上選取一些框架以控制整體的結(jié)構(gòu)和流程;在微觀實現(xiàn)上利用庫和工具包來解決具體的細節(jié)問題??蚣艿囊饬x在于使設(shè)計者在特定領(lǐng)域的整體設(shè)計上不必重新發(fā)明輪子;庫和工具包的意義在于使開發(fā)者擺脫底層編碼,專注具體問題。"
          說的太好了?。?!醍醐灌頂阿
          頂了??!  回復(fù)  更多評論   

          # re: 冒號和他的學(xué)生們(連載5)——軟件技術(shù) 2008-05-29 10:39 deathnote

          真的不錯,繼續(xù)往下看。。。  回復(fù)  更多評論   

          # re: 冒號和他的學(xué)生們(連載5)——軟件技術(shù) 2008-06-18 23:24 leweslove

          很同意 編程的語感。而且編程的靈感也很重要!  回復(fù)  更多評論   

          # re: 冒號和他的學(xué)生們(連載5)——軟件技術(shù) 2008-06-24 14:35 gyf

          最后幾句太搞了,呵呵  回復(fù)  更多評論   

          # re: 冒號和他的學(xué)生們(連載5)——軟件技術(shù) 2008-06-25 13:41 zwd

          大多是大家普遍存在的問題,頂你!??!  回復(fù)  更多評論   

          # re: 冒號和他的學(xué)生們(連載5)——軟件技術(shù) 2008-12-01 17:16 Nuy

          聽君一席話,勝讀十本書  回復(fù)  更多評論   

          # re: 冒號和他的學(xué)生們(連載5)——軟件技術(shù) 2009-01-09 15:08 小李飛刀

          寫得非常好!詼諧風(fēng)趣,見解也很有深度!  回復(fù)  更多評論   

          導(dǎo)航

          統(tǒng)計

          公告

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

          留言簿(17)

          隨筆分類(61)

          隨筆檔案(61)

          文章分類(1)

          文章檔案(1)

          最新隨筆

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 巢湖市| 拉孜县| 班戈县| 昌乐县| 林州市| 西昌市| 白山市| 红安县| 宜丰县| 互助| 敦化市| 甘肃省| 渭南市| 文水县| 霍山县| 邵阳市| 武定县| 革吉县| 大关县| 东乡族自治县| 永嘉县| 高青县| 鄂托克前旗| 周宁县| 邻水| 仁布县| 翁源县| 建德市| 乡宁县| 前郭尔| 城口县| 文水县| 比如县| 桐乡市| 甘谷县| 双鸭山市| 阿勒泰市| 宝应县| 益阳市| 平罗县| 屯门区|