摘要:針對大學(xué)計算機教育中需要培養(yǎng)學(xué)生計算思維能力這一核心問題,提出以計算思維培養(yǎng)為導(dǎo)向的數(shù)據(jù)結(jié)構(gòu)課程教學(xué)改革思想,分析改革過程中需要注意的問題,闡述如何從課堂講授和實驗訓(xùn)練方面采取多種機制滲透和加強學(xué)生計算思維的形成與培養(yǎng),使其成為學(xué)生思考問題和解決問題的基本能力。
關(guān)鍵詞:計算思維;數(shù)據(jù)結(jié)構(gòu);計算能力培養(yǎng);九校聯(lián)盟
近年來,計算思維的培養(yǎng)成為國際和國內(nèi)研究的熱點,計算思維能力將成為21世紀(jì)每個人的基本能力。2010年《九校聯(lián)盟(C9)計算機基礎(chǔ)教學(xué)發(fā)展戰(zhàn)略聯(lián)合聲明》強調(diào)“需要把培養(yǎng)學(xué)生的‘計算思維’能力作為計算機基礎(chǔ)教學(xué)的核心任務(wù)。為推動學(xué)生計算能力和計算思維的培養(yǎng),我們將計算思維的方法融入實用數(shù)據(jù)結(jié)構(gòu)課程的課堂與實踐,對教學(xué)進行改革,促進學(xué)生計算思維的形成與內(nèi)化。
1、數(shù)據(jù)結(jié)構(gòu)課程在形成計算思維中的作用
數(shù)據(jù)結(jié)構(gòu)是計算機專業(yè)的一門重要的專業(yè)基礎(chǔ)課,是計算機科學(xué)的核心課程和計算機理論與技術(shù)的重要基石。目前很多非計算機專業(yè)已經(jīng)將該課程作為必修基礎(chǔ)課。數(shù)據(jù)結(jié)構(gòu)作為操作系統(tǒng)、編譯原理、數(shù)據(jù)庫原理、軟件工程等計算機核心專業(yè)課程的基礎(chǔ)和前導(dǎo)課程,將計算思維的思想融入其中,對增強計算機專業(yè)學(xué)生的計算能力具有非常重要的意義。其他專業(yè)學(xué)生學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)之后,也將提高他們應(yīng)用計算思維解決問題的能力。
數(shù)據(jù)結(jié)構(gòu)是指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。數(shù)據(jù)結(jié)構(gòu)的主要研究內(nèi)容是數(shù)據(jù)之間的邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)以及對數(shù)據(jù)的各種基本操作。通常情況下選擇合適的數(shù)據(jù)結(jié)構(gòu)可以提高算法的運行效率。學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)可以培養(yǎng)學(xué)生的抽象思維以及分析問題、解決問題的能力,加強其針對特定問題的算法設(shè)計能力,提高運用計算思維的能力。
2006年3月,周以真(Jeannette M。Wing)在Communications of the ACM上首次提出“計算思維”的概念和詳細(xì)定義,認(rèn)為計算思維就是通過約簡、嵌入、轉(zhuǎn)化、仿真等方法,把一個看似困難的問題重新闡述成一個知道怎樣解決的問題,提出了面向問題解決的系列觀點和方法。計算思維是概念化,不是程序化。計算機編程只是計算機科學(xué)的一個極小子集,計算機科學(xué)家的思維方式遠遠超出計算機編程,他們能夠在多個抽象層次上進行思維,從而實現(xiàn)問題求解。這些觀點和方法有助于加深對計算本質(zhì)的理解和利用計算思維求解問題。計算思維的本質(zhì)是抽象和自動化。文章認(rèn)為大學(xué)應(yīng)以培養(yǎng)學(xué)生的計算思維為核心,使計算思維成為每個學(xué)生的基本科學(xué)思維能力。學(xué)生在這種思維指導(dǎo)下,可以學(xué)習(xí)計算機科學(xué)知識,也可以學(xué)習(xí)其他專業(yè)的知識。
計算機教學(xué)改革將逐步加強培養(yǎng)學(xué)生的計算思維,高校計算機課程的定位將演變?yōu)椋翰粏问菫檎莆沼嬎銠C技術(shù)而學(xué)計算機課程,不僅僅將計算機作為一個狹義的工具,而是為掌握計算思維的基本方法而學(xué)習(xí)計算機課程。計算機課程的教學(xué)目的將與數(shù)學(xué)、物理等基礎(chǔ)課程相同,具有普適性,計算能力將成為每個人的基本能力,計算思維方法將成為解決問題的基本方法之一。
2、將計算思維方法融入數(shù)據(jù)結(jié)構(gòu)教學(xué)中
文獻提出以循序漸進的方式推進增強計算思維這一計算機學(xué)科課程的重大改革。目前計算思維已經(jīng)開始融入各門計算機課程的講授過程中。計算機導(dǎo)論課程已開展以培養(yǎng)計算思維能力為核心的課程改革,將思維訓(xùn)練融入教學(xué)的各個環(huán)節(jié)中,進一步提升大學(xué)生的綜合素質(zhì)和能力。針對數(shù)據(jù)結(jié)構(gòu)課程改革,我們認(rèn)為以提高學(xué)生的計算思維為主導(dǎo)思想,把需要講授的課程知識體系分解為多個知識單元和知識點,對于每一個知識點,根據(jù)其內(nèi)容、學(xué)習(xí)方式和檢測方法制訂相應(yīng)的要求和標(biāo)準(zhǔn),明確每一堂課的講解內(nèi)容和授課方式。該模式將計算思維滲透到每一個知識單元和知識點,構(gòu)建一個基于計算思維的教學(xué)體系。
將計算思維進行分解,有(但不僅有)以下這些特征點:規(guī)約、嵌入、轉(zhuǎn)化、仿真、遞歸、并行、抽象、分解、保護、冗余、容錯、糾錯、系統(tǒng)恢復(fù)、啟發(fā)式、規(guī)劃、學(xué)習(xí)、調(diào)度、折中、優(yōu)化等。在課堂講授和實踐中融入計算思維的相關(guān)內(nèi)容,最終將其逐漸內(nèi)化為學(xué)生的思維方法。在課程內(nèi)容設(shè)置和實驗訓(xùn)練中豐富學(xué)生的知識結(jié)構(gòu),特別是在實踐過程中,計算機課程對于培養(yǎng)學(xué)生科學(xué)思維能力的作用更加顯著。
當(dāng)前引入計算思維教學(xué)改革需要注意以下問題:
(1)計算思維的培養(yǎng)要循序漸進,滲透教學(xué)的每個環(huán)節(jié),要與學(xué)生的接受能力和學(xué)校的整體教學(xué)改革結(jié)合起來,與學(xué)生的專業(yè)教育、技能教育甚至通識教育相結(jié)合,配合其他基礎(chǔ)課程進行聯(lián)動改革。
(2)在數(shù)據(jù)結(jié)構(gòu)的傳統(tǒng)教學(xué)中,計算能力的培養(yǎng)已經(jīng)蘊含其中,處于一種計算機基礎(chǔ)教學(xué)中計算思維的無意識、潛移默化教學(xué)的現(xiàn)狀。計算思維的培養(yǎng)要在計算能力的培養(yǎng)基礎(chǔ)上對其進行強化,講明針對一個具體問題計算思維的形成過程,不僅僅靠學(xué)生獲得計算能力的同時自己領(lǐng)悟思維的形成。
(3)對現(xiàn)有的教學(xué)內(nèi)容進行重新審視和定位,適應(yīng)以計算思維為導(dǎo)向的教學(xué)改革。減少使用相同思維方式的內(nèi)容在課程中的比重;對沒有融入計算思維方式的課程內(nèi)容要增加分析和實例講解;根據(jù)增強抽象思維能力的需要,增設(shè)課程中沒有的教學(xué)內(nèi)容。
2.1 課堂講授
課堂實例講解模式采用啟發(fā)式講授方式。從實際問題引入概念,通過實例深入分析。如對實例中需要解決的問題如何進行分析,如何解決,采用哪種數(shù)據(jù)結(jié)構(gòu),一個問題有幾種解決方案,每種方案的優(yōu)缺點和適合的應(yīng)用環(huán)境。一題多解方法對培養(yǎng)學(xué)生學(xué)習(xí)興趣和提高其程序設(shè)計及編程實踐能力起到極大的促進作用,增強學(xué)生計算思維能力。
下面以循環(huán)隊列為例,從問題進入、挑錯激勵和知識點比較3個方面,說明如何在數(shù)據(jù)結(jié)構(gòu)課程中滲透計算思維能力的培養(yǎng)。
2.1.1 問題引入機制
在介紹隊列這種數(shù)據(jù)結(jié)構(gòu)的概念時,以用戶在銀行取號接受服務(wù)為例,說明其操作特點為先來先服務(wù),為其應(yīng)用場景伏筆。隊列中的數(shù)據(jù)元素操作符合先進先出的特點,則隊列兩端的元素都需要變動:元素入隊在隊尾操作,元素出隊在隊頭操作,因此需要設(shè)置兩個指針分別標(biāo)識隊頭和隊尾元素。隨著數(shù)據(jù)元素的入隊和出隊的多次操作,會出現(xiàn)隊列中存在空位置,而數(shù)據(jù)元素不能入隊的情況。由此引入循環(huán)隊列以解決這種假溢出現(xiàn)象。然而這種解決方案又帶來新的問題——用以前的方法無法判斷隊空和隊滿。教師在講授過程中向?qū)W生提出具體的問題,引導(dǎo)其對問題進行抽象,進而解決這個問題。通過一步步提示,學(xué)生不斷思考,在分析解決具體問題過程中逐漸培養(yǎng)計算思維能力。
2.1.2 挑錯激勵機制
教師在課堂講授重要的知識點時,除了問題引入,在講解過程中會在課件中故意留出一些錯誤,這些錯誤都涉及之前講過的知識點,教師會提示并留出時間讓學(xué)生思考。這時,不只一個學(xué)生會指出課件中的錯誤并提出解決方案,學(xué)生給出的解決方案有時甚至比原來的解決方案更加簡單有效。如在引入順序隊列之后,我們將隊頭和隊尾指針初始值設(shè)置為-1,如圖1所示。
當(dāng)講解循環(huán)隊列時,該設(shè)置在循環(huán)隊列中出現(xiàn)了錯誤,但是課件中繼續(xù)沿用該設(shè)置。經(jīng)過提示和引導(dǎo),學(xué)生找出錯誤并給出兩種解決方案:
(1)在循環(huán)隊列中,可以將初始值設(shè)置為O;
(2)判隊空和隊滿條件時使用求模運算,如判隊滿:
(q→rear+1)%Max=(q→front+Max)%Max。
兩種方案都可以避免初始值設(shè)置為-1時,循環(huán)隊列指針移動之后無法取得-1,從而無法判隊空和隊滿的問題。
挑錯機制加強了對學(xué)生批判性思維的培養(yǎng)。學(xué)生帶著問題聽課,主動挑出錯誤,提出更加合理的解決方案。一個學(xué)生提出問題,其他學(xué)生會馬上思考該問題的解決方案,多個人一起討論,很快就能夠給出問題的合理解決方案。挑錯機制明顯提高了學(xué)生的學(xué)習(xí)興趣,批判性思維逐漸改變著學(xué)生的思維方式。
2.1.3 知識點比較
每講解一種數(shù)據(jù)結(jié)構(gòu)都說明其操作特點和應(yīng)用場景,講清楚遇到實際問題時為什么采用這種數(shù)據(jù)結(jié)構(gòu)而不采用那種,采用哪種數(shù)據(jù)結(jié)構(gòu)更合適,更有利于提高算法和程序的性能。
如函數(shù)的遞歸調(diào)用,每調(diào)用一次函數(shù),程序斷點信息(包括地址和函數(shù)參數(shù)等)都需要保存,且這些信息是后存儲的需要先取回,才能正確恢復(fù)斷點狀態(tài)。棧結(jié)構(gòu)的操作特點是先進后出,因此這種應(yīng)用場景需要使用棧這種數(shù)據(jù)結(jié)構(gòu)。而公共緩沖區(qū)的使用則是先請求的服務(wù)要先獲得該資源的使用權(quán),所以需使用隊列這種滿足先進先出的數(shù)據(jù)結(jié)構(gòu)。不同的應(yīng)用場景適用不同的數(shù)據(jù)結(jié)構(gòu),進行兩種結(jié)構(gòu)的對比教學(xué),能使學(xué)生意識到不同問題要區(qū)分對待。
2.2 實驗訓(xùn)練
課程組采用“理論書面作業(yè)+分離知識點實驗作業(yè)+綜合大作業(yè)”的方式提高學(xué)生的實踐操作能力,從問題抽象分析推理到實際動手實驗,培養(yǎng)其計算思維。
2.2.1 理論書面作業(yè)
課程在每一個較為獨立的教學(xué)內(nèi)容后面設(shè)置合適的練習(xí)題用以熟悉和鞏固課堂講解的理論知識,根據(jù)知識點中的重點和難點設(shè)置不同的題目類型。
如為循環(huán)隊列設(shè)置簡答題——順序隊列的假溢出現(xiàn)象;設(shè)置填空題考查在不同情況下判斷隊空和隊滿的條件。
理論作業(yè)可以提高學(xué)生的理解能力和推理分析能力,從抽象層面進行思維訓(xùn)練。
2.2.2 分離知識點實驗作業(yè)
對于每一種特定數(shù)據(jù)結(jié)構(gòu),結(jié)合學(xué)生所學(xué)專業(yè)設(shè)置不同的實驗課題,不指定具體問題,使得學(xué)生能夠自己獨立提出問題、分析問題,完成每種數(shù)據(jù)結(jié)構(gòu)應(yīng)該掌握的知識點的相關(guān)實驗,深入理解其所應(yīng)用的具體場景,培養(yǎng)學(xué)生自主學(xué)習(xí)的意識和獨立實踐的能力。如在石油工程專業(yè)的鉆井工程課程中,棧實驗作業(yè)為井位信息的采集與存儲。隨著井深變化采集到的井位信息數(shù)據(jù)會不同,可以用棧這種數(shù)據(jù)結(jié)構(gòu)存儲。
2.2.3 綜合大作業(yè)
擬定5~6個綜合類型的大作業(yè),學(xué)生以小組為單位任選一題或多題,或者由學(xué)生根據(jù)其自身所學(xué)專業(yè)的具體情況自擬題目。每組由5~6名同學(xué)組成,組內(nèi)同學(xué)合作開發(fā)一個應(yīng)用多種數(shù)據(jù)結(jié)構(gòu)實現(xiàn)的、具備多種功能的綜合系統(tǒng),組內(nèi)每個成員都要參加綜合作業(yè)答辯,演示自己完成模塊的功能以及如何與其他成員合作。學(xué)生總結(jié)大作業(yè)完成情況和獲得的經(jīng)驗,分析整個研發(fā)過程中出現(xiàn)的問題以及如何解決這種方式既提高個人獨立分析問題、解決問題的能力,又提高個人團隊合作能力,還通過反思問題的解決過程訓(xùn)練思維方式。
課程組對多個專業(yè)多個班級的綜合大作業(yè)的完成情況進行分析發(fā)現(xiàn),學(xué)生對將多種數(shù)據(jù)結(jié)構(gòu)應(yīng)用于一個復(fù)雜問題的解決,有很高的積極性。
3、結(jié)語
數(shù)據(jù)結(jié)構(gòu)在學(xué)科結(jié)構(gòu)中占有重要地位,是多門課程的前導(dǎo)課。學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)非常有助于計算思維的形成。在課堂講授中根據(jù)內(nèi)容采用不同的方法,讓學(xué)生積極思考;實驗訓(xùn)練使學(xué)生體會到程序設(shè)計和成功解決具體問題的樂趣。今后我們將把本課程的改革延伸到計算機其他基礎(chǔ)課程改革中,全面促進學(xué)生計算思維的形成與培養(yǎng)。