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

          冒號和他的學生們

          ——程序員提高班紀事

          1. 軟件技術

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

          ——《霧里看花》


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

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

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

          眾現不信之色。

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

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

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

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

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

          逗號問道:“那掌握的標準是什么?”

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

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

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

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

          引號應答:“框架就是一組協同工作的類,它們為特定類型的軟件構筑了一個可重用的設計。與庫和工具包不同之處在于前者側重設計重用而后兩者側重代碼重用。”

          “嗯,有點標準答案的味道。”冒號夸道,“如果吹毛求疵的話,框架并不限于OOP,可以是協同工作的,也可以是協同工作的函數。一個足夠復雜的應用軟件開發,為確保快速有效,通常采取的方式是:在宏觀管理上選取一些框架以控制整體的結構和流程;在微觀實現上利用庫和工具包來解決具體的細節問題。框架的意義在于使設計者在特定領域的整體設計上不必重新發明輪子;庫和工具包的意義在于使開發者擺脫底層編碼,專注具體問題。”

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

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

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

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

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

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

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

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

          問號提議:“您能談談設計模式和架構嗎?”

          冒號侃侃而談:“與框架與庫和工具包不同,設計模式Design Pattern)和架構Architecture)不是軟件產品,而是軟件思想設計模式是軟件的戰術思想,架構是軟件的戰略決策。設計模式是針對某些經常出現的問題而提出的行之有效的設計解決方案,它側重思想重用,因此比框架更抽象,更普適,但多限于局部解決方案,沒有框架的整體性。至于架構,一般指一個軟件系統的最高層次的整體結構和規劃,一個架構可能包含多個框架,而一個框架可能包含多個設計模式。”

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

          “當然都很重要。不過——”冒號話鋒一轉,“在沒有打好基礎前,架構只是空中樓閣,因此不可能現在談它。至于框架,不同的應用領域有不同的框架,如表現層的Struts,業務層的Spring,持久層的Hibernate等等,即使相同領域的框架也有多個選擇,從何談起?再說框架其實一點也不高深,完全可以無師自通,關鍵是領會思想,多學習多實踐。談到設計模式,一共就那么幾十個,一本‘四人幫’(GoF)的書足矣,又何須多談?簡言之,一個談之過早,一個無從談起,一個不必多談。”

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

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

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

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

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

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

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

          “準備好了就下課吧。”冒號狡笑著,“下節課我們再談。”

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

          評論

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

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

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

          期待您的再次更行  回復  更多評論   

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

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

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

          pretty good!  回復  更多評論   

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

          "在宏觀管理上選取一些框架以控制整體的結構和流程;在微觀實現上利用庫和工具包來解決具體的細節問題。框架的意義在于使設計者在特定領域的整體設計上不必重新發明輪子;庫和工具包的意義在于使開發者擺脫底層編碼,專注具體問題。"
          說的太好了!!!醍醐灌頂阿
          頂了!!  回復  更多評論   

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

          真的不錯,繼續往下看。。。  回復  更多評論   

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

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

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

          最后幾句太搞了,呵呵  回復  更多評論   

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

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

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

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

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

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

          導航

          統計

          公告

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

          留言簿(17)

          隨筆分類(61)

          隨筆檔案(61)

          文章分類(1)

          文章檔案(1)

          最新隨筆

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 车致| 峨山| 白玉县| 离岛区| 永靖县| 根河市| 平阴县| 榕江县| 高台县| 安化县| 深圳市| 福鼎市| 外汇| 湛江市| 徐汇区| 苏尼特右旗| 泽州县| 九寨沟县| 分宜县| 五峰| 庆元县| 都匀市| 嘉义市| 通州市| 登封市| 涿州市| 诸暨市| 邹平县| 新乡市| 怀化市| 江永县| 英山县| 洛阳市| 全南县| 沭阳县| 育儿| 自贡市| 定远县| 石泉县| 台山市| 峨边|