摘要:作為一項(xiàng)重要的教育理念,計算思維得到了國內(nèi)外科學(xué)界和教育界的廣泛關(guān)注,相應(yīng)地對計算機(jī)專業(yè)的人才培養(yǎng)提出了新的要求。本文分析了計算思維培養(yǎng)與離散數(shù)學(xué)教學(xué)之間的內(nèi)在關(guān)系,在此基礎(chǔ)上分別從課程引入和課程教學(xué)兩個階段探討如何將離散數(shù)學(xué)教學(xué)與計算思維培養(yǎng)有機(jī)地結(jié)合起來。通過案例,著重論述了如何將抽象和自動化這兩個核心思想貫穿于整個教學(xué)過程,以及如何根據(jù)所講授的知識點(diǎn)適時地引入計算思維中其他基本概念和思維方法。
關(guān)鍵詞:計算思維;離散數(shù)學(xué);教學(xué)方法;抽象;自動化
計算思維是卡內(nèi)基梅隆大學(xué)計算機(jī)科學(xué)系主任Jeannette M. Wing教授在2006年提出的教育理念[1],被認(rèn)為是近十年來產(chǎn)生的最具有基礎(chǔ)性、長期性的重要思想[2]。Wing教授認(rèn)為計算思維不僅僅屬于計算機(jī)科學(xué)家,還應(yīng)該和閱讀、寫作和算術(shù)一樣,成為21世紀(jì)每個人必須具備的基本技能。
計算思維的概念一經(jīng)提出就引起了國內(nèi)外科學(xué)界和教育界的廣泛關(guān)注。科學(xué)界主要關(guān)注于計算思維如何深刻影響其他領(lǐng)域的思考方式,進(jìn)而如何促進(jìn)其他領(lǐng)域的創(chuàng)新能力。例如美國國家科學(xué)基金會于2008年啟動了以計算思維為核心的重大基礎(chǔ)研究計劃“計算使能的科學(xué)發(fā)現(xiàn)與技術(shù)創(chuàng)新”,旨在通過計算思維領(lǐng)域的創(chuàng)新和進(jìn)步來促進(jìn)自然科學(xué)和工程技術(shù)領(lǐng)域產(chǎn)生革命性的成果。教育界主要關(guān)注于對計算思維能力的培養(yǎng)。例如ACM和IEEE-CS在修訂后的計算機(jī)科學(xué)教程2008(Computer Science Curriculum 2008)[3]79-84中明確指出應(yīng)該將計算思維作為計算機(jī)科學(xué)教學(xué)的重要組成部分。
計算思維對計算機(jī)專業(yè)的人才培養(yǎng)提出了新的要求。針對計算思維培養(yǎng)問題,文獻(xiàn)[4]介紹了普渡大學(xué)開設(shè)計算思維導(dǎo)論課程取得的經(jīng)驗(yàn)。文獻(xiàn)[5]對以計算思維為基礎(chǔ)和以學(xué)科思想與方法為基礎(chǔ)的兩類計算機(jī)導(dǎo)論課程進(jìn)行了分析比較。文獻(xiàn)[6]探討了如何在程序設(shè)計課程中強(qiáng)化學(xué)生的計算思維能力。文獻(xiàn)[7]和文獻(xiàn)[8]分別探討了如何在編譯原理課程和人工智能課程中培養(yǎng)學(xué)生的計算思維能力。
離散數(shù)學(xué)是計算機(jī)專業(yè)的核心基礎(chǔ)課程;該課程不僅為數(shù)據(jù)結(jié)構(gòu)、編譯原理、操作系統(tǒng)、數(shù)據(jù)庫原理、人工智能等專業(yè)課程提供必須的基礎(chǔ)知識,更是對培養(yǎng)學(xué)生的抽象思維能力和邏輯思維能力起著重要作用。因此,針對培養(yǎng)學(xué)生的計算思維能力這個新的目標(biāo),抓好離散數(shù)學(xué)課程的教學(xué)顯得尤其重要。本文首先對計算思維培養(yǎng)與離散數(shù)學(xué)教學(xué)之間的內(nèi)在關(guān)系進(jìn)行分析,然后通過若干案例探討如何在離散數(shù)學(xué)教學(xué)中加強(qiáng)對計算思維能力的培養(yǎng)。
1計算思維培養(yǎng)與離散數(shù)學(xué)教學(xué)
在探討對計算思維能力的培養(yǎng)之前我們需要明確什么是計算思維。根據(jù)Cuny、Snyder和Wing等的定義[9],計算思維是指對問題及其解決方案進(jìn)行闡釋進(jìn)而將解決方案表示成可以被信息處理代理(information-processing agent)有效實(shí)現(xiàn)的形式的思維過程。從這個定義可以看出,計算思維最本質(zhì)的內(nèi)容是抽象和自動化;而這兩個內(nèi)容恰好反映了計算的根本問題,即什么能被有效地自動進(jìn)行。
從外延的角度來看,計算思維運(yùn)用計算機(jī)科學(xué)的基本概念來求解問題、設(shè)計系統(tǒng)和理解人類行為,包括了一系列廣泛的計算機(jī)科學(xué)的思維方法[1]。例如,計算思維通過約簡、嵌入、轉(zhuǎn)化、仿真等方法,把一個看起來困難的問題重新闡釋成一個我們知道如何解決的問題;計算思維采用抽象和分解來迎接龐雜的任務(wù);計算思維選擇合適的表示方式來陳述一個問題或者對問題的相關(guān)方面進(jìn)行建模,從而使問題易于處理;計算思維通過冗余、容錯、糾錯等方法來預(yù)防、檢測或者從最壞的情況恢復(fù)系統(tǒng);計算思維在時間與空間,處理能力與存儲容量等之間進(jìn)行折中,計算思維進(jìn)行遞歸思考等等。
根據(jù)Jeannette M. Wing等的設(shè)想[9],一個人具備計算思維能力之后將體現(xiàn)在以下方面:給定一個問題,能夠理解其哪些方面是可以計算的;能夠?qū)τ嬎愎ぞ呋蚣夹g(shù)與需要解決的問題之間的匹配程度進(jìn)行評估,能夠理解計算工具和技術(shù)所具有的能力和局限性;能夠?qū)⒂嬎愎ぞ吆图夹g(shù)用于解決新的問題;能夠識別出使用新的計算方式的機(jī)會;能夠在任何領(lǐng)域應(yīng)用諸如分而治之等計算策略。此外,對于科學(xué)家、工程師以及其他專業(yè)人士來說,具備計算思維能力之后還應(yīng)該能夠應(yīng)用新的計算方法來解決具體的專業(yè)問題,能夠?qū)栴}進(jìn)行重新闡釋從而可以采用計算策略,能夠通過分析大型的數(shù)據(jù)從而得到新的科學(xué)發(fā)現(xiàn),能夠提出之前沒有想過或者由于問題的規(guī)模不敢提出但采用計算的方式容易處理的問題,能夠應(yīng)用計算的術(shù)語對問題及其解決方案進(jìn)行解釋等等。
基于以上分析我們認(rèn)為,為了培養(yǎng)學(xué)生的計算思維能力,最為關(guān)鍵的是抓住抽象和自動化這兩個核心內(nèi)容。而對于計算機(jī)專業(yè)的學(xué)生來說,抽象和自動化這兩個核心內(nèi)容更具體地體現(xiàn)為如何構(gòu)建各種層次的計算環(huán)境以及如何在這種環(huán)境下進(jìn)行問題求解。此外,我們還需要提煉出計算機(jī)學(xué)科的基本概念和思維方法,在教學(xué)過程中有意識地強(qiáng)化學(xué)生對這些基本概念和思維方法的理解和掌握。實(shí)際上,對計算機(jī)學(xué)科的基本概念和思維方法的梳理已經(jīng)得到了國內(nèi)外教育者的重視;在ACM和IEEE-CS聯(lián)合攻關(guān)組制訂的計算教程CC1991(Computing Curricula 1991)中已經(jīng)提取出了計算機(jī)學(xué)科的12個核心概念[10],包括:概念化和形式化模型、大問題的復(fù)雜性、抽象層次、折中和結(jié)論、一致性和完備性、效率、演化、按空間排序、按時間排序、重用、安全性、以及綁定等。這些概念反映了計算機(jī)學(xué)科最核心的思想、方法和原則,我們應(yīng)該在教學(xué)過程中不斷強(qiáng)化學(xué)生對這些概念的理解和掌握。
作為計算機(jī)專業(yè)課程體系中的核心課程,離散數(shù)學(xué)具有內(nèi)容多、概念多、理論性強(qiáng)、高度抽象等特點(diǎn),被普遍認(rèn)為是一門既難教又難學(xué)的課程。首先,該課程由數(shù)理邏輯、集合論、代數(shù)結(jié)構(gòu)、圖論等多個彼此獨(dú)立的數(shù)學(xué)分支組成;這些內(nèi)容自成體系,很容易讓學(xué)生覺得各部分內(nèi)容聯(lián)系不大,進(jìn)而使得學(xué)生對課程學(xué)習(xí)的目的不明確。其次,該課程每部分都包含大量以字母、符號、圖形等形式呈現(xiàn)出來的抽象概念,使得學(xué)生在短時間內(nèi)難以適應(yīng)由大量抽象概念建立起來的理論體系,往往會茫然不知所措。最后,學(xué)生在學(xué)習(xí)該課程時認(rèn)識不到這門課程的重要性,覺得這門課程與計算機(jī)科學(xué)聯(lián)系不起來,看不到離散數(shù)學(xué)知識在計算機(jī)科學(xué)中的具體應(yīng)用,從而缺乏相應(yīng)的學(xué)習(xí)興趣。
計算思維為我們提供了一種重新審視離散數(shù)學(xué)的視角。從計算思維的角度來看,雖然離散數(shù)學(xué)由多個相對獨(dú)立的內(nèi)容組成,但這些內(nèi)容的教學(xué)目的其實(shí)是高度統(tǒng)一的,即:訓(xùn)練學(xué)生運(yùn)用離散結(jié)構(gòu)構(gòu)建問題的抽象模型并在其基礎(chǔ)上構(gòu)造算法和解決問題的能力;而根據(jù)上文的分析,這種能力恰好就是計算思維能力的核心所在。因此,一方面,離散數(shù)學(xué)課程為我們培養(yǎng)學(xué)生的計算思維能力提供了一個很好的平臺。另一方面,我們可以從計算思維這個層面來梳理和組織離散數(shù)學(xué)的教學(xué)內(nèi)容,從計算思維這個高度來進(jìn)行離散數(shù)學(xué)教學(xué)。
2面向計算思維的離散數(shù)學(xué)教學(xué)
計算思維可以貫穿于離散數(shù)學(xué)課程的整個教學(xué)過程。下面分別從課程引入和課程教學(xué)兩個階段探討如何將離散數(shù)學(xué)教學(xué)與計算思維培養(yǎng)有機(jī)地結(jié)合起來。
2.1從計算思維出發(fā)的課程引入
在引入離散數(shù)學(xué)課程之前,首先要向?qū)W生指明:對計算思維能力的培養(yǎng)和訓(xùn)練是計算機(jī)專業(yè)教學(xué)的核心所在;大家在經(jīng)過四年的大學(xué)學(xué)習(xí)之后,不僅要掌握計算機(jī)專業(yè)的相關(guān)知識,更為重要的是能夠應(yīng)用這些知識構(gòu)建出各種層次的計算環(huán)境并在這些計算環(huán)境下進(jìn)行問題求解。在此基礎(chǔ)上可以進(jìn)一步向?qū)W生闡述:電子計算機(jī)本身是一個離散結(jié)構(gòu),只能處理離散的或者離散化了的數(shù)量關(guān)系;因此,無論是計算機(jī)科學(xué)本身,還是與計算機(jī)密切相關(guān)的現(xiàn)代科學(xué)研究領(lǐng)域,都面臨著如何運(yùn)用離散結(jié)構(gòu)建立模型或者如何將已用連續(xù)數(shù)量關(guān)系建立起來的模型離散化,從而可以由計算機(jī)加以處理和實(shí)現(xiàn)。
接下來,可以比較自然地引入離散數(shù)學(xué)課程,告訴學(xué)生該課程的目的是訓(xùn)練大家運(yùn)用離散結(jié)構(gòu)構(gòu)建問題的抽象模型并在其基礎(chǔ)上構(gòu)造算法和解決問題的能力,而這種能力是計算機(jī)專業(yè)的學(xué)生具備計算思維能力的重要體現(xiàn)。
最后,還可以按照引入離散數(shù)學(xué)課程的常見方式,介紹該課程在ACM和IEEE-CS制定的計算機(jī)科學(xué)教程以及我國高等學(xué)校計算機(jī)科學(xué)與技術(shù)教學(xué)指導(dǎo)委員會制定的計算機(jī)專業(yè)規(guī)范中所處的核心地位;用一棵樹形象地展示該課程在計算學(xué)科主要課程中處于樹干位置的情形;以及分別列舉出數(shù)理邏輯、集合論、代數(shù)結(jié)構(gòu)、圖論等內(nèi)容在計算學(xué)科的相關(guān)課程和領(lǐng)域中的應(yīng)用等等。
總的來說,從計算思維出發(fā)引入離散數(shù)學(xué)課程可以較好地達(dá)到以下目的。首先,能夠讓學(xué)生明白該課程的重要性,能夠從整體上了解該課程在整個專業(yè)課程體系中所處的位置。其次,能夠讓學(xué)生明確學(xué)習(xí)該課程的目的,即訓(xùn)練運(yùn)用離散結(jié)構(gòu)構(gòu)建問題的抽象模型并在其基礎(chǔ)上構(gòu)造算法和解決問題的能力;圍繞這個學(xué)習(xí)目的,離散數(shù)學(xué)中的數(shù)理邏輯、集合論、代數(shù)結(jié)構(gòu)、圖論等內(nèi)容形成了一個有機(jī)的體系。最后,能夠糾正學(xué)生普遍存在的認(rèn)為計算機(jī)專業(yè)就是學(xué)習(xí)編程的誤解,讓學(xué)生認(rèn)識到通過離散數(shù)學(xué)等各門專業(yè)課程訓(xùn)練出來的計算思維能力才是大家應(yīng)該具備的核心競爭力。在實(shí)現(xiàn)上述目標(biāo)的基礎(chǔ)上,一方面還可以讓學(xué)生認(rèn)識到離散數(shù)學(xué)課程為訓(xùn)練他們的計算思維能力提供和一個非常好的機(jī)會,從而激發(fā)他們對該課程的學(xué)習(xí)興趣;另一方面還可以讓他們提前認(rèn)識到抽象和自動化將是貫穿該課程的兩個主題,從而為接下來將要接觸的大量抽象概念和符號做好心理準(zhǔn)備。
2.2結(jié)合計算思維的課程教學(xué)
計算思維與離散數(shù)學(xué)課程教學(xué)的結(jié)合主要體現(xiàn)在兩個方面:首先可以將抽象和自動化兩個核心思想貫穿于整個教學(xué)過程,其次可以根據(jù)講授的具體知識點(diǎn)適時地引入計算思維中其他基本概念和思維方法。下面分別從數(shù)理邏輯部分和圖論部分挑選兩個教學(xué)實(shí)例進(jìn)行說明。
實(shí)例1:從計算思維的角度組織數(shù)理邏輯教學(xué)
對于數(shù)理邏輯部分,按照經(jīng)典的教學(xué)方式,我們首先可以介紹萊布尼茨的理想,即把推理過程像數(shù)學(xué)一樣利用公式來描述,建立直觀而又精確的思維演算,從而得出正確的結(jié)論;形象地說,當(dāng)兩個人遇有爭論時,雙方可以拿起筆來說“讓我們來算一下”,就可以很好地解決問題。為了實(shí)現(xiàn)這個理想,基本思路是首先引入一套符號體系,規(guī)定一些符號變換規(guī)則,然后借助這些符號和規(guī)則將邏輯推理過程在形式上變得像代數(shù)演算一樣。
從計算思維的角度來看,上述基本思路的核心恰好就是抽象和自動化,即將雙方爭論的內(nèi)容抽象成符號,將邏輯思維過程抽象成符號演算,進(jìn)而可以借助工具實(shí)現(xiàn)邏輯推理。當(dāng)學(xué)生建立起這種認(rèn)識之后,我們比較自然地引入數(shù)理邏輯的基本概念,并且通過表1將離散數(shù)學(xué)中數(shù)理邏輯部分的學(xué)習(xí)內(nèi)容展現(xiàn)出來,讓學(xué)生對該部分的學(xué)習(xí)內(nèi)容形成一個清晰、全面的認(rèn)識。在接下來學(xué)習(xí)數(shù)理邏輯部分的每個章節(jié)時,我們可以反復(fù)呈現(xiàn)這張表,一方面可以幫助學(xué)生知道接下來的學(xué)習(xí)內(nèi)容處于哪個位置,另一方面可以加深學(xué)生對抽象和自動化這兩個核心思想的理解和掌握。
在表1列出的各個知識點(diǎn)中,對歸結(jié)推理方法的教學(xué)往往被許多教材和老師忽略。但從計算思維的角度看,歸結(jié)推理方法非常直觀地體現(xiàn)了自動化這個核心思想,是離散數(shù)學(xué)中的一個重要知識點(diǎn)。學(xué)習(xí)了構(gòu)造證明方法之后,學(xué)生一般會形成一個印象,覺得構(gòu)造證明法使用起來簡單方便,但使用過程中需要一定的觀察能力或者需要一定的技巧。以學(xué)生的這種直觀認(rèn)識為基礎(chǔ),我們可以比較自然地引入歸結(jié)推理方法,告訴學(xué)生這種方法容易用算法實(shí)現(xiàn),易于在計算機(jī)上實(shí)現(xiàn)自動的推理證明。在接下來講授了歸結(jié)推理方法的基本原理之后,我們可以將這種方法以算法的形式呈現(xiàn)出來;在有條件的情況下,還可以讓學(xué)生上機(jī)實(shí)現(xiàn)命題邏輯的歸結(jié)推理算法等[11]。
在給出命題邏輯的歸結(jié)推理算法之后,我們還可以對算法的可終止性、可靠性、完備性、復(fù)雜度等進(jìn)行簡單論述。與之相對應(yīng),在給出謂詞邏輯的歸結(jié)推理算法之后,可以告訴學(xué)生這個算法不一定會終止,即謂詞邏輯本身是不可判定的。當(dāng)學(xué)生理解了上述內(nèi)容之后,我們可以進(jìn)一步分析邏輯系統(tǒng)的表達(dá)能力與推理能力之間存在的矛盾關(guān)系,進(jìn)而引入計算機(jī)科學(xué)中的“折中”這個核心概念,訓(xùn)練學(xué)生能夠以解決問題為導(dǎo)向來選擇合適的工具。
實(shí)例2:在歐拉圖和哈密爾頓圖教學(xué)中訓(xùn)練計算思維能力
對于圖論部分,我們可以在一開始介紹圖論的起源時就將計算思維的相關(guān)內(nèi)容融入到課堂教學(xué)中。具體來說,在給出著名的哥尼斯堡七橋問題之后,可以向?qū)W生強(qiáng)調(diào)歐拉如何將橋的寬度、距離等無關(guān)的因素去掉,進(jìn)而構(gòu)建出一個抽象的以圖的形式呈現(xiàn)的模型;接下來,可以讓學(xué)生分析歐拉如何在圖的基礎(chǔ)上總結(jié)出三條判定規(guī)則,形成一套用來解決類似問題的可靠并且完備的理論;最后可以讓學(xué)生體驗(yàn)如何應(yīng)用歐拉建立的理論判斷任何一個圖中是否含有歐拉回路。上述三個階段實(shí)際上體現(xiàn)了進(jìn)行科學(xué)研究或者問題求解時采用的一般方法,同時也是計算思維的精髓所在。
在講授完歐拉圖的相關(guān)內(nèi)容之后,可以類似地引入并講授哈密爾頓圖的相關(guān)內(nèi)容,并且可以從問題的定義以及是否存在有效的判定方法等方面對這兩個知識點(diǎn)進(jìn)行比較和總結(jié)。在此基礎(chǔ)上,我們可以通過一個單詞排序問題來強(qiáng)化學(xué)生對計算思維能力的掌握。其中,對單詞排序問題描述如下:假設(shè)有n個盤子,每個盤子上分別寫著由小寫字母組成的英文單詞;需要給這些盤子安排一個合適的順序,使得相鄰兩個盤子中前一個盤子上面單詞的末字母與后一個盤子上面單詞的首字母相同。針對這個問題,要求學(xué)生對其進(jìn)行抽象后建立模型,并在此基礎(chǔ)上給出該問題的解決方法,以及分析所給出的解決方法的復(fù)雜度。
對于上述單詞排序問題,學(xué)生可能會給出兩種抽象建模方法。第一種方法將每個單詞作為圖中的一個頂點(diǎn);兩個單詞之間存在一條邊當(dāng)且僅當(dāng)前一個單詞的末字母與后一個單詞的首字母相同。在此基礎(chǔ)上,單詞排序問題可以轉(zhuǎn)換為尋找哈密爾頓路徑的問題。第二種方法將26個小寫字母作為圖中的各個頂點(diǎn);每個單詞都對應(yīng)于一條以其首字母為始點(diǎn)并且以其末字母為終點(diǎn)的邊。在此基礎(chǔ)上,單詞排序問題可以轉(zhuǎn)換為尋找歐拉路徑的問題。對這兩種方法進(jìn)行分析后學(xué)生可以發(fā)現(xiàn):第一種方法的復(fù)雜度為NP完全,而第二種方法的復(fù)雜度為多項(xiàng)式時間??偟膩碚f,借助單詞排序問題,不僅進(jìn)一步訓(xùn)練了學(xué)生進(jìn)行抽象建模和問題求解的能力,還將計算機(jī)科學(xué)中的復(fù)雜性、效率等核心概念融合進(jìn)來,訓(xùn)練了學(xué)生對解決方案進(jìn)行評估的能力。
限于篇幅,這里僅僅列舉數(shù)理邏輯部分和圖論部分的兩個例子。其他典型例子還有:結(jié)合學(xué)生在小學(xué)和中學(xué)階段學(xué)習(xí)的數(shù)學(xué)知識,對有理數(shù)四則混合運(yùn)算、實(shí)數(shù)運(yùn)算和復(fù)數(shù)運(yùn)算等進(jìn)行抽象后得到代數(shù)結(jié)構(gòu);利用等價關(guān)系對集合進(jìn)行劃分;利用偏序關(guān)系劃分抽象層次等等。實(shí)際上,離散數(shù)學(xué)中基本上每個知識點(diǎn)都蘊(yùn)含了抽象和自動化這兩個核心思想以及計算思維中其他典型的基本概念和思維方法。將這些基本思想、概念和方法抽取出來并教授給學(xué)生,是我們授課教師的職責(zé)所在,但同時也對授課教師提出了挑戰(zhàn)。要實(shí)現(xiàn)這個目標(biāo),要求授課教師不僅僅是照本宣科,不僅僅是以教會學(xué)生課本上的知識為目的,而是要能夠從計算思維的高度來看待離散數(shù)學(xué)教學(xué),要具備開闊的視野和廣博的知識,要能夠不斷學(xué)習(xí)并且不斷提升自己的知識和認(rèn)知水平。
3結(jié)語
作為計算機(jī)專業(yè)的核心基礎(chǔ)課程,離散數(shù)學(xué)中的許多知識點(diǎn)都為計算思維提供了很好的詮釋和生動的案例。將離散數(shù)學(xué)教學(xué)與計算思維培養(yǎng)結(jié)合起來之后,一方面可以從計算思維的角度重新審視和組織離散數(shù)學(xué)的課堂教學(xué),取得更好的教學(xué)效果;另一方面可以加強(qiáng)對計算思維能力的培養(yǎng),使學(xué)生能夠更好地應(yīng)用計算思維來解決問題。
計算思維的培養(yǎng)不是通過一兩門課程的教學(xué)就能解決的問題,而是應(yīng)該貫穿于所有專業(yè)課程的教學(xué)中。這就需要計算機(jī)專業(yè)的老師能夠從計算思維的層面看待所教授的課程,能夠?qū)@些課程中含有的計算思維的基本概念、方法和思想進(jìn)行提煉,以及能夠從計算思維的角度對這些課程進(jìn)行重新梳理和建設(shè)等??偟膩碚f,計算思維對計算機(jī)專業(yè)的人才培養(yǎng)提出了新的要求,我們必須在專業(yè)課程的教學(xué)中加強(qiáng)對計算思維能力的培養(yǎng)。
參考文獻(xiàn):
[1] Jeannette M. Wing. Computational Thinking [J]. Communications of the