陳宇峰,李鳳霞
(北京理工大學(xué) 計(jì)算機(jī)學(xué)院,北京 100081)
自計(jì)算思維概念提出以來,大學(xué)計(jì)算機(jī)基礎(chǔ)類課程就隨著大學(xué)計(jì)算機(jī)教學(xué)改革的需求而快速地變革,雖然在面向計(jì)算思維的大學(xué)計(jì)算機(jī)基礎(chǔ)[1]和程序設(shè)計(jì)[2]思想方法教學(xué)內(nèi)容中進(jìn)行了大量的教學(xué)內(nèi)容改革探索,但是原有計(jì)算機(jī)基礎(chǔ)課和程序設(shè)計(jì)課相對(duì)獨(dú)立教學(xué)的模式下,課程的設(shè)計(jì)將理論和實(shí)踐分割開來,成為計(jì)算思維全過程培養(yǎng)一個(gè)巨大的障礙。ISTE國(guó)際教育技術(shù)協(xié)會(huì)提出計(jì)算思維是一個(gè)問題解決的過程[3],包括提出問題、分析數(shù)據(jù)、抽象、設(shè)計(jì)算法、優(yōu)化和推廣等多個(gè)方面,這個(gè)過程應(yīng)該貫穿計(jì)算機(jī)學(xué)習(xí)的始終。有研究發(fā)現(xiàn)[4],歐美很多教學(xué)機(jī)構(gòu)開始將程序設(shè)計(jì)教學(xué)向社會(huì)化轉(zhuǎn)向,從中小學(xué)基礎(chǔ)教育階段學(xué)起,因此在很多國(guó)際上著名高校的課程中很難找到類似國(guó)內(nèi)的這種大學(xué)計(jì)算機(jī)課程加程序設(shè)計(jì)的課程組合,相關(guān)內(nèi)容被認(rèn)為是普遍掌握的,只在算法和應(yīng)用中涉及的時(shí)候才做一些簡(jiǎn)單介紹。
然而目前國(guó)內(nèi)的大學(xué)計(jì)算機(jī)課程體系很難完全照搬照抄這樣一種模式,主要由于我國(guó)中小學(xué)計(jì)算機(jī)教育基礎(chǔ)薄弱,缺乏頂層設(shè)計(jì),在基礎(chǔ)教育階段信息技術(shù)課程的地位遠(yuǎn)遠(yuǎn)不能與語、數(shù)、外等基礎(chǔ)學(xué)科相比,無法形成與高等教育階段的有效銜接[5]。這就要求對(duì)大學(xué)計(jì)算機(jī)課程體系和人才培養(yǎng)模式進(jìn)行有針對(duì)性的研究和改進(jìn),特別是在新工科背景下,普遍進(jìn)行的課程改革嘗試,也倒逼著大學(xué)計(jì)算機(jī)基礎(chǔ)與程序設(shè)計(jì)課程的改革[6]。
隨著新工科背景下的教學(xué)改革逐步深化,大學(xué)計(jì)算機(jī)基礎(chǔ)類課程也面臨越來越大的挑戰(zhàn)。從學(xué)科的設(shè)置上看,大學(xué)計(jì)算機(jī)應(yīng)該是與大學(xué)物理、大學(xué)數(shù)學(xué)一樣具有基礎(chǔ)性的地位,甚至在信息化社會(huì)越來越高的要求下,計(jì)算機(jī)教育應(yīng)該具有越來越重要的地位,然而現(xiàn)實(shí)的情況恰恰相反,大學(xué)計(jì)算機(jī)基礎(chǔ)類課程正受到前所未有的挑戰(zhàn),部分學(xué)校已經(jīng)取消了大學(xué)計(jì)算機(jī)基礎(chǔ)課程,程序設(shè)計(jì)類課程也在一定程序上受到了壓縮和影響,與計(jì)算機(jī)教育的重要性形成了鮮明的對(duì)比。
究其原因并不是計(jì)算機(jī)相關(guān)的知識(shí)學(xué)習(xí)和能力培養(yǎng)不重要,或者學(xué)生對(duì)學(xué)習(xí)這種與專業(yè)看起來關(guān)系不大的信息技術(shù)沒有興趣,這一點(diǎn)從學(xué)生對(duì)本類課程學(xué)習(xí)初期熱情和期待的調(diào)查中可以得到印證,而是這種很高的學(xué)習(xí)預(yù)期和實(shí)際的學(xué)習(xí)收獲形成的鮮明對(duì)比,對(duì)學(xué)生的學(xué)習(xí)熱情形成沉重的打擊,導(dǎo)致學(xué)生對(duì)計(jì)算機(jī)相關(guān)課程評(píng)價(jià)不高,在此情況下學(xué)校教學(xué)改革壓縮相關(guān)的教學(xué)計(jì)劃也就順理成章。
在基于計(jì)算思維的計(jì)算機(jī)課程改革之初就不斷有學(xué)者在呼吁開展大學(xué)計(jì)算機(jī)教學(xué)內(nèi)容改革,面向計(jì)算思維的教學(xué)內(nèi)容不斷涌現(xiàn),教育部也出臺(tái)了《大學(xué)計(jì)算機(jī)基礎(chǔ)課程教學(xué)基本要求》等相關(guān)文件,但是計(jì)算機(jī)教育所面臨的問題卻沒有得到顯著的改善,這其中存在著難以解決的深層次矛盾,那就是我國(guó)計(jì)算機(jī)基礎(chǔ)教育薄弱,水平差異巨大,導(dǎo)致課程內(nèi)容設(shè)計(jì)處于兩難的選擇之間。
大學(xué)計(jì)算機(jī)基礎(chǔ)類課程主要包括大學(xué)計(jì)算機(jī)基礎(chǔ)和程序設(shè)計(jì)兩大類課程。在大學(xué)計(jì)算機(jī)學(xué)習(xí)過程中,雖然有部分基礎(chǔ)薄弱的學(xué)生反映計(jì)算機(jī)基礎(chǔ)知識(shí)面廣,無法理解相關(guān)的概念,但是大部分學(xué)生覺得太簡(jiǎn)單,課堂中沒有學(xué)到多少新的知識(shí),也沒有培養(yǎng)出新的能力。C語言程序設(shè)計(jì)課程則表現(xiàn)為內(nèi)容非常難,學(xué)習(xí)效果不明顯,而且與計(jì)算機(jī)綜合能力的培養(yǎng)關(guān)系不夠密切,缺乏目標(biāo)導(dǎo)向。
考慮到當(dāng)前大學(xué)計(jì)算機(jī)教育的現(xiàn)狀,計(jì)算機(jī)基礎(chǔ)類課程的改革是一個(gè)漸進(jìn)的過程,很多高校進(jìn)行了大量的探索。有高校將大學(xué)計(jì)算機(jī)課程取消,直接上C語言程序設(shè)計(jì),這樣帶來的主要問題是C語言本來就是一門學(xué)習(xí)曲線非常陡峭的語言,在沒有相關(guān)計(jì)算機(jī)基礎(chǔ)的情況下,無論是理解還是實(shí)踐上都存在著一系列的問題,使得C語言的教學(xué)效果進(jìn)一步受到影響。還有一些教學(xué)計(jì)劃則取消了C語言教學(xué),僅僅讓學(xué)生學(xué)習(xí)大學(xué)計(jì)算機(jī)基礎(chǔ)并補(bǔ)充一些相關(guān)軟件的應(yīng)用,這樣雖然有利于課程的順利推廣,但是對(duì)于全面提高包括程序設(shè)計(jì)能力在內(nèi)的計(jì)算思維能力是一種弱化。
因此融合以上兩門課程的教學(xué)內(nèi)容,通過大幅簡(jiǎn)化高階的復(fù)雜知識(shí)和編程訓(xùn)練,以計(jì)算思維能力及相關(guān)程序設(shè)計(jì)基本能力培養(yǎng)為重點(diǎn)的課程改革,則成為一種當(dāng)前階段計(jì)算機(jī)基礎(chǔ)類課程教學(xué)改革的優(yōu)化方案。
兩課合一的基本原則是在現(xiàn)有的課程體系基礎(chǔ)上,在不增加新的課程內(nèi)容基礎(chǔ)上,通過優(yōu)化整合而產(chǎn)生一門新的適用于當(dāng)前計(jì)算機(jī)教育環(huán)境的課程計(jì)算機(jī)科學(xué)與程序設(shè)計(jì),其來源主要包括兩個(gè)方面:一方面涉及計(jì)算機(jī)基礎(chǔ)、大學(xué)計(jì)算機(jī)等偏重于計(jì)算機(jī)基礎(chǔ)知識(shí)教學(xué)的課程,保留計(jì)算機(jī)數(shù)字化基礎(chǔ)和計(jì)算機(jī)三大平臺(tái)的核心內(nèi)容,精簡(jiǎn)關(guān)于多媒體、數(shù)據(jù)庫、網(wǎng)絡(luò)安全等與計(jì)算思維和程序設(shè)計(jì)關(guān)系不密切的內(nèi)容;另一方面的內(nèi)容涉及C語言程序設(shè)計(jì)課程,這部分內(nèi)容則考慮C語言的學(xué)習(xí)曲線,重點(diǎn)強(qiáng)調(diào)和基本能力相關(guān)基本輸入輸出、三大程序結(jié)構(gòu)、基本的數(shù)據(jù)結(jié)構(gòu)數(shù)組和基本的程序結(jié)構(gòu)函數(shù),有關(guān)指針、結(jié)構(gòu)和文件等進(jìn)階的內(nèi)容則進(jìn)行了刪減,形成圍繞計(jì)算思維的知識(shí)和能力培養(yǎng)的重點(diǎn)內(nèi)容,有利于學(xué)生的快速和高效學(xué)習(xí),還能夠提高課程的適應(yīng)性。具體方案見表1。
課程內(nèi)容的調(diào)整是課程改革的基礎(chǔ),教學(xué)方案也需要一個(gè)長(zhǎng)期的探索過程。如何將原本兩門關(guān)系看似不密切的課程合并到一起,成為一個(gè)復(fù)雜的優(yōu)化問題。
表1 C語言和計(jì)算機(jī)基礎(chǔ)知識(shí)重組方案
在初期階段,僅僅考慮將兩門課程在課時(shí)安排上合并在一起,實(shí)際上僅僅是做了刪減,按照上課的進(jìn)度分別介紹大學(xué)計(jì)算機(jī)和C語言程序設(shè)計(jì)兩門課程精簡(jiǎn)后的內(nèi)容,可以初步實(shí)現(xiàn)兩課合一,但是這種方式會(huì)帶來學(xué)習(xí)的困難,C語言的學(xué)習(xí)本來就需要較長(zhǎng)的時(shí)間才能逐步培養(yǎng)相關(guān)的能力,而這種簡(jiǎn)單的合并導(dǎo)致實(shí)際動(dòng)手練習(xí)C語言的時(shí)間只有半個(gè)學(xué)期左右,學(xué)生的感覺不是輕松而是更緊迫,這也是課程壓縮帶來的直接結(jié)果。
為了解決這一問題,根據(jù)課程教學(xué)的特點(diǎn),將每節(jié)課分為兩部分,前兩個(gè)學(xué)時(shí)學(xué)習(xí)C語言,后面一個(gè)學(xué)時(shí)補(bǔ)充計(jì)算機(jī)基礎(chǔ)知識(shí),這樣可以延伸C語言的學(xué)習(xí)時(shí)間,也有利于提高課內(nèi)的學(xué)習(xí)效率,取得一定的成效,但是存在新的問題,這兩門課的內(nèi)容在同一時(shí)間展開,相關(guān)之間沒有過渡關(guān)系,導(dǎo)致學(xué)生感受會(huì)比較亂,特別是對(duì)于其中具有一定關(guān)聯(lián)的知識(shí)點(diǎn)。
為了實(shí)現(xiàn)更加深入的課程融合教學(xué)方案,就需要對(duì)相關(guān)的知識(shí)點(diǎn)進(jìn)行梳理,更加科學(xué)合理地安排學(xué)習(xí)的順序,甚至是將相關(guān)的內(nèi)容以專題的形式進(jìn)行集中教學(xué),從而達(dá)到基礎(chǔ)知識(shí)和應(yīng)用能力培養(yǎng)密切結(jié)合的效果。
通過長(zhǎng)時(shí)間對(duì)兩門課程相關(guān)內(nèi)容的對(duì)比分析可以發(fā)現(xiàn),經(jīng)過精簡(jiǎn)后的計(jì)算機(jī)基礎(chǔ)與程序設(shè)計(jì)兩部分內(nèi)容有非常高的相關(guān)性,而如何將這些相關(guān)的內(nèi)容有機(jī)結(jié)合起來,則是教學(xué)內(nèi)容設(shè)計(jì)的重點(diǎn)。以下例舉3種典型的融合。
2.3.1 打通計(jì)算思維的過程
目前關(guān)于計(jì)算思維的講授主要體現(xiàn)在計(jì)算機(jī)基礎(chǔ)知識(shí)部分,計(jì)算思維的訓(xùn)練則主要在程序設(shè)計(jì)部分,這兩部分課程的分開教學(xué)則將計(jì)算思維的過程人為阻斷,不利于計(jì)算思維的培養(yǎng)。
例如,在大學(xué)計(jì)算機(jī)基礎(chǔ)知識(shí)部分入門內(nèi)容之一是介紹計(jì)算思維,核心的問題是可計(jì)算問題,而其中最具有代表性的知識(shí)點(diǎn)是圖靈機(jī),是理解計(jì)算思維的關(guān)鍵問題。圖靈機(jī)同時(shí)也是計(jì)算機(jī)的原型機(jī),從該問題的角度入手讓學(xué)生理解程序設(shè)計(jì)的思想,則是一個(gè)順理成章的過程,但是在以往的教學(xué)過程中由于兩個(gè)教學(xué)階段分離,并沒有將這兩部分融合介紹,甚至有些計(jì)算機(jī)基礎(chǔ)部分關(guān)于圖靈機(jī)則直接一筆帶過,實(shí)際上失去了一個(gè)非常好的計(jì)算思維培訓(xùn)過程。
2.3.2 數(shù)字化與數(shù)據(jù)結(jié)構(gòu)的關(guān)系程序設(shè)計(jì)的基礎(chǔ)是數(shù)據(jù)的存儲(chǔ),也是C語言程序設(shè)計(jì)入門階段的一個(gè)重點(diǎn)內(nèi)容,如果僅從C語言的變量類型及其表示范圍這樣一些編程規(guī)范去介紹,不僅會(huì)影響學(xué)生接受和應(yīng)用,更重要的是無法理解內(nèi)在的原理,會(huì)嚴(yán)重影響到程序編寫。
例如,如果我們僅僅介紹浮點(diǎn)數(shù)由4個(gè)字節(jié)組成,表示范圍多大等概念,只是給學(xué)生一個(gè)感性的認(rèn)識(shí),學(xué)生很容易寫出如下的代碼:
程序中直接將浮點(diǎn)數(shù)用等號(hào)進(jìn)行比較,忽略了計(jì)算機(jī)實(shí)際存儲(chǔ)過程和計(jì)算過程導(dǎo)致的誤差,而理解這個(gè)誤差就需要從計(jì)算機(jī)基礎(chǔ)理論的數(shù)制碼制中尋找答案。這個(gè)尋找答案的過程就是訓(xùn)練學(xué)生從基本原理到實(shí)踐操作的思維過程,在新的課程設(shè)計(jì)中這些內(nèi)容的介紹也應(yīng)該是融會(huì)貫通的。
2.3.3 計(jì)算機(jī)體系結(jié)構(gòu)與程序結(jié)構(gòu)
復(fù)雜的程序結(jié)構(gòu)設(shè)計(jì)也同樣依賴計(jì)算機(jī)體系結(jié)構(gòu)的理解,很難想象如果不了解程序在內(nèi)存中是如何加載的,一條指令在CPU上是如何運(yùn)行的,可以很好地理解函數(shù)調(diào)用的相關(guān)概念。
例如,在函數(shù)教學(xué)中的一個(gè)重點(diǎn)內(nèi)容是如何區(qū)分值傳遞和地址傳遞,這就需要能夠理解計(jì)算機(jī)操作系統(tǒng)對(duì)程序加載的方式,分為程序區(qū)和數(shù)據(jù)區(qū),數(shù)據(jù)區(qū)分為靜態(tài)數(shù)據(jù)區(qū)和動(dòng)態(tài)數(shù)據(jù)區(qū),動(dòng)態(tài)數(shù)據(jù)區(qū)還根據(jù)函數(shù)的調(diào)用情況,動(dòng)態(tài)地分配和釋放變量存儲(chǔ)區(qū)域。了解了這些內(nèi)容,才能夠很好地理解每一行語句在計(jì)算機(jī)內(nèi)存中的存儲(chǔ)情況以及計(jì)算機(jī)體系的運(yùn)作過程,才能夠真正地用代碼去指揮計(jì)算機(jī)的計(jì)算,而不是違背計(jì)算思維的培養(yǎng)規(guī)律,死記硬背一段程序代碼。
兩課合一的教學(xué)安排雖然從內(nèi)容上進(jìn)行大量的刪減,但是也同時(shí)融入很多新的內(nèi)容,從面向計(jì)算思維的角度對(duì)課程進(jìn)行重新設(shè)計(jì),這必然導(dǎo)致課時(shí)安排難以滿足需要。為了解決以上問題,課程教學(xué)可以從以下兩個(gè)方面進(jìn)行。
開展基于MOOC的線上線下教學(xué)以來,MOOC已經(jīng)成為計(jì)算機(jī)教學(xué)一個(gè)必不可少的內(nèi)容,目前已經(jīng)開設(shè)了多門大學(xué)計(jì)算機(jī)、C語言程序設(shè)計(jì)相關(guān)課程,然而缺乏一個(gè)兩課合一的MOOC,以適應(yīng)新課程的需要。我們?cè)诂F(xiàn)有兩門國(guó)家精品在線MOOC的基礎(chǔ)上,按照以上的改革思路進(jìn)行線上課程的融合,新開設(shè)計(jì)算機(jī)科學(xué)與程序設(shè)計(jì)MOOC課程。通過在MOOC課程中增加擴(kuò)展知識(shí)、應(yīng)用介紹等內(nèi)容,把無法在課堂上講的非核心知識(shí)點(diǎn)以MOOC的方式讓學(xué)生自學(xué)完成,課堂上就可以把重點(diǎn)放在如何打通計(jì)算思維的全過程,以專題的方式讓學(xué)生全面理解和掌握知識(shí)體系。
即使將課內(nèi)的時(shí)間都放在重點(diǎn)內(nèi)容的學(xué)習(xí)上,很多內(nèi)容也仍然是難以通過課堂的有限時(shí)間學(xué)會(huì)的,根據(jù)戴爾的經(jīng)驗(yàn)之塔理論,通過實(shí)踐環(huán)節(jié)能夠獲得更加深刻的認(rèn)識(shí)。從課堂教學(xué)的效果來看,很多內(nèi)容難以深刻地講授,虛擬實(shí)驗(yàn)等方式則能夠以學(xué)生主動(dòng)學(xué)習(xí)的方式達(dá)到講授起不到的效果,主要表現(xiàn)在以下幾個(gè)方面。
3.2.1 抽象問題具體化
計(jì)算思維本身是一個(gè)非常抽象的概念,很多課程內(nèi)容難于通過簡(jiǎn)單的方式進(jìn)行教學(xué),如上文提到的圖靈機(jī),這本身是一個(gè)很好的教學(xué)素材,但是由于難以在有限的時(shí)間內(nèi)給學(xué)生講清楚,甚至有些教師直接放棄這部分的內(nèi)容。利用虛擬實(shí)驗(yàn)的方式,讓圖靈機(jī)及其原理狀態(tài)機(jī)以可視化的方式呈現(xiàn)在學(xué)生面前,則可以使學(xué)生不需要對(duì)其設(shè)計(jì)有深入的了解,就能夠非常具體地看到圖靈機(jī)解決具體問題的計(jì)算過程,從而深刻地理解計(jì)算的本質(zhì)。
3.2.2 復(fù)雜問題直觀化
還有一些知識(shí)點(diǎn),每一個(gè)細(xì)節(jié)并不難理解,但是整個(gè)過程錯(cuò)綜復(fù)雜,在教學(xué)過程中面面俱到講一遍本身非常枯燥,學(xué)生很難跟上上課的全部?jī)?nèi)容,最終理解整個(gè)過程。通過一條指令的執(zhí)行過程這樣的虛擬實(shí)驗(yàn),就可以把整個(gè)過程以直觀的方式展現(xiàn)出來,先讓學(xué)生有個(gè)宏觀的了解,再通過實(shí)驗(yàn)報(bào)告等方式,讓學(xué)生把各個(gè)知識(shí)點(diǎn)串聯(lián)起來,實(shí)現(xiàn)這個(gè)知識(shí)面的理解,而且整個(gè)過程甚至不需要教師的介入。
3.2.3 細(xì)節(jié)問題訓(xùn)練化
很多學(xué)生都反映C語言難學(xué),通過分析發(fā)現(xiàn),類似C語言這樣偏重于基礎(chǔ)的高級(jí)語言學(xué)習(xí)曲線非常陡峭,這就意味著在開始學(xué)習(xí)的很長(zhǎng)時(shí)間里,學(xué)生都沒有完整的訓(xùn)練,會(huì)打擊學(xué)生學(xué)習(xí)的積極性。一個(gè)完整的程序需要方方面面的知識(shí),如果沒有完整的學(xué)習(xí),會(huì)錯(cuò)誤百出,難以達(dá)到效果。通過C語言虛擬實(shí)驗(yàn)的方式,一方面可以以填空或者交互操作的方式進(jìn)行針對(duì)性的細(xì)節(jié)訓(xùn)練,將學(xué)生的注意力完全集中于需要訓(xùn)練的某一個(gè)知識(shí)點(diǎn),同時(shí)讓學(xué)生對(duì)代碼有整體的概念;另一方面也可以利用流程圖式的編程,將注意力聚焦于設(shè)計(jì)而不是代碼實(shí)現(xiàn),以更加直觀地訓(xùn)練計(jì)算思維能力本身。
計(jì)算機(jī)科學(xué)與程序設(shè)計(jì)課將大學(xué)計(jì)算機(jī)與C語言程序設(shè)計(jì)“兩課合一”,從全過程計(jì)算思維培養(yǎng)的角度對(duì)相關(guān)教學(xué)內(nèi)容進(jìn)行融合,目前已開設(shè)相關(guān)MOOC并在教學(xué)實(shí)踐中獲得初步應(yīng)用,取得了一定的效果,但同時(shí)還存在相關(guān)教學(xué)融合的內(nèi)容還不夠豐富,體驗(yàn)還不夠流暢的問題,還有待利用線上線下混合教學(xué)、實(shí)驗(yàn)教學(xué)等多種模式進(jìn)行補(bǔ)充,通過學(xué)生和相關(guān)應(yīng)用教師的反饋進(jìn)行不斷探索完善。