向燕飛
高校的計算機專業(yè)為本科生都開設(shè)了數(shù)據(jù)結(jié)構(gòu)課程,它是計算機學(xué)科知識結(jié)構(gòu)的核心和技術(shù)體系的基石,在研究生考試中也是必考科目。隨著科學(xué)技術(shù)的飛速發(fā)展,數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)性地位不僅沒有動搖,反而因近年來算法工程師的高薪形勢,而得到了業(yè)內(nèi)空前的重視。計算機在處理數(shù)據(jù)之前,先要處理的是數(shù)據(jù)的組織和存儲。而數(shù)據(jù)結(jié)構(gòu)正是計算機存儲、組織數(shù)據(jù)的方式。
按傳統(tǒng)的教學(xué)模式,在交流學(xué)習(xí)算法時,很多的學(xué)生會反映數(shù)據(jù)結(jié)構(gòu)晦澀難懂,廣東東軟學(xué)院近幾年在專業(yè)核心課程和專業(yè)基礎(chǔ)課程中大力推廣“翻轉(zhuǎn)課堂”和“線上線下混合”教學(xué)改革,以行為主義和建構(gòu)主義為指導(dǎo)理論,關(guān)注學(xué)生的學(xué)習(xí)行為和學(xué)習(xí)過程,注重學(xué)生的知識獲取、建構(gòu)與生成,《數(shù)據(jù)結(jié)構(gòu)與算法》課程近幾年按照省級一流本科課程的標準來重點建設(shè)。在建設(shè)過程中運用了多種教育理念和教學(xué)方法,布魯姆教育目標分類法和案例教學(xué)是其中之一。
布魯姆教育目標分類法是一種教育的分類方法[1],根據(jù)教育目標從低級到高級可以分為6個水平:知道、領(lǐng)會、應(yīng)用、分析、綜合、評價。該教育方法指出,問題有簡單和復(fù)雜,按照學(xué)習(xí)目標分層次提出問題,6 種類型的問題中,前三類是屬于初級層次的認知問題,它一般有直接的、明確的、無歧義的答案,而后三類問題屬于高級認知問題,通常沒有唯一的正確答案,從不同的角度有不同的回答。
在這一教育理論指導(dǎo)下,教師在教學(xué)設(shè)計中,提倡課堂教學(xué)不能僅僅局限于初級認知的問題,在適當(dāng)?shù)臅r機,高級認知問題更能夠激發(fā)學(xué)生的思維,從而培養(yǎng)學(xué)生的思維能力、觀念和自我評價體系[2]。按學(xué)習(xí)目標的要求,遵循循序漸進的學(xué)習(xí)規(guī)律,分層次設(shè)計教學(xué)內(nèi)容,同時在設(shè)計案例上,從簡單逐漸到復(fù)雜,設(shè)計認知性、理解性和應(yīng)用性等任務(wù)層次遞進。
基于“教育目標分類法”的理念,結(jié)合數(shù)據(jù)結(jié)構(gòu)與算法課程的特點,對課程框架進行重組,梳理知識點,并為每一個知識點進行案例設(shè)計,這里以《數(shù)據(jù)的邏輯結(jié)構(gòu)與存儲結(jié)構(gòu)》這一知識點為例進行應(yīng)用說明。
整體的教學(xué)策略,通過“問題引入,案例分析,任務(wù)驅(qū)動”的教學(xué)流程來組織整堂課。
首先將目標分解為以下三層,并為各層設(shè)計相應(yīng)的教學(xué)活動以及評估的標準,如表1 所示。
以“如何在書架上擺放圖書”的問題為例:給了你一堆書架,然后又有一堆書進來,你要怎么把它們放到書架上去呢?就如計算機處理數(shù)據(jù),給了一堆數(shù)據(jù),然后又給了一些存儲空間,你要怎么把這些數(shù)據(jù)存起來呢?通過這樣引入計算機處理數(shù)據(jù)要考慮的兩方面,一是數(shù)據(jù)間的邏輯關(guān)系,二是存放的存儲結(jié)構(gòu)。在學(xué)生各種經(jīng)驗分析之后,教師給出“其實這個問題是不科學(xué)的”。為什么呢?因為不確定給的書架是長什么樣的。當(dāng)考慮一個數(shù)據(jù)怎么組織的時候,其實跟這個數(shù)據(jù)的規(guī)模有關(guān)系,也跟放好之后要做什么事情有關(guān),也就是說要考慮對它們的操作。由此引入了知識點的學(xué)習(xí),什么是數(shù)據(jù)結(jié)構(gòu)的邏輯結(jié)構(gòu)和邏輯結(jié)構(gòu)。
表1 教學(xué)目標分解和掌握程度評估
設(shè)計案例,圖書編號管理問題(一對一的線性關(guān)系),人機對奕中用到的算法(一對多的非線性關(guān)系)以及地圖著色處理(多對多的非線性關(guān)系),讓學(xué)生在分析過程中理解線性和非線性的邏輯關(guān)系。在此案例上,進一步分析“大規(guī)模的書,怎么存放?”給出三個方案:
方案1——隨便放,看書架哪里有空位就放哪;
方案2——按照之前的編好的號在書架上一本挨一本順序來放;
方案3——把書架劃分成幾塊區(qū)域,每塊區(qū)域指定擺放某種類別的圖書;在每種類別內(nèi),按照書名的拼音字母順序排放。
分析3 個方案的擺放后,查找一本《算法之美》的書,和新增了一批書,需要擺放上去操作的優(yōu)缺點。第一種方案可能造成查找效率極低!第二種方案造成插入新書很困難!第二種方案可能造成空間的浪費!通過3 個方案的對比,學(xué)生能深刻地理解解存儲數(shù)據(jù)的方式影響著對數(shù)據(jù)的處理和操作,順其自然地進入到存儲結(jié)構(gòu)的學(xué)習(xí)中。
設(shè)計學(xué)生活動:
活動1——學(xué)生分配座位的游戲,一種是按學(xué)號挨個坐,還一種是隨意坐,但是每個學(xué)生記住下一個學(xué)生坐哪里。對于查找一個學(xué)生和增加、刪除一個學(xué)生的操作,讓學(xué)生分析哪種座位分配方案更便捷。
活動2——例舉在生活中的例子,體現(xiàn)的是順序存儲和鏈式存儲;
設(shè)計意圖在于提高學(xué)生積極性,把抽象的理論對比模擬成真實的場景,加深學(xué)生理解兩種存儲結(jié)構(gòu)各有什么優(yōu)缺點。為之后的線性表在不同存儲結(jié)構(gòu)下基本操作的理解和代碼實現(xiàn)都打下了基礎(chǔ)。
在這一環(huán)節(jié)中,緊扣知識點,設(shè)計實踐案例,由教師引導(dǎo),學(xué)生為主體完成。
案例描述:某電信部門想開發(fā)一個查詢企業(yè)電話的程序,要求對于給出的一個企業(yè)名稱,若該企業(yè)已注冊,則找到其號碼,否則指出沒有注冊。
任務(wù)要求:考慮各企業(yè)的服務(wù)電話直接采用線性還是非線性的邏輯關(guān)系?采用順序還是鏈式存儲?寫出詳細的算法步驟,畫出流程圖,完成電話號碼查詢的編程。
學(xué)生完成案例的過程中,討論分析,給出具體求解步驟,方法不唯一,以下范例:
步驟1.首先構(gòu)造一張信息表。考慮表中每條記錄存放的數(shù)據(jù)項有哪些?
步驟2.將電話號碼表存儲到計算機中,可選擇二維數(shù)組來存儲;
步驟3.根據(jù)問題需求,確定查找算法,即根據(jù)名稱,顯示號碼;步驟4.確定存儲結(jié)構(gòu)及算法的實現(xiàn)方法,寫出代碼。
這樣的設(shè)計意圖在于培養(yǎng)學(xué)生將數(shù)據(jù)結(jié)構(gòu)作為一種思維工具解決處理現(xiàn)實問題的能力。
在這個一環(huán)中,設(shè)計對應(yīng)的案例,可以是討論型的,也可以是編程求解型的。
討論版塊:對中等規(guī)模、大規(guī)模的圖書擺放,你有什么更好的建議,可否結(jié)合不同的存儲方式來取長補短?
提出這個問題,實際上是想讓學(xué)生思考,在考慮大規(guī)模數(shù)據(jù)存儲的時候會遇到什么問題,以及如何根據(jù)功能(也就是關(guān)聯(lián)的算法,最常見的就是插入、查找、刪除)需要設(shè)計存儲方式。
課堂總結(jié)環(huán)節(jié)先由學(xué)生做小結(jié),這樣有利于提高學(xué)生的歸納總結(jié)能力,教師再總結(jié),提煉本次課的重難點,在學(xué)習(xí)過程中應(yīng)注意的地方。測評訓(xùn)練通過PTA(程序設(shè)計實驗輔助教學(xué)平臺)來針對不同的目標檢測學(xué)生的掌握程度,題目分為初級、中級和高級。有對應(yīng)的輸出樣例,能以得到的信息為準則作出判斷,完成學(xué)習(xí)評價。
設(shè)計課外綜合項目:項目1:曬一下PrintN 在你的機器上運行的結(jié)果?項目2:Maximum Subsequence Sum(2004 年浙江大學(xué)計算機專業(yè)考研復(fù)試真題)最大子列和問題,設(shè)計不同算法,分析效率。通過學(xué)生組隊方式,以“項目分析―項目設(shè)計―成果匯報―總結(jié)評價”模式為主線,小組依托教學(xué)資源,自行查閱資料,成員間互相幫助,教師參與小組研討,分析設(shè)計與實現(xiàn)方案。
《數(shù)據(jù)結(jié)構(gòu)與算法》是理論與實踐并重的計算機專業(yè)的核心課程,該課程知識體系難度較大,通過運用教學(xué)目標分類法來對課程內(nèi)容進行重構(gòu)和案例設(shè)計,基于任務(wù)驅(qū)動式的“線上線下混合”教學(xué)模式改革[3],更注重對能力的培養(yǎng)。從實踐來看,近幾年的課程大大改善以往的“難教和難學(xué)”的現(xiàn)象,學(xué)生懂了算法思想,碰到實際問題卻不知道如何著手編程的普遍現(xiàn)象得到了很大改善,PTA 平臺統(tǒng)計的學(xué)生刷題量和通過率每年也在提高。每次測試和考試都具備自動數(shù)據(jù)分析功能,作為檢驗教學(xué)的有效證明。