高萍
教學(xué)內(nèi)容分析
各行各業(yè)信息技術(shù)產(chǎn)品的應(yīng)用得益于各類程序的編制,而程序得以實(shí)現(xiàn)的“幕后英雄”便是程序設(shè)計(jì)語(yǔ)言?!冻绦蛟O(shè)計(jì)語(yǔ)言發(fā)展史》一課的學(xué)習(xí)有助于學(xué)生了解程序設(shè)計(jì)語(yǔ)言發(fā)展的來(lái)龍去脈,為后續(xù)程序設(shè)計(jì)的深入學(xué)習(xí)奠定基礎(chǔ)。本課教學(xué)以“機(jī)器語(yǔ)言”“匯編語(yǔ)言”“高級(jí)程序設(shè)計(jì)語(yǔ)言”發(fā)展為主線,探討語(yǔ)言的特點(diǎn)和思想的變遷,使學(xué)生從中感悟編程語(yǔ)言變化的趨勢(shì),并暢想未來(lái)發(fā)展的情況。
學(xué)情分析
高中生思維活躍,理性思考趨于成熟,教師可以創(chuàng)設(shè)情境,讓學(xué)生感悟、討論交流。另外,學(xué)生幾乎沒(méi)有任何編程基礎(chǔ),原理性知識(shí)多采用生活案例幫助學(xué)生理解,本課僅增加少量Python編碼活動(dòng),增加學(xué)生的直觀感受。
教學(xué)目標(biāo)
知識(shí)與技能目標(biāo):通過(guò)程序設(shè)計(jì)語(yǔ)言發(fā)展主線,比較三種代碼實(shí)現(xiàn)“編程計(jì)算100和256相加”的不同;了解機(jī)器語(yǔ)言、匯編語(yǔ)言、高級(jí)程序設(shè)計(jì)語(yǔ)言三種語(yǔ)言特點(diǎn);理解程序設(shè)計(jì)思想的變遷。
過(guò)程與方法目標(biāo):在自然語(yǔ)言指令編碼活動(dòng)過(guò)程中,體驗(yàn)二進(jìn)制編碼的方法;在生活問(wèn)題解決、Scratch游戲剖析、Python簡(jiǎn)單編程過(guò)程中,體驗(yàn)面向?qū)ο蠛兔嫦蜻^(guò)程解決問(wèn)題的不同思路和適用場(chǎng)合。
情感態(tài)度與價(jià)值觀目標(biāo):感受程序設(shè)計(jì)語(yǔ)言的變化趨勢(shì),描述未來(lái)程序設(shè)計(jì)語(yǔ)言發(fā)展的前景。
教學(xué)重點(diǎn)、難點(diǎn)
重點(diǎn):從機(jī)器語(yǔ)言到高級(jí)程序設(shè)計(jì)語(yǔ)言的發(fā)展變化。
難點(diǎn):對(duì)機(jī)器語(yǔ)言的理解,對(duì)面向過(guò)程和面向?qū)ο髢煞N編程思想的理解。
教學(xué)過(guò)程
1.游戲?qū)氤绦蚋拍?,進(jìn)而引入程序設(shè)計(jì)語(yǔ)言
教師演示由Scratch實(shí)現(xiàn)的“槍擊游戲”。
師:這款游戲并不是從網(wǎng)上下載的,而是別的同學(xué)自己編寫程序?qū)崿F(xiàn)的。信息時(shí)代,不管是學(xué)習(xí)、工作還是娛樂(lè),生活中處處都融入程序的光芒。程序是指一組指示計(jì)算機(jī)執(zhí)行動(dòng)作或作出判斷的指令。指令的發(fā)出者是人,接受指令的是機(jī)器。那么,人和機(jī)器之間是怎樣通過(guò)語(yǔ)言溝通的呢?
教師揭示課題——程序設(shè)計(jì)語(yǔ)言發(fā)展史(回顧發(fā)展階段、感受變化趨勢(shì)、暢想未來(lái))。
設(shè)計(jì)意圖:既導(dǎo)入課題,又點(diǎn)明程序設(shè)計(jì)語(yǔ)言的功能。
2.探究二進(jìn)制編碼活動(dòng)
師:從ENIAC程序電路存儲(chǔ)談起,高速的計(jì)算能力與手工準(zhǔn)備之間突出的矛盾引起美籍匈牙利數(shù)學(xué)家馮·諾依曼的注意,他提出二進(jìn)制思想和程序內(nèi)存思想。人使用的是自然語(yǔ)言,那么怎樣把自然語(yǔ)言轉(zhuǎn)化成機(jī)器識(shí)別的二進(jìn)制數(shù)呢(如圖1)?
生:二進(jìn)制編碼。
師:用二進(jìn)制數(shù)可以表示下列指令(如下頁(yè)圖2,二進(jìn)制數(shù)字系統(tǒng)中只有0和1)。用二進(jìn)制數(shù)編碼,其實(shí)不難,關(guān)鍵是判斷指令所有狀態(tài)可以使用幾個(gè)二進(jìn)制位來(lái)表示。
設(shè)計(jì)意圖:二進(jìn)制是程序設(shè)計(jì)語(yǔ)言發(fā)展的基礎(chǔ),有助于學(xué)生理解機(jī)器語(yǔ)言是如何編碼的。
3.探究程序設(shè)計(jì)語(yǔ)言的變化
例如,編程計(jì)算100和256相加(如圖3)。
師:機(jī)器語(yǔ)言由二進(jìn)制數(shù)組成,這些數(shù)字并非毫無(wú)意義,而是由一定位數(shù)的操作碼和一定位數(shù)的地址碼組成。如果你是程序員,使用機(jī)器語(yǔ)言編寫程序,是什么感受呢?
學(xué)生回答機(jī)器語(yǔ)言的特點(diǎn)。
師:機(jī)器語(yǔ)言能被機(jī)器直接識(shí)別和執(zhí)行,但依賴于特定的機(jī)器;機(jī)器語(yǔ)言不易學(xué)習(xí),不易編寫,糾錯(cuò)難。針對(duì)這一問(wèn)題,程序設(shè)計(jì)語(yǔ)言進(jìn)行了改進(jìn),出現(xiàn)了匯編語(yǔ)言。它可以實(shí)現(xiàn)同樣的功能,請(qǐng)大家觀察匯編語(yǔ)言在機(jī)器語(yǔ)言基礎(chǔ)上發(fā)生了哪些變化(如圖4)?
生:出現(xiàn)了熟悉的英文單詞……
師:利用助記符或符號(hào)代替二進(jìn)制數(shù),有利于程序員編寫程序;但需要編譯,轉(zhuǎn)化成機(jī)器碼,才能被機(jī)器理解和執(zhí)行;同時(shí),還依賴特定的機(jī)器,通用性不強(qiáng)。不管是機(jī)器語(yǔ)言還是匯編語(yǔ)言都有一個(gè)共同的“缺憾”,就是一種型號(hào)計(jì)算機(jī)中編制的程序在另一種型號(hào)的計(jì)算機(jī)中不能運(yùn)行。于是程序設(shè)計(jì)語(yǔ)言又進(jìn)一步發(fā)展,出現(xiàn)了高級(jí)程序設(shè)計(jì)語(yǔ)言(如圖5),那高級(jí)程序設(shè)計(jì)語(yǔ)言的“高級(jí)”之處是什么呢?
生:采用數(shù)學(xué)表達(dá)式形式,代碼更加簡(jiǎn)單……
師:高級(jí)程序設(shè)計(jì)語(yǔ)言的“高級(jí)”在于采用接近問(wèn)題本質(zhì)的方式去思考問(wèn)題和描述問(wèn)題;具有跨平臺(tái)、移植性強(qiáng)等特點(diǎn);使用時(shí)需要編譯或解釋成機(jī)器碼。
學(xué)生體驗(yàn)利用高級(jí)程序設(shè)計(jì)語(yǔ)言Python2.7編程的便捷(如下表)。
設(shè)計(jì)意圖:針對(duì)同一案例“100+256”,用三種代碼實(shí)現(xiàn),容易比較不同語(yǔ)言各自的特點(diǎn)。最后,通過(guò)Python進(jìn)行數(shù)學(xué)運(yùn)算代碼編寫,增加學(xué)生的直觀感受。
4.探究程序設(shè)計(jì)思想變遷
師:自從世界上第一個(gè)高級(jí)程序設(shè)計(jì)語(yǔ)言Fortran誕生后,隨后有幾百種程序設(shè)計(jì)語(yǔ)言被發(fā)明和應(yīng)用,按照時(shí)間順序,在不同領(lǐng)域有代表性、被廣泛應(yīng)用的高級(jí)程序設(shè)計(jì)語(yǔ)言有Fortran、COBOL、PSCAL、C、C++、JAVA、PHP等。程序設(shè)計(jì)語(yǔ)言在發(fā)展過(guò)程中,也經(jīng)歷了編程思想的變化。例如,乘坐汽車去無(wú)錫市區(qū),你會(huì)想到有哪些途徑?
生:自駕、滴滴打車……
師:“自駕”好比面向過(guò)程的方式解決問(wèn)題,先分析出解決問(wèn)題的步驟,然后按步驟依次實(shí)現(xiàn)(如圖6)。這種面向過(guò)程的方式適合簡(jiǎn)單問(wèn)題的解決,如早期編程主要應(yīng)用于科學(xué)計(jì)算,但碰到復(fù)雜事務(wù),就顯得力不從心。這時(shí),另一種編程思想——面向?qū)ο螅瑧?yīng)運(yùn)而生(如上頁(yè)圖7),“滴滴打車”好比面向?qū)ο螅捎脤?duì)象+消息的方式解決問(wèn)題。面向?qū)ο筮m合互聯(lián)網(wǎng)應(yīng)用、游戲編制等復(fù)雜問(wèn)題的解決,且可擴(kuò)展性強(qiáng),易修改。我們上課伊始玩的Scratch槍擊游戲,其程序塊包含了多個(gè)角色,有著不同的屬性和動(dòng)作,這里可以理解為“對(duì)象”,游戲的進(jìn)程是通過(guò)“廣播消息”或觸發(fā)事件推進(jìn),可以理解為消息。另外,課上體驗(yàn)的Python自帶的math標(biāo)準(zhǔn)庫(kù),把常見(jiàn)的函數(shù)運(yùn)算納入其中,使用時(shí),函數(shù)前添加“math.”,可以指明所屬對(duì)象,這些都蘊(yùn)含面向?qū)ο蟮木幊趟枷搿?/p>
設(shè)計(jì)意圖:通過(guò)生活案例進(jìn)行類比,直觀指出面向過(guò)程和面向?qū)ο髢煞N思想的特點(diǎn),成功化解教學(xué)難點(diǎn)。
5.討論暢想未來(lái)發(fā)展
教師小結(jié)(如圖8)。
學(xué)生討論,并描繪未來(lái)程序設(shè)計(jì)語(yǔ)言具體情況(智能化、可視化、構(gòu)件化……)。
教學(xué)反思
《程序設(shè)計(jì)語(yǔ)言發(fā)展史》一課是為區(qū)域評(píng)優(yōu)課所定的開(kāi)放課題,頗具挑戰(zhàn)性。一是沒(méi)有現(xiàn)成的教材可供參考,教學(xué)內(nèi)容取舍成為難題;二是學(xué)生幾乎沒(méi)有任何編程經(jīng)歷,內(nèi)容講解和編程體驗(yàn)需要通俗易懂。筆者經(jīng)查資料發(fā)現(xiàn),程序設(shè)計(jì)語(yǔ)言發(fā)展史中涉及眾多重要技術(shù)、人物和事件,一節(jié)課很難事無(wú)巨細(xì)地和盤托出。面對(duì)高中生,筆者依據(jù)基礎(chǔ)性和發(fā)展性原則選擇教學(xué)內(nèi)容,依托生活化案例化解了教學(xué)難點(diǎn)。編程體驗(yàn)環(huán)節(jié)重點(diǎn)落在高級(jí)程序設(shè)計(jì)語(yǔ)言上,選取已經(jīng)進(jìn)入中小學(xué)信息技術(shù)課堂的編程工具Scratch和Python。
首先,二進(jìn)制是程序設(shè)計(jì)語(yǔ)言發(fā)展的基礎(chǔ)。筆者教學(xué)采用了“我是否喜歡她,她是否喜歡我”的二進(jìn)制編碼活動(dòng),讓學(xué)生理解機(jī)器語(yǔ)言是如何通過(guò)二進(jìn)制進(jìn)行編碼;并在此基礎(chǔ)上,針對(duì)“編程計(jì)算100和256相加”任務(wù)列出機(jī)器語(yǔ)言、匯編語(yǔ)言及高級(jí)語(yǔ)言的三種代碼實(shí)現(xiàn),讓學(xué)生通過(guò)比較,說(shuō)出三類語(yǔ)言的特點(diǎn),感悟變化趨勢(shì)。同時(shí),筆者還增加了Python直觀體驗(yàn),編程實(shí)現(xiàn)了“100和256相加”,不涉及任何算法,符合學(xué)生編程零基礎(chǔ)特點(diǎn)。
其次,面向過(guò)程到面向?qū)ο缶幊趟枷氲淖冞w是高級(jí)語(yǔ)言發(fā)展的重要變革,也是教學(xué)的難點(diǎn)。筆者以生活案例“自駕去無(wú)錫市區(qū)”還是“坐車去無(wú)錫市區(qū)”兩種解決問(wèn)題的思路幫助學(xué)生理解兩種編程思想的特點(diǎn)及應(yīng)用場(chǎng)合,利用Python的 math標(biāo)準(zhǔn)庫(kù)完成復(fù)雜函數(shù)運(yùn)算,剖析Scratch槍擊游戲?qū)崿F(xiàn)過(guò)程,增加了學(xué)生面向?qū)ο蟮闹庇^體驗(yàn)。
最后,學(xué)生親歷程序設(shè)計(jì)語(yǔ)言發(fā)展過(guò)程后,感悟程序設(shè)計(jì)語(yǔ)言“宜人”變化趨勢(shì),學(xué)生暢想,小組討論未來(lái)程序設(shè)計(jì)語(yǔ)言的發(fā)展情況。整節(jié)課,課堂氣氛熱烈,特別在暢想環(huán)節(jié),學(xué)生想到中文編程、云端在線編程、計(jì)算機(jī)自動(dòng)生成程序……這些“奇思妙想”把課堂推向高潮,教學(xué)過(guò)程生動(dòng)且富有實(shí)效。