拿c++來說,我講過c++課,許多的國內教材對c++語法下了大功夫,卻對體現了c++精華的stl隻字不提,對代碼背後所體現的軟體開發思想與方法更是視而不見,我用c++也編過不少程式了,說句實話,我用到的特性不到c++的三分之一!於是就出現了這種怪現象,許多學生考試可以拿八九十分,給他一個簡單的實際問題他卻不知如何下手!
還有uml,現在好象很火的樣子,我們讀研時就開了這門課,講句實話,當時這門課我就沒聽懂,可後來我嘗試著用c++用面向對象的方法來編程式,然後,由代碼倒推回uml類圖,一下子就明白了,原來uml只不過是一種描述面向對象系統的符號罷了,如果學生沒進行過真正的oop,那就是為了學uml而學uml,根本就本末倒置。
還有軟體工程,我的感覺,一個人如果沒寫過一萬行以上的程式,他看軟體工程書就同看政治書差不多,每句都對,呵呵,就不知道為什麼對。我完成了那個幾萬行的vb程式之後,再回過頭看看理論,真是句句是真理!每個理論背後都是大量實踐經驗的總結。
回想我做軟體的體會,我發現所有的知識都是一個完整的體系,根本就無法區分哪些知識是本科的,哪些知識是研究生課程。於是,一種想法產生了,我主講程式語言類的課程,那我就直接以真實的軟體開發過程為主線,實踐中需要什麼我就講什麼。講c++,我就拋開了指定的教材,c++我講了stl,我講了ooad,兩者我都講了用rose進行雙向工程,引導學生去學uml,一開始就用uml去描述自己開發的程式,何必浪費大量的時間去學結構化的編程方法?
我現在簡直成了面向對象技術的布道者,我下學期即將開設ooad基礎選修課,從實際項目中抽取典型的案例,講uml,講rose,講設計模式,講軟體體系結構,例子代碼橫跨c++和。net下的開發語言,這對於我一個技術水平有限公司的董事長而言,實在有點不自量力,我鼻子上才插上幾根蔥,就想裝大象?但我想,如果我能成功地激發出哪怕1%的學生的興趣,能引導他們走向我認為是正確的方向,能啟發他們思考,能直接面向真實的軟體開發活動而不是學校的考試,就是我的成績。我現在正在看引進的原版書籍——《設計模式解析》,時時擊節讚嘆!《設計模式》經典但難懂難用,而《解析》一書的兩位作者既有豐富的從業經驗,又對ooad進行了深入的思索,真知灼見時時展露於書中,我現在剛看了這本書的80%,基本上可以用一個成語來描述這部書:深入淺出!
要做到深入淺出談何容易!只有同時具備技術專家與文學作家素質的人才能做到!
反觀我們國內的大量教材,還有大量的垃圾論文,全都是“淺入深出”,作者自己都未必明白,就東拼西湊,擺出個樣子嚇人。本來完全可以用大白話三言兩語講清楚讓人明白的道理,有人專門要繞一大圈,專挑用高深的數學公式來表達,唯恐別人容易理解,顯得他水平不高!呵呵,什麼東西一沾上“數學”,立馬身價百倍。我就聽過一個北師大的一個在讀博士說過:如果一篇博士論文中沒有一個數學公式,根本就不算是博士論文。這句話對不對,大家可以多思索。我數學不好,沒資格討論數學,我的直覺:數學是工具,但如果為了發表論文等目的而故弄玄虛,為數學而數學,是不合道理的。中國的學術水平與現狀,大家都心知肚明,不用我廢話了。
現在每年都畢業大批的計算機專業學生,可其中真正具備紮實根基的可以很快勝任工作的我看只有5%。多年以來,我國高校計算機教育是按照計算機科學研究者來培養的,可事實上,有多少學生能從事計算機方面研究的能力?我看應分流,80%的學生按工程師方向來培養,20%的學生按研究者方向來培養,而且應大幅減少必修課的數量,計算機領域太深太廣,樣樣都想教給學生,反而成了夾生飯,一個想從事硬體設計的學生和一個想從事軟體開發的學生,能給他們一樣的飯吃嗎?學校應提供各種條件和資源去引導學生,激發學生的創造性與主動探索性,讓他們去嘗試,去發現自己的長處,最終找到最適合自己的發展方向。不這樣做,中國軟體後繼乏人,沒希望。