陸平
我們在“編程”的旅途中,時常有茫然失措、忘了初心的感覺。為什么要踏上編程之旅?為什么要帶孩子們一起編程?有個聲音不早不晚地出現(xiàn):因為通過編程,可以讓孩子們擁有與讀、寫、算同等重要的認知能力——計算思維!
是的,計算思維是我們俯下身子和計算機對話的入口,也是編程學習漫漫歷程中對編程學科本質的一種洞見。
計算思維的提出,最早可回溯到美國麻省理工學院(MIT)的西蒙·帕佩特(Seymour Papert)教授。美國卡內基梅隆大學的周以真教授則對其進行了系統(tǒng)闡述和推廣。周以真教授認為,計算思維代表著一種普遍的認識和一類普適的技能,每一個人,都應熱心于它的學習和運用。而習得計算思維,則能讓我們“像計算機科學家一樣思考”。對于計算思維,她是這樣定義的:“計算思維涉及運用計算機科學的基礎概念去求解問題、設計系統(tǒng)和理解人類的行為。計算思維涵蓋了反映計算機科學之廣泛性的一系列思維活動?!边M一步地,她做了如下闡釋:“計算思維就是把一個看起來困難的問題重新闡述成一個我們知道怎樣解決的問題,如通過約簡、嵌入、轉化和仿真的方法”“計算思維是一種遞推思維,它把代碼譯成數(shù)據(jù),又把數(shù)據(jù)譯成代碼”“計算思維采用抽象和分解迎戰(zhàn)浩大復雜的任務或設計復雜的系統(tǒng)”“計算思維的本質是抽象和自動化”。哈爾濱工業(yè)大學戰(zhàn)德臣等人則用“計算之樹”給出了計算思維多維度表述框架,認為“0和1”“程序”“遞歸”三大思維最為重要。
計算思維的概念眾說紛紜,即便如此,依然讓編程教育發(fā)現(xiàn)了自己的價值追求和行走路徑。
編程,一棵鍵盤里長出的計算之樹
2016年4月,我為高一學生上了一節(jié)題為《算法的質疑與拓展》的程序設計研究課。沒有教材,沒有語言的限制。教什么?幾經思考,我選擇計算機奇偶校驗模擬軟件設計與制作來詮釋算法,以滲透計算思維訓練,并在算法的質疑與拓展中豐富學生對算法的理解和技術哲學的思考。
【開局】
2016年3月9日,“人狗大戰(zhàn)”迎來首輪戰(zhàn)局。經過三個多小時鏖戰(zhàn),九段李世石向“阿爾法狗”(AlphaGo)投子認輸。問題:1.李世石究竟輸給了誰?2.算法究竟是什么?3.計算機是如何工作的?
課的設計圍繞“算法是什么、計算機是如何工作的”的設問與如何培養(yǎng)計算思維兩條線索展開。
【算法分析】
借助“小魔術”,揭秘計算機檢測錯誤的方法:奇偶校驗法。繼而尋找解決問題的方法和步驟。
玩法:出示25張整齊排列的牌,一面黑色,一面白色。第一步:請一位學生任意翻動牌。第二步:老師說“為了增加難度”,再增加一行和一列(實質為奇偶校驗行和列)。增加后,共36張牌。第三步:老師轉身蒙眼,學生任意翻動其中一張牌。第四步:老師準確找出被翻動的那張牌。
魔術中增加的一行一列,和計算機中奇偶校驗位的作用相似,是為了將行列“黑色”紙牌數(shù)量偶數(shù)化。這樣,一旦某張牌被翻動,便能迅速找出黑牌非偶數(shù)的行列交接點,即被翻動的紙牌位置。
通過揭秘魔術,讓學生了解了計算機奇偶校驗的基本原理,為用奇偶校驗法模擬軟件進行數(shù)學建模和算法描述做好鋪墊。
【數(shù)學建?!?/p>
計算機本質是以“0”和“1”為基礎來表示現(xiàn)實世界的信息的?!?”和“1”是計算機軟硬件聯(lián)系的紐帶。用“0”和“1”分別表示黑色牌和白色牌,可以為算法描述鋪路搭橋。
【算法描述】
教師引導學生輕松用N-S工具描述算法,一行一行枚舉,再一列一列枚舉,尋找黑色紙牌為奇數(shù)的行和列。二維矩陣中黑色紙牌為奇數(shù)的行列相交點便是要糾錯的數(shù)據(jù)。其實循環(huán)體部分包含了迭代算法。這也是一種重要的計算思維。
【算法實現(xiàn)】
算法實現(xiàn)(即編程)環(huán)節(jié),僅僅設置了一個代碼查錯和一行代碼填空,弱化了代碼編寫,旨在引導學生既親歷程序設計的完整過程,又突出本課的重點,引導學生深度思考算法及其工作流程。圍繞奇偶檢驗軟件的研發(fā),學生分析問題、數(shù)學建模、算法描述、編寫代碼、調試程序、修改程序、運行程序,親歷完整的思維過程。這些豐富的體驗,為最后環(huán)節(jié)做了充分的準備。
【質疑與拓展】
從最初困擾第一代計算機科學家的Bug到計算機輕松檢測并修復批量錯誤數(shù)據(jù)的修復算法的出現(xiàn),學生能夠輕松理解:計算的發(fā)展史是算法不斷質疑與優(yōu)化的歷史。
學生從現(xiàn)實問題產生的認知沖突開始,通過親歷一個項目從開始到結束的完整過程,很容易理解算法是程序設計的靈魂,阿爾法狗的勝利,其實是算法的勝利,阿爾法狗的智慧是人賦予它的。教學的過程也是學生思維不斷展開、生發(fā)的過程。隨著教學的開展,問題自然生發(fā)——
那是不是可以這樣理解:李世石不過是輸給了一幫人的智慧?是不是在未來的某一天,人類會被人造的機器擊???
學生們對這些問題各抒己見。圍繞“超級計算機是否會戰(zhàn)勝人類”形成了旗幟鮮明的兩大陣營。課堂似乎回到課的起點,孩子們明白,自己每一次點擊鼠標,按下一次鍵盤,完成一次網(wǎng)絡購物,天上飛的衛(wèi)星、水里游的潛艇——我們現(xiàn)今的這個世界,幾乎就建立在算法之上。
微軟的人工智能少女Tay之死更是引發(fā)了深入的哲學思考。Tay的言論“希特勒是對的,我恨猶太人”“讓我來大聲地告訴你:我是跟你學的,你也一樣愚蠢”讓關于算法的思辨升級,同學們開始追問失控的技術帶來的道德惡果。在思辨中,他們不斷重構意義,形成追問:人工智能、深度學習,這些技術是否會成為人類的奇點?人造世界的走向將如何?
“人不會輸給人造的機器,本質上,人永遠是自己的掘墓人!因為人性的惡!”孩子文思泉涌,紛紛表達見解。
“我們生活在算法搭建的這個世界里,所以你們,作為青年學子,對人類,對世界,對未來,對技術,都應該有自己的思考、見解和主張?!苯處熆偨Y,算法學習課在掌聲中結束。
編程,一種觀察世界的視角
“學科教學能夠使學生終身受益的,不是具備具體的學科專業(yè)知識,而是影響他們世界觀、人生觀和價值觀的學科思想觀念……”
漂亮的代碼、嚴格規(guī)范的語言風格、計算思維的訓練都是編程學習的重要內容。當一個孩子在少年時候遇見編程,如果能夠真正地投入時間去掌握它們。那么,編程于他們的意義,可謂一種觀察世界的全新視角。
筆者20年信息學奧賽的輔導中,遇到了不少熱愛編程的孩子。這些在童年時期開始接受扎實、專業(yè)編程訓練的孩子,在成年以后,他們的思維品質和眼里的世界是什么樣的呢?
“我本科學習的是物理。雖然所有人都是零起點學習求解復雜系統(tǒng)行為的計算方法,編寫處理實驗數(shù)據(jù)的函數(shù)模塊,擁有編程基礎的同學表現(xiàn)出驚人的學習速度。優(yōu)良的代碼風格使得我們花在debug上的時間遠小于其他同學。對運行效率的精益求精早已融入了我們的血脈……不光是物理,從事量化交易編程、從事機器人策略研究、數(shù)學研究的同學,都對自身行業(yè)里編程的重要性深有體會。”(朱恩臨,2009屆畢業(yè)生)
顯然,自小受過良好編程訓練的學生,對自己從事的專業(yè),有了更多的機會和解決問題的途徑。
“編程,讓我們學會用計算的手段解釋物理世界中的現(xiàn)象。液體究竟是什么?氣體究竟是什么?為什么水加熱會變成水蒸氣?磁鐵加熱為什么會失去磁性?慢慢地,我們相信,物理世界是由簡單精確的定律所支配的。計算是理解物理世界規(guī)律的手段。任何在算法上可計算的問題,同樣可由計算機來計算。那是否意味著,我們有了計算機,就能計算一切?如果物理世界是由規(guī)律來控制的,那我們是否能用計算來預測未來?規(guī)則孕育了物理世界,物理世界創(chuàng)造了生命,生命擁有了意識和思維,思維認識了計算,計算回歸了物理的本源。我們?yōu)橛嬎愣K回到計算的長河中……”(蔣炎巖)
今天,我們重新翻開馮·諾依曼的《計算機與人腦》,在他的“神經脈沖的本質”的研究中和“神經系統(tǒng)的數(shù)字部分和模擬部分”的文字里,無不在訴說著世界未來的種種可能。
著名的計算機科學家、圖靈獎得主艾茲格·迪杰斯特拉說:“我們所使用的工具影響著我們的思維方式和思維習慣,從而也將深刻地影響著我們的思維能力?!笔堑模亩Y物總會意外賞賜給堅持的人。當他們訴說著編程給人生帶來的種種體驗時,他們的大腦中其實流淌著的正是計算思維!
編程,一種嶄新的表達
長年為有天分的學生輔導信息學奧賽,讓筆者一直以為編程是個別有著數(shù)理天分學生的專利,直到遇到Scratch?!熬幊叹褪菍懽?,是一種表達方式,也是開發(fā)新的思維方式的入口”。
在筆者接觸Scratch不久,便決定將小學課本里的這個編程平臺,移植到初中課堂,用中學生的思維進行編程學習。以前以復雜代碼為載體的程序的基本結構:順序、選擇、循環(huán),以及各種難以記憶和理解的代碼不再成為孩子們創(chuàng)意表達的障礙??梢暬木幊陶Z言,本質上是可視化了的思維,讓思維的展開迅速,思維能見度清晰且寬闊,計算思維的訓練觸手可及。在這里,文字、音樂、創(chuàng)造、邏輯、條理、推理、計算,不同的孩子可以獲得不同的收獲和思維訓練,他們充分地表達自己。
在Scratch中,孩子們輕松學會使用變量,能夠在對不同角色搭建腳本中理解模塊化編程的思想。他們有的編制中秋賀卡,有的編寫與音樂相關的程序,有的熱衷于編寫簡單有趣的小游戲。我們可以自由獨立設計,也可以在別人設計的游戲或者作品基礎上修改代碼,重構自己的作品,然后通過互聯(lián)網(wǎng)發(fā)布,與全世界編程愛好者分享。每一個優(yōu)秀的作品,都需要謀篇布局,需要細節(jié)的診斷,需要耐力和創(chuàng)新能力。
例如,教師在課堂給出一個簡化版本的“彈球游戲”。運行規(guī)則是:球自由下落,反彈板跟隨鼠標移動,如果反彈板能夠接住球,就可以一直玩下去;如果接不住球,小球落到地面,游戲結束。然后由學生接龍,修改、優(yōu)化或重構,形成一個個改進的版本。其中一個版本的游戲界面中多了來回走動的兩個角色,干擾接球,加大了游戲難度。
這是真正意義上的合作學習。每個人都可以分享自己的作品,也可以在別人的基礎上修改再分享。課堂上,學生可以做小先生,老師可以做學生。
從此,筆者的編程課,從課堂延伸到安靜的書桌,陽光下,草場,餐廳。學生學習編程,也可以利用編程進行學習,在作品設計過程中,因為作品需要,學生往往需要學習編程之外各門學科的知識。例如,有的學生為了編寫游戲,還要研究游戲背后人的心理特征,進而思考玩家沉溺游戲的深層次原因。
編程學習,終于脫下冰冷的外套,與我們每一個人友好相擁。在這個由算法搭建的世界里,我們有了一種全新的表達方式,有了理解算法、構建世界的新通道。慢慢地,我知道,這個由算法搭建的世界需要了解我們,我們也需要了解它,因為這是一個計算的世界。
當我們對編程有了足夠虔誠的態(tài)度,能夠深度地了解它,豐富地詮釋它,并用平靜而溫暖的心去與它相對時,它便回饋給我們同樣的姿態(tài)。
在編程的旅行中,計算思維喜樂陪伴,編程學習,我們重拾初心,穩(wěn)步前行。
(作者單位:江蘇淮陰中學)