李 暾,劉萬偉,毛曉光
(國防科技大學(xué) 計算機學(xué)院,湖南 長沙 410073)
試圖在36或48學(xué)時將計算機專業(yè)4年的知識,傳授給非計算機專業(yè)的學(xué)生,是目前大學(xué)計算機基礎(chǔ)課程面臨的主要挑戰(zhàn)與問題。這些知識涵蓋了計算機工作原理(從三極管到云計算)、如何使用計算機(常用計算機軟件的使用),以及計算機專業(yè)面臨的問題(數(shù)據(jù)結(jié)構(gòu)、算法效率等)。歸納而言,課程內(nèi)容面面俱到,以背誦知識和工具操作為主,使得該課程難以滿足各專業(yè)和大學(xué)新生的要求。作為一門通識課程,大學(xué)計算機基礎(chǔ)課程正在經(jīng)歷從傳統(tǒng)計算機基礎(chǔ)知識傳授向計算思維能力培養(yǎng)轉(zhuǎn)型,國內(nèi)外高校教師對這類課程進行了很多有益的嘗試[1-6]。
為適應(yīng)新工科以及計算機教指委[7]對本課程的要求,在仔細(xì)分析各專業(yè)對計算機技術(shù)的需求后,我們認(rèn)為,大學(xué)計算機基礎(chǔ)課程教學(xué)應(yīng)更加關(guān)注如何發(fā)揮計算的能力解決問題,而不應(yīng)過多強調(diào)太專業(yè)的計算機科學(xué)知識。具體而言,即培養(yǎng)學(xué)生利用計算思維創(chuàng)造工具解決其專業(yè)學(xué)習(xí)中的問題。
針對目前存在的問題,亟須將課程內(nèi)容轉(zhuǎn)換到以計算思維培養(yǎng)為核心上來。這種轉(zhuǎn)換面臨著如下幾個問題:首先,教學(xué)內(nèi)容如何安排,即以什么為主線來組織內(nèi)容,而不是泛泛地介紹計算思維的概念、計算思維是什么不是什么。其次,實踐體系如何構(gòu)建,使學(xué)生能在實踐中潛移默化地形成計算思維能力。最后,如何在各類約束下開展教學(xué)內(nèi)容的改革,這些約束主要來自于學(xué)生,例如,大一新生幾乎沒有計算思維的背景知識,也幾乎沒有其所在專業(yè)的專業(yè)知識。
為此,首先要分析挖掘計算思維的核心能力,然后圍繞核心能力的培養(yǎng)組織教學(xué)內(nèi)容和實訓(xùn)體系。具體而言:①在計算思維核心能力方面,內(nèi)容組織上應(yīng)是運用計算思維解決具有一定難度的問題,并能將這種技能遷移到學(xué)生未來專業(yè)的學(xué)習(xí)與問題求解中;②在計算思維的實踐上,選擇一門易于入門,且能快速掌握的程序設(shè)計語言進行實踐;③在實訓(xùn)體系設(shè)計上,遵循的原則是實訓(xùn)案例需基于學(xué)生知識背景結(jié)構(gòu)設(shè)計,實訓(xùn)案例問題的解決不需要太復(fù)雜的計算機科學(xué)專業(yè)知識。
對計算思維的教學(xué),不要糾纏于計算思維是什么、不是什么等概念上的辨析,而是以能力培養(yǎng)為中心,將知識點轉(zhuǎn)換為核心能力。我們認(rèn)為,計算思維核心能力主要包括邏輯思維、算法思維、分解、泛化與模式歸納、建模、抽象和評估,下面逐一進行簡單介紹。
邏輯思維(Logical Thinking)和算法思維(Algorithmic Thinking)都是計算思維的核心概念,處于非常重要的地位。從高層次看,算法構(gòu)建于邏輯之上,邏輯給出了推理的規(guī)則,而算法將規(guī)則集成起來,基于規(guī)則推理的結(jié)論執(zhí)行某些動作(序列)。對本門課程而言,邏輯主要涉及命題邏輯(命題及邏輯聯(lián)結(jié)詞)、自然語言表達(dá)的命題的符號化,以及將邏輯表達(dá)式轉(zhuǎn)化為某種程序設(shè)計語言表達(dá)式的方法。我們認(rèn)為,在本階段對算法的要求應(yīng)集中于算法是動作序列,這些動作序列帶有一些特定的性質(zhì)(輸入、輸出、明確性、有限性和有效性)。
由于計算思維通常用于解決大型復(fù)雜問題,而由于人每次能處理的問題規(guī)模有限,對大型復(fù)雜問題,分解是必需的。更進一步,分解是一種系統(tǒng)化的方法,遵循分解的原理和步驟,幾乎總能將問題持續(xù)簡化,直至找到解決方法。
求解的問題多了,會發(fā)現(xiàn)有些問題之間具有相似性,相似性會導(dǎo)致問題的解中有些元素是重復(fù)出現(xiàn)的,或解中有些元素是類似的。仔細(xì)考察這些相似性,找出解決方案中的相似性,歸納出普適解決方案,這就是計算思維核心能力中的模式歸納。模式歸納有一些通用的規(guī)則,通過觀察解決方案中重復(fù)出現(xiàn)的名詞(對應(yīng)著操作對象)、動詞(對應(yīng)著操作)、形容詞和具體數(shù)值(對應(yīng)著可被替換的性質(zhì))等,可對解決方案進行改進,歸納出循環(huán)、子過程和規(guī)則。
抽象對問題求解有非常大的作用,它聚焦于求解問題相關(guān)的細(xì)節(jié),而避免無用細(xì)節(jié)的干擾。抽象包含兩個方面的含義:第一個方面指的是舍棄事物的非本質(zhì)特征,僅保留與問題相關(guān)的本質(zhì)特征;第二個方面指的是從眾多的具體實例中抽取出共同的、本質(zhì)性的特征。這是兩種不同的操作。
對抽象出來的結(jié)果,建模是用另一種方式對其進行描述,包括其靜態(tài)的屬性和動態(tài)的行為,利用邏輯思維和算法思維,可以在建模的基礎(chǔ)上構(gòu)建出計算的解。針對大一新生的知識背景,選用ER圖作為靜態(tài)建模的工具,以有限狀態(tài)機作為動態(tài)建模的工具。前者在引入實體的方法后,就與面向?qū)ο笤O(shè)計方法無縫銜接,而后者可以描述大部分計算思維問題求解產(chǎn)物的行為特性,具有普遍意義。
最后一個核心能力是評估,即在得到問題的解后,進一步考察解,以確保解是正確的、高效的、優(yōu)雅的、可用的。這個核心能力重點培養(yǎng)學(xué)生在各種指標(biāo)之間平衡的思維方式,即要想在解決方案中兼顧各種指標(biāo),很難做到每個指標(biāo)都是最優(yōu)的,需要進行權(quán)衡,在各指標(biāo)間進行折中。
在上述計算思維核心能力的指導(dǎo)下,形成培養(yǎng)計算思維的教學(xué)內(nèi)容[8-9]和實訓(xùn)體系[1-2]。實訓(xùn)的設(shè)計原則包括:①基于學(xué)生知識結(jié)構(gòu)構(gòu)建案例,案例來源于有現(xiàn)成公式的數(shù)學(xué)和物理問題,以及本門課程學(xué)習(xí)的計算機基礎(chǔ)知識點。選擇后者的出發(fā)點是將計算機科學(xué)中的問題為案例進行研究和求解,體驗初步的計算思維解決專業(yè)學(xué)習(xí)問題,并希望學(xué)生能將這種方法遷移到今后各自的專業(yè)學(xué)習(xí)中,解決專業(yè)領(lǐng)域的問題。②案例的求解不需要太復(fù)雜的計算機科學(xué)專業(yè)知識,即不涉及復(fù)雜算法和復(fù)雜數(shù)據(jù)結(jié)構(gòu)。這是為了減輕學(xué)生利用計算思維求解問題所需的背景知識,能盡快開始實踐,解決中學(xué)課程涉及的以及日常生活中遇到的具有一定難度的問題。③一定要讓每個案例都涉及若干個計算思維核心能力的培養(yǎng)。解決任何一個問題都不只涉及一種計算思維核心能力,而是多種核心能力共同作用的結(jié)果。這是為了在有限時間內(nèi)最大化實訓(xùn)效能,使學(xué)生體驗更多的核心能力組合模式。
我們選用的實訓(xùn)語言是Python,具體的實訓(xùn)體系如表1所示。實訓(xùn)體系分為8個模塊,每個模塊包含3~5個實訓(xùn),每個實訓(xùn)包含4~5個實訓(xùn)習(xí)題,每個實訓(xùn)涵蓋若干個計算思維核心能力。采用層層遞進、逐漸提高難度的方式組織實訓(xùn)與編制實訓(xùn)習(xí)題,使得學(xué)生在實訓(xùn)過程中盡早建立信心。
表 1 計算思維實訓(xùn)體系
以“馮諾伊曼體系結(jié)構(gòu)建模與模擬”實訓(xùn)為例,該實訓(xùn)以課程中計算機工作原理為案例,通過構(gòu)建給定指令集的馮諾伊曼計算機模擬器,一方面可使學(xué)生深入理解所學(xué)知識,另一方面可開展計算思維核心能力的實踐訓(xùn)練。針對給定的指令集,構(gòu)建其模擬器涉及的計算思維核心能力訓(xùn)練如表 2所示。
在該實訓(xùn)下,安排了3個實訓(xùn)習(xí)題,第一個是以面向過程的實現(xiàn)具有10條簡單算術(shù)運算指令的計算機的模擬器,第二個是將該機器以面向?qū)ο缶幊碳夹g(shù)再次實現(xiàn),第三個是一個有16條算術(shù)、邏輯、跳轉(zhuǎn)指令的計算機的模擬器實現(xiàn)。
表 2 計算思維核心能力在馮諾伊曼體系結(jié)構(gòu)模擬器實訓(xùn)中的體現(xiàn)
表 3 計算思維核心能力反思表
將實訓(xùn)與課程內(nèi)容相結(jié)合,具體應(yīng)用時,先讓學(xué)生利用各種解題方法完成實訓(xùn)作業(yè),這些方法可能不是計算思維核心能力相關(guān)的方法。此后,要求學(xué)生對完成的實訓(xùn)進行回顧,對照計算思維核心能力進行反思,對完成的實訓(xùn)習(xí)題進行重構(gòu)和改進。我們發(fā)現(xiàn),計算思維核心能力概念性的講授,在學(xué)生沒有切身體會時,收效甚微。而實踐后再對照反思,效果明顯。表3列出了一些反思內(nèi)容,請注意這些內(nèi)容不是一成不變的,會隨著學(xué)生的進步有所深化。
本實訓(xùn)體系部署近兩年以來,支撐了本校兩個年級2 000余學(xué)生的大學(xué)計算機基礎(chǔ)課程實訓(xùn),以及40余所高校3批次70余名老師的導(dǎo)教活動;已有3萬余人次使用,用戶來自國內(nèi)外幾十所院校和科研院所,被十余所國內(nèi)高校相關(guān)課程的實踐所采納。
針對大學(xué)計算機基礎(chǔ)在計算思維培養(yǎng)方面面臨的問題,我們提出了通過計算思維核心能力培養(yǎng)為主的教學(xué)內(nèi)容與實訓(xùn)體系教改,著重介紹了實訓(xùn)體系建設(shè)、應(yīng)用方法及應(yīng)用效果。實訓(xùn)體系的建設(shè)是一個持續(xù)改進的過程,未來,針對用戶的反饋,將在增加實訓(xùn)案例的基礎(chǔ)上,不斷改進現(xiàn)有實訓(xùn),使得實訓(xùn)的組合更加靈活、評測更合理。