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