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