陳杰華
(四川大學(xué) 計算機(jī)學(xué)院,四川 成都 610065)
教育部2015 年11 月制定的《大學(xué)計算機(jī)基礎(chǔ)課程教學(xué)基本要求》中指出,計算思維是指“從具體的算法設(shè)計規(guī)范入手,通過算法過程的構(gòu)造與實施來解決給定問題的一種思維方法。它以設(shè)計和構(gòu)造為特征,以計算機(jī)學(xué)科為代表。計算思維是運用計算機(jī)科學(xué)的基礎(chǔ)概念去求解問題、設(shè)計系統(tǒng)和理解人類行為的一系列思維活動”。同時,指出Python 程序設(shè)計課程的主要目標(biāo)是“學(xué)習(xí)問題求解的思路和方法,并利用計算機(jī)編程[1]”。為此,應(yīng)選擇計算思維中的計算環(huán)境、自動化、抽象、構(gòu)造、關(guān)注點分離、遞歸、迭代7 個核心概念,結(jié)合驗證類實驗、設(shè)計類實驗和綜合類實驗進(jìn)行實驗設(shè)計,以強(qiáng)化計算思維能力的訓(xùn)練。
在實驗教學(xué)過程中,需要有機(jī)結(jié)合Python的編程技能培養(yǎng)和計算思維能力訓(xùn)練,使學(xué)生在掌握編程技能的同時逐步形成計算思維能力。具體指導(dǎo)思想包括:①精心設(shè)計實驗題目使學(xué)生能夠運用計算思維,即在一個實驗題目中需要學(xué)生掌握哪些計算思維方法;②通過精心選擇的實驗題目和方法訓(xùn)練計算思維;③在實驗過程中,教師要引導(dǎo)學(xué)生利用計算思維方法進(jìn)行問題抽象與定義、建立數(shù)學(xué)模型以及探索求解問題的途徑。
程序設(shè)計實驗可以分為三大類:驗證類實驗、設(shè)計類實驗和綜合類實驗[1],相應(yīng)計算思維的核心概念應(yīng)該分別進(jìn)行專門訓(xùn)練。根據(jù)Python語言的特點和計算思維的屬性,并將知識學(xué)習(xí)、能力形成、思維訓(xùn)練三者結(jié)合起來,具體的實驗設(shè)計見表1。
該類實驗要求學(xué)生理解、驗證、鞏固并掌握編程的基本知識,能夠熟練運用Python 3.7(或以上版本)環(huán)境調(diào)試程序。
計算思維中的“計算環(huán)境”指一個程序運行需要的硬件支持和軟件實現(xiàn)[3],主要涉及數(shù)據(jù)描述、運算機(jī)制、符碼體系、編程邏輯等。例如,數(shù)據(jù)部分包含數(shù)據(jù)類型、存儲字節(jié)數(shù)量、誤差處理、存儲表示方式及其精度、數(shù)值大小及其范圍等;運算部分包含算術(shù)運算(含整除、求余)、關(guān)系運算、邏輯運算、位運算、賦值運算、條件運算、逗號運算、特殊運算(含集合、分式)等;合成符號部分包含關(guān)鍵字、標(biāo)識符、字面量、表達(dá)式等;順序程序部分包含字面量定義、變量聲明、輸入輸出的函數(shù)調(diào)用、源程序的結(jié)構(gòu)與編碼規(guī)范、賦值語句等;流程控制部分包括分支、循環(huán)、異常處理、函數(shù)調(diào)用等。

