江蘇省太倉高級中學(215411) 陳 英
Python 走進教材是高中信息技術新課程改革的一大亮點,也是高中信息技術課程培養學生計算思維的有力舉措。當下,在高中開展編程教學是否可行的問題已無須討論,關鍵是如何有效開展編程教學。是否可以參考大學編程教學的做法?如何讓高中生了解編程,愛上編程?要厘清這些問題,教師必須靜下心來,仔細剖析高一編程教學的“天時”“地利”“人和”,分析高一編程教學的現實問題和主要矛盾,只有這樣,才能做到有的放矢,真正實現減負增效。
高一編程教學主要存在以下矛盾:
編程是數學知識與計算機知識的綜合體,相關知識點具有高度抽象性,對學生的推理能力、分析綜合能力要求很高,因此,編程教學難度大就成為不可回避的現實問題。學生要想學好編程,不僅要在課堂上全身心地投入學習,還要在課后消化和鞏固。但是,要在高一開足編程教學課時幾乎是奢望,學生的課后消化和鞏固更是難以實現。可見,教學難度大和課時不足的矛盾很難調和。
編程是一門具有鮮明特色的課程,其教學知識點非常嚴謹。雖然高一編程教學考慮到了高中生的能力水平和認知特點,對教學內容進行了適當刪減和調整,但是對高一學生來說仍然是巨大的挑戰,如果照搬照抄大學編程教學的方法顯然不合適。高中生既理性又感性,他們既希望所學的知識點科學而嚴謹,又希望它有趣而生動。教學知識點的嚴謹性和學生對教學內容的趣味性需求之間的矛盾日益突出。
放眼編程教材,為了能很好地詮釋單元知識點,各單元例題均選擇具有鮮明特點的經典案例,比如在講解單分支結構時會選擇絕對值案例,在講解多分支結構時則使用學生成績等第的例子。從單元知識點的角度看,這兩個例子非常經典,也便于上手,非常適合單元教學,但是,如果放眼整本教材,從課程整體知識脈絡看,則有“獨立”的意味。程序設計的目的是解決生活實際問題,不能只停留在單個知識點問題的理解和應用上。編程人員如果不能根據實際情境,靈活運用知識解決問題,則不能算是一個合格的編程者。而現實問題往往是復雜多變的,因此單元知識點的獨立性和現實問題的復雜性之間的矛盾亟待解決。
如此看來,在高中進行編程教學需要勇氣,更需要智慧。那么,如何化解上述三個矛盾呢?筆者認為,可以從以下思路入手。
要化解教學難度大與課時不足的矛盾,唯有在“精簡”上做文章。從課程培養目標看,高中階段只需培養學生的編程素養和計算思維,讓學生對程序設計有個總體的感性認識;從教學知識點看,只需學生掌握3 種基本程序設計結構:順序、分支、循環,并能夠解決簡單問題。因此,教師應重新梳理高中編程教學的核心知識點,并對其做“減法”,大刀闊斧,去粗取精。
要化解教學知識點的嚴謹性與學生對教學內容的趣味性需求之間的矛盾,需要在案例上下功夫。一個好的案例,必須與學習者的生活經驗相關聯,而且必須是豐富的、有趣的關聯。高中生的學習注意力不能長久集中,學習注意力的持久度與案例的趣味性正相關,因此,選擇的案例須貼近生活且有趣,并且采取小步子、逐步求精的方式呈現。
要化解單元知識點的獨立性與現實問題的復雜性之間的矛盾,必須打破單元壁壘,對教學知識點進行打散重構。我們要先思考:一個案例只能承載一個知識點嗎?各個單元之間能否融合重構?很顯然,通過精挑細選,一個合適的案例完全可以承載多個知識點,一個合適的案例也可以打破單元間的壁壘。通過對教學知識點進行打散重構,可將多個單元的知識點融合為一個整體。
通過打散重構操作,將多個單元知識點融入一個案例中,并將這個案例做大做精,這種方法我們把它形象地稱為“一例貫通”教學法。實踐表明,基于高中生的學習能力和學習特點,采用“一例貫通”教學法開展高一編程教學切實可行,且能減負增效。下面,筆者結合自身的編程教學實踐,分享一個“一例貫通”的教學案例,以供大家參考。
[案例]四則運算出題器。
高一編程教學涉及程序設計的基礎部分,要求學生掌握基本輸入與輸出語句,變量定義以及順序結構、分支結構、循環結構的基本用法,模塊化編程(函數)略有涉及。綜合考慮以上教學要求,“四則運算出題器”是一個極好的跨單元融合案例。下面從知識點覆蓋范圍、所需課時、思維深度等方面進行說明(如表1)。

