郁庭
寧波市鎮(zhèn)海蛟川書院,浙江寧波315201
當今時代,能培養(yǎng)出信息化前沿技術(shù)人才的國家才能在走在世界前列,這些前沿技術(shù)、熱點領(lǐng)域包括區(qū)塊鏈、大數(shù)據(jù)、云計算、人工智能(無人駕駛技術(shù))、5G、工業(yè)互聯(lián)網(wǎng)、物聯(lián)網(wǎng),涉足這些領(lǐng)域離不開算法、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)等程序設(shè)計課程基礎(chǔ)知識。因此程序設(shè)計課程的終極目標就是為了國家培養(yǎng)信息技術(shù)前沿領(lǐng)域的人才。
總體來說,程序設(shè)計課程在不同年齡段應(yīng)有各自的側(cè)重點,小學(xué)階段只要打下基本語法基礎(chǔ),著力培養(yǎng)興趣和習(xí)慣,初高中階段重在傳授數(shù)據(jù)結(jié)構(gòu)、算法,鍛煉一定的代碼功底,大學(xué)階段注重應(yīng)用能力,在開發(fā)軟件過程中培養(yǎng)綜合運用程序設(shè)計水平解決問題的能力。
由于知識水平和認知能力有限,程序設(shè)計課程不能過多的涉及算法,也不能出現(xiàn)過長的代碼編寫任務(wù),程序語言上的選擇也最好不要選擇純結(jié)構(gòu)化編程語言,要有面向?qū)ο蟮膬?nèi)容。
有了小學(xué)打下的編程基礎(chǔ)后,可以開始接觸數(shù)據(jù)結(jié)構(gòu)、算法等知識,代碼量也可以適當增加,語言的選擇上可以是純代碼的C、C++、Python 等,尤其是信息學(xué)競賽,不用過多考慮孩子興趣,因為競賽編程本來就是存在自然淘汰,不是每個孩子都適合一直學(xué),它需要足夠的理科思維,所以初中信競可以開始嘗試讓學(xué)生掌握遞歸、樹、圖論、動態(tài)規(guī)劃等算法知識。
有了之前打造的數(shù)據(jù)結(jié)構(gòu)、算法基礎(chǔ),就可以正式開啟計算機相關(guān)課程,主要包括《數(shù)據(jù)結(jié)構(gòu)》、《操作系統(tǒng)》、《數(shù)據(jù)庫》等,這一階段的語言可以是java、C++,java 負責電腦端和移動端安卓系統(tǒng),C++負責蘋果系統(tǒng)。
2.1.1 什么是計算思維
最早提出計算思維廣義概念的是美國卡內(nèi)基·梅隆大學(xué)Jeannette M.Wing 教授,他表示:計算思維是運用計算機科學(xué)的基礎(chǔ)概念進行問題求解、系統(tǒng)設(shè)計以及人類行為理解等涵蓋計算機科學(xué)之廣度的一系列思維活動。
2.1.2 為什么說程序設(shè)計課程能培養(yǎng)人的計算思維
(1)提出一個問題
從上述定義可以看出計算思維其實就是用計算機的方法去考慮并解決問題,我們不妨來看這樣一道題目:有一個詞典包含N 個以h 開頭的單詞(ha hack had half hag hell help)請問hag這個單詞有沒有在詞典里出現(xiàn)過?
(2)人和計算機在解決該問題上的思維差異
人的思路當然是遍歷每一個單詞,看看在單詞表里有沒有要查找的hag,那計算機可以怎么做?它可以使用一種數(shù)據(jù)結(jié)構(gòu)——“樹”,把所有的單詞按照它們的字母前綴構(gòu)建成這樣一棵樹,上述例題的解決過程,其實就是學(xué)生學(xué)會使用計算機方法去對問題進行分解,模式識別、抽象、產(chǎn)生算法,最終解決問題的過程,當然計算思維的形成需要做題量的積累,老師要精選一些有代表性的題目,做好引導(dǎo)者的角色,盡可能縮短學(xué)生的成長期。
2.2.1 從賦值語句看學(xué)習(xí)程序設(shè)計的思維轉(zhuǎn)換
在數(shù)學(xué)中,x=y 和y=x 是等價的兩個等式,而在程序設(shè)計課程中,這兩個式子具有不同的含義,其中的“=”叫做賦值號,x=y 的意義就相應(yīng)的變?yōu)榘褃 的值賦值給x,y=x 的意義就是把x的值賦值給y,在數(shù)學(xué)中“=”是沒有方向的,而在程序設(shè)計中“=”(賦值號)是有方向,它的過程總是把“=”右邊的值賦值給“=”左邊的變量。
再比如x=x+1,這個式子在數(shù)學(xué)中是毫無意義的,因為無論x 是多少,左右都不可能相等,然而在程序設(shè)計課程中,這個式子不但有意義,而且是程序設(shè)計中出場率極高的式子,它每執(zhí)行一次,x 這個值就會增加1,以此來改變我們的運算結(jié)果,我們把這種x 變量叫做累加器。
2.1.2 計算機的速度優(yōu)勢讓窮舉方法變得可行
(1)看一道題
我們先來看這樣一道題:警察抓了A、B、C、D 四名罪犯,其中一名是小偷,審訊的時候,A 說:“我不是小偷”,B 說:“C 是小偷”,C 說:“小偷肯定是D”,D 說:“C 是冤枉人”,現(xiàn)在已經(jīng)知道四個人三個人說真話,一個人說假話,請你判斷下誰是小偷?
用計算機方法解決此題可以這樣轉(zhuǎn)化:首先對A、B、C、D四個人分別用1~4 四個數(shù)字進行編號,接著將四個人的描述結(jié)果用數(shù)字量化,如果描述是真,則結(jié)果是1,如果是假,則結(jié)果是0。我們假設(shè)小偷的編號是X,對于四個人的描述,數(shù)字化的結(jié)果如下表。
A 說:“我不是小偷”X!=1 B 說:“C 是小偷”X=3 C 說:“小偷肯定是D”X=4 D 說:“C 是冤枉人”X!=4
通過這樣的轉(zhuǎn)化,我們就可以窮舉X 的值(誰是小偷),再來驗證說真話、謊話的數(shù)量是否和題目條件一致就能成功解決此題,而不需要邏輯推理。
例題精選,培養(yǎng)計算思維,培養(yǎng)學(xué)生模塊化程序設(shè)計的習(xí)慣,要系統(tǒng)性地精選題目,要貼近學(xué)生,難度要遞進,同時也要有代表性,能夠準備地傳遞知識,例如在講解搜索算法時,下述例題就特別合適。
給你一個H 行W 列的泡泡,發(fā)射進去一個指定位置的泡泡,如果周圍連著有三個(算上自己),則連著的一起爆炸,如果剩下的沒連著頂行也會掉下來,問最終有多少個掉下來?這道題的價值主要在于泡泡相鄰要看成六相鄰,從而把題目建模成適合計算機解決的類型。
再比如填數(shù)獨題,人的解法往往是觀察法居多,比如第二行第三列的這個3 是直接可以觀察出來的,但計算機解決此問題用候選數(shù)法建模更合適。
系統(tǒng)性講授是線下更好,因為師生互動更好,但特殊時期上課也可以轉(zhuǎn)到線上進行,訓(xùn)練則更自由,可以完全放在線上進行,但要拓寬題源。
綜上所述,我們要關(guān)注熱點領(lǐng)域、意識到當今時代信息化前沿技術(shù)人才需要的迫切性,努力開發(fā)程序設(shè)計課程,嚴謹治學(xué),線下互動教學(xué)與線上訓(xùn)練結(jié)合開展,營造理想的教學(xué)氛圍,使得程序設(shè)計課程能夠提升學(xué)生的學(xué)習(xí)力、培養(yǎng)學(xué)生的計算思維和綜合應(yīng)用能力、拓寬學(xué)生的思維方式,拔高學(xué)生的創(chuàng)新能力,為國家培養(yǎng)更多的技術(shù)人才,從而提升國際競爭力。