郁庭
寧波市鎮海蛟川書院,浙江寧波315201
當今時代,能培養出信息化前沿技術人才的國家才能在走在世界前列,這些前沿技術、熱點領域包括區塊鏈、大數據、云計算、人工智能(無人駕駛技術)、5G、工業互聯網、物聯網,涉足這些領域離不開算法、數據庫、數據結構等程序設計課程基礎知識。因此程序設計課程的終極目標就是為了國家培養信息技術前沿領域的人才。
總體來說,程序設計課程在不同年齡段應有各自的側重點,小學階段只要打下基本語法基礎,著力培養興趣和習慣,初高中階段重在傳授數據結構、算法,鍛煉一定的代碼功底,大學階段注重應用能力,在開發軟件過程中培養綜合運用程序設計水平解決問題的能力。
由于知識水平和認知能力有限,程序設計課程不能過多的涉及算法,也不能出現過長的代碼編寫任務,程序語言上的選擇也最好不要選擇純結構化編程語言,要有面向對象的內容。
有了小學打下的編程基礎后,可以開始接觸數據結構、算法等知識,代碼量也可以適當增加,語言的選擇上可以是純代碼的C、C++、Python 等,尤其是信息學競賽,不用過多考慮孩子興趣,因為競賽編程本來就是存在自然淘汰,不是每個孩子都適合一直學,它需要足夠的理科思維,所以初中信競可以開始嘗試讓學生掌握遞歸、樹、圖論、動態規劃等算法知識。
有了之前打造的數據結構、算法基礎,就可以正式開啟計算機相關課程,主要包括《數據結構》、《操作系統》、《數據庫》等,這一階段的語言可以是java、C++,java 負責電腦端和移動端安卓系統,C++負責蘋果系統。
2.1.1 什么是計算思維
最早提出計算思維廣義概念的是美國卡內基·梅隆大學Jeannette M.Wing 教授,他表示:計算思維是運用計算機科學的基礎概念進行問題求解、系統設計以及人類行為理解等涵蓋計算機科學之廣度的一系列思維活動。
2.1.2 為什么說程序設計課程能培養人的計算思維
(1)提出一個問題
從上述定義可以看出計算思維其實就是用計算機的方法去考慮并解決問題,我們不妨來看這樣一道題目:有一個詞典包含N 個以h 開頭的單詞(ha hack had half hag hell help)請問hag這個單詞有沒有在詞典里出現過?
(2)人和計算機在解決該問題上的思維差異
人的思路當然是遍歷每一個單詞,看看在單詞表里有沒有要查找的hag,那計算機可以怎么做?它可以使用一種數據結構——“樹”,把所有的單詞按照它們的字母前綴構建成這樣一棵樹,上述例題的解決過程,其實就是學生學會使用計算機方法去對問題進行分解,模式識別、抽象、產生算法,最終解決問題的過程,當然計算思維的形成需要做題量的積累,老師要精選一些有代表性的題目,做好引導者的角色,盡可能縮短學生的成長期。
2.2.1 從賦值語句看學習程序設計的思維轉換
在數學中,x=y 和y=x 是等價的兩個等式,而在程序設計課程中,這兩個式子具有不同的含義,其中的“=”叫做賦值號,x=y 的意義就相應的變為把y 的值賦值給x,y=x 的意義就是把x的值賦值給y,在數學中“=”是沒有方向的,而在程序設計中“=”(賦值號)是有方向,它的過程總是把“=”右邊的值賦值給“=”左邊的變量。
再比如x=x+1,這個式子在數學中是毫無意義的,因為無論x 是多少,左右都不可能相等,然而在程序設計課程中,這個式子不但有意義,而且是程序設計中出場率極高的式子,它每執行一次,x 這個值就會增加1,以此來改變我們的運算結果,我們把這種x 變量叫做累加器。
2.1.2 計算機的速度優勢讓窮舉方法變得可行
(1)看一道題
我們先來看這樣一道題:警察抓了A、B、C、D 四名罪犯,其中一名是小偷,審訊的時候,A 說:“我不是小偷”,B 說:“C 是小偷”,C 說:“小偷肯定是D”,D 說:“C 是冤枉人”,現在已經知道四個人三個人說真話,一個人說假話,請你判斷下誰是小偷?
用計算機方法解決此題可以這樣轉化:首先對A、B、C、D四個人分別用1~4 四個數字進行編號,接著將四個人的描述結果用數字量化,如果描述是真,則結果是1,如果是假,則結果是0。我們假設小偷的編號是X,對于四個人的描述,數字化的結果如下表。

A 說:“我不是小偷”X!=1 B 說:“C 是小偷”X=3 C 說:“小偷肯定是D”X=4 D 說:“C 是冤枉人”X!=4
通過這樣的轉化,我們就可以窮舉X 的值(誰是小偷),再來驗證說真話、謊話的數量是否和題目條件一致就能成功解決此題,而不需要邏輯推理。
例題精選,培養計算思維,培養學生模塊化程序設計的習慣,要系統性地精選題目,要貼近學生,難度要遞進,同時也要有代表性,能夠準備地傳遞知識,例如在講解搜索算法時,下述例題就特別合適。
給你一個H 行W 列的泡泡,發射進去一個指定位置的泡泡,如果周圍連著有三個(算上自己),則連著的一起爆炸,如果剩下的沒連著頂行也會掉下來,問最終有多少個掉下來?這道題的價值主要在于泡泡相鄰要看成六相鄰,從而把題目建模成適合計算機解決的類型。
再比如填數獨題,人的解法往往是觀察法居多,比如第二行第三列的這個3 是直接可以觀察出來的,但計算機解決此問題用候選數法建模更合適。
系統性講授是線下更好,因為師生互動更好,但特殊時期上課也可以轉到線上進行,訓練則更自由,可以完全放在線上進行,但要拓寬題源。
綜上所述,我們要關注熱點領域、意識到當今時代信息化前沿技術人才需要的迫切性,努力開發程序設計課程,嚴謹治學,線下互動教學與線上訓練結合開展,營造理想的教學氛圍,使得程序設計課程能夠提升學生的學習力、培養學生的計算思維和綜合應用能力、拓寬學生的思維方式,拔高學生的創新能力,為國家培養更多的技術人才,從而提升國際競爭力。