摘 要:程序設(shè)計(jì)語(yǔ)言的入門教學(xué)常常會(huì)遇到學(xué)生基礎(chǔ)薄弱的問(wèn)題,在課時(shí)不足的情況下導(dǎo)致教學(xué)的困難,或者因?yàn)槔}艱深導(dǎo)致學(xué)生在入門前就已經(jīng)喪失了學(xué)習(xí)興趣。而Scratch程序因其對(duì)可視化操作、對(duì)結(jié)構(gòu)化程序設(shè)計(jì)的支持,能帶來(lái)程序設(shè)計(jì)的趣味性及可操作性。本文討論了程序設(shè)計(jì)教學(xué)的困境,Scratch程序作為前導(dǎo)課程的實(shí)踐以及可能會(huì)對(duì)教學(xué)帶來(lái)的幫助。
關(guān)鍵詞:教學(xué)探索;程序設(shè)計(jì);Scratch
中圖分類號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:A
1 引言(Introduction)
1.1 基礎(chǔ)薄弱
目前,中小學(xué)的信息化教育內(nèi)容參差不齊,有的學(xué)??赡軙?huì)有程序設(shè)計(jì)的教學(xué),有的學(xué)校則以Word、Excel操作為主,對(duì)程序設(shè)計(jì)的入門不重視[1]。很多剛進(jìn)入大學(xué)的學(xué)生在程序化的思維方式方面還比較弱,要入高級(jí)程序設(shè)計(jì)語(yǔ)言的門還有很長(zhǎng)的路要走。
1.2 課時(shí)較少
通常程序設(shè)計(jì)入門以C語(yǔ)言或C++語(yǔ)言為教學(xué)內(nèi)容。作為一種實(shí)踐性較強(qiáng)的語(yǔ)言,在一個(gè)學(xué)期中要完成程序設(shè)計(jì)概念和語(yǔ)法的教學(xué),又要在有限的時(shí)間里完成編程調(diào)試訓(xùn)練。如果學(xué)生沒(méi)有一定的基礎(chǔ)和自學(xué)能力,就很難適應(yīng)這種節(jié)奏。
1.3 抽象帶來(lái)的問(wèn)題
語(yǔ)法、算法等抽象的教學(xué)內(nèi)容將降低學(xué)生的學(xué)習(xí)興趣,而學(xué)習(xí)興趣對(duì)教授與學(xué)習(xí)兩方面都非常重要。有的學(xué)生不能通過(guò)考核經(jīng)常就跌入補(bǔ)考和重修的循環(huán)。程序設(shè)計(jì)入門作為核心課程,這個(gè)課程出了問(wèn)題將給計(jì)算機(jī)專業(yè)的后續(xù)課程帶來(lái)很多不好的影響,比如本專業(yè)學(xué)生對(duì)程序設(shè)計(jì)和其他專業(yè)技能缺乏信心以及實(shí)踐能力。
2 程序設(shè)計(jì)課程的前導(dǎo)課程(Leading program of
programming classes)
學(xué)生在程序設(shè)計(jì)課程中,一方面要努力熟悉算法抽象、程序控制等一些全新的概念,一方面會(huì)遇到很多語(yǔ)法錯(cuò)誤,必須要學(xué)習(xí)如何調(diào)試程序,理論加上實(shí)踐可能都是前所未有的挑戰(zhàn)。前導(dǎo)課程應(yīng)帶來(lái)有趣味的內(nèi)容,為學(xué)生補(bǔ)充各種必要的基礎(chǔ)概念,如抽象、邏輯、流程等,告訴學(xué)生如何在現(xiàn)實(shí)世界和計(jì)算機(jī)世界之間建立起一座橋梁。這樣的課程會(huì)對(duì)程序設(shè)計(jì)教學(xué)有很大幫助。
3 Scratch簡(jiǎn)介(Introduction of scratch)
Scratch是美國(guó)麻省理工學(xué)院(MIT)媒體實(shí)驗(yàn)室開(kāi)發(fā)的一套“程序語(yǔ)言”,利用這個(gè)軟件可以輕輕松松地創(chuàng)造出互動(dòng)式故事、動(dòng)畫、游戲、音樂(lè)等令人驚嘆的作品,是一套簡(jiǎn)單又有趣的軟件[2]。
Scratch采用拖曳、組合的方式來(lái)設(shè)計(jì)程序。它是可視化的程序語(yǔ)言,具有所見(jiàn)即所得的功能。設(shè)計(jì)Scratch作品的過(guò)程是學(xué)生學(xué)習(xí)用計(jì)算機(jī)進(jìn)行思考、分析、解決問(wèn)題的過(guò)程,還能進(jìn)行團(tuán)隊(duì)建設(shè)方面的實(shí)踐。
Scratch把程序命令歸為幾大部分:包括動(dòng)作、外觀、聲音、畫筆、變量、事件、控制等,并用顏色來(lái)分類。學(xué)生只需要了解各部分模塊的功能,按照自己的想法拖到腳本窗口,并按一定規(guī)則堆積在一起,最后在瀏覽窗口就能根據(jù)命令腳本直接運(yùn)行。通過(guò)可視化操作學(xué)生可以搭建起自己的程序,輕易地把自己的想法表達(dá)為計(jì)算機(jī)的程序。在這個(gè)抽象的過(guò)程中不用過(guò)分操心語(yǔ)法錯(cuò)誤等問(wèn)題。
圖1為Scratch設(shè)計(jì)界面,左上為程序運(yùn)行場(chǎng)景,左下為程序中設(shè)計(jì)的主體對(duì)象。一個(gè)項(xiàng)目可以有多個(gè)動(dòng)畫主體(可以是動(dòng)物人物或其他一些對(duì)象),中間是可視化程序模塊,右邊是程序窗口,利用鼠標(biāo)可以把中間的程序模塊拖入右邊的程序窗口,經(jīng)過(guò)修改參數(shù)、安排程序模塊的順序和嵌套等工作,就完成了程序編制,接著程序可以在瀏覽器中執(zhí)行。
4 Scratch對(duì)程序設(shè)計(jì)教學(xué)的支持(Supports to
programming classes)[3]
4.1 抽象
現(xiàn)實(shí)世界的問(wèn)題如何抽象為計(jì)算機(jī)世界的模型?第一步可以從學(xué)習(xí)抽象為計(jì)算機(jī)里的對(duì)象開(kāi)始。我們把需要處理的內(nèi)容抽象為Scratch的動(dòng)畫主體,比如一個(gè)人物或一個(gè)物體。動(dòng)畫主體可以具有各種行為,比如在平面中移動(dòng)。如圖2是一個(gè)負(fù)責(zé)動(dòng)作的程序模塊,能控制動(dòng)畫主體平移到坐標(biāo)(100,200)處,其中白色的部分為可以修改的坐標(biāo)值。
4.2 結(jié)構(gòu)化程序
Scratch具有可以拖曳的結(jié)構(gòu)化模塊。設(shè)計(jì)時(shí)候只需要把模塊拖入場(chǎng)景中,就可以實(shí)現(xiàn)循環(huán)或選擇的程序結(jié)構(gòu),并且能實(shí)現(xiàn)循環(huán)和選擇的嵌套,制作需要的程序流程。圖3演示了循環(huán)結(jié)構(gòu)的程序模塊,repeat后面的循環(huán)次數(shù)可以修改,可以看到循環(huán)程序模塊和循環(huán)體中的其他程序模塊的顏色是不同的,它們屬于不同的功能分類。
Fig.4 Block to control choosing
其中使用的橙色模塊i是Scratch的變量模塊。Scratch程序能夠使用數(shù)字和字符串變量。變量可用來(lái)控制某個(gè)圖形的大小或個(gè)數(shù),變量還能具有不同的作用域。由此我們向?qū)W生展示了變量存儲(chǔ)值、變量值影響程序結(jié)果以及變量的作用域等概念。
Scratch具有列表的結(jié)構(gòu),列表可以存儲(chǔ)數(shù)值或字符串。列表可以具有作用域,可以獲得列表的長(zhǎng)度。列表項(xiàng)具有添加、刪除、插入等操作,并能通過(guò)下標(biāo)獲取特定的列表項(xiàng)。列表可以幫助學(xué)生學(xué)習(xí)數(shù)組的概念。
Scratch的結(jié)構(gòu)化程序設(shè)計(jì)是可視化的,調(diào)試簡(jiǎn)單,能幫助學(xué)生把精力集中在程序結(jié)構(gòu)上,而不需要為語(yǔ)法錯(cuò)誤分心。
4.3 面向?qū)ο?/p>
Scratch能夠設(shè)置動(dòng)畫主體,可以視為對(duì)象模塊。不同的動(dòng)畫主體具有獨(dú)特的屬性,可操作自己的變量,能完成獨(dú)特的任務(wù)。在后續(xù)課程中這些概念很容易引申為對(duì)象及其屬性和行為的概念,這是面向?qū)ο蟪绦蛟O(shè)計(jì)的基礎(chǔ)。圖5為迷宮程序的設(shè)計(jì),其中球體是一個(gè)對(duì)象,而終點(diǎn)方塊的是另一個(gè)對(duì)象。我們可以利用鍵盤移動(dòng)球體,當(dāng)碰到方塊對(duì)象時(shí)后者能做出贏得游戲的反應(yīng)。球體對(duì)象在移動(dòng)過(guò)程中碰到障礙則會(huì)產(chǎn)生反彈。
5 Scratch作為程序設(shè)計(jì)教學(xué)前導(dǎo)課程的實(shí)踐
(Experiments in programming classes)
在參考文獻(xiàn)[4]中提到的學(xué)校已經(jīng)嘗試使用Scratch平臺(tái)作為計(jì)算機(jī)專業(yè)課程的前導(dǎo)課程。學(xué)校把學(xué)生分為兩部分,一部分基礎(chǔ)薄弱的學(xué)生在第一個(gè)學(xué)期先參加Scratch課程,到第二個(gè)學(xué)期才開(kāi)始學(xué)習(xí)高級(jí)程序設(shè)計(jì)語(yǔ)言。而另一部分基礎(chǔ)良好的學(xué)生則在第一個(gè)學(xué)期就開(kāi)始學(xué)習(xí)高級(jí)程序設(shè)計(jì)。
最終學(xué)過(guò)Scratch的學(xué)生,盡管基礎(chǔ)薄弱,他們的最終成績(jī)?cè)谕ㄟ^(guò)率和平均成績(jī)方面都超過(guò)基礎(chǔ)良好的學(xué)生,并且在精通程序、喜愛(ài)專業(yè)課程、參與專業(yè)實(shí)踐等方面都有更好的表現(xiàn)。這些學(xué)生專業(yè)成績(jī)更好,對(duì)專業(yè)更熱愛(ài),對(duì)程序設(shè)計(jì)更有信心。
6 結(jié)論(Conclusion)
程序設(shè)計(jì)是一種具有創(chuàng)造性的工作,它具有一定的抽象性,而且需要使用數(shù)學(xué)的方法去描述一些問(wèn)題。這使得在語(yǔ)言程序設(shè)計(jì)的課程教學(xué)中,必須打破原有的教學(xué)模式和知識(shí)體系[5]。我們探索不同的方式幫助學(xué)生入門,Scratch可能是一個(gè)良好的平臺(tái),它的可視化特性,對(duì)結(jié)構(gòu)化程序設(shè)計(jì)的支持,都能幫助學(xué)生在實(shí)踐中培養(yǎng)計(jì)算機(jī)思維方式,為程序設(shè)計(jì)入門打下堅(jiān)實(shí)基礎(chǔ),為后續(xù)課程的挑戰(zhàn)做好準(zhǔn)備。另一方面程序設(shè)計(jì)教學(xué)的困境也要需要在考核模式方面進(jìn)行改革,激勵(lì)學(xué)生重視創(chuàng)新和實(shí)踐。
參考文獻(xiàn)(References)
[1] 張傳科.如何讓抽象的設(shè)計(jì)變得精彩——LOGO程序設(shè)計(jì)與
Scratch[J].中國(guó)信息技術(shù)教育,2010,(5):29-31.
[2] 陳捷.Scratch語(yǔ)言簡(jiǎn)介及應(yīng)用[J].電腦知識(shí)與技術(shù),2009,5(26):
7439-7440.
[3] 朱贇,鄭曉妹.C語(yǔ)言程序設(shè)計(jì)教學(xué)前導(dǎo)課程研究[J].軟件導(dǎo)
刊,2014,13(4):160-162.
[4] M.Rizvi,T.Humphries,D.Major,M.Jones,and H.Lauzun.A
NewCS0 Course for At-Risk Majors[C].The Proceedings of
the 24th IEEE-CS Conference on Software Engineering
Education and Training,Honolulu,Hawaii,May 2011: 314-323.
[5] 劉興林.大學(xué)工科C語(yǔ)言程序設(shè)計(jì)教學(xué)探索與實(shí)踐——以五
邑大學(xué)為例[J].軟件工程師,2014,17(5):39-40.
作者簡(jiǎn)介:
朱 贇(1978-),女,碩士,講師.研究領(lǐng)域:計(jì)算機(jī)應(yīng)用.