表1 實驗設(shè)計及其計算思維訓(xùn)練點
計算思維中的“自動化”體現(xiàn)在算法的機(jī)器實現(xiàn)是程序化、機(jī)械式、按步驟的自動執(zhí)行,這是基于馮·諾伊曼機(jī)器的本質(zhì)特征,即存儲程序原理。當(dāng)然要實現(xiàn)自動化操作,就需要進(jìn)行精確的算法描述(問題求解)和嚴(yán)格的符號表示(編程)。
驗證類實驗選擇兩個題目:“求解一元二次方程”和“雞兔同籠”,涉及數(shù)據(jù)類型、運算約束、自動化執(zhí)行、操作時序等計算思維。教師要在實驗前布置實驗的題目、內(nèi)容和要求,督促學(xué)生提前做好實驗準(zhǔn)備報告,主要內(nèi)容包括調(diào)試工具、求解算法的流程圖、程序清單、初始數(shù)據(jù)、操作步驟、軟硬件環(huán)境要求等。實際上,實驗準(zhǔn)備的好壞直接關(guān)系到學(xué)生能否形成計算思維和程序調(diào)試能力。在實驗過程中,教師要嚴(yán)格要求并督促學(xué)生,一絲不茍地實現(xiàn)Python 集成環(huán)境中的5 步操作:新建編輯窗口、輸入源程序、保存文件、執(zhí)行程序以及驗證結(jié)果。實驗完成后,教師應(yīng)要求學(xué)生寫出實驗記錄,內(nèi)容包括源程序的機(jī)器翻譯過程、全部初始數(shù)據(jù)、運行結(jié)果(截圖)、調(diào)試總結(jié)等,使學(xué)生深刻理解計算機(jī)的“計算環(huán)境”和運行過程的“自動化”。
該類實驗要求學(xué)生通過自主學(xué)習(xí)或小組合作,掌握實驗涉及的知識和編程方法,并正確應(yīng)用完成“課題”形式的實驗題目。
計算思維中的“抽象”[4]體現(xiàn)在編程方面只能使用符號系統(tǒng)甚至形式化語言,例如程序由標(biāo)識符、數(shù)據(jù)類型、字面量、變量、表達(dá)式、列表名、函數(shù)名、語句、程序段等“符號”構(gòu)成,其中的“標(biāo)識符”只是抽象化的一個“符號”特例。很遺憾的是,盡管編程語言完全是機(jī)器指令的另一種符碼體系,并不具有像漢語那樣的“自然形成”屬性,這就使合理、正確、完備的抽象非常重要。與數(shù)學(xué)抽象相比,計算思維中的抽象體現(xiàn)在有限性、算法性、確定性、機(jī)械性、誤差性等方面。
計算思維中的“構(gòu)造”[5]指使用Python 程序構(gòu)造求解計算問題的過程,進(jìn)而使任何計算問題均可有多種求解途徑。例如,計算思維中的“關(guān)注點分離”[6]就是將一個復(fù)雜問題分解成不同的關(guān)注點(簡單問題)并獲取各種求解途徑的。
可以通過計算問題的多種求解途徑進(jìn)行計算思維訓(xùn)練。對同一個實驗題目,由于學(xué)生認(rèn)知方式的差異必將導(dǎo)致多種求解途徑。教師應(yīng)該尊重學(xué)生的個體特征,鼓勵學(xué)生以不同的視角與方法來分析問題,用多種算法實現(xiàn)問題求解。例如,計算“斐波那契數(shù)列”可以分別用“循環(huán)結(jié)構(gòu)”“列表運算”“遞歸函數(shù)”實現(xiàn)。
安排實驗題目時,要選擇具有構(gòu)造特征的題目,如“數(shù)組排序”,要求學(xué)生使用3 種(如選擇法、冒泡法、插入法、合并法等)以上方法實現(xiàn)。實驗輔導(dǎo)時,教師要督促學(xué)生盡量使用多種求解途徑。教師要確定算法評估標(biāo)準(zhǔn),讓學(xué)生按照正確性、可讀性、健壯性、復(fù)雜性的順序,從若干算法中選擇出最優(yōu)算法[7]。另外,還要鼓勵并提倡學(xué)生仔細(xì)分析別人的程序,進(jìn)行評價并改寫程序。
通過“關(guān)注點分離”原則進(jìn)行計算思維訓(xùn)練。在實驗輔導(dǎo)時,教師要督促學(xué)生將一個實驗題目分解成若干個子(小)題目,然后再將每個子題目進(jìn)一步分解成一系列更小的子題目,直到由Python 語句實現(xiàn)為止。以使用列表“計算斐波那契數(shù)列”為例,對應(yīng)的關(guān)注點分離過程見表2。

