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