郭維艷


摘要:本文以一道奧數推理題展開對培養計算思維的討論與研究,闡述了計算思維發生的基本過程、思維轉化的本質與實質,以及對計算思維各種能力的培養。
關鍵詞:計算思維;程序設計教學;高中
中圖分類號:G434? 文獻標識碼:A? 論文編號:1674-2117(2022)12-0056-03
● 由“包公斷案”開始的思考
筆者首先分析如下奧數題目:
國寶被盜,皇上命包拯一個時辰內斷案,現有四名嫌犯甲、乙、丙、丁,包公依次進行了審問。
甲說:我沒偷。
乙說:肯定是丙偷的。
丙說:我看到是丁偷的。
丁說:丙誣賴我。
經查證,罪犯為一人,四名嫌犯中僅一人說了假話,你能幫包公迅速斷案嗎?
這道題情境鮮活,正在學習算法與程序設計的高一學生開始了“假如甲是兇手,那么……”的推理,大家都在通過假設,找出矛盾,討論得非常熱烈。謎底最終揭曉,但過程還是有些曲折。當筆者再增加嫌犯數量或者兇手人數,以及證詞的復雜程度時,許多學生的推理就開始混亂了。此時,筆者請計算機幫忙解決問題。
● 邊解題邊看計算思維的發生
這道推理題尚不算復雜,牽涉四個人及四句證詞,兇手也只有一個。從計算機處理問題的角度來看,只要能將問題轉化為0或1,計算機就能夠順利解決。如何將這種非計算的問題轉化為一個數值,首先可以用關系運算來達到目的。
核心思想:依然是以假設為前提,找出口供邏輯上的矛盾。
具體算法:假設某嫌犯是真正的兇手,利用Python中關系表達式的布爾值可對應參與運算的整型值這一規則,將嫌犯的語言轉化為對應的關系表達式,再判斷說真話即表達式為真的個數是不是3,從而得出假設是否成立。最后通過枚舉,重復以上過程,找出真正的兇手。以上算法,對應了利用計算思維解決實際問題的各個步驟,如下頁圖1所示。
計算思維的核心在于將實際問題抽象為數學上的已知條件,再將其量化為計算機能夠理解并執行的表達式,通過問題中蘊含的關系,建立結構模型,從而設計出算法,并編程實現。
就本題而言,首先提煉出嫌犯數量與對應設置、說真話的人的數量等已知條件。然后將嫌犯供詞中的“是”與“不是”用關系運算符的“==”或“!=”來代替,將供詞量化為關系表達式,得到真假值。再通過說真話的人數這一已知條件建立結構模型,列出判斷條件。最后用Python中的循環遍歷結合條件判斷結構,編程解決問題。
具體算法可對照利用計算思維解決問題的各步驟(如下頁圖2)。
● 轉化思維——讓所有問題都變得“可計算”
計算思維是一種問題解決的過程性思維,它的發生可以以數學思維做基礎,但兩者又在建構模型、數據處理與表達方式上有所不同,二者相輔相成、優勢互補。找準實際生活與算法之間的聯系,是計算思維訓練的重點。許多問題來源于生活,如果將現實中的實際問題進行抽象,提煉出問題的“可計算”部分,利用數學的方法建構,從而轉化成計算機可處理的流程,那么接下來的程序實現,就只是時間問題了。這是一個轉化與創造的過程,教師需要培養學生分解、抽象、算法構建的能力,即將所有問題都變得“可計算”的計算思維的能力。
● 計算思維的本質與實質——抽象而后“可執行”
思維的本質是抽象,計算思維的抽象包括數量和模型,以及對象的抽象、數據關系的抽象、規則的抽象。
例如,圖書管理信息系統的開發,需要在充分分析需求的基礎上,利用計算思維,將一個千頭萬緒、功能繁多的系統進行各種類型的抽象,從而將大問題轉化為小問題,再分而治之,具體如下。
對象的抽象:①用戶,②圖書,③圖書的流動(事件);數據關系的抽象:①借書,②還書,③圖書館藏總庫與庫存現狀的關系;規則的抽象:①圖書銷毀的規則,②圖書借閱冊數上限的規則,③借閱人超出借閱時間歸還的處理規則,④書籍損壞丟失的處理規則。
經過上述抽象,可以找出幾個明確的實體和事件,再根據需求分析的結果,確定實體對象或事件對象的屬性,這樣一來,E-R圖這個概念模型就形成了,它可以清楚地描繪現實中圖書館管理的方方面面,再將E-R圖這個概念模型轉換為關系模型,從而完成數據庫的設計。這樣就有了數據庫的支撐,并與用戶界面做好連接,圖書管理信息系統的開發就只剩下編程實現了。
由此看來,抽象是計算思維最重要的要素之一,如何將現實中的問題抽象并量化,為建立模型做好準備,是利用計算機解決問題的關鍵。而計算思維的實質是將問題轉化為計算機可執行的方案,要讓機器執行人腦的算法思想,則必須與機器中人為預置的已抽象的協議或接口“打交道”。
● 不斷實踐是促進計算思維發生的“良方”
在實踐中鍛煉計算思維,不僅要啟發學生在解決問題時有意識地運用計算思維,還要著重培養其在實踐中運用計算思維解決問題的各種能力。
1.尋找規律的能力
尋找規律,其實就是歸納、概括現實問題的屬性和解決方法,然后對比計算機世界,用計算的方式將問題構造與重現。例如,“百雞百錢”這道經典的數學題,將公雞、母雞、小雞的數量設為X、Y、Z,再將各自的總價描述為3X、2Y、Z/3,這就是對現實世界中的屬性用計算機世界表征事件的方式進行了概括。將百雞化解為X+Y+Z=100,百錢化解為3X+2Y+Z/3=100,這也正是將現實世界中事物的發展規律和問題解決方法用機械計算的方式在計算機世界中進行構造與重現。
2.算法設計的能力
算法設計能力就是針對一個具體的、現實的、待解決的問題,建立一個有效的、確定的、可執行的、有限的操作步驟,讓計算機執行,并能給出結果。如果說百雞百錢之前的描述、概括、構造與重現與數學思維別無二致,那么用循環的思想實施遍歷枚舉,將數學上兩個方程無法求解三個未知數的常規解法用計算機能夠執行的成熟算法來代替,就是算法設計的能力,這也是構造能力在計算機學科中的具體表現。
3.程序編寫與糾錯的能力
算法是解決問題的方法,需要靠程序設計語言去實現,從而完成自動化解決問題的正確構造。這里的正確構造就是正確的程序代碼。學生從分析確定公雞、母雞、小雞的數量范圍,到通過初步枚舉發現需要循環嵌套,再到確定小雞數量不用枚舉,可以直接通過100-X-Y來確定,最后再利用選擇結構將“百錢”方程設為條件,讓計算機枚舉時進行判斷,一旦條件滿足百雞百錢,便可輸出結果。這正是操作步驟在人腦中的推演過程,因此得到可執行的程序代碼,加上程序輸出語句的補充,完善了人機對話的功能,提升程序人性化程度。
推演能力在程序設計與調試環節中的作用顯著,推演是利用計算思維解決實際問題過程中非常重要的一步,屬于思維到實現的“臨門一腳”,它依賴于學生對算法的理解程度以及某個程序設計語言運用的熟練程度。加強這兩方面的能力,可以幫助學生更快更好地將算法轉化為計算機能夠實際操作的代碼指令,從而實現從“紙上談兵”到“機器實戰”的演繹。
● 重視教師的“幫助度”
計算思維是眼下信息社會要求的基本能力,是作為數字公民的每個學生必須具備的信息技術核心素養。它依然算是新興思維,看似不易卻又可以習得。這就需要教師運用哲學的智慧,因生而變、調整預期、控制變量、貼生而行、適性發展,教學中不斷優化教學策略,看透讓計算機“可計算”的思維實質,找準計算思維培養的切入點,用有創意又接地氣的例子輔助實戰訓練,進而讓計算思維的培養更加有效,并讓學生將這種思維能力遷移到解決實際生活中的其他問題上。
參考文獻:
[1]王榮良.計算思維教育中的學生能力分析[J].中國信息技術教育,2020(09):49-52.
[2]許憬.問題解決中計算思維與數學思維的比較研究[J].中國信息技術教育,2020(10):52-55.
[3]徐福蔭.普通高中教科書信息技術教師用書·必修1:數據與計算[M].廣州:廣東教育出版社,2019.
[4]費海明.計算歸簡,分合衍變——計算思維內涵探析與教學創意[J].中國信息技術教育,2020(20):85-88.