徐鋼強





摘要:本文以程序設計教學為研究陣地,針對程序設計教學中從數學思維到計算思維、現實問題與計算機結構化問題之間的“斷橋”現象,從問題界定、對象抽象、子問題分解、模式識別和建模自動化實現等方面,將計算思維過程可視化,將頭腦中模糊的、隨性的思維碎片,變成可見的、清晰的、系統的思維流程,讓學生通過可視化分析,親歷計算思維的整個過程,從而透析計算思維的內在實質,讓計算思維培養落到實處。
關鍵詞:計算思維;程序設計;可視化
中圖分類號:G434? 文獻標識碼:A? 論文編號:1674-2117(2022)06-0000-04
作為信息技術學科核心素養的重要組成部分,計算思維讓信息技術學科的思維培養有了明確的指向,廣大一線教師也在教學中紛紛滲透計算思維培養的意識。但不可否認,更多的計算思維培養還停留在教師理念和教學設計層面,真正讓學生親身演繹計算思維的過程還較缺乏。針對這種現狀,筆者從程序設計教學領域出發,嘗試通過將計算思維過程可視化,讓學生在可視化分析中去感受、演繹計算思維的過程,從而透析計算思維的內在實質,在潛移默化中實現計算思維的培養。
● 程序設計教學中的思維“斷橋”現象
1.現實問題與計算機結構化問題之間的“斷橋”
信息技術之所以能夠應用于現實,推動人類社會發展,是因為它能夠對現實問題進行計算機化的處理,也就是讓現實中的問題變得可計算。而這就需要對現實問題進行結構化分析,并抽象和建模。對學生而言,由于固有思維的影響,對現實問題描述的結構化分析和抽象建模是他們所面臨的一個短板。
2.從數學思維到計算思維之間的“斷橋”
計算機處理的很多問題其實都是數學問題,尤其是對于程序設計初學者而言,由于其數學思維的先入為主,因此看待問題很容易從數學層面去分析,用數學方法去解決,這就使得他們的思維停留在數學思維層面,而無法跨越到計算思維層面。例如,同樣是計算1+2+3+…+100的和,學生自然而然地會想到應用等差數列的方式求解,而且確實能夠直接通過公式利用計算機進行解決,并且從效率上來講,確實優于計算機利用循環累加的方式進行求和,但是這樣就限制了學生利用計算思維方式去看待問題,對于培養他們的計算思維,是存在一定缺陷的。
以上“斷橋”現象,歸根結底就是計算思維培養離真正落地還有距離。
● 從編程工具可視化到計算思維可視化
1.編程工具的可視化
作為編程語言,從純代碼的Basic、Pascal、C語言等,到基于所見即所得的Visual Basic、Visual C++,乃至積木式、圖形化的,編程工具的可視化極大地簡化了程序代碼的編寫難度,對程序設計的普及有著極大的促進作用,但從某種程度上來講,這只是一種形式上的簡化,并非思維層面的實質提升。
2.計算思維的可視化
計算思維的可視化并非只是簡單地呈現出來,其實質是讓學生從計算思維的視角去分析、解決問題。因為程序設計要求的思維程度較高,而初學者對問題進行分解抽象、再加工的能力有限,所以容易造成無從下手的局面,而讓頭腦中的思維過程通過某種形式表現出來,演繹整個思維過程,能讓初學者對對象、子問題、規律等有效把握,進而完成抽象加工和數學建模。
● 計算思維可視化在程序設計教學中的探索
1.問題界定可視化
程序設計就是在計算思維下解決某個實際問題的過程,但現實中的問題往往缺乏一定的結構性,而且在描述上會有很多其他干擾性因素,也可能會有一些隱含因素,導致學生對問題看不懂、看不全,其實質就是問題界定環節缺失。教師可通過對問題的結構化分析,明確需要解決什么、隱含條件或限制條件是什么,這對學生準確把握要解決的問題的實質非常重要。
例如,有問題描述如下:雙休日,陶陶打算幫爸爸做點事。爸爸對陶陶說:“倉庫中有一批長短不一的鋼管,需要切割成等長的小管,本著節約的原則不能有零頭浪費,同時因為切割也很麻煩,要讓切割的次數盡量少一些,你能不能幫我計算一下每根多長最合適。”陶陶犯難了,你能通過編程幫他解決這個問題嗎?
該問題通過情境化的描述,將問題的條件隱含在描述中,這就需要學生根據描述對問題進行界定,教師可引導學生進行結構化分析(如表1)。
通過問題界定的可視化,將問題的需求一一羅列,同時對每個需求進行相應分析,形成分析表,最后得出分析結論,這樣一方面有助于促進學生對問題描述的把握,另一方面也為學生分析思維過程提供了支架,降低了難度。
2.對象抽象可視化
利用計算機解決實際問題,從某種程度上來講,就是為了解決“誰做什么”的問題,這里的“誰”指的就是計算思維中的對象,“做什么”就是算法。從現實問題中的“誰”到程序設計中的數據結構,需要對對象進行抽象,而這個抽象過程,就是對對象進行結構化加工。對于程序設計的初學者而言,如何建立起具體事物到數據結構對象之間的抽象至關重要,這是利用計算思維解決實際問題的關鍵。
例如,問題“校門外的樹”,描述如下:某校大門外,長度為L的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1米。由于馬路上有一些區域要用來建地鐵,這些區域在數軸上用起始點和終止點表示。已知任一區域的起始點和終止點的坐標都是整數,區域之間可能有重合的部分。現在要把這些區域中的樹(包括區域端點處的兩棵樹)移走,你的任務是計算“將這些樹都移走后,馬路上還有多少棵樹”。
在表2中,通過將具體對象和抽象對象、具體狀態和抽象狀態結合分析,在可視化狀態下呈現出來,很容易完成從具體到抽象的過渡,從而建立起問題的數據結構,為后面的算法設計打下基礎。
3.規律抽象可視化
規律永遠是程序設計的重要內涵,而規律的背后,就是利用計算思維對現實問題的可計算加工,也就是發現“自動化”點,這個過程往往是最有難度的。規律抽象可視化通過兩個步驟來實現:一是發現規律;二是規律的抽象提煉,進而完成數學建模,實現計算思維的自動化表達。
例如,數組數據轉置問題,即將原數組n個單元首尾倒置存放。可視化過程如下圖所示。通過圖中的規律抽象可視化分析,其思維過程從具體到抽象完整地體現了出來,算法的設計就是臨門一腳的事情了。
4.模式識別可視化
當問題具有相同的特征時,它們的解決會變得更簡單,因為當存在共同模式時,可以用相同的方法解決此類問題,這就是模式識別。
當面對一個程序問題時,引導學生通過對問題的分析、分解,識別哪些特征是熟悉的,可以用什么數據結構來表示;哪些過程似曾相識,可以用之前學過的哪些方法來解決;哪些問題是目前尚無已有經驗可以解決的,它們就是學習新知或進行探索的重點。通過模式識別分析,一方面有助于學生敏銳地發現問題中的抽象特征,學會對已有經驗進行遷移應用,另一方面也有助于學生發現未知領域,觸發探究動力。
例如,求n個數在數軸上的最大間隙問題,其模式分析如表3所示。
5.優化處理可視化
優化處理實質上是對現有程序的迭代和再加工,是建立在對現有算法充分分析的基礎上進行的,是對原有算法的全面反芻。可優化就意味著現有算法存在著一定的冗余,發現冗余并提出相應的改進,是算法思維的進階和迭代。同時,這也對編程者提出了更高的要求,優化處理的可視化分析就是幫助編程者對原有算法進行全面復盤,進而發現可優化點。例如,素數判斷算法,如表4所示。
表4中的原始算法是根據素數定義進行模擬得到的。通過對比分析,提出優化設想,從而實現對原程序的優化,使得整個思維的反芻和迭代過程可視化,讓思維的每一次進階和迭代都有借力的支點。
總之,從問題界定、對象抽象,到子問題分解、模式識別,進而優化迭代,其思維過程的可視化就是讓學生真正融入到思維的演繹中去,讓學生成為思維過程的主宰者,而不是僅僅停留在師生交互的一問一答中。只有讓學生沉浸在計算思維的浪潮中,才能使其真正發現計算思維的深邃魅力,讓整個過程充滿挑戰與樂趣。
參考文獻:
[1]王榮良.基于思維視角的計算思維教育落實[J].中小學數字化教學,2020(01):20-23.
[2]費海明.計算歸簡,分合衍變——計算思維內涵探析與教學創意[J].中國信息技術教育,2020(20):85-88.