摘要:本文針對高中階段目前普遍存在的“算法與程序設計”模塊難教難學的現象,結合普通高中信息技術新課程標準的要求,闡述了“易學、樂學、巧學、悟學”的教學策略。同時用具體的案例說明了“算法與程序設計”模塊的教學對實現信息技術課程核心價值、促進學生思維發展的作用。
關鍵詞:信息技術;算法;程序設計;教學策略
“算法與程序設計”模塊是普通高中信息技術課程的重要選修模塊之一,是普通高中信息技術課程發展過程中積淀的精華。在這一模塊中,對算法的體驗和設計算法解決簡單問題應是教學的第一重點。祝智庭教授認為,學生在學習普通高中信息技術課程的過程中,批判性思維、算法思維和創新思維是三種“實用思維”。通過“算法和程序設計”這一模塊的學習,學生不僅能掌握算法與程序設計的一般知識和技能,而且還能讓“算法思維”和“創新思維”得到有針對性的培養和訓練,從而促使其進一步發展,讓學生逐步形成“像計算機科學家一樣思考問題”的能力。
可是,目前普遍的現象是算法與程序設計模塊教學讓很多老師感到頭疼。學生通常也認為這部分內容枯燥而乏味,所以一些地方選修這一模塊的人數比較少。如何化解學生對這一模塊學習的畏懼心理呢?
我根據利用Pascal語言開展算法與程序設計教學的過程和經驗,總結了“易學、樂學、巧學、悟學”的教學策略,這一策略的實施,取得了較為良好的效果。
● 易學:突出算法體驗,降低入門難度
在進入程序設計這個單元的學習之前,絕大部分學生對程序設計和Pascal語言一無所知,甚至會覺得程序設計很枯燥很難。學生的學習產生困難的原因之一是對課程不了解,認為程序設計非常深奧,難以理解。因此,在這一模塊的第一節課,我并沒有直接與學生討論程序設計的問題,而是通過一些有趣的,與信息技術和學習內容相關的故事或事例來吸引學生的注意力,然后通過一些簡單的例子,讓學生體驗“通過設計程序解決問題”的過程。例如問題:甲、乙、丙三人共有24元錢,先由甲分錢給乙、丙兩人,所分給的數與各人已有數相同;接著由乙分給甲、丙,分法同前;再由丙分錢給甲、乙,分法亦同前。經上述三次分錢之后,每個人的錢數恰好一樣多。求原先各人的錢數分別是多少?
這個問題有一定的趣味性,而且對高中學生來說不難理解,學生通常都能夠通過“逆推”的方法得出結果。這個“逆推”的過程就是解決問題的“算法”,把“逆推”過程中的公式寫成表達式的形式,加上程序首部的變量說明就是一個完整的程序。
在我的教學設計中,這節課的重點是讓學生體驗計算機解決問題的過程,了解計算機解決問題的算法,而不是讓學生掌握程序設計語言的語句和語法。所以,我把事先寫好的程序通過網絡發送給所有學生,并且告訴學生運行程序的方法,讓學生直接運行程序。當學生在計算機上看到這段程序運行結果時,欣喜之情溢于言表,學生覺得“設計程序解決問題”原來就這么簡單!通過這樣的課,學生認識了程序,體驗了程序設計的過程,看到了程序運行的結果。這樣的課堂上,學生體驗到的是在進行思維訓練,而不是去堆積枯燥的代碼,逐漸消除了畏難情緒,對后續的學習充滿了期待。
把算法的體驗和設計作為課程的重點,不僅有利于降低學生的學習難度,同時也能使學生的“算法思維”得到進一步的訓練和培養,讓學生在解決問題的過程中能夠主動、合理地設計算法,尋求解決問題的最佳途徑,讓學生的“深層次信息素養”得到提升,逐步形成“像計算機科學家一樣思考”的能力,這也正是信息技術課程的核心價值。
● 樂學:分解復雜問題,培養學生興趣
我們都知道,當學生對所學的內容產生興趣時,就會從內心發出向往和強烈的求知欲望,產生積極、主動的學習動機。培養學生的興趣,除了引用趣味性的案例,還可以在教學過程中加以引導。在教學過程中,通過巧妙地設置層層遞進的問題,引導學生自主學習,讓學生在不斷突破“障礙”的過程中感受學習的快樂,使學生在興趣的“驅使”下,對程序設計樂此不彼。例如,在“循環結構”的學習過程中,我在兩課時的內容之間給學生設置“障礙”。第一課時,我提問:在屏幕上畫一個由10個圈圈組成的圖形。課堂伊始我便把在屏幕上畫一個圓的程序交給學生,此時學生很快就能猜到Circle函數中各個參數的含義,在他們進一步了解了屏幕分辨率與像素點的分布后,基本上都能使用手工修改圓心坐標或半徑的方式完成這個任務。圖1為學生編程繪制的作品。
雖然學生采用的是“手動畫圓”的辦法,但從學生畫圓的結果來看,學生不僅畫出了圓,而且對于圓的大小和位置做了精心的設計,當我展示這些由“圈圈”組成的美麗圖案時,學生發出了驚嘆。由此可以看出,學生在程序設計的過程中不僅理解了相關的知識,還融入了自己的創意,這樣的學習過程顯然是饒有趣味的。
到了第二課時,我提出這樣的問題:畫一個由100個圓組成的圖形怎么畫?當學生認為過程實在是太繁瑣而面露難色時,我告訴學生:“凡是重復性的工作,計算機一般都會有解決的辦法,重復就是循環。”我接著展示了用循環語句畫10個同心圓的程序,學生看懂程序后馬上會說:“老師,別說100個圓,1000個、10000個都沒有問題!”
“老師,如何同時改變圓心坐標和半徑呢?”有學生提出了這個問題。結合學生學過的解析幾何知識,一個通過循環變量計算圓心坐標和半徑的表達式很容易就得出來了。圖2為學生作品。
我在處理“循環結構”這一部分內容時,沒有讓學生一步到位達成最終的學習目標,因為學生的接受能力存在困難。我將學習目標分成兩個,讓學生在獲得成功、產生學習成就感之時學習興趣得以激發。
創新思維通常以靈活性、獨創性、流暢性、細致性或發散思維為特征。在這兩節課的學習過程中,學生通過解決“畫圈圈”這一問題,不僅學習了Pascal語言中函數、表達式、循環結構等知識,還借助解析幾何的知識,發揮了學習的主動性,得到了具有創造性的學習結果。
算法的多樣性、程序設計的靈活性,為學生進行獨創性的思維活動、編寫個性化的程序提供了有效的平臺,也為發展他們的創新思維創設了條件。事實證明,我們只要教會學生必要的程序設計知識,學生就能編寫出很多個性化的程序。這個新想法、新程序不斷涌現的過程,就是學生積極思考,創新求異的過程。
● 巧學:構建課程體系,化解學習困難
對于算法與程序設計這一模塊,我沒有照搬教材,而是利用eClass網絡教學平臺,根據學生的特點,對教材進行了二次處理,構建了自己的“網上教室”。在我的算法與程序設計網上教室中有學習范例、學習資源、交流空間和評價工具。學生的學習主要通過參考范例、研究資源、相互交流完成,學生利用評價工具提交作業。教師對作業進行及時的批改、展示和點評,學生也可以相互鑒賞,互相點評。
圖3是“畫圈圈”學習內容的一部分。在我的“網上教室”中,“程序設計”這部分的內容與現行教材完全不同。沒有傳統教材中,先介紹數據類型、命令和函數,再介紹語法、算法的知識呈現順序,而是以問題為核心,以解決問題的思想方法為主線,以解決問題的過程為載體,讓學生在活動的過程中學習算法與程序設計的相關知識。
例如,在“畫圈圈”這一例子中,除了給出的范例之外,在“網上教室”的學習內容中還提供了相關的資源鏈接,學生可以通過閱讀、研究這些資源來學習相關的知識(而不是通過教師的說教或講解)。
命令、函數和語法都是“死”的,解決問題的“思想”和算法卻是活的。應該讓學生從閱讀程序、理解算法入手,嘗試修改程序,進而解決問題。這樣的學習過程,沒有“滿堂灌”的講解,教師只需對關鍵的內容稍作說明;學生也不用面對大量枯燥的文字,只要帶著問題有針對性地閱讀,在“網上教室”的學習過程中,我常常能夠感受到學生愉悅的心情和思想的火花。
● 悟學:及時因勢利導,提升情感體驗
根據課程目標的要求,我們的教學不僅要讓學生掌握一定的知識和技能,體驗解決問題的過程和方法,培養和發展學生的思維能力,同時還要讓學生獲得愉快的情感體驗,形成科學的態度,養成正確的價值觀。
在學習程序設計課程的起步階段,學生還是碰到不少困難。由于是初次接觸Pascal語言,沒有編寫程序的經驗,所以學生會被各種簡單的錯誤所困擾,如保留字拼寫錯誤、用了中文標點、漏了分號和冒號等。但是當學生一個一個改正錯誤,直到程序能夠正常運行的時候,他們感到開心極了。
學生編寫的程序,往往含有比較多的邏輯錯誤。對于其中比較典型的錯誤,教師可以挑選出來,引導學生一起糾正。但是如果對所有的錯誤教師都要一一糾正,不僅占用太多時間而且很不必要。教師可以要求學生將編寫的程序輸入到計算機,進行上機調試。對于語法上的錯誤,教師可以幫助解決;對于邏輯上的錯誤,如得到了不正確的結果,應該讓學生獨立分析、修正、改進程序。
對于程序設計的學習,學生的收獲并不僅僅在知識和技能上。幫助學生從程序設計的學習過程中總結出學習的規律,提煉出人生的感悟,進而把這些收獲遷移到其他學科的學習,甚至影響其一生。學生走出了我們的教室,即使忘記了所學的語句或程序,忘記了程序設計的方法,但能夠留下比這些更為寶貴的精神財富,這也許就是新課程所追求的第三維目標吧。
恰當地處理課程的內容,采用有效的策略激發學生的興趣,引導學生自主學習,并對學生的學習過程作出及時準確的評價,這樣可以使我們的課程得到順利的實施。