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