梁錦明
【摘 要】Scratch是美國麻省理工學(xué)院媒體實(shí)驗(yàn)室(MIT) 于2007年開發(fā)的圖形化編程工具。在美國哈佛、加州大學(xué)伯克利分校等世界名校都開設(shè)了Scratch課程。我們于2012年將其引入,作為我校的校本課程。本文結(jié)合我們在Scratch教學(xué)中的一些做法與對程序設(shè)計(jì)的一些看法,闡述Scratch對青少年學(xué)習(xí)程序設(shè)計(jì)的意義。
【關(guān)鍵詞】信息技術(shù);Scratch;程序設(shè)計(jì)
【中圖分類號】G40-057 【文獻(xiàn)標(biāo)識碼】A
【論文編號】1671-7384(2013)06-50-02
程序設(shè)計(jì)是給出解決特定問題的程序的過程,是軟件構(gòu)造活動中的重要組成部分。程序設(shè)計(jì)中,最重要的是對問題的分析、設(shè)計(jì)、測試和排錯(cuò),編碼只是程序設(shè)計(jì)的一部分,但平時(shí)我們在程序設(shè)計(jì)教學(xué)中,無論是教師還是學(xué)生,都把大量時(shí)間放在了編碼這一環(huán)節(jié)上。
對于很多教師來說,他們總是認(rèn)為,教會學(xué)生程序設(shè)計(jì),首先就要學(xué)生掌握一門語言,讓學(xué)生記住一大堆的保留字的拼寫、各種程序結(jié)構(gòu)的語言、語法。在這個(gè)基礎(chǔ)上,補(bǔ)充一些數(shù)據(jù)結(jié)構(gòu)和算法知識,使學(xué)生能夠通過編程來解決一些生活中的現(xiàn)實(shí)問題。我們認(rèn)為,這是一種偏見,是一種對程序設(shè)計(jì)理解的誤區(qū),也是我們教師作為學(xué)生時(shí)學(xué)習(xí)程序設(shè)計(jì)的次序所帶來的誤區(qū)。學(xué)生在程序設(shè)計(jì)的過程中,也把大部分時(shí)間浪費(fèi)在正確的命令拼寫和完整的語法結(jié)構(gòu)之上,大部分的排錯(cuò)問題都是出在語言本身而不是程序設(shè)計(jì)上。換句話說,教程序設(shè)計(jì)成了教程序語言!對于高中、大學(xué)的學(xué)生,語言的學(xué)習(xí)障礙可能還不是太大,而對于義務(wù)教育階段的學(xué)生,語言障礙是非常嚴(yán)重的。然而,也正是義務(wù)教育階段的孩子,他們的創(chuàng)造性思維是最強(qiáng)的,不必也不應(yīng)把寶貴的學(xué)習(xí)時(shí)間浪費(fèi)在語言上。
在義務(wù)教育階段教學(xué)程序設(shè)計(jì)這一分支內(nèi)容,目的是讓學(xué)生掌握程序設(shè)計(jì)的基本思想,而不是掌握一門程序設(shè)計(jì)語言的使用,更多的是讓學(xué)生了解程序設(shè)計(jì)的核心內(nèi)容。聯(lián)合國教科文組織(UNESCO)在1994年委托國際信息處理學(xué)會(IFIP)編寫的文件《中學(xué)信息學(xué)課程》中提到:“這里所指的程序設(shè)計(jì)是非技術(shù)性的程序設(shè)計(jì)。更確切地說,應(yīng)該是把‘你自己做的事情轉(zhuǎn)變成‘別人能做的事情。這就要求能詳盡地描述完成任務(wù)的過程,以便其他人或其他設(shè)備能準(zhǔn)確地重復(fù)這一項(xiàng)工作?!逼鋵?shí),當(dāng)PC在20世紀(jì)70年代末80年代初首次出現(xiàn)時(shí),教育界有一種教會全部學(xué)生如何編程的初始熱情。成千上萬的學(xué)校在教授數(shù)以百萬計(jì)的學(xué)生在LOGO或者Basic上寫一些簡單的程序。Seymour Papert(著名的學(xué)習(xí)科學(xué)家、人工智能專家)在1980年出版的Mind Storms(《頭腦風(fēng)暴》)一書中提到,LOGO將成為重新思考教育與學(xué)習(xí)方式的基石。從那時(shí)起,計(jì)算機(jī)開始在兒童的生活中普及,但是很少學(xué)生會學(xué)習(xí)編程。在今天,很多人都將編程視為一種小眾的、技術(shù)性的活動,只適合小部分人學(xué)習(xí)。
究竟是什么原因使教學(xué)編程偏離了它的初衷呢?
1.早期的編程語言難以應(yīng)用,許多學(xué)生都不能掌握編程的語法。
2.編程一般與一些學(xué)生不感興趣或沒有相關(guān)經(jīng)驗(yàn)的活動相聯(lián)系,比如生成一個(gè)素?cái)?shù)列表,或者簡單地畫一條直線。
3.一般缺乏對正確程序的深層次探索的鼓勵以及對錯(cuò)誤程序的指導(dǎo)。
Papert認(rèn)為,編程語言應(yīng)該 “地板要低”(Low Floor)、“天花板要高”(High Ceiling)、“墻體要寬”(Wide Walls),即低進(jìn)入門檻和高創(chuàng)造空間。此外,編程語言需要支持眾多不同類型的項(xiàng)目,以滿足不同人群的興趣和學(xué)習(xí)類型,使得他們可以參與進(jìn)來。但要滿足這三個(gè)要求,其實(shí)并不簡單。
針對這些問題和要求,MIT媒體實(shí)驗(yàn)室的終身幼兒園小組在2007年開發(fā)了Scratch軟件。它通過鼠標(biāo)拖動指令模塊,以搭積木的方式設(shè)計(jì)程序,并通過一個(gè)舞臺,讓設(shè)計(jì)者簡單、直觀地看到設(shè)計(jì)的結(jié)果,將抽象的程序設(shè)計(jì)可視化。Scratch包含動作、控制、外觀、偵測、聲音、數(shù)字和邏輯運(yùn)算、畫筆、變量這八大類指令模塊,把建模、控制、動畫、事件、邏輯運(yùn)算等都包含在內(nèi)。從動作指令到控制語句,從傳感響應(yīng)到面向?qū)ο螅瑥臄?shù)值運(yùn)算到線程調(diào)度,涉及程序設(shè)計(jì)的方方面面。
其實(shí),程序設(shè)計(jì)的目的是把我們想做的事情以算法描述的方式表達(dá)出來,而算法描述最直觀和最簡單的辦法就是畫流程圖。當(dāng)流程圖畫出來了,程序設(shè)計(jì)基本上也就完成了。如何讓流程圖變成可執(zhí)行的程序,那是語言的事情,也是軟件的事情。對于程序設(shè)計(jì)本身來說,這只是其中的一個(gè)環(huán)節(jié)。如果這個(gè)環(huán)節(jié)可以讓軟件代勞,那么我們就可以集中精力去做流程設(shè)計(jì)了。Scratch就能很好地實(shí)現(xiàn)這個(gè)功能。在Scratch程序設(shè)計(jì)中,學(xué)生們不需要再去為語言和語法頭痛了,因?yàn)樗麄冎皇切枰穸逊e木一樣來設(shè)計(jì)程序。這樣的設(shè)計(jì)就使學(xué)生們能把更多的精力放在程序設(shè)計(jì)上,也使得程序設(shè)計(jì)的門檻大大降低。
我們經(jīng)??吹?,給孩子們一盒積木,他們馬上就會開始把積木組裝在一起,隨后出現(xiàn)的結(jié)構(gòu)又會給他們以新的靈感。當(dāng)他們在玩的時(shí)候,計(jì)劃和目標(biāo)會隨著進(jìn)程而不斷改變。Scratch是基于圖形化的編程板塊,讓孩子們可以組合這些板塊去創(chuàng)作他們的程序。與積木類似,孩子們可以先從簡單的部件開始組裝,通過不同的序列和組合方式來看究竟會發(fā)生什么事情。這里并沒有傳統(tǒng)編程語言那樣晦澀的語言,進(jìn)入的門檻很低,而且這樣的經(jīng)歷充滿了娛樂性。
由此,我們希望學(xué)生在使用Scratch編程的時(shí)候,也有類似的感覺。堆積木是不需要教的,我們只需要告訴孩子們,積木可以如何使用就行了。至于如何堆積、堆積出來什么,那就是孩子們自己的事情了。經(jīng)過一個(gè)學(xué)年的校本課程實(shí)驗(yàn),我校在第二個(gè)學(xué)年就開始把Scratch引入到常規(guī)教學(xué)中,代替了原來的VB程序設(shè)計(jì)教學(xué)。為了解決程序設(shè)計(jì)語言問題,我們完全拋棄了以往語言教學(xué)的方式,而改為采用基于項(xiàng)目的方式來進(jìn)行程序設(shè)計(jì)教學(xué)。同時(shí),我們并沒有把Scratch當(dāng)成一門程序設(shè)計(jì)語言來教,從Scratch官方介紹上來看,MIT把Scratch定義為一種程序設(shè)計(jì)工具,而不是語言,因此,我們就需要改變一下思維定勢,我們教的是工具而不是語言,重點(diǎn)應(yīng)該在流程設(shè)計(jì),而不是語法上。
Scratch教學(xué),所面臨的最大挑戰(zhàn)并不是來自于技術(shù)上的,并不是教會孩子們?nèi)绾稳ナ褂媒M件,如何去組裝組件;而是來自于文化和教育理念上的,是教會孩子們思考問題的方式與良好的思維習(xí)慣。更廣闊的是,我們需要改變孩子們以及成年人對編程的觀念、對計(jì)算機(jī)的看法,使得現(xiàn)在的年輕人不再是只對發(fā)短信、玩在線游戲和瀏覽網(wǎng)頁非常在行。我們不僅僅需要他們會交談、瀏覽和交互,更需要他們擁有通過媒體進(jìn)行設(shè)計(jì)、創(chuàng)造、發(fā)明的能力。程序設(shè)計(jì)能極大地?cái)U(kuò)大孩子們用計(jì)算機(jī)創(chuàng)作的范圍、擴(kuò)大孩子們學(xué)習(xí)到的內(nèi)容的范圍,尤其能夠支持孩子們用“計(jì)算思維”來幫助他們學(xué)習(xí)重要的問題解決方式和設(shè)計(jì)策略(比如模塊化和交互設(shè)計(jì)),還能夠提供讓孩子們反思自己的想法的機(jī)會。
(作者單位:廣東順德一中德勝學(xué)校信息資源部)