

摘要:以《程序設計基礎》“十二五”國家級規(guī)劃教材建設為背景,詳細介紹教材建設的指導思想、發(fā)展歷史、特色和內容,指出以“授之以漁”和案例驅動模式組織教材是一種有效培養(yǎng)計算思維的方法。關鍵詞:高級語言程序設計;程序設計基礎;計算思維;授之以漁;教材建設
文章編號:1672-5913(2013)18-0122-06
中圖分類號:G642
0 引言
目前,計算機已經滲透到各個領域,甚至普及多數家庭,它像電視、冰箱一樣,已成為家用電器之一。社會需求的變化,使現在計算機專業(yè)的含義從以前的“研究計算機本身”轉變?yōu)椤坝嬎銠C應用”,甚至是“應用計算機”。尤其近幾年計算思維概念被提出后,很快得到廣泛的關注和認可,其中程序設計課程培養(yǎng)學生計算思維能力的思想已被廣泛接受。
在“著重培養(yǎng)學生計算思維能力”和“面向應用”的大背景下,程序設計課程不應再去講授程序設計語言本身了,而應講授程序設計語言的應用,應將授課重點從講授語言的符號、語句等語言成分上,轉移到講授程序設計上。教學目的是教會學生“怎么編程序”,而不是背幾個語言符號、說明、語句等,應把該課程的名字從“×××語言”改為高級語言程序設計、程序設計基礎或程序設計。
在“面向應用”的背景下,我們出版了《程序設計基礎》,該教材被評為“十一五”國家級規(guī)劃教材。為了反映計算思維思想和近年來的教學改革成果,我們對該教材進行了修訂并將其作為“十二五”國家級規(guī)劃教材由高等教育出版社出版。第2版《程序設計基礎》教材保持了第1版的特色,更加明確了培養(yǎng)學生計算思維能力、以程序設計為主線和“授之以漁”的宗旨,進一步提升了以計算思維為主導的程序設計教學思想。
1 教材建設
《程序設計基礎》教材的歷史淵源深遠,繼承了20世紀60年代以金成植、金淳兆教授為代表的多位前輩的心血,吸納了多部優(yōu)秀教材的精髓,同時,結合了筆者30余年的教學經驗,凝練了多部教材成果。本教材建設經歷了4個階段。
1)初建階段,探索并形成完善的內容體系。
1962年吉林大學程序設計方向招收本科生,1970年以招收工農兵學員為標志,吉林大學恢復計算機教學,1972年恢復程序設計課程教學,1976年吉林大學計算機科學系成立。程序設計是這個階段首當其沖的課程。面對國內資料缺乏,無經驗借鑒的困難,本專業(yè)的前輩們對教學內容、教學方法進行了認真研究,逐步形成了完善的教學內容體系,并先后出版了兩本教材。
(1)1978年,《算法語言ALGOL 60入門》由科技出版社出版,是全國較早的程序設計語言教材。
(2)1982年,教育部六五全國統(tǒng)編教材《程序設計語言》由高等教育出版社出版。
2)緊跟改革開放步伐,銳意教學內容改革。
20世紀80—90年代,隨著我國改革開發(fā)的進程和西方先進技術的引進,程序設計教學也在不斷改革,這個階段使用的程序設計語言經歷了從ALGOL 60到BASIC,到FORTRAN,再到PASCAL,最后到C的過程。在該過程中,我們緊跟國內外發(fā)展趨勢及時調整授課內容,陸續(xù)出版3部教材。
(1)1987年,《FORTRAN 77程序設計語言》由吉林大學出版社出版。
(2)1990年,《PASCAL語言程序設計》由吉林科學技術出版社出版。
(3)1998年,《PASCAL程序設計》由吉林大學出版社出版。
3)適應高等教育形勢發(fā)展,積極進行程序設計教學理念研究、改革與實踐。
隨著進入21世紀國內教學改革的進程,我們總結了20世紀末以來的社會發(fā)展,認識到計算機已經滲透到社會各個領域,計算機教育已經不是20年前的計算機教育了。與以往相比,現在絕大部分計算機專業(yè)人員主要在做計算機應用,而不是研究計算機本身。在這種形勢下,高級語言程序設計不應該再去講程序設計語言本身,而應該講程序設計語言的應用。授課的重點應該是教會學生怎么編程序,而不是背那些語言符號、說明、語句等。按這種思想,逐漸形成了以程序設計為主線的教學指導思想,并先后出版了6部教材。
(1)2001年,《PASCAL語言程序設計》由電子工業(yè)出版社出版。該書由全國高等學校計算機教育研究會和中國計算機學會教育專業(yè)委員會推薦出版,是21世紀高等學校計算機學科系列教材中的一本。
(2)2004年,《C程序設計》由高等教育出版社出版。該書以C語言為載體,以程序設計為主線,介紹程序設計技術,摒棄了當時流行的以解釋程序設計語言為主的做法,把講授重點放在程序設計方法上,注重對學生進行程序設計方法及算法的訓練。
(3)2005年,《Pentium匯編語言程序設計》由高等教育出版社出版。該書是教育部面向21世紀教材、“九五”國家級規(guī)劃教材。
(4)2008年,“十一五”國家級規(guī)劃教材《程序設計基礎》由高等教育出版社出版。該書進一步明確了“以程序設計為主線”的指導思想。
(5)2008年,《程序設計基礎習題集》由清華大學出版社出版。該書貫徹主教材以程序設計為主線的指導思想,所選習題全部為程序設計習題,不依賴于任何“程序設計語言”。
(6)2009年,“十一五”國家級規(guī)劃教材《大學計算機程序設計基礎》由清華大學出版社出版。
4)跟蹤國內外新教學思想發(fā)展,進一步進行程序設計教學理念改革與實踐。
進入“十二五”以來,計算機學科教學思想進一步得到提升,計算思維思想被提出并得到廣泛重視。在由李國杰院士任組長的中國科學院信息領域戰(zhàn)略研究組撰寫的《中國至2050年信息科技發(fā)展路線圖》中指出:計算思維的培育是克服“狹隘工具論”的有效途徑,是解決其他信息科技難題的基礎。
人類思維可以總結為3個部分:①以觀察和總結自然規(guī)律為特征的實證思維——以物理學科為代表;②以推理和演繹為特征的推理思維——以數學學科為代表;③以設計和構造為特征的計算思維——以計算機學科為代表。其中計算思維是運用計算機科學的基礎概念進行問題求解、系統(tǒng)設計以及人類行為理解等涵蓋計算機科學之廣度的一系列思維活動。計算思維體現了計算機學科的基本特征和方法。
在這種形勢下,我們對高級語言程序設計課程的教學思想、理念、內容、方法、過程進行進一步的研究、探討和改革,并取得豐碩成果。
(1)2011年,“十一五”國家級規(guī)劃教材《程序設計基礎》被評為2011年度國家級精品教材。
(2)2012年,《程序設計基礎》被選為“十二五”國家級規(guī)劃教材。
(3)2013年,“十二五”國家級規(guī)劃教材,以計算思維為主導思想和理念的《程序設計基礎》(第2版)由高等教育出版社出版。
2 教材特色
計算思維同“讀、寫、算”一樣,應是人人都具備的能力。《程序設計基礎》(第2版)秉承這一理念,形成鮮明特色。
(1)以培養(yǎng)計算思維能力主導:計算機的出現和使用已經深刻地影響了人類的思維方式和思維習慣。本教材的目的是教會讀者怎樣編寫程序,學會怎樣以“計算”的方式去思考和解決問題,怎么“像”計算機科學家那樣思維,徹底地改變“學了程序設計而不會編程序”的現狀,提高讀者的程序設計能力和計算思維能力。
(2)以“授之以漁”為宗旨,而非“授之以魚”:針對程序設計的每個知識模塊都采取圖1所示的模式組織教學內容,目的是教會學生怎么編寫程序,而不是讓學生去背幾個語法符號、規(guī)則。
(3)以程序設計為主線:按程序設計的思路組織全書內容,真正地講授程序設計,而非語言,把重點放在講述程序設計方法上,注重對學生進行程序設計方法、算法和計算思維的訓練,摒棄了前一階段各種程序設計教材中流行的主要“解釋程序設計語言”的做法,將C語言只作為講授程序設計的載體工具。
(4)以案例為驅動,突出實踐:選取大量案例,以案例為驅動,徹底改變單純解釋語法、語義等語言成分的做法;改變提出語言概念并解釋,然后以小程序說明相應概念的做法;讓程序設計始終貫穿于整個教學過程。書中案例多選擇與實際應用相關的、實用的題目。案例的目的不是解釋語言概念,而是講述程序設計方法、構造算法,以訓練學生的實際編程能力、計算思維能力為目標。
(5)重點突出:根據講述程序設計方法的需要,對C語言本身采取“有所取、有所不取”的策略。對于那些常用的語言成分,直接與講述程序設計方法有關的語言成分,將其穿插在程序設計過程中詳細準確的介紹;對于那些與程序設計方法聯系不太緊要,但是還常用的部分,放在最后簡單介紹;而對于那些與講述程序設計方法關系不太大,也不常用的部分則根本不涉及。
(6)分散難點:注意由淺入深地介紹程序設計知識,把難點化解和分散到各個章節(jié)中去。例如,函數和指針是程序設計的難點,我們將概念逐漸化解和分散到不同的章節(jié)和學時里,便于學生消化理解并各個擊破。
函數的概念分4章逐步介紹:①第5章函數人門,簡單引進函數概念,讓學生會使用函數編程序;②第9章再論函數,介紹有關函數的進一步知識,包括函數參數、函數值、作用域等;③第10章遞歸程序設計,進一步介紹遞歸及其程序設計思想;④第14章介紹有關函數的較深入的知識,包括函數指針、函數作參數、函數副作用等。
有關指針內容是程序設計的最難點,本教材把指針知識分散到各個章節(jié)去。在第2章先引進變量地址的概念,指出變量地址就是變量指針,并指出變量指針與變量值的區(qū)別,讓學生對指針有個初始印象;第7章先介紹指針這種特殊的數據類型,引進指針概念,講述指針與數組的關系;在以后各個章節(jié)分別介紹結構指針(第8章)、返回指針的函數(第9章)、文件指針(第11章)、命令行參數(第11章)、用指針實現動態(tài)數據結構(第13章),最后在第14章進一步講述指針與數組的關系,介紹行指針,并對指針進行總結。
3 教材內容
3.1 內容結構
《程序設計基礎》(第2版)教材以C語言為載體講述程序設計,且為突出“程序設計”主題,對C語言做了一定的取舍,目的是使學生盡快掌握并熟練編寫程序,而不受具體語言語法的限制。全書共14章,可分為基本知識、程序設計、數據組織3個部分。基本知識部分主要介紹高級程序語言的基本概念、C的基本語法單位;程序設計部分包括函數、流程控制、遞歸等結構化程序設計開發(fā)方法;數據組織部分包括數組、指針、文件、結構體等數據存儲形式,以及棧、隊列、鏈表、樹等數據組織形式。教材知識模塊章節(jié)分布如圖2所示。
3.2 “授之以漁”的內容組織模式
該教材在編寫過程中始終以“授之以漁、案例驅動”的模式組織教學內容,強調實踐。
(1)以現實生活中的問題為案例。首先提出問題,然后分析問題,得到方法,再編碼。在整個解決問題過程中,強調分析和解決問題的過程,淡化語言成分的影響。通過簡單的有實際意義的問題分析程序、編寫程序,拉近學生與程序間的距離,讓學生直觀地看到程序開發(fā)過程。這樣做使教學從抽象變成自然,有效培養(yǎng)學生的邏輯思維能力,大大提高學生的學習積極性,使學生對程序設計產生興趣,對本課程產生吸引力,并取得良好的教學效果。
全書開篇第1章第1節(jié),從大家熟知的雞兔同籠問題開始。“今有雞、兔同籠,上有35頭,下有94足,問雞兔各幾何?”,按照如下步驟講解題目并給出程序設計相關概念。第1步,解決該問題應把問題數學化,列出二元一次方程;第2步,解該方程組,選擇消元法;第3步,使用消元法解上述二元一次方程組;第4步,分析計算步驟,給出實際計算過程。針對第4步的計算步驟,指出“這就是程序”,接著指出第1到第4步的“分析過程就是程序設計”,并給出“算法”等概念。
(2)由淺入深、分散難點。像前面指出的,函數是程序設計教學的一個難點,程序設計中的函數雖與數學中函數的概念類似,卻有很大的不同。這不僅體現在函數本身的形式定義上,而且在其使用方面也有很多區(qū)別。本書將函數相關知識點分散至4章進行講解。
在介紹基本語言成分之后,首先第5章引人函數的基本概念,突出函數在模塊化程序設計的作用。接著在學完數組、指針、結構體和共用體,有了一定的編程序經驗之后,在第9章重新回顧函數,解釋函數中參數傳遞和返回值等較難的內容,引出作用域、生存周期、全局和局部變量等概念。然后在第10章遞歸程序設計,進一步介紹遞歸函數及其程序設計思想。最后在第14章介紹有關函數的較深入的知識,包括函數指針、函數作參數、函數作用等。
這樣避免了將過多知識點集中在一章,使讀者學起來枯燥乏味,接受困難。而且學生通過中間對數組、指針、結構體和共用體、文件、程序開發(fā)等章節(jié)的學習,積累了程序設計經驗,帶著問題來學習,大大提高了學習的效果。
(3)不避難點,一題多解。“遞歸程序設計”乃至“遞歸思維方式”歷來是程序設計的難點,許多教材采取淡化的方式去處理,有的甚至回避。本教材從訓練學生實際編程能力出發(fā),用一章的篇幅強化“遞歸程序設計”的訓練。
在第10章開篇以讀者熟知的“計算n!”為案例,首先給出循環(huán)迭代程序,然后引導學生換個角度考慮問題,指出n!不僅是1×2×3×…×n還可以定義成:
從而給出遞歸程序,介紹有關遞歸程序的知識,指出保證這個遞歸程序正確的條件,并給出幾個遞歸程序的例子,包括“計算n次勒讓德多項式”“漢諾塔游戲”等程序。然后介紹遞歸程序設計的思想,它體現在:用逐步求精原則,首先把一個問題分解成若干子問題,這些子問題中有問題的與原始問題具有相同的特征屬性,至多不過是某些參數不同,規(guī)模比原來小了。此時,就可以對這些子問題實施與原始問題同樣的分析算法,直到規(guī)模小到問題容易解決或已經解決為止。也就是說,若將整個問題的算法設計成一個函數,則解決這個子問題的算法就表現為對相應函數的遞歸調用,從而引進遞歸程序設計。
接著在教材的10.2節(jié)以“計算算術表達式值”為案例,講述間接遞歸程序設計。最后在10.3節(jié)仍以“計算算術表達式值”為背景,講述遞歸程序的執(zhí)行過程,這是任何教材都沒有的內容。本教材為了加深讀者對遞歸程序的理解,特別加寫了這一節(jié)。本節(jié)首先介紹保證遞歸程序執(zhí)行正確的語言系統(tǒng)在執(zhí)行函數調用時的調用過程;然后給出一個實例;最后模擬執(zhí)行這個實例程序,給出程序執(zhí)行過程中計算機內存的動態(tài)分配、釋放過程(棧的變化),從實例中讓學生理解遞歸思想。
4 建設成果
經過長期建設,該教材取得豐碩成果。2007年被選為“普通高等教育‘十一五’國家級規(guī)劃教材”,2011年被教育部評為“普通高等教育國家級精品教材”,2012年被選為“普通高等教育‘十二五’國家級規(guī)劃教材”;以該教材為主教材的吉林大學的高級語言程序設計課程于2009年被評為國家級精品課程,所在教學團隊于2010年被評為吉林省優(yōu)秀教學團隊。
5 結語
程序設計在計算機專業(yè)本科教學中占有重要地位。作為計算機專業(yè)的第一門程序設計課程,程序設計基礎不僅要使學生知道什么是程序設計語言,即能讀懂語言的符號和規(guī)則,而且還要能夠掌握程序設計思想,學會怎樣編程,而不拘泥于語言細節(jié);能像計算機科學家那樣的思維去思考問題,培養(yǎng)學生的計算思維能力。為達到此目標,程序設計教學指導思想上要摒棄過去那種以“解釋程序設計語言”為主的做法,細致講解問題求解過程、強調思考過程,而非解釋語言;在教學手段和方法上要增加學生自己獨立思考和動手的機會;加大上機實踐在正常教學中的比例;同時配以大量的實際應用案例,強化計算思維的訓練。
參考文獻:
[1]Wing J M.Computational thinking[J]_Communications ofthe ACM,2006,49(3):33-35
[2]陳國良,董榮勝,計算思維與大學計算機基礎教育[J]。中國大學教學,2011(1):7-11
[3]張長海,陳娟,劉磊,程序設計基礎[M],北京:高等教育出版社,2008
[4]中國科學院信息領域戰(zhàn)略研究組,中國&2050年信息科技發(fā)展路線圖[M],北京:科學出版社,2009
(見習編輯:劉麗麗)