浙江省杭州市清泰實(shí)驗(yàn)學(xué)校 陳 曉
算法思想是指按照一定的步驟去解決某個(gè)問題的程序化思想,即解決問題的一般方法,如界定問題、抽象特征、建立模型、判斷分析、設(shè)計(jì)問題的解決方案。具備算法思想的學(xué)生能從復(fù)雜混亂的現(xiàn)象中跳脫出來,對過程與方法進(jìn)行總結(jié),并進(jìn)行遷移。因此,激發(fā)學(xué)生對算法思想建構(gòu)的興趣和意識,對他們后續(xù)發(fā)展有著重要的意義。
STEM 學(xué)習(xí)強(qiáng)調(diào)融合多學(xué)科知識去解決真實(shí)的問題。筆者在實(shí)踐中引入虛擬機(jī)器人(以IRobotQ為例)和Scratch 這兩塊具有趣味性、跨學(xué)科性、協(xié)作性等STEM理念的內(nèi)容,再結(jié)合浙教版教材的程序設(shè)計(jì)模塊,總結(jié)出了“鼓勵(lì)直覺思考,呵護(hù)算法思想的火花;挖掘教材思想,建構(gòu)解決問題的基本步驟;引導(dǎo)遷移學(xué)習(xí),習(xí)得算法思想的利器”這三個(gè)層次來幫助學(xué)生構(gòu)建算法思想,提升他們解決問題的能力。
直覺思考能快速產(chǎn)生靈感,主要依靠想象、猜測和洞察力等因素。諾貝爾獎獲得者馬克斯·玻恩曾說:“實(shí)驗(yàn)物理的全部偉大發(fā)現(xiàn),都是來源于一些人的直覺?!币虼?,直覺思考得到的方法和思路往往是有效的甚至是最佳的,也是具有創(chuàng)造性的。一般來說,知識經(jīng)驗(yàn)越豐富,直覺洞察力和判斷力就越強(qiáng)。因此,直覺思維是可以進(jìn)行訓(xùn)練和培養(yǎng)的。
1.提煉算法思想。教師提供隱含算法思想的項(xiàng)目,請學(xué)生以自然語言的形式直覺概括解決問題的思路。如虛擬機(jī)器人教學(xué)中,不同任務(wù)中都會包含行進(jìn)任務(wù),如走軌跡、高架、城市道路、迷宮、盤山公路等不同路況。
2.誘導(dǎo)算法思想。直覺的生成需要相關(guān)知識的積累和特定情境的激發(fā)。筆者通過提問、矛盾或失敗結(jié)果呈現(xiàn)等方法把學(xué)生表面、感性的“直覺”推向深入、理性和完善。如《神秘迷宮》項(xiàng)目,請學(xué)生把自己設(shè)想成機(jī)器人,閉眼沉浸在場景中思考走出迷宮的辦法。通過追問“迷宮深處四周可能都有墻,辨不清方向怎么辦?”他們恍然大悟:“始終沿墻走!”在“跟著感覺走”的過程中,他們的直覺思維得到了充分展現(xiàn),在教師的誘導(dǎo)下得到了推進(jìn)。這種模擬真實(shí)情景下的問題往往是未經(jīng)洗凈熨平的原生態(tài)問題,解決思路也是開放多樣的,因此呵護(hù)、扶持他們直覺思考的積極性至關(guān)重要。
3.拓展算法思想。將不同任務(wù)離散再重組,提取隱含共同算法思想的子項(xiàng)進(jìn)行拓展練習(xí),既可鞏固強(qiáng)化,也能激發(fā)學(xué)生新的思考,不斷擴(kuò)建他們原有的知識網(wǎng)絡(luò)。如“巡跡踢球”學(xué)會了走黑色軌跡后,嘗試應(yīng)用到“跑道競速”和“汽車總動員”項(xiàng)目,三個(gè)任務(wù)中因軌跡線、邊界線和傳感器相對位置不同,或邊界線有連續(xù)性的差異,“始終走在路中間”這個(gè)基本的算法思想雖然可借鑒,但還不足以解決后兩者的問題,這時(shí)教師要適時(shí)介入引導(dǎo)學(xué)生重新審視,幫助他們搭建思維的“橋梁”,逐步開辟新思路。
浙教版《信息技術(shù)》對計(jì)算機(jī)解決問題的一般過程作了闡述,在課例安排時(shí)按任務(wù)分析、設(shè)計(jì)界面、編寫代碼、調(diào)試運(yùn)行四步驟進(jìn)行編排。教學(xué)時(shí),注重教學(xué)內(nèi)容這條明線的同時(shí),鼓勵(lì)學(xué)生去發(fā)現(xiàn)、模仿、實(shí)踐教材安排所體現(xiàn)的思想方法暗線,幫助學(xué)生習(xí)得解決問題的基本方法與步驟。
1.問題分析。通讀審視問題,聚焦關(guān)鍵詞或特征,忽略無關(guān)信息,暫時(shí)隱藏細(xì)節(jié),把問題簡單化、清晰化。
2.項(xiàng)目分解。將大項(xiàng)目分解成已有經(jīng)驗(yàn)可解決的單個(gè)小項(xiàng)目,逐步細(xì)化、模塊化,為結(jié)構(gòu)化編程思想打下基礎(chǔ)。
3.算法設(shè)計(jì)。結(jié)合算法的基本要素進(jìn)行設(shè)計(jì):(1)數(shù)據(jù)對象的運(yùn)算和操作;(2)算法的控制結(jié)構(gòu);(3)匹配教材中涉及的算法。編程涉及要素(1)時(shí),關(guān)注運(yùn)算符選取、格式書寫、邊界條件及取值范圍等內(nèi)容,減少語法錯(cuò)誤及嚴(yán)謹(jǐn)性問題;涉及要素(2)時(shí),建議先畫流程圖,重點(diǎn)分析分支結(jié)構(gòu)的判斷條件或循環(huán)結(jié)構(gòu)的循環(huán)變量、循環(huán)條件,再選擇合適的結(jié)構(gòu);涉及要素(3)時(shí),根據(jù)不同算法的特點(diǎn)和已有條件,逐個(gè)匹配和排除。教師提供如下表1,幫助學(xué)生搭建解決問題的思考支架。
案例一:求兩個(gè)數(shù)的最小公倍數(shù)。學(xué)生直覺思考后,易得出方法a:根據(jù)數(shù)學(xué)思路,最小公倍數(shù)肯定能被兩個(gè)數(shù)都整除,因此,從1開始每次循環(huán)增加1,往大找最小公倍數(shù)。
4.優(yōu)化改進(jìn)。進(jìn)行頭腦風(fēng)暴,集思廣益,在原有基礎(chǔ)上進(jìn)行算法迭代,獲得思維進(jìn)階。上述案例改進(jìn)方法如下:方法b:最小公倍數(shù)肯定大于等于兩個(gè)數(shù)中的最大值,從最大值開始每次循環(huán)增加1,往上找最小公倍數(shù),減少了循環(huán)次數(shù),節(jié)約了執(zhí)行時(shí)間。方法c:最小公倍數(shù)肯定大于等于兩個(gè)數(shù)中的最大值,并且一定是最大值的整數(shù)倍。因此,從最大值開始,每次循環(huán)按最大值的倍數(shù)增加,循環(huán)次數(shù)更少,時(shí)間更省,算法更優(yōu)。
簡析:在教師引導(dǎo)下采用了問題分析、項(xiàng)目分解、算法設(shè)計(jì)、改進(jìn)優(yōu)化的四步操作法,深入探討了最小公倍數(shù)的問題,給學(xué)生示范了解決問題的一般方法和步驟。分析問題時(shí),我們應(yīng)聚焦關(guān)鍵詞,明確求解的問題。項(xiàng)目分解時(shí),厘清公倍數(shù)的概念以及它們所隱含的條件,再把問題細(xì)化為:(1)如何驗(yàn)證n是a和b兩數(shù)的倍數(shù);(2)如何確定求得的n是所有公倍數(shù)中的最小的。算法設(shè)計(jì)時(shí),應(yīng)鼓勵(lì)學(xué)生用自然語言描述解決方案。自然語言是日常語言,使用熟練,排除了對編程語言不熟悉引起的干擾而回歸到解決問題本身,通過填寫表格來明確算法的基本要素,為后續(xù)編寫代碼做好鋪墊。
遷移學(xué)習(xí)是指用某個(gè)問題中獲取的知識和經(jīng)驗(yàn)去解決另一個(gè)不同但相關(guān)的問題,有歸納、類比、演繹等不同方法。筆者在教學(xué)中發(fā)現(xiàn),用類比法來比較源問題與目標(biāo)問題的異同,分析兩者的結(jié)構(gòu)框架和相關(guān)特征,會因易于掌握而被學(xué)生接受。
表1“求兩個(gè)數(shù)的最小公倍數(shù)”算法設(shè)計(jì)
1.結(jié)構(gòu)相似遷移。面臨新問題時(shí),引導(dǎo)學(xué)生分析源和目標(biāo)問題之間的結(jié)構(gòu)異同,建立新舊問題之間的關(guān)聯(lián),從而利用已知去解決未知。教材課后的習(xí)題,基本都是本課內(nèi)容的鞏固性和拓展型練習(xí),在結(jié)構(gòu)上和例題有相似之處。使用這些練習(xí)時(shí),教師可指導(dǎo)學(xué)生把練習(xí)和例題結(jié)合起來分析它們的相似性,從結(jié)構(gòu)上進(jìn)行類比遷移。
2.特征相似遷移。特征是指問題外表或形式上獨(dú)特的標(biāo)識,比結(jié)構(gòu)更易被發(fā)現(xiàn),因此,學(xué)生更樂于利用特征相似性進(jìn)行遷移學(xué)習(xí)。如“跑道競速”和“金字塔漫游”路面情況基本相同,都有兩條連續(xù)邊界線,只是路面顏色不同,因此,面臨“金字塔漫游”時(shí),腦海中馬上會浮現(xiàn)已有的經(jīng)驗(yàn),傳感器的選擇和安裝位置等方案的遷移也就水到渠成了。
經(jīng)過教學(xué)實(shí)踐,筆者所帶學(xué)生在近三年的省、市、區(qū)各級的機(jī)器人、Scratch 編程比賽中有20 多人次獲獎,可見教師有意識地引導(dǎo)學(xué)生構(gòu)建算法思想,對提升他們解決問題的能力有較明顯的效果。