摘要:本文討論了C++課程的設(shè)置方法與定位,從“通識教育”、高職生學(xué)習(xí)風(fēng)格特點、C/C++的普及化等不同視角,分析了臺灣地區(qū)高職教材《C/C++程序設(shè)計》的三個編寫特色:基礎(chǔ)性、范例性和通俗化。
關(guān)鍵詞:C++;程序設(shè)計;高職教材;通識教育;職業(yè)技術(shù)教育
中圖分類號:G642 文獻(xiàn)標(biāo)識碼:B
1引言
從事程序設(shè)計教學(xué)以來,筆者選擇教材時一直有一個偏好,就是要選擇程序?qū)嵗^多,較完整的教材,認(rèn)為這樣易教易學(xué)。如匯編語言曾選用張懷蓮編的《宏匯編語言程序設(shè)計》;C語言曾選用譚浩強(qiáng)編著的《C程序設(shè)計》。本世紀(jì)初,當(dāng)筆者接受高職C++語言的教學(xué)任務(wù)時,由Decoder編著、中國鐵道出版社于2002年2月出版的《C/C++程序設(shè)計》一書(以下簡稱“Decoder本”),便以其豐富的例程和通俗的敘述立即進(jìn)入筆者視野。這本教材是由中國鐵道出版社推出的“21世紀(jì)臺灣高職高專系列教材”之一,筆者用它教過4屆8個班約450名學(xué)生,教學(xué)效果非常好。這本教材究竟好在何處?它的編寫特色是什么?它又給了我們怎樣的啟示?本文是筆者對上述問題的一點思考,愿拋磚引玉與同行分享。
2關(guān)于C++課程設(shè)置與定位的討論
課程設(shè)置與定位將直接決定教材的體系結(jié)構(gòu)與教材內(nèi)容取舍。在具體分析“Decoder本”編寫特色前,有必要先討論一下C++課程的設(shè)置與定位。
2.1C++課程設(shè)置方法:
目前內(nèi)地高校C++課程的開設(shè)日漸普遍,然而不同類型、不同層次學(xué)校的不同專業(yè),開設(shè)C++的方法并不相同,概括起來可以分為以下4種:
(1) 作為第二語言課開設(shè):即在先期C語言課的基礎(chǔ)上開設(shè)。由于C語言教學(xué)的普及,學(xué)生已經(jīng)具備程序和算法概念,已經(jīng)學(xué)過面向過程編程的方法。在C++中只須重點講C++對C語言的擴(kuò)展,重點講面向?qū)ο蟮木幊谭椒ā語言和C++作為兩門課分別在兩個學(xué)期不同的階段開設(shè),是比較穩(wěn)妥的作法,可以使學(xué)生學(xué)得更扎實。這種設(shè)置方法比較適合計算機(jī)專業(yè),也適合已經(jīng)學(xué)過一門高級編程語言的學(xué)生。
(2)C/C++直通車:C++是對C語言的擴(kuò)展。它不僅支持面向?qū)ο缶幊?也支持面向過程編程,即是說C++兼容C語言。C++可視為C語言的超集,C語言則是C++的子集,從這一點出發(fā),C++不一定以C語言為先導(dǎo)課。現(xiàn)在通行的作法是將C++分段,前期只講與C兼容的內(nèi)容,只講面向過程編程,后期側(cè)重點講面向?qū)ο缶幊?。前后兩個階段使用統(tǒng)一的C++標(biāo)準(zhǔn),可以避免課程內(nèi)容重復(fù)及不同語言版本的混淆。這樣的教學(xué)安排適合作為方法學(xué)課程或非計算機(jī)專業(yè)的程序設(shè)計基礎(chǔ)課。目前內(nèi)地出版的C++主流教材多是依據(jù)這種教學(xué)安排所編寫,例如劉璟編著、高等教育出版社于2001年1月出版的《高級語言C++程序設(shè)計》(以下簡稱“劉璟本”),譚浩強(qiáng)編著、清華大學(xué)出版社于2004年6月出版的《C++程序設(shè)計》(以下簡稱“譚浩強(qiáng)本”)等。
(3)C++/數(shù)據(jù)結(jié)構(gòu)綜合課:課程綜合化是當(dāng)代世界范圍課程改革的潮流。科學(xué)技術(shù)日新月異的發(fā)展,一方面使學(xué)科分化越來越細(xì);另一方面則是在學(xué)科高度分化基礎(chǔ)上的高度綜合。設(shè)置綜合課程是高等教育應(yīng)對信息化時代知識爆炸的挑戰(zhàn),加強(qiáng)學(xué)生綜合能力、創(chuàng)新能力培養(yǎng)的必然選擇。近年來內(nèi)地已出版了反映“C++/數(shù)據(jù)結(jié)構(gòu)”綜合課改革成果的多種教材,例如由美國阿姆斯特郎亞特蘭大州立大學(xué)Y.Daniel Liang著(王剛等譯)、機(jī)械工業(yè)出版社于2008年7月出版的《C++程序設(shè)計》(以下簡稱“(美) Y.D. Liang本”),王立柱編著、清華大學(xué)出版社于2008年3月出版的《C/C++與數(shù)據(jù)結(jié)構(gòu)(第3版)》等。
(4) 作為專業(yè)課開設(shè):由于C++至今仍是在軟件開發(fā)中占主流的程序設(shè)計語言之一,內(nèi)地軟件學(xué)院或公司培訓(xùn)機(jī)構(gòu)往往選擇VC++或C++Build的最新版本編寫培訓(xùn)教程,不僅講基礎(chǔ)、講方法學(xué),還要講與軟件實際開發(fā)有密切聯(lián)系的MFC類庫以及數(shù)據(jù)庫編程,網(wǎng)絡(luò)編程等內(nèi)容。C++作為專業(yè)課開設(shè)的開課時機(jī),最好選擇在畢業(yè)設(shè)計階段、職前培訓(xùn)階段,否則學(xué)生由于缺乏必要的基礎(chǔ)而不易掌握。目前一種比較流行的作法是將C++教材分為上、下兩篇(基礎(chǔ)篇和高級編程篇),也可以出兩本教材。高級編程部分放在學(xué)習(xí)最后的階段供有需求的學(xué)生選學(xué)。 2.2 “Decoder本”的內(nèi)容與基礎(chǔ)課程定位
“Decoder本”共15章,包括第0章 認(rèn)識C++(屬概述);第1章 第一個C++程序,結(jié)合實例介紹流輸入(cin)、流輸出(cout)以及VC++上機(jī)操作基本方法;第2~9章分別為變量與數(shù)據(jù)類型、運算符、決策與循環(huán)、函數(shù)、數(shù)組、結(jié)構(gòu)與枚舉、指針、重載,介紹面向過程編程方法,包括與C語言兼容的內(nèi)容以及對C語言擴(kuò)展的內(nèi)容(引用參數(shù)、重載等);第10章調(diào)試,介紹調(diào)試概念、方法以及VC++上機(jī)調(diào)試方法;第11~14章分別為對象與類、繼承、成員函數(shù)的其它特性(虛函數(shù)、抽象類、友元函數(shù)、靜態(tài)函數(shù)等)、文件與流,介紹面向?qū)ο缶幊谭椒ā?/p>
從教材選取的內(nèi)容看,它側(cè)重的是C++語法規(guī)則、算法分析和程序設(shè)計方法的介紹,并未安排MFC類庫等在實際軟件開發(fā)過程中有重要作用的內(nèi)容。因此,它是一本基礎(chǔ)課程教材,而不是專業(yè)課教材。
3臺灣地區(qū)高職教材《C/C++程序設(shè)計》編寫特色
3.1從“通識教育”角度看“Decoder本”的“基礎(chǔ)性”特色
“Decoder本”編寫的“基礎(chǔ)性”特色具體體現(xiàn)在哪些地方呢?首先,它將C/C++內(nèi)容區(qū)分為基礎(chǔ)和高級編程兩部分,教材中只寫了基礎(chǔ)部分,至于C ++中和實際軟件開發(fā)有關(guān)的較深入內(nèi)容,放到后期實訓(xùn)教材中。其次,教材按“基礎(chǔ)先行”、“對象適行(object-right)”順序排列,先講面向過程編程,再講面向?qū)ο缶幊?。這樣的安排符合由淺入深的認(rèn)識規(guī)律,降低了學(xué)生學(xué)習(xí)的臺階和難度,便于學(xué)生入門,便于學(xué)生掌握。在2005年之前的國際計算機(jī)科學(xué)教育大會(Computer Science Education,SIGCSE)上,對象早行(object-early)方法曾被廣泛宣揚,后來的實踐證明對象早行方法遇到挫折。在其他高級語言(如Java、VB等)的教學(xué)中也有類似的情況,這也可以反證編寫教材遵循“基礎(chǔ)性”是多么重要。
現(xiàn)在再從通識教育的角度對教材的“基礎(chǔ)性”作進(jìn)一步分析。既然“Decoder本”是高職教材,為什么它不將C++中那些在軟件實際開發(fā)中有著重要應(yīng)用的MFC類庫等內(nèi)容包括進(jìn)去呢?我們也可以反問,究竟有多少學(xué)生畢業(yè)后會去做C++程序員,即便去做又能做幾年?談到課程設(shè)置,都強(qiáng)調(diào)市場需求、就業(yè)導(dǎo)向,解決“學(xué)非所用,用非所學(xué)”的問題。問題的另一面是不應(yīng)當(dāng)忽視市場需求“多元化”、“動態(tài)化”的特征。也就是說,我們對學(xué)生的職業(yè)規(guī)劃不可能“嫁一從終”。由于科學(xué)技術(shù)日新月異的發(fā)展,市場風(fēng)云變幻莫測,在未來市場經(jīng)濟(jì)社會,一個人一生的職業(yè)變遷是常態(tài),“用非所學(xué)”也成了常態(tài)。臺灣地區(qū)由于經(jīng)濟(jì)發(fā)展較早,在職業(yè)技術(shù)教育方面積累了一些經(jīng)驗。也曾經(jīng)歷過高職教育指向性過分狹窄的彎路,后來發(fā)現(xiàn)這并不符合真正的市場需求,也不符合學(xué)生及家長期望。后一點說的是相當(dāng)多在職業(yè)技術(shù)院校就讀的學(xué)生仍希望將來有繼續(xù)深造的機(jī)會,能經(jīng)過技能性工作鍛煉,最終走向設(shè)計、管理等高層工作。這就要求提高學(xué)生素質(zhì),基礎(chǔ)知識面放得更寬一些?,F(xiàn)在臺灣地區(qū)的職業(yè)教育已經(jīng)形成了高級職業(yè)學(xué)校(相當(dāng)于內(nèi)地中等職業(yè)學(xué)校)、??茖W(xué)校、職業(yè)技術(shù)學(xué)院,科技大學(xué)和研究所的梯次職教體系,并和普通高等教育有多個出、入口接軌。這就說明臺灣地區(qū)高等職業(yè)教育仍然強(qiáng)調(diào)“通識教育”的重要性。“通識教育”的本質(zhì)是注重學(xué)生能力培養(yǎng)與素質(zhì)提高,而不是單純知識技能傳授與記憶。在這方面臺灣銘傳大學(xué)的經(jīng)驗也可以給我們有益啟示。臺灣銘傳大學(xué)王立天教授介紹他們的經(jīng)驗主要有兩條:(1)“學(xué)術(shù)顧問”制(Academic Advisor),學(xué)校為每一個學(xué)生安排全程咨詢的學(xué)術(shù)顧問,依據(jù)每一個學(xué)生的特長、基礎(chǔ)、興趣愛好,幫助其確定主修課程,制訂未來職業(yè)規(guī)劃,體現(xiàn)“以學(xué)生發(fā)展為本”;(2)“通識教育”(The General Education),就是對確立了不同個性化目標(biāo)的學(xué)生抓好共同知識技能基礎(chǔ)。以上背景介紹,可以使我們進(jìn)一步認(rèn)識“Decoder本”作為基礎(chǔ)課程教材定位的合理性。
3.2從高職生學(xué)習(xí)風(fēng)格特點看“Decoder本”的“范例性”特色
凡是教過高職課的教師都有切身體驗,那就是套用普高教材和教法效果欠佳,甚至?xí)獾綄W(xué)生抗拒(如上課說話、睡覺,逃課)。究其原因,需要從高職學(xué)生的培養(yǎng)目標(biāo),學(xué)習(xí)基礎(chǔ)和學(xué)習(xí)風(fēng)格等作多因素分析。首先,教師的第一反映往往是高職學(xué)生的學(xué)習(xí)基礎(chǔ)不如普高生,好像這就是對問題順理成章的解釋。其次,高職學(xué)生的培養(yǎng)目標(biāo)是高素質(zhì)技能型人才,而不是研究型人才或一般意義上的應(yīng)用型人才,這點雖然說起來明白,但很難落到實處,如高職教材經(jīng)常編寫成普本教材的濃縮版。至于高職學(xué)生的學(xué)習(xí)風(fēng)格特點又有多少教師清楚呢?2006年秋,筆者在華東師范大學(xué)訪學(xué)期間曾從事“全納教育”實踐研究,期間一個重要收獲就是認(rèn)識到美國教育心理學(xué)家柯勃(Kolb D.A)學(xué)習(xí)風(fēng)格理論對實現(xiàn)“全納教育”的重要意義??虏獙W(xué)習(xí)風(fēng)格區(qū)分為經(jīng)驗感覺型、抽象分析型、主動操作型、省思觀察型(或每兩類的組合)。不同類型的學(xué)生擅長不同的學(xué)習(xí)風(fēng)格,高職學(xué)生一般都不太適應(yīng)傳統(tǒng)的概念演繹、邏輯推導(dǎo)的課堂教學(xué)方法,他們更適合范例學(xué)習(xí)、實踐學(xué)習(xí)和交往學(xué)習(xí)的方法。所以,在程序設(shè)計教學(xué)中采用“范例導(dǎo)向法”比較適合高職學(xué)生的學(xué)習(xí)風(fēng)格特點。這里所謂“范例”指的是典型的實例程序。每一個范例程序都是某些C++語法規(guī)則同求解某種問題的算法緊密結(jié)合的產(chǎn)物?!胺独龑?dǎo)向法”就是通過對典型例程的分析和運行演示,講解蘊涵其中的概念,語法規(guī)則和算法,比較符合譚浩強(qiáng)教授在程序設(shè)計教學(xué)中提出的“提出問題——解決問題——歸納總結(jié)”的“新三步曲”法?!癉ecoder本”每一章節(jié)都詳舉完整例程,每一個概念、語法規(guī)則和算法都通過恰當(dāng)例程闡釋?,F(xiàn)將“Decoder本”與筆者手頭其他同類教材中所舉的部分章節(jié)的例程,進(jìn)行比較,如表1所示。
由表一可以看出,“Decoder本”中的例程簡明、實用、有趣。例程不涉及高深數(shù)學(xué)(如積分求值、高次方程求根等)和復(fù)雜算法分析(如“漢諾塔”、“八皇后”等),降低了學(xué)習(xí)的難度,有利于學(xué)生克服畏難情緒、增強(qiáng)學(xué)習(xí)信心。例程貼近日常生活、貼近應(yīng)用、貼近讀者,使學(xué)生樂學(xué)、易學(xué)。豐富的例程還很方便安排實踐教學(xué),無論教師演示還是學(xué)生上機(jī)都可以信手拈來。比如,構(gòu)造函數(shù)和析構(gòu)函數(shù)是C++中的一個難點。為了說明析構(gòu)函數(shù)的功能及其何時執(zhí)行的問題,“Decoder本”舉出一個范例程序,程序中盒類(Box)的析構(gòu)函數(shù)中加入輸出信息“Box is Destructed! ”。教師讓學(xué)生自行閱讀這個程序并上機(jī)實驗,觀察運行結(jié)果。然后師生共同討論,結(jié)果中為什么會有兩個析構(gòu)函數(shù)的輸出信息?它們分別在何時執(zhí)行?何以見得?緊接著改寫程序(刪除析構(gòu)函數(shù)調(diào)用語句并在程序結(jié)束前插入輸出語句cout<<”End!”< 3.3從C/C++的普及化看“Decoder本”的“通俗化”特色 C++是當(dāng)前軟件開發(fā)領(lǐng)域占主流的程序設(shè)計語言之一,它原本是專業(yè)程序員所掌握使用的高科技知識和技術(shù)。隨著信息技術(shù)的普及,現(xiàn)在C++正在成為各類高校普遍開設(shè)的課程,正是“舊時王謝堂前燕,飛入尋常百姓家?!痹贑++走下“神壇”回舊“大眾化”的過程,必然要求教材的表述形式脫下濃重的學(xué)術(shù)話語體系的外衣,而轉(zhuǎn)向通俗化,即盡量使用生活化的語言、確切生動的比喻、深入淺出地講解。讓我們看看“Decoder本”中對C++一些重要概念是如何論述的: 關(guān)于構(gòu)造函數(shù):“發(fā)現(xiàn)了嗎?構(gòu)造函數(shù)的名稱居然與類一模一樣,這是一般函數(shù)與構(gòu)造函數(shù)最大的差異所在”。 關(guān)于虛函數(shù):“我們定義所有的animal(動物)都能call()(叫),也能eat()(吃),……但是所有動物call()及eat()的方式都不一樣,因此animal的call()及eat()都是virtual(虛)函數(shù)”。 關(guān)于友元函數(shù):“日記是我們最私密的記錄,應(yīng)該不允許其他人來隨意讀取。對于好朋友,我們是愿意將自己的秘密交給他的?!瑿++的類在設(shè)計函數(shù)時也有所謂的朋友函數(shù),因為當(dāng)中也有一些秘密數(shù)據(jù)是不希望讓外部程序隨意讀取的,但類的朋友卻可以讀取當(dāng)中的秘密數(shù)據(jù),這種叫作friend(友元)函數(shù)”。 以上的敘述是不是讀來倍感親切,讓人樂于接受? 讓我們再看看“Decoder本”怎樣用生動確切的比喻說明抽象的概念: “孤兒”:“沒有人會認(rèn)得”——比喻使用內(nèi)存動態(tài)分配(new)常會造成的內(nèi)存中無法訪問的區(qū)域。 “超市成堆的蘋果”:“想要取出下方的蘋果,就必須將上方的蘋果先一一取出才行。”——比喻棧的“先進(jìn)后出,后進(jìn)先出”的存儲特性。 這樣的比喻是不是也會給人留下深刻印象呢? 有人擔(dān)心“Decoder本”這樣通俗的敘述比較“淺顯”、“學(xué)術(shù)水平不高”,其實這是一種誤解?!按笠暨衤?大象無形”,“Decoder本”敘述通俗卻不乏深刻,比如書中動態(tài)數(shù)組及棧數(shù)組的范例程序都是有一定深度的程序,內(nèi)地同類教材多未述及。究竟怎樣的教材才是“高水平”的呢?依據(jù)教材評價標(biāo)準(zhǔn)而非學(xué)術(shù)著作評價標(biāo)準(zhǔn),真正高水平的教材(特別是基礎(chǔ)課教材)一定會是深入淺出的。教材的讀者對象是初學(xué)者,它一定要寫得使人容易讀懂、學(xué)懂,一定要經(jīng)得起讀者和時間檢驗才算合格。眾所周知,在我國計算機(jī)普及教育二十多年的發(fā)展中,譚浩強(qiáng)教授開創(chuàng)了程序設(shè)計教材“大眾化”、“通俗化”的寫作新風(fēng)。他的《BASIC語言》和《C程序設(shè)計》雙雙發(fā)行1000萬冊,創(chuàng)造了全球科技圖書出版的奇跡,其中的秘訣又是什么呢?譚浩強(qiáng)教授在回答出版界業(yè)內(nèi)人士提問時說:“無非一個‘懂字,寫書的人必須要想到讀書的人,使他們能看得懂”。一個“懂”字,答案竟是如此言簡意賅而又發(fā)人深省。 4結(jié)論與啟示 綜上所述可以概括出下列結(jié)論: (1)“Decoder本”能夠取得教學(xué)實效的三個編寫特色是“基礎(chǔ)性”、“范例性”和“通俗化”。 (2) 程序設(shè)計的概念、方法是當(dāng)代大學(xué)生必須具備的科學(xué)素質(zhì),因而程序設(shè)計應(yīng)作為通識教育課程或?qū)I(yè)基礎(chǔ)課程開設(shè)。 (3) 認(rèn)清高職生的培養(yǎng)目標(biāo)和學(xué)習(xí)風(fēng)格特點,研究學(xué)生學(xué)習(xí)心理是提高高職教材編寫質(zhì)量和教學(xué)質(zhì)量的基礎(chǔ)。 (4) 通俗化的寫作風(fēng)格是將程序設(shè)計教材“大眾化”的一個關(guān)鍵,編寫教材要緊緊圍繞“懂”字做文章。 5結(jié)束語 “Decoder本”美中不足之處是有些地方科學(xué)性略嫌不足、敘述稍嫌煩瑣。如“決策與循環(huán)”一章的累加程序,誤將累加器變量清零寫入循環(huán)體中(低級錯誤);“文件與流”一章的流類關(guān)系圖有畫錯之處等。又如“虛函數(shù)”和“純虛函數(shù)”兩個例程的語句重復(fù)太多(實際僅有兩處語句不同),如果是大陸版教材,往往僅給出一個完整的例程,后一個例程不重復(fù)寫,只指出與前者不同之處。 “瑕不掩瑜”,一本科學(xué)性、敘述表達(dá)等方面看似不夠嚴(yán)謹(jǐn)不夠精練的教材,使用起來卻比較順手,學(xué)生也容易接受,這說明各種類型的教材,“陽春白雪”和“下里巴人”都有各自適合的對象,而不必所有教材都按一個模式編寫,都以相同的面孔出現(xiàn)。中國鐵道出版社引進(jìn)的教材,讓我們看了新面孔,讓我們有機(jī)會領(lǐng)略臺灣地區(qū)同行編寫高職教材的經(jīng)驗,這對改變目前教材“計劃編寫”模式雷同的現(xiàn)狀有重要啟示作用??梢灶A(yù)料,通過“全國計算機(jī)教育論壇”建立一個內(nèi)地與港澳臺地區(qū)甚至國外教材交流、互用和互授的機(jī)制,并在此基礎(chǔ)上開展程序設(shè)計教學(xué)的比較研究,將有助于推動程序設(shè)計教學(xué)取得新的突破。 參考文獻(xiàn): [1] (美)Y.Daniel Liang. C++程序設(shè)計[M]. 王剛,等譯. 北京:機(jī)械工業(yè)出版社,2008.6 [2] 張曉峰. 臺灣職業(yè)技術(shù)教育的改革與發(fā)展及其對我們的啟示[J]. 職業(yè)技術(shù)教育,2001(25):52-55. [3] 王立天. 教育國際化的行與思——從臺灣銘傳大學(xué)國際學(xué)院信息科技運用學(xué)程談起[J]. 計算機(jī)教育,2008(3):7-9. [4] 由布西.“全納教育”視野下的“畢業(yè)設(shè)計”課程改革[J]. 中國大學(xué)教學(xué),2007(4):51-53. [5] 劉瑞挺. 譚浩強(qiáng)教授的創(chuàng)作思想[J]. 計算機(jī)教育,2009(12):5-7. [6] 李江濤. 新時期圖書出版應(yīng)大力弘揚科學(xué)精神和培養(yǎng)科學(xué)思維[J]. 計算機(jī)教育,2009(12):15-16.