《算法與程序設計》的學習比較抽象、枯燥,很難調動學生的學習興趣,要想減少這個問題給教與學帶來的麻煩,我們應該做到以下幾點:
首先,要讓學生認識到該部分內容的重要性。著名瑞士計算機科學家N .Wirth教授提出過一個公式:程序=數據結構+算法。就是說,一個程序應包括以下兩個方面的內容:(1)對數據的描述,即數據的結構;(2)對操作的描述,即操作步驟,也就是算法。算法是程序設計的靈魂和核心,也是數學思維的重要載體。算法與程序設計的學習有助于培養學生嚴謹的邏輯思維、扎實的學習態度和解決問題的程序化能力。
其次,要注意學科的內部聯系與學科之間的聯系。學生通過對“信息技術基礎”部分的學習,已經具備了一定的信息加工、處理與交流的基礎,知道使用計算機解決問題的方式多種多樣,而程序設計是其中的一種。教師可以讓學生從“信息的編程加工和智能化加工”知識入手,把它與我們現在要學習的程序設計相比較,初步感受利用計算機程序解決問題特有的魅力。學生在高一數學課程的學習中,也已經學習了一些算法的基礎知識。在人教版《數學必修三》中的第一章就是算法與程序框圖、算法語句、算法案例的知識。我們還可以讓學生從熟悉的數學知識入手,自然過渡到算法與程序設計的學習。兩門學科在學習方法上有相互借鑒的意義,這樣對兩門功課的學習都有促進作用;應該注意與數學課程中有關內容的銜接,要強調理論與實踐的結合,引導學生注意尋找、發現身邊的實際問題,進而設計出算法和程序去解決這些問題。
本部分內容強調的是通過算法與程序設計解決實際問題的方法,對程序設計語言的選擇不作具體規定。因此,應注意在學生原有知識與學習經驗基礎上,引導學生進一步學習算法、程序設計的相關知識,體會算法與程序設計在計算機解決問題過程中的地位與作用,比較完整地認識利用計算機解決問題的過程。在教學過程中我們還應注意活動方式的多樣性,通過比較、探究、討論、交流等方式激發學生的學習熱情,培養學生的學習興趣,引導學生學會自主創新學習,培養良好的學習方法與學習能力。
再次,通過學習與生活中的事例讓學生感受到利用計算機解決問題的必要性。例如,對于數字的排序,教師給出一組數量較少且無序的數字讓學生進行從小到大排序,學生可能很快就能完成,教師通過不斷增加數值的量讓學生繼續完成所要求的任務,當數量到了一定程度的時候,人工排序就感到無能為力了。在案例中教師不要直接告知學生利用計算機解決問題的必要性,而是通過實例讓學生不斷地感受人工求解問題的局限性與計算機求解問題的優勢,并通過學生的充分討論,讓他們潛移默化地感受到利用計算機解決問題的必要性。
選擇什么樣的問題切入是教學成功與否的關鍵所在。在課程入門階段,教師需要根據學生特點把握好度,不妨選擇最簡單的問題來進行教學,例如兩個簡單數字的交換問題在我們學習當中是如何實現的,而利用程序又如何解決,需要什么樣的算法(該問題和生活中的兩杯子水的互換很類似,要借助第三只杯子,而在算法的設計中要引入第三個變量)。這樣的問題貼近我們的生活而且又很好地體現了算法的思想與程序的設計,學生在學習的時候也比較容易接受和理解。隨著學習的深入,解決的問題也逐漸復雜起來,但是不要脫離學生的知識背景,借助函數圖像知識的背景,從演示出學生熟悉的y=x2函數圖像的程序入手,提出如何利用計算機畫各種函數圖像的問題。該問題從學生已有的知識和人工畫圖經驗出發,引導學生理解計算機畫圖的過程,喚起學生的求知欲望和學習興趣。在這些問題的解決中要讓學生思考以下幾個問題:人在計算機解決問題過程擔任什么樣的角色;如何利用計算機解決問題;利用計算機解決問題與人工解決問題有何區別,利用計算機解決問題的優勢是什么;算法與程序設計能夠解決什么樣的問題等。
最后,理論與實踐要密切結合起來。在學習之初我們可以多安排些理論課,但是我們不能老是“坐以論道”,要多讓學生進行上機實際操作,學生的興趣之火才能持續燃燒。只有上機操作,才能發現存在的問題,并尋求解決的方法。在計算機上實際編程解決問題的時候,我們必須注意以下幾點:對初學者而言,理解算法的概念、特征、作用需要一個過程,實際的程序輸入更是規則性很強。課前教師必須充分準備,可以設計多個層次的問題,難易度一定要把握好,要讓每一個學生都能有事情可干,各得其所。也可以通過呈現一組比較簡單的現成算法,讓利用計算機解決的過程有一定的復雜性,教學中需要循循善誘,把握好教與學的互動關系。對于學生要建立評價機制,對于學生提交的作業及時地進行批閱和評比,鼓勵先進與鞭策后進同時進行,以便在課堂上形成你追我趕的良好學習氛圍。學生逐步掌握了一定的算法思想以后可以通過一個問題的不同算法(相當于一題多解)的比較,讓學生感悟算法的特性。