孫昌愛 于雙元 吳盡昭
摘要:程序設(shè)計語言是高等學(xué)校計算機專業(yè)本科教學(xué)計劃中不可缺少的基礎(chǔ)課程,由于語言種類多、發(fā)展快、實踐性強,如何在有限的課時內(nèi)讓學(xué)生系統(tǒng)地掌握程序設(shè)計語言的基本原理、具備初步的編程能力,是該類課程教學(xué)面臨的一個主要挑戰(zhàn)。本文介紹北京交通大學(xué)在程序設(shè)計語言類課程教學(xué)方面進行的研究性教學(xué)與實踐性教學(xué)相結(jié)合的探索與嘗試。
關(guān)鍵詞:計算機教育;程序設(shè)計語言類課程教學(xué);教學(xué)改革;研究性教學(xué);實踐教學(xué)
中圖分類號:G642 文獻標(biāo)識碼:B
1程序設(shè)計語言類課程教學(xué)的問題
程序設(shè)計語言的研究與開發(fā)一直是計算機科學(xué)領(lǐng)域的核心問題之一。事實上,信息技術(shù)領(lǐng)域的任何新技術(shù)與新方法都離不開程序設(shè)計語言的表達和實現(xiàn),多名“圖靈獎”獲得者都是因為在程序設(shè)計語言方面的開創(chuàng)性成果而獲獎。研究型大學(xué)的計算機專業(yè)本科生不僅應(yīng)掌握特定程序語言的應(yīng)用,更應(yīng)了解不同類型程序設(shè)計語言的理論基礎(chǔ)及其背后所蘊涵的程序設(shè)計方法學(xué)。
我國絕大多數(shù)高校計算機專業(yè)方向的本科生教學(xué)培養(yǎng)計劃中安排了程序設(shè)計語言的教學(xué)任務(wù)。與西方發(fā)達國家的高等院校相比,程序設(shè)計語言教學(xué)方面的突出不足之處主要表現(xiàn)為:
(1) 程序設(shè)計語言的教學(xué)在有限的本科生教學(xué)課時中占用了較大比例,開設(shè)了如C、C++、Java、C#、Web程序設(shè)計語言、腳本語言等課程,設(shè)置零散,缺乏系統(tǒng)性。
(2) 程序設(shè)計語言的教學(xué)大綱側(cè)重語言的語法教學(xué),忽視程序語言設(shè)計的理論基礎(chǔ)。學(xué)生缺乏研究和開發(fā)新型程序設(shè)計語言的能力,與研究型大學(xué)的學(xué)生培養(yǎng)目標(biāo)有較大差距。
(3) 程序設(shè)計語言實例教學(xué)的效果不能令人滿意。相當(dāng)比例的計算機專業(yè)本科畢業(yè)生需要經(jīng)過一段時間的編程訓(xùn)練后方能滿足工業(yè)界需求。
初步調(diào)研發(fā)現(xiàn),我國計算機學(xué)科排名靠前的幾所高校,如北京大學(xué)、北京航空航天大學(xué)、東南大學(xué),開設(shè)了“高級程序設(shè)計語言的設(shè)計與實現(xiàn)”或“程序設(shè)計語言的原理與實踐”課程,但這些課程大多是面向計算機專業(yè)方向的研究生。據(jù)我們所知,德國和荷蘭等西方發(fā)達國家的高校在本科生層次上就已經(jīng)開設(shè)了相應(yīng)課程,并且將程序設(shè)計語言的教學(xué)任務(wù)分配到多個階段。
基于以上分析,我們認為,有必要在計算機專業(yè)本科生教學(xué)培養(yǎng)計劃中增設(shè)程序設(shè)計語言的理論基礎(chǔ)課程,適當(dāng)刪減程序設(shè)計語言實例教學(xué)課時,實現(xiàn)從程序設(shè)計語言基礎(chǔ)理論到編程實踐的系統(tǒng)化教學(xué)。
以培養(yǎng)可持續(xù)發(fā)展的計算機專業(yè)人才為導(dǎo)向,本文探討“研究性”教學(xué)與“實踐性”教學(xué)相結(jié)合的“程序設(shè)計語言”課程教學(xué)的探索與實踐。具體說來,在程序設(shè)計語言理論基礎(chǔ)教學(xué)方面,歸納與整理幾類程序設(shè)計語言的理論基礎(chǔ),并以代表性程序設(shè)計語言為例進行分析與講解;在程序設(shè)計語言實踐教學(xué)方面,保留“C程序設(shè)計”課程教學(xué),但對已有的教學(xué)內(nèi)容與方式實施改革。上述教學(xué)改革的目標(biāo)是提高學(xué)生程序設(shè)計語言的理論水平,增強對程序設(shè)計語言的理解與應(yīng)用能力,為后期從事計算機相關(guān)領(lǐng)域的研發(fā)活動夯實基礎(chǔ)。
2程序設(shè)計語言理論基礎(chǔ)的研究性教學(xué)探索
程序設(shè)計語言理論基礎(chǔ)研究性教學(xué)遵循“三結(jié)合”的基本原則,設(shè)計和實施課程教學(xué)。具體說來,采用“授之以漁”與“授之以魚”相結(jié)合、“演繹”與“歸納”相結(jié)合、“原理”與“實踐”相結(jié)合的方式。
由教授、副教授、講師各一名組成本課程的教學(xué)小組。三名授課教師均長期從事計算機軟件與理論方面的研究工作,在國內(nèi)外學(xué)術(shù)期刊或?qū)W術(shù)會議上發(fā)表多篇高水平的研究論文。其中,一名教師負責(zé)講授不同類型程序設(shè)計語言的理論基礎(chǔ),另外兩名教師配合理論基礎(chǔ)講授語言實例。
本課程以授課教師編寫的講義為主,并提供大量相關(guān)的參考文獻。通常,程序設(shè)計語言的理論基礎(chǔ)可按三種編排方式講授,即按照不同語言的重要特征及比較、或者按照程序設(shè)計語言的基本結(jié)構(gòu)及實現(xiàn)、或者按照程序設(shè)計語言的形式化語義講解?;诮鼛啄瓿绦蛟O(shè)計語言的研究進展,本課程采用第一種編排方式組織課程的教學(xué)大綱。
(1) 分析與整理現(xiàn)有的各種程序設(shè)計語言,如C、C++、C#、Java、Ada、Lisp、Prolog等,歸納不同范型程序設(shè)計語言的特點與由來,繪制程序設(shè)計語言的發(fā)展譜系。
(2) 整理與探討過程式、函數(shù)式、邏輯式、面向?qū)ο笫?、并發(fā)式等不同范型程序設(shè)計語言的理論基礎(chǔ),結(jié)合有代表性的程序設(shè)計語言實例分析講解。
(3) 探討新型程序設(shè)計語言的發(fā)展趨勢,討論開發(fā)新型程序設(shè)計語言的一般過程與方法。
在實施課程教學(xué)時,采取教師講授、學(xué)生演講與報告、課堂討論等各種形式的研究性教學(xué)方式。首先教師主講先導(dǎo)性知識與理論基礎(chǔ),然后由教師指定相關(guān)文獻,學(xué)生課前必須認真研讀、準(zhǔn)備課堂演講與報告,老師和其他同學(xué)提問;學(xué)生無法回答或解釋不清時,由教師進行疏導(dǎo)。學(xué)生準(zhǔn)備課堂演講與報告時,應(yīng)能運用合適的研究方法,并結(jié)合具體程序設(shè)計語言進行分析與討論。該教學(xué)方式將“學(xué)”與“教”互相融合,學(xué)生既是“學(xué)”的主體,又具有“教”的能力,即學(xué)習(xí)新知識并能清晰地講授給別人。通過積極參與課堂討論,學(xué)生必須積極思考教師或其他同學(xué)提出的問題,并進一步研讀文獻,鍛煉“提問題”、“回答問題”的能力,提高做研究的素質(zhì)。
下面以“過程式程序設(shè)計語言的理論基礎(chǔ)”與“過程式程序設(shè)計語言實例”為例,簡要論述“學(xué)”與“教”相結(jié)合的研究性教學(xué)方式。
(1) 由教師講解過程式程序設(shè)計語言的基本思想、特點與理論基礎(chǔ)。
(2) 教師指定過程式程序設(shè)計語言中相關(guān)問題的研究論文,要求學(xué)生課后進行認真閱讀,并安排不同的學(xué)習(xí)小組對這些研究文章進行課堂演講與報告。
(3) 教師與學(xué)生提出各種問題,要求作報告的同學(xué)進行回答。例如,教師讓學(xué)生思考或回答“作為過程式程序設(shè)計語言的代表,C語言是如何處理控制結(jié)構(gòu)、類型、存儲”等問題,學(xué)生必須將所學(xué)的基礎(chǔ)理論與C語言設(shè)計的基本思想結(jié)合起來才能回答此類問題。
類似地,教師系統(tǒng)地講授各類程序設(shè)計語言的理論基礎(chǔ),學(xué)生結(jié)合各自程序設(shè)計語言實例進行分析與研究。通過這樣的由“一般”到“具體”或“歸納”與“演繹”相結(jié)合的過程,學(xué)生不僅可以深入理解面向?qū)ο蟆⒑瘮?shù)、邏輯、并發(fā)等各種范型的程序設(shè)計語言的理論基礎(chǔ)、設(shè)計思想,還可以對不同范型的程序設(shè)計語言進行系統(tǒng)的分析與比較。更重要的是,已知的程序設(shè)計語言上百種,課堂教學(xué)中不可能講授所有的程序設(shè)計語言,因此上述研究性教學(xué)方式有助于學(xué)生快速掌握新型程序設(shè)計語言。
課程考核采用“課堂演講與報告”加“課程論文”的形式,前者占40%,后者占60%?!罢n堂演講與報告”布置一些經(jīng)典的程序設(shè)計語言方面的研究論文,學(xué)生閱讀并理解其中的關(guān)鍵思想,運用本課程講授的各種計算機專業(yè)研究方法、并結(jié)合程序設(shè)計語言實例進行課堂演講與報告,所有同學(xué)必須參與課堂討論。“課程論文”則要求學(xué)生運用計算機專業(yè)研究方法學(xué)習(xí)和追蹤某種新程序設(shè)計語言,或?qū)Ξ?dāng)前主流程序設(shè)計語言進行評述。為了鼓勵討論,課程論文可以以研究小組為單位提交。但小組成員必須獨立參加口頭答辯,并說明自己在論文研究中的貢獻。
不難看出,上述課程教學(xué)將計算機專業(yè)研究方法潛移默化地運用到程序設(shè)計語言的教學(xué)中。通過本課程的學(xué)習(xí),學(xué)生不僅要掌握程序設(shè)計語言的理論基礎(chǔ),增強對程序設(shè)計語言的理解與應(yīng)用,而且應(yīng)理解如何應(yīng)用各種計算機專業(yè)研究方法。
3程序設(shè)計語言實例實踐性教學(xué)的改革與嘗試
盡管程序設(shè)計語言的理論基礎(chǔ)教學(xué)已經(jīng)部分講授具有代表性的程序設(shè)計語言,但是距如何熟練地運用這些程序設(shè)計語言進行編程實踐還有一段距離。為此,有必要開設(shè)具體程序設(shè)計語言實例的課程教學(xué)。在本科生教學(xué)計劃中,我們認為應(yīng)該保留“C程序設(shè)計”課程教學(xué)。一方面,C語言在實踐中有著廣泛的應(yīng)用;另一方面,C語言是面向?qū)ο蟪绦蛟O(shè)計語言C++的基礎(chǔ)。
與程序設(shè)計語言的理論基礎(chǔ)教學(xué)不同,“C程序設(shè)計”應(yīng)側(cè)重于實踐性教學(xué)。根據(jù)北京交通大學(xué)近兩年的“C程序設(shè)計”教學(xué)實踐,我們發(fā)現(xiàn)程序設(shè)計語言實例教學(xué)存在一些不足之處:如學(xué)生對C語言的基本概念、特征與簡單的數(shù)據(jù)類型掌握較好,但對指針、數(shù)組、函數(shù)等復(fù)雜概念的理解與運用有待進一步提高;如具備了一定的程序分析能力,但程序設(shè)計能力較差。以筆者任教的信息與計算科學(xué)本科生的“C程序設(shè)計”為例,本課程共32學(xué)時,其中理論教學(xué)24課時,實驗教學(xué)8課時。表1總結(jié)了2008年度2007級“C程序設(shè)計”課程考察情況。本次考察由6道考題組成,題1~題6分別為概述題、填空題、選擇題、程序分析題、程序填空題和程序設(shè)計題。最高分、最低分、平均分行分別給出了各道題的最高得分、最低得分和平均分。得分率的高低與學(xué)生的基礎(chǔ)以及試題的難易程度有關(guān)。橫向比較發(fā)現(xiàn):題1~題3的得分率較高,表明學(xué)生基本掌握與理解C語言的基本概念;題1~題3得分率較低,表明學(xué)生對C語言的運用能力較差。
針對上述不足之處,我們進行了加強實踐性教學(xué)的嘗試:
(1) 引進啟發(fā)式問題,增加提問,增強互動,讓學(xué)生主動思考問題。例如,在講解為何學(xué)習(xí)C語言時,提問“人們可采用哪些途徑跟計算機打交道?”在講解C語言3種控制結(jié)構(gòu)時,提問“如何通過程序設(shè)計語言讓計算機按照人們的想法工作?”在講解C語言的輸入輸出處理時,提問“計算機怎樣接受要處理的數(shù)據(jù),怎樣將計算的結(jié)果反饋給人們?”等。我們發(fā)現(xiàn),學(xué)生對這些啟發(fā)式問題比較感興趣,會主動構(gòu)想一些答案。
(2) 在講授內(nèi)容上遵循“抓住主干,忽略細節(jié)”的原則。理論教學(xué)課時非常有限,無法講授C語言的全部知識點,因此要抓住重點,忽略細節(jié)。
(3) 增加例子與解析,著重提高學(xué)生的程序構(gòu)造能力。通過與學(xué)生的廣泛交流,我們發(fā)現(xiàn)學(xué)生基本可以掌握C語言的各種概念,能讀懂一般難度的C程序,但是編寫程序則感到棘手。編程就是將各種C語言的成分按照一定的方式組合起來解決實際問題,是一個構(gòu)造性思維過程。提高程序構(gòu)造能力的唯一辦法是多實踐,一個有效的辦法是增加程序舉例與解析,然后讓學(xué)生模仿這些例子。
表2總結(jié)了實施上述加強實踐性教學(xué)的嘗試之后,筆者任教的信息與計算科學(xué)本科2009年度2008級“C程序設(shè)計”課程考察情況。本次考察由5道題組成,題1~題5分別為填空題、選擇題、程序分析題、程序填空題和程序設(shè)計題。與2007級“C程序設(shè)計”課程考察相比,難度稍有增加。比較表1和表2,可以得出如下結(jié)論:
(1) 表2中,不同題之間得分率差距進一步拉大。例如,題1(填空題)得分率為85%,題5(程序設(shè)計題)為60%,表明學(xué)生較好地掌握了C語言的概念,編程能力仍然欠缺。
(2) 表2中,每道題的最高分與最低分差距進一步拉大。例如,題5的最高分為滿分,最低分為3分,表明學(xué)生的編程能力差距大。
(3) 表2中,程序填空得分率較表1有大幅度的提高,但程序分析與程序設(shè)計得分率稍有下降。
從近兩年來的課程考察結(jié)果看來,如何提高程序構(gòu)造能力仍然是“C程序設(shè)計”課程實踐性教學(xué)面臨的主要問題。通過加強實踐性教學(xué)的改革與嘗試,學(xué)生能較好地掌握C語言的概念,但應(yīng)用能力仍有待提高;另一方面,高分的學(xué)生數(shù)多了,同時低分的學(xué)生數(shù)也在增多,說明上述教學(xué)改革導(dǎo)致了學(xué)生對C語言的理解與應(yīng)用出現(xiàn)了較大差距。
4結(jié)束語
程序設(shè)計語言是計算機專業(yè)本科教學(xué)計劃中的一門基礎(chǔ)課程。由于程序設(shè)計語言種類多、實踐性強,如何在有限的課時內(nèi)讓學(xué)生系統(tǒng)地掌握并應(yīng)用多種程序設(shè)計語言,是該類課程教學(xué)面臨的一個主要挑戰(zhàn)。為此,我們進行了拓寬程序設(shè)計語言的理論基礎(chǔ)、強化程序設(shè)計語言運用能力的初步教學(xué)探索與嘗試。在程序設(shè)計語言理論基礎(chǔ)教學(xué)方面,我們探索了研究性教學(xué)方式,加強程序設(shè)計語言基礎(chǔ)原理的教學(xué),講授多種語言之間的共性與不同點,力求舉一反三。在程序設(shè)計語言實例教學(xué)方面,我們初步嘗試了強化實踐性教學(xué)。值得注意的是,程序設(shè)計語言的理論基礎(chǔ)和實例教學(xué)是兩門緊密配合的系列課程,應(yīng)分為兩個階段實施。為配合該系列課程的有效實施,現(xiàn)有的教學(xué)大綱需要進一步調(diào)整課時分配,更合理地規(guī)劃理論和實踐教學(xué)的協(xié)同。
本文提出的教學(xué)改革與嘗試有利于實現(xiàn)程序設(shè)計語言的系統(tǒng)化教學(xué)。學(xué)生具備理論基礎(chǔ)及某種程序設(shè)計語言的編程能力后,應(yīng)該有能力自學(xué)和運用其他程序設(shè)計語言這正是我們強調(diào)的可持續(xù)發(fā)展的計算機專業(yè)人才應(yīng)該具備的基本素質(zhì)。上述程序設(shè)計語言類課程教學(xué)改革是我們的初步嘗試,需要進一步完善、檢驗實際效果。
注:本文得到北京交通大學(xué)計算機與信息技術(shù)學(xué)院本科教改項目“計算機專業(yè)研究方法論課程建設(shè)”(2008.9~2010.3)和北京市實驗示范中心“計算機科學(xué)實踐教學(xué)體系建設(shè)項目”(2008.4~2009.3)的大力支持。
參考文獻:
[1] 吳鶴齡. ACM圖靈獎(1966-2006)-計算機發(fā)展史的縮影[M]. 3版. 北京:高等教育出版社,2008.
[2] 蔡啟先. CC2004計算機學(xué)科教程體系分析與思考[J]. 高等工程教育研究,2006(5).
[3] 吳平,黃燕,黃嵐,等. 本科計算機專業(yè)課程體系改革初探[J]. 中國大學(xué)教學(xué),2004(6).
[4] [美]Kenneth C.Louden. 程序設(shè)計語言—原理與實踐[M]. 黃林鵬,毛宏燕,黃曉琴,等譯. 2版. 北京:電子工業(yè)出版社,2004.