說到書,仁者見仁,智者見智,作者、讀者各有己見,教者、學(xué)者各論短長。本文從讀者、教師、作者幾個(gè)不同的角度來談一談書,最后著重談我在編寫教材時(shí)的一些體會(huì)。
每個(gè)人一生中都要讀很多書,都是讀者。作為讀者,其目的大概有三種:一種是純粹娛樂性的,讀些輕松讀物,打發(fā)休閑時(shí)光;一種是因工作、學(xué)習(xí)需要,有目的性地學(xué)習(xí)知識(shí);還有一種是為著某種長遠(yuǎn)目標(biāo)或者是興趣,廣泛閱讀,豐富知識(shí)陶冶性情。為娛樂而讀書,希望讀到輕松有趣、引人入勝的書;為工作、學(xué)習(xí)而讀書,希望書中內(nèi)容深刻、詳實(shí),具有較高的理論水平和實(shí)用價(jià)值;為興趣而閱讀時(shí),希望讀到立意高遠(yuǎn)、內(nèi)容廣泛、啟發(fā)性強(qiáng)的書。其實(shí)讀者對(duì)書的要求也并不是總可以清楚地分開為這幾種的,我們讀每一本書的時(shí)候,都希望它是一本兼有上述所有特點(diǎn)的好書。
大學(xué)教材,應(yīng)該是為了滿足上述第二種需求的。大學(xué)生作為一個(gè)特殊的讀者群體,對(duì)教材的要求也是比較高的:內(nèi)容充實(shí)、具有先進(jìn)性和實(shí)用性、邏輯清晰、論述嚴(yán)謹(jǐn)、實(shí)例豐富,當(dāng)然如果文字優(yōu)美、生動(dòng),講解深入淺出就更好了。
教師也是教材的使用者,但是與學(xué)生相比,教師對(duì)教材的要求就更高一些。除了具有上述特點(diǎn)外,作為一門課程的教材,還應(yīng)該便于教學(xué)活動(dòng)的組織。例如,內(nèi)容應(yīng)該模塊化,便于調(diào)整和取舍,章節(jié)大小要適當(dāng),例題要適合在課堂演示。另外教師還需要組織實(shí)驗(yàn)等其他教學(xué)環(huán)節(jié),也需要配套的教材或參考書。一些剛走上講臺(tái)的青年教師,還希望學(xué)到作者的教學(xué)經(jīng)驗(yàn),了解與課程相關(guān)的背景信息等。
從作者的角度來看,寫教材的目的不外乎滿足自己的教學(xué)需求,或者在某一領(lǐng)域有獨(dú)到的經(jīng)驗(yàn)希望與他人分享,或者兩者兼而有之。比如有時(shí)候,講一門課,無論如何都選不到一本自己滿意的教材,只好自己來寫一本。另一種情況是,雖然相關(guān)的書籍很多,但是作者自己對(duì)于課程內(nèi)容本身或者對(duì)于課程的組織形式有著與眾不同的見解。當(dāng)然在商品經(jīng)濟(jì)環(huán)境中也有人出于功利心而編寫教材,這一點(diǎn)我不能茍同,也不愿評(píng)論。
接下來,我就以《C++語言程序設(shè)計(jì)》這本書為例,談一談我寫教材的一些感悟。
1 C++能作為入門課程嗎?
“C++語言程序設(shè)計(jì)”目前已經(jīng)被許多大學(xué)列為程序設(shè)計(jì)基礎(chǔ)課程,除了信息類專業(yè)外,很多其他工科專業(yè)也開設(shè)了這門課程,C++教材目前也很多。但是,在1999年我剛剛在“計(jì)算機(jī)軟件技術(shù)基礎(chǔ)”課中講授C++時(shí),可選用的教材卻是很少的,當(dāng)時(shí)為數(shù)不多的幾本教材都不太適合清華大學(xué)非計(jì)算機(jī)專業(yè)的教學(xué)需要,于是我就自己編寫了教材——《C++語言程序設(shè)計(jì)》。
在非計(jì)算機(jī)專業(yè)的程序設(shè)計(jì)基礎(chǔ)課中講C++是否可行?這在當(dāng)時(shí)是受到很大質(zhì)疑的,這也是開課和寫書前必須搞清楚的一個(gè)問題。當(dāng)時(shí)在各大學(xué)非計(jì)算機(jī)專業(yè)中我們還沒聽說誰將C++作為入門程序設(shè)計(jì)語言來講授。
如果要問哪個(gè)語言最適合作為程序設(shè)計(jì)的入門語言,答案必然是多樣的。Basic語言簡單易學(xué);Pascal語言的簡明化和結(jié)構(gòu)化很適合教學(xué),最初就是為系統(tǒng)地教授程序設(shè)計(jì)而設(shè)計(jì)的;C語言用途廣泛、功能強(qiáng)大;C++語言和Java語言是面向?qū)ο蟪绦蛟O(shè)計(jì)語言中應(yīng)用最廣泛的兩種。學(xué)校安排教學(xué)計(jì)劃時(shí),學(xué)習(xí)者選擇學(xué)習(xí)起點(diǎn)時(shí)會(huì)受許多因素影響。例如,有的學(xué)習(xí)者愿意從最簡單的語言入手,循序漸進(jìn)。而另外一些人,著眼于學(xué)以致用,會(huì)選擇自己認(rèn)為最“有用”的來學(xué)。學(xué)校安排教學(xué)計(jì)劃時(shí),一定會(huì)從學(xué)生知識(shí)結(jié)構(gòu)的總體方案來全面考慮。但是也不排除很多非信息類專業(yè)可能只開設(shè)一門高級(jí)語言程序設(shè)計(jì)課程,而這門課程的選擇主要是為滿足后續(xù)專業(yè)課的需要,例如需要進(jìn)行大量科學(xué)計(jì)算的專業(yè)可能會(huì)選擇FORTRAN語言。因此論證何種語言最應(yīng)該作為入門語言是沒有多大意義的,但是討論某一個(gè)語言是否能夠作為入門語言卻是必要的。
首先面臨的問題就是:是否需要首先學(xué)習(xí)面向過程的結(jié)構(gòu)化程序設(shè)計(jì)語言,然后再學(xué)習(xí)面向?qū)ο蟮某绦蛟O(shè)計(jì)語言?或者更具體地,是否應(yīng)該先學(xué)習(xí)C,再學(xué)C++?對(duì)于這個(gè)問題,C++語言的設(shè)計(jì)者Bjarne Stroustrup是這樣回答的:“不,首先學(xué)習(xí)C++。C++的C子集對(duì)于C/C++的新手是比較容易學(xué)的,又比C本身容易使用……理解了C++的各種結(jié)構(gòu),而后學(xué)習(xí)它們?cè)冢ǜ图?jí)的)C里的替代物將是很簡單的(如果需要的話)。”
與面向過程的語言相比,面向?qū)ο蟮恼Z言支持面向?qū)ο蟮挠^念,而這正是人們?cè)谧匀簧鐣?huì)中所習(xí)慣的思維方式。也就是說C++語言比C語言更接近于人類的思維方式,因而也就更容易為初學(xué)者所接受。所以C++語言作為第一門高級(jí)程序設(shè)計(jì)語言來教是可行的。
2 開宗明義
從語法角度來講,C++的確是難度較大的一個(gè)語言,這就需要在教材中有一個(gè)清晰的思路,深入淺出、循序漸進(jìn)地介紹。C++有自己的一套思想體系,雖然體系龐大、特性繁多,但是其核心思想也是簡單明了的,這就是面向?qū)ο蟮乃枷耄阂灶悂砻枋龈拍睿瑢⑹澜缈醋饔蓪?duì)象構(gòu)成的。在教材中抓住這個(gè)核心,就不會(huì)陷入繁雜的技術(shù)細(xì)節(jié)而迷失方向,也就可以使讀者的學(xué)習(xí)路徑變得清晰。
萬事開頭難,學(xué)習(xí)程序設(shè)計(jì)更是這樣。好的教材應(yīng)該開宗明義,一開始就應(yīng)該點(diǎn)出主題,闡明全書的主要脈絡(luò)。由于不同專業(yè)的學(xué)生學(xué)科知識(shí)背景不同,作為公共課的教材,就需要在第一章將必要的基礎(chǔ)知識(shí)進(jìn)行簡單的闡述。其他課程的教材,也會(huì)存在類似的情況,因此教材的第一章“緒論”(或者前言)是非常重要的。有很多讀者讀書時(shí)不讀前言和緒論,認(rèn)為那是一些虛的東西沒有用,有的作者也不重視寫好緒論。但是忽視了緒論,就失去了一個(gè)良好的開端。
3 以問題引出概念
一本程序設(shè)計(jì)教材,不講語法是不可能的,但只講語法是絕對(duì)不可行的。1999年在寫《C++語言程序設(shè)計(jì)》第一版時(shí),有些章節(jié)就沒有把握好這一點(diǎn),因此學(xué)生們反映有些章節(jié)看不懂。針對(duì)學(xué)生的反饋和讀者來信,我在一年后的第二版中,進(jìn)行了全面的修改,每個(gè)章節(jié)都是先提出問題,再闡述解決問題的方法,最后講解相關(guān)的C++概念和語法,這樣學(xué)生就比較容易接受了,教學(xué)使用效果也很好。
4 語言優(yōu)美
這是我寫書時(shí)的追求,卻不敢說已經(jīng)達(dá)到這樣的水平。我首先也是一名讀者,讀過多少書已經(jīng)記不清了,但是幾本愛不釋手的好書卻一直記憶猶新。有文學(xué)著作《紅樓夢》,有《許莼舫初等幾何四種》,還有譚浩強(qiáng)教授的書。譚教授的《C程序設(shè)計(jì)》我至今仍作為教學(xué)參考書。一本好書,無論是文學(xué)著作還是科學(xué)著作,都應(yīng)該引人入勝,給讀者以享受。做學(xué)生時(shí),我一直缺乏一種“刻苦”精神,如果一本書有一段讀不懂,我就認(rèn)為一定是作者沒寫清楚,不愿反復(fù)琢磨,情愿另找一本同類的書來看,往往另一本書就寫得很清楚,一看就懂了。有的教材,尤其是理工科教材,完全是由概念和公式堆砌的,讀起來真的需要“毅力”,而我有時(shí)候很缺乏這種毅力,會(huì)讀不下去。于是我會(huì)拿起書本,騎上自行車,到荒島、圓明園(那時(shí)不收門票)等地方尋找鳥語花香,然后找一處蔭涼坐下,打開書本,以優(yōu)美的風(fēng)景補(bǔ)充不夠優(yōu)美的教科書,學(xué)習(xí)效果就好多了。所以現(xiàn)在我寫書時(shí),經(jīng)常想到讀書的人很苦,很希望讀者讀我的書時(shí)能覺得是享受,但是這個(gè)目標(biāo)我至今仍沒有達(dá)到。每當(dāng)聽到學(xué)生說書上哪個(gè)地方?jīng)]看懂,我就感到臉紅,因?yàn)槟鞘歉嬖V我那一段沒寫好,我必須仔細(xì)斟酌以便在下一版改進(jìn)。《C++語言程序設(shè)計(jì)》第一版剛出版不久,我就收到一位讀者的電子郵件,他最后說:“真的非常感謝你,使我這樣的程序員能享受讀書的快樂!”當(dāng)時(shí)我感到一種巨大的鞭策力量,因?yàn)槲易约簩?duì)第一版并不是很滿意,于是下決心第二版一定要寫得更好,決不辜負(fù)讀者的鼓勵(lì),要讓讀者真正享受到讀書的快樂。
5 配套資源
無論是教師還是學(xué)生,僅僅使用一本主教材,是遠(yuǎn)遠(yuǎn)不能滿足需要的。那么到底需要哪些配套資源呢?在1999年寫《C++語言程序設(shè)計(jì)》第一版時(shí),我為學(xué)生提供習(xí)題解答、實(shí)驗(yàn)指導(dǎo),為教師提供了電子教案。但是后來在與學(xué)生、一般讀者、教師進(jìn)行廣泛交流中我認(rèn)識(shí)到,這些是遠(yuǎn)遠(yuǎn)不夠的。教師(主要是沒有經(jīng)驗(yàn)的年輕教師)希望得到更多授課資料,得到作者的教學(xué)經(jīng)驗(yàn),了解每個(gè)章節(jié)的教學(xué)重點(diǎn)、講解方法。學(xué)生希望得到更多的學(xué)習(xí)指導(dǎo),自學(xué)讀者希望能夠聽到作者親自講課。因此,編寫了更多的配套資源。
以上是我這些年來從事教學(xué)和編寫教材的一些體會(huì)。說起來有些慚愧,我不是個(gè)高產(chǎn)的作者,寫書速度太慢。其實(shí)我也并不愿意寫書,太耗精神了,只是沒有辦法。當(dāng)初找不到適用的C++書就硬著頭皮自己寫,寫了又不十分滿意,于是一版、二版、三版,持續(xù)不斷地寫。后來我又開了“Java語言程序設(shè)計(jì)”課,講了四個(gè)學(xué)期了還沒選到合適的教材。雖然有幾本經(jīng)典的英文教材很不錯(cuò),但是無論原版還是中譯版都太貴,學(xué)生難以承受,我只好將電子版放在網(wǎng)上作為本課程教材。學(xué)生沒有紙介質(zhì)教材用,很不方便。所以接下來,我又寫了《Java語言程序設(shè)計(jì)》。