國家教育部制定的《普通高中技術課程標準(實驗)》要求,學校在開設必修模塊教學的基礎上,“至少應開設算法與程序設計、多媒體技術應用、網絡技術應用、數據管理技術中的兩個,也要制定規劃,逐步克服經費、師資、場地、設備等因素的制約,開出包括人工智能初步在內的所有選修模塊,為學生提供更豐富的選擇[1]。”從目前高中信息技術課程的教學情況來看,“算法與程序設計”模塊位于選修模塊的首位,但其教學現狀卻令人擔憂。
一、當前的困惑
針對“算法與程序設計”模塊教學現狀,筆者通過問卷調查、座談等多種方式了解該模塊開設率偏低的原因。同時查閱專業數據庫,綜合全國其他教師的觀點,歸納出了當前開展“算法”模塊教學存在的主要困難。
從學生角度來看,開展“算法”模塊教學主要有以下困難:1)學習心理上有障礙,學習內容實用性不強。教材上的案例多為數學問題,一類為一眼就能看出答案的問題,對這類例題學生產生的疑問是:“這么簡單的問題為什么要這么麻煩,要計算機來解決。”另一類是數學課上怎么都弄不明白的問題,信息技術教師又在不停地重復著這些難題。2)理論課枯燥,沒有聯系實際生活,趣味性不強,難于激發學習興趣。3)沒時間做作業,頭腦中的知識銜接出現斷點[2]。
從教師角度來看,開展“算法”模塊教學的困難主要體現在以下幾點:1)難以激發學生學習程序設計的興趣。教師大多采用傳統的先講后演示、學生先聽后編程的教學方式。學生在聽或者看的過程中往往注意力難以集中,到實踐編程時自然就無從下手。2)基礎知識與理論內容多,不講學生不明白,講多了學生沒有耐心聽。3)課時少,內容多,課時安排時間間隔長,遺忘率高。模塊中包括大量的數據、語句、過程以及函數等基礎知識,需要教師詳細地講解,學生在課堂上通過大量地訓練才能熟練應用。講解一個完整的算法往往需要一兩節課時間,而要讓絕大多數的學生真正能自主編寫,甚至需要投入更多的時間,要學生全面理解算法并學會編程難度偏大。
二、課程的核心價值
信息技術課程的發展經歷了程序設計文化論、工具論、信息素養論等幾個不同的階段。社會發展與需求的變化推動信息技術日新月異地發展。作為信息技術學科的一線教師,筆者也時常在想:“‘算法與程序設計模塊作為信息技術課程的一部分,教學目標是什么?它的核心價值在哪里?究竟培養學生什么能力?能否挖掘一些該模塊特有的東西?”
筆者結合多年的教學實踐,將本模塊的教學目標定位于:打造程序設計文化,培養計算思維以及算法思維。一線教師應站在更高的角度去審視課程,不僅要教會學生編程及其他技巧,還要通過編程將計算思維、算法思維等滲透于教學中,充實和完善信息技術學科的價值。
信息技術,尤其是程序設計,在人類文化中占有一席之地。首先,人類生存要運用工具,特別是要運用工具來解決問題。計算機是大腦的延伸,如何讓人和計算機進行溝通,就產生了計算機語言。而如何把人類的語言告訴計算機,就產了程序設計語言,也就是人們所說的程序設計文化。從最原始的計算的能力到人的自然思考方式,再到機器語言、匯編語言、高級語言的出現,以至現在的讓計算機理解人們思想的自然語言,程序設計語言的每一次發展都對人類產生了重大的影響。其次,在工作生活與學習中,很多時候解決問題需要有一種計算思維。比如有一首詩的內容為“白日依山盡,黃河入海流。欲窮千里目,更上一層樓”,如果用計算思維的觀點來看,其實就是在六千多個漢字中選取20個漢字進行排列。六千多個漢字如果讓計算機來排的話,有很多種可能,有些排列可能人類窮極一生都無法想到。但是詩人很容易地找出了20個漢字,并且排列開來,這就是詩人的一種靈性和智慧,這是計算機所不具備的。這種情況下如何促進人與計算機的交流呢?這就需要人具備計算思維來告訴計算機該怎么做。最后,人具備計算思維,而如何用計算機的語言把它呈現出來,就需要算法思想的指導。這種算法思想就是人的思維和計算機溝通的一種途徑與方法。
三、教學策略及方法
1.深度挖掘課程思想
傳統意義上對程序設計的理解是:用計算機編寫程序解決問題,經歷分析問題、設計算法、編寫程序、調試運行與檢驗結果等過程。在這種觀念里,“程序”是低于“算法”的存在,是具象的,是由給定語言環境中的若干條代碼組成的代碼群。而“算法”則是高于“程序”的,是相對抽象的。“算法”超越了具體語言,是程序設計的靈魂,因而更加貼近程序設計的本質。
但是,學生對“算法”概念感覺生澀,對“算法”的認知依然有許多困難。因為“算法”概念并不是最貼近學生生活經驗的東西,學生從生活經驗中提取“算法”并將其遷移到真正的“算法”概念上來,需要經歷一個艱難的過程。顯然,基于“算法”概念走進程序設計,不能算得上是一條令人滿意的途徑。
程序設計的本質是什么?程序設計無非是使用一組預設功能的指令集去完成特定的任務,所謂的“一組預設功能的指令集”,就是一套為了實現特定功能的人機對話,而給出的一套人工語言。在“人機對話”這個意義上,“指令-程序-任務執行”更能彰顯程序設計的本質,“算法”無非是建立在“指令-程序-任務執行”基礎上并服務于具體任務的方法而已。需要注意的是,這里的所謂“程序”已非前述“程序”,前“程序”指的是一組代碼,此“程序”指的是解決問題的過程[3]。
或許教師要換一種思路開展程序設計的教學。在程序設計學習之初,教師可以為學生提供一個需要解決的生活中的具體任務,讓學生分析解決該問題需要幾步,設計出解決問題的過程,得到這個“程序”,而后再引導學生提取其中的指令,得到一組“指令集”。例如,設計一個“抽簽器”程序。教師提出問題之后,首先分析設計程序界面,有哪些對象,需要哪些控件,每個控件的功能是什么,如何實現這些功能,最終應用相應的代碼來實現功能,形成“指令集”,整個過程完全沒有涉及“算法”。
在此基礎上,教師可以讓學生結合生活中的實例反復訓練,從而提高“指令集”的復雜程度。譬如先讓學生在VB環境中進行問題解決,分析需要經歷哪些步驟,其中的指令有哪些。并逐漸涉及分支、循環等結構,得到功能逐漸強大的指令集。用這種方法學習到的“程序設計”,是把握住通過人機對話實現問題解決的程序設計,是將問題解決方法(工具)和問題解決過程融為一體的程序設計,是面向貼近生活經驗的問題解決的程序設計。endprint
教師在開展“算法與程序設計”模塊教學工作中,遵循“提出問題-解決問題的過程-指令實現”這樣一條線索,“解決問題的過程”即“程序”,其中涵括算法。因而,“算法”變成位于“程序”之下的概念,屬于方法層面,而“程序”在層次上則反超“算法”。這種教學策略不需要譯碼,更貼近學生生活經驗及學生的認知起點,有利于啟發學生的學習。
2.整合重組信息技術課堂
信息技術學科存在課時少、內容多、鞏固難等實際困難。而《普通高中技術課程標準(實驗)》中提出的“信息技術和數學課程內容的整合”為指導課堂教學提供了全新的理念。如,人民教育出版社出版的高中《數學》第三冊(必修)第一章“算法初步”介紹了算法與程序框圖、基本算法語句以及算法案例等內容,基本涵括了“算法與程序設計”模塊中的程序設計基礎知識。因此,教師合理的做法是調整模塊教學內容的次序,將“可視化編程的概念與方法”移到模塊最前面,這樣學生在學習初期就可以利用可視化編程動手解決一些小問題,初步具備可視化編程的能力。當數學課堂完成“算法”教學內容之后,教師再來講述編程的基礎知識,自然就有事半功倍的效果。
在課時的安排方面,目前大體有兩種情況:一種為1周1課時的情況,一個學年完成一個模塊的教學工作;另一種為1周2課時,一個學期完成一個模塊的教學工作。不過,絕大多數學校的2課時都是分開來排課的,譬如星期二1節、星期五1節等。但是,程序設計課作為實踐性極強的一門課程,1節課的時間既要學習新知識,又要實踐鞏固它,難以取得滿意的效果。較好的做法就是兩堂課連排,共計80分鐘,教師大概用20多分鐘精講新知識,剩下時間讓學生動手編程實踐,深層理解,鞏固新知識,避免出現知識銜接的斷點。
針對各章節的基礎知識及算法等精講內容,教師可以適度地開發一些微視頻,建立微課網站,用于學生課前預習或課后復習鞏固,把有限的課堂時間更多地讓位于師生討論、交流與探究等活動。
傳統教學過程是,教師每講完一個新知識,隨后布置任務讓學生編程實現。學生往往覺得教師布置的任務并不是自身想要做的,難以體現編程的價值,久而久之學習編程的興趣下降。比較恰當的做法是,教師可設計開放式的實踐任務,要求任務主題明確,有個性、有創意、內容積極向上即可。然后,教師將整個班級分為若干個學習小組,每小組4人,從學生的生活與學習出發,由小組的4個同學討論確立小組任務的主題。主題確立之后,通過小組交流、探究、合作互助等方式,共同完成實踐任務。設置開放性的任務,不僅訓練了學生編程的技巧,更在開放的學習過程當中,將學生的思維培養與能力培養更好地融入實踐任務中[4]。
3.激發學生學習的興趣
目前,信息技術課的教學目標定位于:培養學生的信息素養,即信息時代應具備的獲取信息、處理信息、加工信息、交流評價信息的素養,其著力點在于培養學生的技術素養。
技術素養是信息技術有別于其他學科的明顯特征。哪些技術是深受學生歡迎和喜愛的呢?毫無疑問是實用性技術,即能夠幫助學生解決現實生活中的實際問題的技術。例如,在講授“可視化編程的概念與方法”這節內容時,教師可以讓學生編寫一個倒計時程序,用于班級辯論會等活動。學生會感覺到程序是有用的,體驗到成功的快樂,獲得學有所得的滿足感,學習積極性與主動性自然就高。
生活是取之不盡的教學源泉,學生熟悉的日常生活經驗對其學習和能力的培養具有持久而深刻的影響。因此,教師在教學過程中要善于建立程序與生活實際的聯系,創設出貼近學生生活實際的問題情境,把生活中喜聞樂見的問題逐步提升為編程思想,從而激發學生的學習興趣,創造學生主動參與的學習氛圍,充分調動學生的積極性和主動性[5]。
如在講述“窮舉法”時,教師可以首先通過猜密碼來導入教學,然后揭示QQ密碼被破解之謎,進而提出思考問題:如何防范密碼被破解?從現場教學效果來看,學生熱情非常高。這樣的教學情境引入法,非常貼近學生的生活,情境和任務的設計思路也非常貼近吻合,所以很自然就將窮舉的算法思想展現出來。
游戲教學法也是經常使用的教學技巧。游戲教學法就是在教學中盡可能將枯燥的語言現象轉變為學生樂于接受的、生動有趣的游戲形式,為學生創設良好的學習氛圍,使學生在玩中學,在學中玩[6]。游戲教學法可以大大調動學生的學習興趣和求知欲望,培養學生的動手能力,幫助學生深刻理解理論知識,有助于學生的互助式學習。
在講述“算法與算法描述”章節內容時,學生對“什么是算法”、“算法的特征”等問題感到晦澀難懂,教師可采取如下教學方法,如在情境導入環節引入一個1-100之間的猜數字游戲,看誰用最短的時間猜出結果,繼而剖析猜數字程序的算法實現過程,學生對算法的理解肯定更加深刻。在講述窮舉、排序、遞歸等算法時,適當地開發一些小游戲,展示算法實現的全過程,效果肯定比教師在課堂上干巴巴的講授要好。
另外,信息技術學科不是高考科目,學生的學習主動性往往不足。針對這種情況,教師需要適時地對學生進行教學評價,及時進行教學反饋,教師還可以通過評價激發學生的競爭意識,營造出競爭的學習氛圍。
4.半成品加工策略或程序填空
鑒于有限的教學時間、有限的教學空間和參差不齊的學生基礎,“半成品加工”策略是很好的教學突破口。“半成品加工”提供了相對完整的作品,只是對教學的內容某部分“留空白”,讓學生在短時間內體會到技術操作的方法和信息素養的內涵,提高了講解、理解和實踐的效率,并且優化學習的情景與練習的環境[7]。
“半成品加工”策略主要應用于課堂教學的演示。在教學中,它可以配合講解基本的方法與過程,突出教學的重點。同時,學生通過閱讀程序,了解別人的編程思路以及實現算法,有利于培養算法思維。
應用“半成品加工”策略,可以為學生提供學習情景,回避技術盲點。所以提供的半成品往往是大半的成品,只差一點就完成了。比如,在“算法”模塊教學初期,由于學生尚不具備系統的編程知識,動手編寫完整的程序存在困難,教師針對教學內容在程序某部分“留白”,學生填空解決關鍵問題,大大提高了課堂的效率。endprint
5.恰當運用項目教學法
項目教學法就是在教師的指導下,將一個相對獨立的項目交由學生自己處理的方法。信息的收集、方案的設計、項目實施及最終評價,都由學生自己負責,學生通過處理該項目,了解并掌握了整個過程及每一個環節中的基本要求[8]。
教學實踐中,我選取了高一年級2個平行班作為實驗班,運用項目教學法,讓學生設計項目,應用VB技術,完成教學內容“數據庫管理軟件的開發”。通過對比教學,我發現實驗班的學生對數據庫管理系統的開發流程理解非常深刻,對程序設計基礎知識和VB可視化編程的概念和方法也有更深入的認識。其間通過筆試和上機考試考核學生的學習情況,結果顯示,實驗班大部分學生的基礎知識理解、上機操作、界面設計、解決問題能力等都比非實驗班有了明顯的提高,平均分比非實驗班高出近10分。
項目教學法的關鍵,在于設計和制定一個合適的項目,項目既要適合教學目標的實現,又要具備可操作性。項目開發中要進行有效分工,每位學生根據自己的能力負責相應的子任務,因此項目教學法的一個很大的優勢就是能讓不同層次的學生都參與到項目的開發過程中,體現了分層教學的思想。
當前,在開展“算法”模塊教學過程中存在著一些困難,但困難只是暫時的。因為“算法”模塊本身具有無窮的魅力,學生通過編寫程序解決一個個鮮活的問題,會給他們帶來無限的學習動力。教無定法,只要結合當地的學情,有針對性地找到適合學生自身的教學策略與方法,“算法”模塊定能煥發其應有的生命力。
參考文獻:
[1]顧建軍,李藝,董玉琦,等.普通高中技術課程(實驗)解讀[M].武漢:湖北教育出版社,2004.
[2]曹雪麗.高中“算法與程序設計”教學四部曲[J].中小學信息技術教育,2012(7).
[3]李藝,朱彩蘭.信息技術課程思想梳理思路簡議[J].電化教育研究,2014(4).
[4]周以真,王榮良,李冬梅,等.信息技術課程的反思與計算思維教育的必要性[J].中國信息技術教育,2013(6).
[5]喻文喜.“程序生活化”的誤區及其反思[J].中小學電教,2009(12).
[6]祝智庭,鄧鵬,孫蒞文.娛教技術:教育技術的新領地[J].中國電化教育,2005(5).
[7]王愛勝.“半成品加工”策略“加工”啥?[N].中國教育報,2005-6-13(6).
[8]項目教學法[EB/OL].http://baike.baidu.com/view/2062970.htm?fr=aladdin.
(作者單位:廣東省中山市中山紀念中學)
(責任編輯:任媛媛)endprint