表2 使用列表“計算斐波那契數(shù)列”的關(guān)注點分離過程
實驗輔導(dǎo)時,教師要督促學(xué)生盡量進(jìn)行多次的關(guān)注點分離,直到問題得到求解途徑時為止。在多次分離過程中,讓學(xué)生體驗像抽象、分解、重用、數(shù)據(jù)組織、冗余、容錯、局部等計算思維概念。在學(xué)生不能獲得完全正確的求解途徑時,教師應(yīng)該加以適當(dāng)指導(dǎo)。
該類實驗重在培養(yǎng)學(xué)生提出問題、分析問題和解決問題的綜合能力,學(xué)生可以自選題目。
計算思維中的“遞歸”指函數(shù)通過直接或間接調(diào)用自身,將一個大型復(fù)雜問題轉(zhuǎn)化為一個與原問題相似的小型簡單問題來進(jìn)行求解,從而提高編程效率,通常遞歸包含邊界條件、遞歸前進(jìn)和遞歸返回3 部分[8]。計算思維中的“迭代”通常通過重復(fù)計算來逼近所需的目標(biāo)或結(jié)果,每一次對計算的重復(fù)稱為一次“迭代”,而每一次迭代得到的結(jié)果會作為下一次迭代的初始值,最終逼近正確結(jié)果[9]。
遞歸實驗選擇兩個題目:“數(shù)字串的逆序顯示”和“Hanoi 塔問題”。在實驗時要求學(xué)生進(jìn)行“冗余”編程,讓計算機(jī)呈現(xiàn)實現(xiàn)遞歸的過程,顯示全部中間結(jié)果,同時要求學(xué)生在實驗報告中書寫出計算過程。讓學(xué)生從中體會到遞歸是如何通過多次調(diào)用選擇結(jié)構(gòu)的函數(shù)實現(xiàn)的,從而實現(xiàn)“分而治之”策略。
迭代實驗選擇兩個題目:“牛頓迭代法”和“無窮級數(shù)求和”。在實驗時要求學(xué)生進(jìn)行“冗余”編程,讓計算機(jī)呈現(xiàn)實現(xiàn)迭代的過程,顯示逐次(至少20 次)逼近最終結(jié)果的數(shù)據(jù)變化情況,同時要求學(xué)生在實驗報告中記錄“迭代”過程。讓學(xué)生從中體會到迭代是如何收斂的、計算機(jī)是如何處理誤差的計算思維。
教師在對實驗效果進(jìn)行考核時,要將重點放到提高學(xué)生的計算思維與編程能力方面??己酥笜?biāo)包括9 部分:實驗準(zhǔn)備、考勤、實驗態(tài)度、熟練程度、調(diào)試能力、計算思維能力、完成情況、師生互動、總結(jié)文檔等,每項指標(biāo)的權(quán)重值可由教師酌情處理。其中,指標(biāo)“計算思維能力”的權(quán)重值要超過0.3,主要內(nèi)容包括:①對上述核心概念的理解程度;②利用計算思維編程的能力;③利用計算思維調(diào)試程序的能力。指標(biāo)“總結(jié)文檔”的權(quán)重值要超過0.2,以便考核學(xué)生用文字表達(dá)計算思維的實現(xiàn)過程。
2006 年3 月周以真首次對計算思維進(jìn)行新穎、全面、明確的描述[10],提出計算思維是每一個人都必須具備的能力,如同閱讀、書寫、計算一樣。在眾多計算機(jī)課程中,無疑程序設(shè)計課程對訓(xùn)練計算思維是最佳的。更無疑的是,Python程序設(shè)計課程不只是學(xué)習(xí)編程,重要的是讓學(xué)生具有“像計算機(jī)科學(xué)家那樣思維”的能力以及在進(jìn)行問題求解、系統(tǒng)設(shè)計、人類行為理解時能夠運用計算思維。正如計算機(jī)無處不在,計算思維也是無處不在[11],如管理海量數(shù)據(jù)、構(gòu)建互聯(lián)網(wǎng)絡(luò)、模擬復(fù)雜系統(tǒng)、組織大型工程等。若學(xué)生具備計算思維能力,則必將從中體會到計算的愉悅和創(chuàng)造的滿足。