冒號課堂§5.1:教學計劃

           

          冒號課堂

          第五課 語言小談(1)


          課前導讀

          本課承上啟下,為今后的學習作一些鋪墊。在確定教學計劃后,對數據類型和動態語言作了簡單的介紹,并對有關編程語言的一些觀點作出評論。

          本課共分四節——

          1. 教學計劃——接下來的故事
          2. 數據類型——規則與變通
          3. 動態語言——穿著彩衣飛舞的腳本語言
          4. 語言誤區——語言的宗教情結

          5.1教學計劃——接下來的故事

          褚小者不可以懷大,綆短者不可以汲深                            ——《莊子·至樂》

           

          關鍵詞:編程范式,迭代學習法, 程序員

          摘要:   討論下一步教學計劃

           

           預覽

          ·           編程水平的提升之道是:在實戰中演練招法,在招法中領會心法,心法反過來提升招法,進而提高實戰水平,如此循環往復呈螺旋式上升過程。正所謂熟能生巧,巧能生通

          ·           迭代學習法:即在具體知識與抽象理論之間進行折返式學習

          ·           網頁的迷人之處就在于,能夠用精美的畫皮來包裹冗長低效的代碼

          ·           無論干哪一行,要想勝任愉快,離不開四樣東西:才能、興趣、方法和努力

           

           提問

          ·           什么是迭代學習法?

          ·           一個合格的程序員需要學習和掌握不同領域的許多知識,如何能勝任愉快?


           

             講解

          新課開始了,冒號一反常態,并沒有直奔主題:“在談論新話題之前,先請諸位暢所欲言,談談這段時間的學習感受。”

          嘆號表情有點復雜:“通過前面的學習,讓我長了不少見識,只是——”

          “但講無妨。” 見嘆號有些吞吞吐吐,冒號鼓勵道。

          “只是覺得有點——紙上談兵。”嘆號鼓足勇氣說出心里話。

          引號不以為然:“我倒覺得應該更深入地去了解編程范式,現在有了一些感性認識,但還非常膚淺,希望以后能進一步展開。”

          逗號挺實在:“有些地方似懂非懂,聽起來挺費勁的,直到情景編程才覺得輕松了些。以后可不可以多談些具體的編程知識、編程技巧和編程經驗?”

          句號拍了拍他的肩膀:“你想學的是招法,老冒傳的是心法。”

          逗號不服:“沒有招法再多心法也白搭——光說不練假把式。”

          句號反駁:“只關注招法,境界永遠得不到提升——光練不說傻把式。”

          “二位請暫停爭論。”冒號把頭轉向問號,“你怎么看?”

          問號很干脆:“管它心法還是招法,能解決問題的就是好法。”

          “你倒滑頭,整個一白貓黑貓論嘛!” 冒號哈哈一笑,“首先,編程范式絕非中看不中用的屠龍之術,它有助于我們更快速地掌握、更深刻地理解、更純熟地運用編程語言,故有心法之謂。其次,心法只有通過招法才能落到實處,也只有通過招法才能融會貫通。”

          “那傳說中的‘無招勝有招’呢?”引號問。

          冒號哂道:“武俠小說看多了,容易想入非非,那種境界豈是一般人所能達到的?對絕大多數人來說,無招就意味著自己沒招而將中他人之招。”

          眾人竊笑。

          “還有一樣是至關重要的。”冒號提醒道,“那就是實戰。”

          句號深有體會:“以前在學校里編程似乎還得心應手,到了公司就時感力有不逮。”

          “花拳繡腿對付小嘍啰綽綽有余,真碰到高手自然漏洞百出了。”冒號直言道,“編程水平的提升之道是:在實戰中演練招法,在招法中領會心法,心法反過來提升招法,進而提高實戰水平,如此循環往復呈螺旋式上升過程。正所謂熟能生巧,巧能生通。”

          問號詢道:“下面我們的主題是什么?”

          冒號亮出他的一套學習理論:“軟件工程中有個迭代開發法,本班則采用迭代學習法:即在具體知識與抽象理論之間進行折返式學習。當然這種迭代不是機械式的重復,而是增量式的循環。假定你們以前更關注具體的編程語言,那么遵循這種方式,先介紹抽象的編程范式是合適的。在初步了解范式之后,不妨重新回到編程語言上來。”

          嘆號唯唯連聲:“是啊,在空中飄久了,會染上恐高癥的。”

          冒號笑著警告:“不要高興太早,著陸后我們還會再次起飛的——別忘了我們的迭代式學習是周而復始的。至于眼下談什么,還是先征求各位的意見,這樣開放式教學才名副其實嘛。”

          眾人開始交頭接耳、七嘴八舌地議論起來。

          一陣商討之后,大家似乎未能達成共識。冒號見狀,便讓他們一一道來。

          問號再次充當急先鋒:“能不能比較一些當今主流語言各自的優缺點?”

          冒號笑言:“我怎么恍惚間又回到了第一堂課?你的潛臺詞還是那句話:到底學哪種語言好?”

          問號被窺破心事,微露窘色。

          “不過我非常理解你們的想法。”冒號體諒道,“雖然這是編程中最易提出卻又最難回答的問題,但考慮到大家對它如此興致盎然,我決定不顧引火燒身之危,鋌而走險一回。”

          眾人鼓掌。

          冒號故作疑惑:“你們這是對問題的答案表示期待呢,還是對我的勇氣表示贊賞?”

          眾皆笑曰:“兼而有之,兼而有之!”

          嘆號提出:“近來動態語言非常流行,能說說它與靜態語言到底有何不同,是否會取而代之?”

          “嗯,這個問題總算簡單了些。”冒號如釋重負。

          逗號堅持道:“我還是那個建議,希望學些具體的編程知識和技巧,比如將最流行的Java語言中的一些重點和難點分幾個專題來討論。”

          冒號頷許:“這是個很好的建議,可以采納。”

          引號有不同意見:“Java沒有C++來勁:要說難點,C++多得多;要說流行度,按照TIOBE的數據,CC++之和還超過Java五個百分點呢。”

          逗號不服:“你沒看到CC++正在逐漸沒落嗎?”

          引號冷哼一聲:“開玩笑,什么時候操作系統、數據庫、游戲軟件和嵌入式系統都改用Java了再說這話。別忘了,Java的虛擬機都還是CC++寫成的呢。”

          冒號忙止住干戈:“我還沒來得及成為眾矢之的呢,你們二位倒先掐上了。”

          句號提議:“最好找一個項目實例,從頭至尾演練一次,既能貫穿各個知識點,又能讓我們對軟件開發有個整體認識。”

          “這個想法聽起來非常不錯。”冒號沉吟了一會又道,“只是一個真正企業級的項目,涉及面太廣。比如一個完整的web應用,不論是采用重量級的J2EE.NET技術,還是采用輕量級的PerlPHPRubyPython等動態語言技術,除了要掌握各自的主體語言外,還涉及到相應的框架、集成環境和各種工具,以及JavaScriptCSSHTMLXML等技術,同時數據庫的知識也是不可或缺的。”

          問號奇道:“JavaScriptCSSHTML這些不主要是網頁設計人員的語言嗎?”

          冒號解釋:“網頁設計人員大多用Dreamweaver之類的工具來設計HTML頁面,開發一般網站尚可勉力而為,若開發企業級軟件則有些力不從心了。更何況web應用的趨勢是具有更豐富用戶體驗的Rich Internet application (RIA),采用大量的AJAXFLEX等技術,需要熟悉JavascriptActionscript之類的語言,這些就更非一般網頁設計人員所能勝任。”

          引號插言:“據我所知,許多公司都是請網頁設計師來編寫HTMLJavascript等代碼的。”

          冒號指出:“網頁的迷人之處就在于,能夠用精美的畫皮來包裹冗長低效的代碼。出于軟件開發的時間和成本的考慮,公司的選擇無可非議,但如果要提高軟件競爭力,這些代碼至少要經過程序員的加工處理。”

          逗號復言:“那數據庫總該是數據庫管理員的事吧?程序員至多用到hibernateiBATIS之類的ORM[1]框架。”

          冒號斷然否定:“數據庫絕不只是DBA的事,ORM也不能取代數據庫的設計和SQL的使用。另外,復雜的應用需要編寫大量的存儲過程stored procedure),故還應掌握PL/SQLTransact-SQL等擴展數據庫語言。換句話說,從web開發最前端的網頁到最后端的數據庫,都應該有程序員的身影。”

          句號聯想到:“借用前面餐館的例子,不妨把接待員看作客戶層client    tier,把服務員看作表現層presentation tier),把廚師看作業務層business tier),把收銀員看作數據層data tier),把廚工看作常用的輔助類helper class[2]。”

          冒號微微點頭:“比較靠譜。要說不當之處,就是服務器端的表現層不會如服務員那樣直接與客戶打交道,此外業務層常與數據層打交道,但廚師好像不會與收銀員有什么瓜葛。”

          嘆號夸張地捂住臉:“天哪,程序員竟然身兼五職,太慘了吧?”

          “當然程序員會各有分工,不過如果你總局限某一層的應用開發,今后憑什么謀取更高的職位?”冒號苦口婆心,“無論干哪一行,要想勝任愉快,離不開四樣東西:才能、興趣、方法和努力。沒有才能則難以勝任;沒有興趣則難以愉快;沒有方法則事倍功半;沒有努力則一事無成。我相信好的方法最終能激發人的才能、興趣和努力,這也是本班的一個理念。希望大家能通過各種問題的討論,獲得一些方法上的啟示。”

          問號急切地詢問:“那么我們的下一步是什么?”

          “綜合各位的意見,我們從簡到繁。”冒號公布計劃,“先簡單談談動態語言;再對主流語言作簡評;然后以Java為主、C++C#為輔,對語言中的一些要點作專題討論;最后如果時間允許,找一個項目來實踐一番。”

          “嘔耶!”眾人皆大歡喜。


            插語


          [1] ORMObject-Relational Mapping)是一種編程技術,能將OOP中的對象模型映射到數據庫的關系模型。

          [2] 傳統的三層架構為:表現層、業務層和數據層。其中表現層可進一步分為客戶端的客戶層和服務器端的表現層,數據層有時用集成層(integration tier)和資源層(resource tier)代替。

           

             總結

           

          • 所謂迭代學習法,是指在具體知識與抽象理論之間進行增量式的循環學習。
          • 一個合格的程序員不應只局限某一層的應用開發。
          • 要想工作勝任愉快,才能、興趣、方法和努力缺一不可。一套好的方法可以激發才能、興趣和努力。

           

           “”參考

          [1] Deepak AlurJohn CrupiDan MalksCore J2EE Patterns: Best Practices and Design StrategiesUpper Saddle River, NJPrentice Hall PTR2003120-121

          posted on 2008-12-30 10:17 鄭暉 閱讀(2929) 評論(1)  編輯  收藏 所屬分類: 冒號課堂

          評論

          # re: 冒號課堂§5.1:教學計劃 2008-12-30 13:03 R_XiaoGuang

          期待!  回復  更多評論   

          導航

          統計

          公告

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

          留言簿(17)

          隨筆分類(61)

          隨筆檔案(61)

          文章分類(1)

          文章檔案(1)

          最新隨筆

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 三都| 名山县| 东丰县| 红河县| 新津县| 肇州县| 历史| 额尔古纳市| 瑞安市| 永德县| 安西县| 肇州县| 奉新县| 岑溪市| 通江县| 昭平县| 濮阳市| 云霄县| 五原县| 临西县| 宁安市| 新平| 武山县| 青海省| 丘北县| 龙南县| 临城县| 大竹县| 平潭县| 敦煌市| 呼玛县| 瑞丽市| 壶关县| 冕宁县| 山东省| 思南县| 安塞县| 五原县| 临安市| 望江县| 济南市|