地球在變小,地球上不會再發現新大陸,可是一個新的認識、一個新的角度,無異于對地球的一次開拓,無異于發現新大陸。
一項計算機基礎課程改革,歷時八年多。在2007年西安舉行的“第三屆全國計算機教育論壇”上,改革者的發言使幾乎所有在場的人都受到了鼓舞。他們的創新成果是把“數據結構”、“C語言”和“C++語言”聯系在一起,形成了一門打破專業界線的綜合課程;開發了豐富新穎、獨具特色的多媒體教學軟件;建立了以學生為骨干的教學實驗管理機制。他們的教材《C/C++與數據結構》(第3版)(上下冊)被評為“普通高等教育‘十一五’國家級規劃教材”,并由清華大學出版社和Thomson Learning分別出版中文版和英文版,在國內外發行。特別令人感到震動的是,在他們的創新成果中,處處表現出了辯證唯物主義的方法。
我們一直倡導馬克思主義理論是我們行動的指南,但是,在一項具體的計算機課程改革中始終堅持這一原則也許還從來沒有過,這是一件多么難能可貴的事情。這種開拓性的改革精神給我們開了一個好頭。
本刊執行主編奚春雁(以下簡稱奚)為此專門走訪了這項改革的主持者——天津師范大學王立柱教授(以下簡稱王),經過交談,我們深深感到這項改革意義重大,對計算機基礎教育具有極大的啟發性。《計算機教育》擬從2008年第一期開始,特別開設“教改專欄”欄目,對這項教學改革的過程進行詳細介紹。我們以此拋磚引玉,希望大家暢所欲言,對此項改革發表自己的觀點,一兩句感言也好,論文評述也好,不同主題、不同角度,我們都歡迎。
我們共同努力,來落實鄧小平同志提出的“熟悉馬克思主義的基本理論,從而加強我們工作中的原則性、系統性、預見性和創造性”。我們堅信,沿著這個方向走下去,我們一定能夠在計算機教育領域里真正有所作為。奚:王老師,C語言、C++語言和數據結構至今還基本上都是獨立的課程,而您在八年以前就計劃把它們聯系在一起,這種想法是從哪里來的呢?
王:這是現實的需要。當時我在經濟信息系,號業對學生的計算機應用能力要求比較高,可是計算機課程分散,重點不突出,低水平重復嚴重,占用課時又多,這種教學既不能跟上計算機快速發展的步伐,又不能提高學生的自主學習能力。
奚:于是你們就選擇了C、C++和數據結構這三門課程進行綜合性課程改革。為什么選擇這三門課程作為突破口呢?
王:無論是為了跟上程序語言快速發展的節奏,還是為了提高學生自主學習的能力,我們都必須把計算機基礎教學內容從簡單的應用和單純的應試轉到學習和掌握程序語言發展的規律上來。
奚:您提到了程序語言發展的規律。能不能再說具體一點?
王:程序語言發展是程序語言重用程度的不斷提高:從匯編語言,C語言,到C++語言,Java的流行,是基礎設計方法重用程度的提高;從機器指令到函數,從對象到構件,支持重用的程序語言機制日漸成熟。而決定程序語言發展的內在原因是程序設計的基本。
矛盾:存儲和操作。這種矛盾從低級形式到高級形式的不斷轉化,進而推動程序語言的不斷發展,就是程序語言發展的規律。
奚:那么將數據結構包括進來,一定說明它與這個規律有著密切的聯系吧?
王:數據結構代表若這個基本矛盾發展的高級形式:結構和算法。
奚:我很早以前見過一本譯著,書名就是《算法+結構=程序》,這是否就說明了這種聯系?
王:是的。這是科學出版社于1987年出版的。這種思想是程序設計發展到一定階段的產物。“時至今日,縱觀短暫的計算機發展史,這兩個方面一直保持不變。發展演化的只是它們之間的關系,就是所謂的程序設計方法。”
奚:那么C和C++呢?C++可是最難學習的一種程序語言。
王:從C到C++,具體包含著程序設計發展中的一個復雜的矛盾轉化過程,是程序語言發展的一個主要環節。這是任何程序語言都不具有的特點。對于不習慣揭示矛盾,主動分析研究矛盾轉化的人來說,C++確實難以理解。
奚:普遍認為,C++的應用水平代表著一個國家的軟件產業發展水平,也代表著個人的軟件應用水平。是不是這樣啊?
王:是的。不但如此,C++的教學水平也代表著計算機基礎教育的水平。
奚:辯證法就是研究矛盾發展規律的,看來你們就是在抓矛盾,而且在抓主要矛盾。但是概括和總結這個矛盾運動的規律可不是一朝一夕的事情啊。
王:是的,這是一個過程。一個從實踐到理論,從理論再到實踐的反復過程。我們的教材出了三版,也從一個側面說明了這個過程的曲折。
奚:這個過程對計算機教育一定具有深遠的啟示。
王:1997年浙江大學出版社出版了一本教材《C/C++與數據結構》,作者是金以文,該教材在講完C部分之后,直接從C++的特有內容開始講C++,把C++中與C重復的部分取消了。這是國內在這方面進行的最早的實踐活動。
奚:國外有嗎?
王:有2001年機械工業出版社出版了一本譯著《C++編程思想》。作者用了一章的篇幅,先由C語言實現一個袖珍C庫(簡化的數據結構的順序表),然后再轉換為C++實現,通過比較分析而進入C++。這是更深入的實踐活動了。
奚:這些是對你們有利的實證材料,但這畢竟不是主流,你們怎樣面對占主流地位的各種不同的觀點呢?
王:認真分析,弄清問題,堅定信念。當時我們讀到一篇博士論文,《(巴黎手稿)美學研究》,后來這篇論文以《走向現實的美學》為書名,由人民出版社出版了。《巴黎手稿》是馬克思的《1844年經濟學哲學手稿》的簡稱,是馬克思哲學的真正起源和秘密,它為美學奠定了一個堅實的基礎,使美學走向現實,要求實現人的一切感覺和特性的徹底解放。這篇論文使我們樹立起以馬克思主義基本理論作為我們行動指南的信念。
奚:我最近讀到了這本書,感觸很大。什么是美的,一般人看來是一個見仁見智的問題,馬克思卻把它與經濟學和哲學問題一并考慮,把人類的審美活動作為人類實踐活動的一個組成部分,和人類龐大而統一的歷史進程結合起來進行探討。相比之下,計算機教育中的一系列問題更應該從哲學的角度去分析和研究。
王:的確如此。其實,哲學不只是哲學家的事。我們對人類的實踐活動進行概括和總結,就不可避免的受某種哲學的支配,問題只在于,我們接受哪一種哲學的支配。
奚:換句話說,對人的實踐活動,辨證唯物主義不去概括和總結,唯心主義、形而上學就會去概括和總結。而概括和總結的結果不同,對我們進一步實踐的指導意義就不同。
王:是這樣。計算機科學的快速發展,積累了龐大數量的實證的知識材料,如果我們把這些知識材料平等看待,毫無關聯地排列起來,像照鏡子式的直觀反映,那么它們不僅表現為雜多,而且因為我們孤立的看待它們,所以對很多復雜的概念無法理解,這樣,它們就超出了我們的認識能力。
奚:有一種悲觀的說法,認為計算機發展之快已經超越了人們的適應能力。這種思想是不是就源于上面的因素。
王:是這個原因。如果我們依據材料的內在聯系,系統地把這些材料加以整理,使它們從低級形式必然地發展到高級形式,那么,我們就可以從簡單的基本事實出發,依賴這種聯系,由此及彼地整體地把握它們。
奚:不少程序語言教材都在開篇對程序語言發展的各個階段進行了概述,這是不是就是你們所要做的“整理”呢?
王;不是。我們不是按照編年體,簡單地列出歷史的各個階段,而是按照辯證法的要求,從分析事物的最初的最簡單的形式出發,揭示它內在的矛盾運動,通過矛盾的不斷轉化,描述它從低級形式到高級形式的必然發展。而且這種方法應該是貫穿教材始終的。
奚:所以您的教材是從“機器語言程序”一章開始的。
王:機器語言是程序語言最低層的形式,構成機器語言指令的操作碼和操作數,是“存儲和操作”這個程序設計基本矛盾的最簡單形式,是程序語言的“細胞”。
奚:這種從事物自身的內在活動去描述,從它的必然發展去描述的方法,應該有利于克服主觀性、片面性等傾向。
王:是這樣。人的認識過程本身存在著主觀性、片面性的可能。首先,在分析和概括矛盾的具體的、復雜的轉化過程中,由于懶惰和能力不足等原因,始終存在著向幻想轉變的危險。其次,人的認識過程近似于螺旋的曲線,這使那些不懂得辯證法的人,容易把認識的某一部分、某一成果絕對化。
奚:例如有一種觀點,認為C和C++是完全不一樣的方法,學習了前者,不利于學習后者,因此主張直接學習后者,還有一種結果一樣的觀點,認為C++包含C,所以可以直接學習C++。
王:這就是主觀性和片面性的一種表現。按照這種邏輯,我們還可以說,有了C#,可以不學C++,有了更好的,以前的都可以不學了。
奚:確實有人干脆說,早學計算機的人虧了,越晚學越好。這種觀點給我們的教學造成了不少混亂。
王:這兩種觀點的實質是一樣的。當人們不能描述從C到C++的復雜的矛盾轉化過程、不能理解“C也包含著C++,C++是C的必然發展”這樣一層辯證法的包含關系的時候,便只能干脆不顧它們的這種聯系。于是,簡單的處理就是,或者把它們說成是不相容的,或者想當然的認為后來的好于以前的,而不要以前的。
奚:如果不能說明從C到C++的聯系,那么如何解釋C++方法的來源呢?
王:只有借助想象,用理想的、幻想的聯系代替真實的聯系,或用通俗的解釋代替科學的描述。例如,因為世界是由對象構成的,所以人們就模仿世界構成的方式,產生了C++面向對象的程序設計方法。有不少C++教材就是用這種類似的方式引入C++的。
奚,那么是否可以問,世界一開始就是由對象構成的,為什么面向對象的程序設計方法出現在二十世紀末,而不是更早?
王:為了科學地回答這個問題,人們就必須回到程序設計這個特殊的領域中來,仔細研究該領域中各個方面的關系和它們的發展過程。否則,人們就很容易把c上+方法歸功于一個聰明的頭腦,這個頭腦如果早出現五十年,我們就可以省去五十年使用低級方法編程的苦難。
奚:這不就是典型的唯心主義的觀點嘛!
王:是的。人的認識離開了事物本身的矛盾運動軌跡,很容易滑向唯心主義。
奚:這就要求教師應該成為自覺的辨證唯物主義者。
王:我們是這樣要求自己的。程序語言發展是一個充滿矛盾的復雜過程,各種程序語言都是相互聯系的,而且這種聯系還在不停地發展著,千頭萬緒,以至無窮。我們之所以抓住C、C++和數據結構的聯系這樣一個線索,從方向上講,就是為了防止盲目性、隨意性,以免墮入煙海。
奚:這里面有點藝術創作的味道。
王:是啊。《水滸傳》不寫林沖當教頭時的生活,而是把它通通刪掉,直接寫他和高衙內的沖突。正是這一沖突,一下展開了林沖的性格特點,掀起了情節的波瀾,揭示了“官逼民反”這一主題思想。
奚:所以教學也是藝術。
王:科學規律和藝術規律是一致的。我們引進了許多C++教材,有的作者是參與了C++設計工作的,有的作者是C++標準委員會的成員,他們具有一手資料,但是,他們的教材也修改了很多版,而且有的前后差別很大,他們就是在追求一種科學的描述。因為人們的認識過程是這樣的,從不知到知,從不完全的不確切的知識到比較完全的比較確切的知識。這個認識過程,需要與之相一致的、從最簡單上升到復雜、理論上前后一貫的關于具體事物的邏輯表現形式。
奚:在您的這門專業課中,處處貫穿著辯證法的思想,是不是要求學生一定要先修哲學課呢?
王:根據從特殊到一般,再從一般到特殊的認識秩序,應該先學習這種綜合基礎課程。中學生成為大學生的轉變,是從形式邏輯思維到辯證邏輯思維的轉變,而這種轉變是一個艱難的過程。如果我們按照恩格斯的教導,從每一門具體的學科中找出辯證法的規律并從該學科里加以闡發,而不是把辯證法當作死記硬背的教條來灌輸,這樣的教學方法,就可以大大縮短這個轉變過程。
奚:我認為,這是一個素質教育的大問題,也是教育改革的一個難題。
王:正因為這是一個難題,才需要我們更加堅定信念,不懼困難,腳踏實地,去實現這種突破。
奚:在你們的教學改革過程中,一定不乏激烈的思想轉變,充滿著跌宕起伏的內容,相信我們的報道也會越來越精彩。