表1
傳統的單元模塊教學法,按知識點來劃分教學單元,組織教學。雖然清晰、易于開展,但是容易造成知識點之間的孤立,使知識點之間的關聯意識和關聯行動不易發生,學生更多的是對單個孤立知識點進行學習和應用,這樣的學習是機械的、低效的。如何讓學習真正發生?這就是需要教師打破單元間的壁壘,從整本教材角度,重新思考和構建知識點,以“大單元”的視角組織教學。
教科版必修1 教材第二章的內容是編程計算,共分為4 個子單元,涉及“分支結構”“循環結構”“函數”三個重要知識點。按照傳統的教學方式,教師會按順序逐個擊破。如在教學分支結構時,教師會從單分支結構過渡到多分支結構,如例題選擇方面,常選擇BMI、成績等第等經典實例。在教學循環結構時,教師較多的是選擇累加、累乘、存款計算、九九乘法表等經典實例。不可否認,這些經典實例對于單個知識點的理解非常有用,但與前后知識點間的聯系不夠密切。本章的教學難點是函數。函數是模塊化編程的起點,對學生計算思維的培養、編程能力的提升有重要作用。按照傳統做法,教師多是讓學生模仿,對函數有個初步的認識,很少讓學生真正體驗函數在高階編程中的重要作用。“函數”內容的教學應該以更直觀的方式,讓學生自己分解問題,運用函數的思想解決較復雜的實際問題。
針對單元模塊教學存在的問題,教師對多個知識點進行整合、重構,進行“大單元”教學。從SOLO思維評價模型看,這種教學法能讓知識點之間產生更多的關聯,把零散的、孤立的知識點組合起來,更切合具體情境復雜性、實際問題靈活性的特點。
在進行“大單元”教學時,教師可以試著尋找一種方式,把“大單元”知識點融合到一個綜合案例中。這個案例最好來源于生活,與生活經驗相關聯,以更好地激發學生的學習熱情,實現經驗遷移。而“四則運算出題器”就是一個有效整合案例。在設計“四則運算出題器”時,可從最簡單的順序結構入手,首先完成手動出題的簡易加法器,接著進行對錯判斷,融入分支結構知識點,然后實現自動出多道題,滲透循環結構知識點,升級程序,從簡易加法器升級為四則運算出題器。此處要運用函數思想,繼續升級程序,使之能夠提示正確率,甚至能夠將結果通過Python的Matlab庫進行數據可視化……本案例整合了“順序結構”“分支結構”“循環結構”“函數”等知識點。學生在“認知—實踐—認知”的過程中不斷豐富自己的學科知識,提升自身的編程素養和計算思維。
1.“四則運算出題器”需求進階分析
簡易加法器(手動出1 道題)—簡易加法器(自動出1 道題、判斷對錯)—四則運算出題器(自動出1 道題、判斷對錯)—四則運算出題器(自動出多道題、判斷對錯)—四則運算出題器(自動出多道題、判斷對錯、提示正確率)—四則運算出題器(實現四則運算模塊化)
2.“四則運算出題器”的功能與知識點的對應關系
簡易加法器(手動出1 道題)——定義變量、轉換數據類型、輸入與輸出語句
簡易加法器(自動出1 道題、判斷對錯)——引入隨機數模塊、多分支結構
四則運算出題器(自動出1道題、判斷對錯)——多分支結構(加、減、乘、除四種情況的分類處理)
四則運算出題器(自動出多道題、判斷對錯)——循環結構
四則運算出題器(自動出多道題、判斷對錯、提示正確率)——循環結構(循環嵌套、被除數與除數倍數問題、統計計算)
四則運算出題器(實現四則運算模塊化)——函數的運用
3.“四則運算出題器”的功能實現
“簡易加法器”樣例1:手動出1道題。

“簡易加法器”樣例2:引入隨機數模塊,自動出1道題,判斷對錯。

“四則運算出題器”樣例3:選擇加、減、乘、除其中之一,自動出1道題,判斷對錯。

BUG 修正:除法運算,被除數與除數倍數的控制。

“四則運算出題器”樣例4:自動出多道題,判斷對錯。

“四則運算出題器”樣例5:

BUG 修正:除法運算,被除數與除數倍數的控制,并統計練習的正確率。
“四則運算出題器”樣例6:運用函數,實現四則運算模塊化。

以除法模塊為例,加、減、乘代碼類似。
至此,一個功能相對完善的四則運算出題程序的代碼編寫完成。通過此例,將教科版必修1 教材第二章的知識點成功融合到一個樣例之中。學生親歷了一個小程序的完整誕生過程,從簡單到復雜,從頂層分解到局部實現。在整個學習過程中,學生的前期學習內容是后期學習內容的基礎和素材,后期學習內容是對前期學習內容的拓展和提升,環環相扣、層層遞進,使得學生能夠不斷體會學習后續知識點的意義和程序設計要精益求精,以及程序在解決實際問題方面的魅力。
從程序設計基礎知識點覆蓋范圍看,本案例涵蓋了Python 編程的全部基礎內容;從教學課時量看,采用“一例貫通”教學法能夠節省30%左右的教學時間;從學生思維活動深度看,“一例貫通”教學法更能有效培養學生的高階思維。“一例貫通”教學法在知識的起承轉合方面更符合學生的認知發展規律,它從一個最簡單的知識點開始,不斷地引發學生的認知沖突,從學生已有的生活經驗和學習基礎出發,讓學生在完善程序功能的過程中明了新知識的學習意義,主動建構和豐富新知識,讓學習真正發生,真正讓高一編程教學減負增效。