陳杰華
(四川大學(xué) 計(jì)算機(jī)學(xué)院,四川 成都 610065)
教育部2015 年11 月制定的《大學(xué)計(jì)算機(jī)基礎(chǔ)課程教學(xué)基本要求》中指出,計(jì)算思維是指“從具體的算法設(shè)計(jì)規(guī)范入手,通過(guò)算法過(guò)程的構(gòu)造與實(shí)施來(lái)解決給定問(wèn)題的一種思維方法。它以設(shè)計(jì)和構(gòu)造為特征,以計(jì)算機(jī)學(xué)科為代表。計(jì)算思維是運(yùn)用計(jì)算機(jī)科學(xué)的基礎(chǔ)概念去求解問(wèn)題、設(shè)計(jì)系統(tǒng)和理解人類行為的一系列思維活動(dòng)”。同時(shí),指出Python 程序設(shè)計(jì)課程的主要目標(biāo)是“學(xué)習(xí)問(wèn)題求解的思路和方法,并利用計(jì)算機(jī)編程[1]”。為此,應(yīng)選擇計(jì)算思維中的計(jì)算環(huán)境、自動(dòng)化、抽象、構(gòu)造、關(guān)注點(diǎn)分離、遞歸、迭代7 個(gè)核心概念,結(jié)合驗(yàn)證類實(shí)驗(yàn)、設(shè)計(jì)類實(shí)驗(yàn)和綜合類實(shí)驗(yàn)進(jìn)行實(shí)驗(yàn)設(shè)計(jì),以強(qiáng)化計(jì)算思維能力的訓(xùn)練。
在實(shí)驗(yàn)教學(xué)過(guò)程中,需要有機(jī)結(jié)合Python的編程技能培養(yǎng)和計(jì)算思維能力訓(xùn)練,使學(xué)生在掌握編程技能的同時(shí)逐步形成計(jì)算思維能力。具體指導(dǎo)思想包括:①精心設(shè)計(jì)實(shí)驗(yàn)題目使學(xué)生能夠運(yùn)用計(jì)算思維,即在一個(gè)實(shí)驗(yàn)題目中需要學(xué)生掌握哪些計(jì)算思維方法;②通過(guò)精心選擇的實(shí)驗(yàn)題目和方法訓(xùn)練計(jì)算思維;③在實(shí)驗(yàn)過(guò)程中,教師要引導(dǎo)學(xué)生利用計(jì)算思維方法進(jìn)行問(wèn)題抽象與定義、建立數(shù)學(xué)模型以及探索求解問(wèn)題的途徑。
程序設(shè)計(jì)實(shí)驗(yàn)可以分為三大類:驗(yàn)證類實(shí)驗(yàn)、設(shè)計(jì)類實(shí)驗(yàn)和綜合類實(shí)驗(yàn)[1],相應(yīng)計(jì)算思維的核心概念應(yīng)該分別進(jìn)行專門訓(xùn)練。根據(jù)Python語(yǔ)言的特點(diǎn)和計(jì)算思維的屬性,并將知識(shí)學(xué)習(xí)、能力形成、思維訓(xùn)練三者結(jié)合起來(lái),具體的實(shí)驗(yàn)設(shè)計(jì)見表1。
該類實(shí)驗(yàn)要求學(xué)生理解、驗(yàn)證、鞏固并掌握編程的基本知識(shí),能夠熟練運(yùn)用Python 3.7(或以上版本)環(huán)境調(diào)試程序。
計(jì)算思維中的“計(jì)算環(huán)境”指一個(gè)程序運(yùn)行需要的硬件支持和軟件實(shí)現(xiàn)[3],主要涉及數(shù)據(jù)描述、運(yùn)算機(jī)制、符碼體系、編程邏輯等。例如,數(shù)據(jù)部分包含數(shù)據(jù)類型、存儲(chǔ)字節(jié)數(shù)量、誤差處理、存儲(chǔ)表示方式及其精度、數(shù)值大小及其范圍等;運(yùn)算部分包含算術(shù)運(yùn)算(含整除、求余)、關(guān)系運(yùn)算、邏輯運(yùn)算、位運(yùn)算、賦值運(yùn)算、條件運(yùn)算、逗號(hào)運(yùn)算、特殊運(yùn)算(含集合、分式)等;合成符號(hào)部分包含關(guān)鍵字、標(biāo)識(shí)符、字面量、表達(dá)式等;順序程序部分包含字面量定義、變量聲明、輸入輸出的函數(shù)調(diào)用、源程序的結(jié)構(gòu)與編碼規(guī)范、賦值語(yǔ)句等;流程控制部分包括分支、循環(huán)、異常處理、函數(shù)調(diào)用等。
表1 實(shí)驗(yàn)設(shè)計(jì)及其計(jì)算思維訓(xùn)練點(diǎn)
計(jì)算思維中的“自動(dòng)化”體現(xiàn)在算法的機(jī)器實(shí)現(xiàn)是程序化、機(jī)械式、按步驟的自動(dòng)執(zhí)行,這是基于馮·諾伊曼機(jī)器的本質(zhì)特征,即存儲(chǔ)程序原理。當(dāng)然要實(shí)現(xiàn)自動(dòng)化操作,就需要進(jìn)行精確的算法描述(問(wèn)題求解)和嚴(yán)格的符號(hào)表示(編程)。
驗(yàn)證類實(shí)驗(yàn)選擇兩個(gè)題目:“求解一元二次方程”和“雞兔同籠”,涉及數(shù)據(jù)類型、運(yùn)算約束、自動(dòng)化執(zhí)行、操作時(shí)序等計(jì)算思維。教師要在實(shí)驗(yàn)前布置實(shí)驗(yàn)的題目、內(nèi)容和要求,督促學(xué)生提前做好實(shí)驗(yàn)準(zhǔn)備報(bào)告,主要內(nèi)容包括調(diào)試工具、求解算法的流程圖、程序清單、初始數(shù)據(jù)、操作步驟、軟硬件環(huán)境要求等。實(shí)際上,實(shí)驗(yàn)準(zhǔn)備的好壞直接關(guān)系到學(xué)生能否形成計(jì)算思維和程序調(diào)試能力。在實(shí)驗(yàn)過(guò)程中,教師要嚴(yán)格要求并督促學(xué)生,一絲不茍地實(shí)現(xiàn)Python 集成環(huán)境中的5 步操作:新建編輯窗口、輸入源程序、保存文件、執(zhí)行程序以及驗(yàn)證結(jié)果。實(shí)驗(yàn)完成后,教師應(yīng)要求學(xué)生寫出實(shí)驗(yàn)記錄,內(nèi)容包括源程序的機(jī)器翻譯過(guò)程、全部初始數(shù)據(jù)、運(yùn)行結(jié)果(截圖)、調(diào)試總結(jié)等,使學(xué)生深刻理解計(jì)算機(jī)的“計(jì)算環(huán)境”和運(yùn)行過(guò)程的“自動(dòng)化”。
該類實(shí)驗(yàn)要求學(xué)生通過(guò)自主學(xué)習(xí)或小組合作,掌握實(shí)驗(yàn)涉及的知識(shí)和編程方法,并正確應(yīng)用完成“課題”形式的實(shí)驗(yàn)題目。
計(jì)算思維中的“抽象”[4]體現(xiàn)在編程方面只能使用符號(hào)系統(tǒng)甚至形式化語(yǔ)言,例如程序由標(biāo)識(shí)符、數(shù)據(jù)類型、字面量、變量、表達(dá)式、列表名、函數(shù)名、語(yǔ)句、程序段等“符號(hào)”構(gòu)成,其中的“標(biāo)識(shí)符”只是抽象化的一個(gè)“符號(hào)”特例。很遺憾的是,盡管編程語(yǔ)言完全是機(jī)器指令的另一種符碼體系,并不具有像漢語(yǔ)那樣的“自然形成”屬性,這就使合理、正確、完備的抽象非常重要。與數(shù)學(xué)抽象相比,計(jì)算思維中的抽象體現(xiàn)在有限性、算法性、確定性、機(jī)械性、誤差性等方面。
計(jì)算思維中的“構(gòu)造”[5]指使用Python 程序構(gòu)造求解計(jì)算問(wèn)題的過(guò)程,進(jìn)而使任何計(jì)算問(wèn)題均可有多種求解途徑。例如,計(jì)算思維中的“關(guān)注點(diǎn)分離”[6]就是將一個(gè)復(fù)雜問(wèn)題分解成不同的關(guān)注點(diǎn)(簡(jiǎn)單問(wèn)題)并獲取各種求解途徑的。
可以通過(guò)計(jì)算問(wèn)題的多種求解途徑進(jìn)行計(jì)算思維訓(xùn)練。對(duì)同一個(gè)實(shí)驗(yàn)題目,由于學(xué)生認(rèn)知方式的差異必將導(dǎo)致多種求解途徑。教師應(yīng)該尊重學(xué)生的個(gè)體特征,鼓勵(lì)學(xué)生以不同的視角與方法來(lái)分析問(wèn)題,用多種算法實(shí)現(xiàn)問(wèn)題求解。例如,計(jì)算“斐波那契數(shù)列”可以分別用“循環(huán)結(jié)構(gòu)”“列表運(yùn)算”“遞歸函數(shù)”實(shí)現(xiàn)。
安排實(shí)驗(yàn)題目時(shí),要選擇具有構(gòu)造特征的題目,如“數(shù)組排序”,要求學(xué)生使用3 種(如選擇法、冒泡法、插入法、合并法等)以上方法實(shí)現(xiàn)。實(shí)驗(yàn)輔導(dǎo)時(shí),教師要督促學(xué)生盡量使用多種求解途徑。教師要確定算法評(píng)估標(biāo)準(zhǔn),讓學(xué)生按照正確性、可讀性、健壯性、復(fù)雜性的順序,從若干算法中選擇出最優(yōu)算法[7]。另外,還要鼓勵(lì)并提倡學(xué)生仔細(xì)分析別人的程序,進(jìn)行評(píng)價(jià)并改寫程序。
通過(guò)“關(guān)注點(diǎn)分離”原則進(jìn)行計(jì)算思維訓(xùn)練。在實(shí)驗(yàn)輔導(dǎo)時(shí),教師要督促學(xué)生將一個(gè)實(shí)驗(yàn)題目分解成若干個(gè)子(?。╊}目,然后再將每個(gè)子題目進(jìn)一步分解成一系列更小的子題目,直到由Python 語(yǔ)句實(shí)現(xiàn)為止。以使用列表“計(jì)算斐波那契數(shù)列”為例,對(duì)應(yīng)的關(guān)注點(diǎn)分離過(guò)程見表2。
表2 使用列表“計(jì)算斐波那契數(shù)列”的關(guān)注點(diǎn)分離過(guò)程
實(shí)驗(yàn)輔導(dǎo)時(shí),教師要督促學(xué)生盡量進(jìn)行多次的關(guān)注點(diǎn)分離,直到問(wèn)題得到求解途徑時(shí)為止。在多次分離過(guò)程中,讓學(xué)生體驗(yàn)像抽象、分解、重用、數(shù)據(jù)組織、冗余、容錯(cuò)、局部等計(jì)算思維概念。在學(xué)生不能獲得完全正確的求解途徑時(shí),教師應(yīng)該加以適當(dāng)指導(dǎo)。
該類實(shí)驗(yàn)重在培養(yǎng)學(xué)生提出問(wèn)題、分析問(wèn)題和解決問(wèn)題的綜合能力,學(xué)生可以自選題目。
計(jì)算思維中的“遞歸”指函數(shù)通過(guò)直接或間接調(diào)用自身,將一個(gè)大型復(fù)雜問(wèn)題轉(zhuǎn)化為一個(gè)與原問(wèn)題相似的小型簡(jiǎn)單問(wèn)題來(lái)進(jìn)行求解,從而提高編程效率,通常遞歸包含邊界條件、遞歸前進(jìn)和遞歸返回3 部分[8]。計(jì)算思維中的“迭代”通常通過(guò)重復(fù)計(jì)算來(lái)逼近所需的目標(biāo)或結(jié)果,每一次對(duì)計(jì)算的重復(fù)稱為一次“迭代”,而每一次迭代得到的結(jié)果會(huì)作為下一次迭代的初始值,最終逼近正確結(jié)果[9]。
遞歸實(shí)驗(yàn)選擇兩個(gè)題目:“數(shù)字串的逆序顯示”和“Hanoi 塔問(wèn)題”。在實(shí)驗(yàn)時(shí)要求學(xué)生進(jìn)行“冗余”編程,讓計(jì)算機(jī)呈現(xiàn)實(shí)現(xiàn)遞歸的過(guò)程,顯示全部中間結(jié)果,同時(shí)要求學(xué)生在實(shí)驗(yàn)報(bào)告中書寫出計(jì)算過(guò)程。讓學(xué)生從中體會(huì)到遞歸是如何通過(guò)多次調(diào)用選擇結(jié)構(gòu)的函數(shù)實(shí)現(xiàn)的,從而實(shí)現(xiàn)“分而治之”策略。
迭代實(shí)驗(yàn)選擇兩個(gè)題目:“牛頓迭代法”和“無(wú)窮級(jí)數(shù)求和”。在實(shí)驗(yàn)時(shí)要求學(xué)生進(jìn)行“冗余”編程,讓計(jì)算機(jī)呈現(xiàn)實(shí)現(xiàn)迭代的過(guò)程,顯示逐次(至少20 次)逼近最終結(jié)果的數(shù)據(jù)變化情況,同時(shí)要求學(xué)生在實(shí)驗(yàn)報(bào)告中記錄“迭代”過(guò)程。讓學(xué)生從中體會(huì)到迭代是如何收斂的、計(jì)算機(jī)是如何處理誤差的計(jì)算思維。
教師在對(duì)實(shí)驗(yàn)效果進(jìn)行考核時(shí),要將重點(diǎn)放到提高學(xué)生的計(jì)算思維與編程能力方面??己酥笜?biāo)包括9 部分:實(shí)驗(yàn)準(zhǔn)備、考勤、實(shí)驗(yàn)態(tài)度、熟練程度、調(diào)試能力、計(jì)算思維能力、完成情況、師生互動(dòng)、總結(jié)文檔等,每項(xiàng)指標(biāo)的權(quán)重值可由教師酌情處理。其中,指標(biāo)“計(jì)算思維能力”的權(quán)重值要超過(guò)0.3,主要內(nèi)容包括:①對(duì)上述核心概念的理解程度;②利用計(jì)算思維編程的能力;③利用計(jì)算思維調(diào)試程序的能力。指標(biāo)“總結(jié)文檔”的權(quán)重值要超過(guò)0.2,以便考核學(xué)生用文字表達(dá)計(jì)算思維的實(shí)現(xiàn)過(guò)程。
2006 年3 月周以真首次對(duì)計(jì)算思維進(jìn)行新穎、全面、明確的描述[10],提出計(jì)算思維是每一個(gè)人都必須具備的能力,如同閱讀、書寫、計(jì)算一樣。在眾多計(jì)算機(jī)課程中,無(wú)疑程序設(shè)計(jì)課程對(duì)訓(xùn)練計(jì)算思維是最佳的。更無(wú)疑的是,Python程序設(shè)計(jì)課程不只是學(xué)習(xí)編程,重要的是讓學(xué)生具有“像計(jì)算機(jī)科學(xué)家那樣思維”的能力以及在進(jìn)行問(wèn)題求解、系統(tǒng)設(shè)計(jì)、人類行為理解時(shí)能夠運(yùn)用計(jì)算思維。正如計(jì)算機(jī)無(wú)處不在,計(jì)算思維也是無(wú)處不在[11],如管理海量數(shù)據(jù)、構(gòu)建互聯(lián)網(wǎng)絡(luò)、模擬復(fù)雜系統(tǒng)、組織大型工程等。若學(xué)生具備計(jì)算思維能力,則必將從中體會(huì)到計(jì)算的愉悅和創(chuàng)造的滿足。