林梓雨
摘 要: 自新課程改革以來,高中信息技術教材內容發生很大的變化。除了必修模塊外,還有五個模塊的選修課程,其中《算法與程序設計》相對于其他選修模塊,知識點多,內容環環相扣,代碼學習起來枯燥難懂,大部分學生學習一段時間后都有厭煩情緒。因此,對于教師而言,如何有效組織教材、設計好教學內容、采取有效的教學方式是一個極大的考驗。作者結合多年的教學心得,對選修模塊《算法與程序設計》的教學策略略作探討。
關鍵詞: 新課程 《算法與程序設計》 教學策略
近年來,國家一直提倡要提高自主創新能力,在信息技術領域,很多學科的自主創新都跟程序有不可分割的聯系,因此,高中生學習基礎編程正當其時,而《算法與程序設計》這門課正好可以作為啟蒙課程。但是,接觸過編程的人都知道,編程語言要記的內容很多,包括各種數據類型、關鍵字等概念和術語,還要理解各種語法,并且要熟練應用這些語法進行解題。這對于那些思維活躍、邏輯能力強的學生,學習這門課來得心應手,事半功倍,但對于其他大部分學生,學習起來相對會吃力一點,畢竟編程里面的這些語言和語法比較抽象。因此,如何將這些知識通俗易懂地講解出來,讓學生既容易接受,又能融會貫通并應用于解題中,這對教師而言是一個不小的考驗。下面我就自己講授這門課所采用的教學方式和手段與大家交流。
一、巧打比方,化解語法理解難題
學習編程,必須掌握的程序基本控制結構有:順序、分支、循環,這三種類型都有對應的格式,在VB語言里,分支結構有if和select case兩種語法,循環有for和 do while…loop等,正確理解并掌握這些程序結構和語句的應用是學好編程的基礎,是重中之重。在教學中,難點正是這些語法和概念。這些內容,教師若只是照本宣科地講授,把語句機械地進行“翻譯”,就算講得再好,學生也是一頭霧水,就算聽懂語法的含義,碰到問題無法靈活應用,教學效果差強人意。如果在講解語法的過程中,巧打比方,把語法搬進生活化的例子中,就可以把這些抽象難懂的知識變得既形象又有趣,達到“一語道破天機”的教學效果。
在學習程序時,學生最先接觸的是順序結構,它是程序結構中最簡單的一種,也是學生最容易理解的一種,學生只要根據題目,按解決問題的步驟依次寫出代碼,VB在執行代碼時按照語句順序一條一條執行,就稱為順序結構,這個好比是工廠里流水線加工產品一樣,原材料順著流水線的工序,一道一道加工后,最后做成產品,都是一樣的道理。在順序結構里,一個經典的例子就是數值交換,比如x=6,y=10,問學生如何交換x和y的值。很多學生剛看到這個問題,下意識地就回答:x=y,y=x,我也不直接說這樣是對是錯,讓學生打開VB軟件代碼一運行并輸出,就會發現這樣處理的結果是x和y都是變成10,學生就會思考為什么是這樣,然后我再總結:這個問題,打個比方,就像我有兩瓶墨水,現在我想交換兩個瓶子里的墨水,我應該怎么做?通過這個生活化的例子,學生很自然就想到:哦,我應該再拿個空瓶子,才能完成這個交換過程。這個時候再去解釋數值交換語句:z=x,x=y,y=z,學生就恍然大悟,一下就明白。對于分支語句,相對而言是比較好理解的語句,在教學中,有很多生活中的例子可以用來對比,就像語文中的“如果出現什么情況,那么我會怎么做”。比如:明天是周天,你正打算明天怎么安排,那么有很多因素會影響到你的最終安排。
(1)如果明天下雨,那么我會待在家里練字(只考慮下雨情況);
(2)如果明天下雨,那么我會待在家里練字;否則,我要跟同學去郊游(考慮兩種情況)。
對比if語句的兩種常用格式:
“if條件then語句”及“if條件then語句一else語句二”。
理解好if語句的含義和用法,學生可以輕而易舉地處理各種分支語句的題目。分支語句中條件表達式是一個難點,主要是條件中出現的or和and運算,以a or b運算為例,只要a或者b有一個值是true,那么a or b的值就是true,打個成語,就是“一榮俱榮”;對應地,a and b運算中,只要a或者b有一個值是false,那么a and b的值就是false,打個成語,就是“一損俱損”,通過打比方,學生就很容易記住or運算和and運算的規則了。在三種程序結構中,循環語句是最難的一種結構,在VB語言里常見的循環語句有for循環和while循環,大多數學生難于理解循環的過程,以及兩者之間的區別,以致不會靈活運用循環進行解題。因此,教學的關鍵就是如何讓學生通俗易懂地理解循環的含義,運用生活中的例子進行形象化對比,就可以輕松解決這個問題。比如在講解for語句時,我就拿生活中的爬樓梯作對比,for循環類似于爬樓梯,樓梯的階數就是給定的,從下到上編號為1,2……n,循環里的循環變量代表一個人,初始值和終值對應于樓梯的階數,步長的值就是走一步跨幾步樓梯;步長大于0代表上樓,步長小于0代表下樓。對比這個例子,讓學生理解以下幾個循環:
1)for i=5 to 22 step 3
2)for i=56 to 4 step -2
3)for i=3 to 30 step -2
學生對比循環和走樓梯的過程,很容易就理解三個例子的含義和循環過程,加深對循環結構程序的理解,為后面循環語句的應用打下堅實的基礎。
二、以問題為主線,貫通知識點
要學好《算法與程序設計》,除了要識記各種常見的數據類型、運算符、關系表達式、關鍵字、語法外,更重要的是要根據題目的要求綜合運用這些知識。教師如果單純地按照課本的編排進行教學,僅這些識記的知識就要花好多課時,而一味講授這些知識點,教師教起來枯燥無味,學生聽起來興趣索然,嚴重打擊學生的學習信心。一種巧妙的做法是:以語法為主線,以題目為媒,把知識點分散到不同類型的題目中。通過教學課前精心準備的趣味題目,穿插該題用到的知識點和語法,讓學生在完成題目的同時,“順便”學習相關知識點,這樣,既可以達到“潛移默化”的教學效果,又讓學生“學以致用”,取得良好的教學效果。以前面介紹的程序結構為例,在學習順序結構時,我布置一道簡單的數學題:輸入梯形的上底,下底和高,求梯形的面積。這道題看似簡單,但是卻包含了很多VB的知識點:第一,讓學生分析這道題的解題過程,涉及編程里的算法;第二,讓學生分析變量的類型,用到數據類型中的integer和single;第三,計算梯形的面積,用到VB里的運算符;第四,代碼實現時,讓學生知道程序的四個基本組成部分:數據類型說明、輸入、程序處理、輸出;再比如分支結構,布置一道常識題:輸入一個年份,輸出它是否閏年,是閏年就輸出TRUE,不是就輸出FALSE。學生要完成這道題,至少要學會關系表達式、邏輯運算符、if語句的語法等。按照我的教學策略,幾乎每節課都會布置一道題目,每道題用到的新的知識點,都會加以備注或者適當講解,學生在學完用到的新知識,自行分析題目的解題思路,就可以直接加以運用,這樣既可以鍛煉學生的思維能力,又可以輕松實現課堂的教學目標。對于學生而言,每節課的題目的順利完成,就是他們最大的收獲,這里的收獲既包括知識,又包括學習的信心。
三、結合微課程,促進教學均衡
《算法與程序設計》教材用到的編程軟件是Visual Basic,它簡單易用,容易上手,對于初次接觸編程的學生來說,難度不是很大。當然,對于從農村考入高中的學生而言,由于初中沒有什么條件接觸電腦,可能還是要花更多的時間熟悉這個軟件。用VB進行編程,主要分兩個部分:一個部分是界面設計,另一部分就是在界面的控件里編寫相應的代碼。下面我主要介紹對界面部分的教學心得。其中VB界面的學習主要包括常用控件、屬性、資源管理器的學習,這些內容,學生只要熟悉操作,一般都可以掌握,而利用微課程的優點,可以讓不同進度的學生通過自學微課程,迅速縮小學習差距。具體做法如下:教師在課前精心組織,以VB常用控件的使用、屬性設置為重點,利用微課錄制軟件Camtasia Studio把教師的講解聲音和操作錄制成一個6分鐘左右的視頻,這樣在課堂上教師只要把這個視頻分發給學生或者放在教學平臺上,學生就可以隨時通過這個視頻給自己查缺補漏,完成本節課的教學目標,實現課堂教學的均衡。當然,在學習到語法內容時,也可以利用微課程來進行輔助教學,比如前面接受的三種程序結構,涉及語法知識,教師同樣可以預先錄制好語法講解的微課程,滿足學生的不同需求。
在我看來,《算法與程序設計》是一門技術型課程,教師不能按部就班地照著課本的內容講解。因為講授這門課的目的不是單純地讓學生識記那些語法語句,而是要讓學生掌握VB語言這個工具,解決實際的一些與數學相關的問題。正所謂“授之以魚,不如授之以漁”,學生只有真正掌握并會運用VB語言,才能在碰到問題時加以解決。因此,本文中提到的教學措施和手段,目的在于構建能培養學生的學習興趣、促進學生實踐能力、提高教學效率的課堂模式,踐行新課程中培養學生動手能力的要求。