趙霞++張珣++韓忠明++嵩天



摘 要:針對在財經類大學非計算機專業計算機公共課程中培養計算思維、解決問題能力和創新能力的問題,分析引入Python程序設計的優勢,提出Python語言教學的四段教學法和演化式案例教學法,從心理認知機制角度探索培養計算思維、問題解決能力和創新能力的教學模式和方法。
關鍵詞:課程改革;Python語言;計算思維;創新能力;解決問題能力
1 背 景
對于非計算機專業人才培養的計算機技術課程教學定位,近年來國內外教學領域已經形成共識,即計算機技術課程的核心價值就是培養學生的計算思維,培養學生用計算機解決問題的能力,應該以計算思維為導向進行計算機技術課程的教學改革[1-4]。在共識基礎上,如何將計算思維培養在程序設計課程教學中落地是一個重要問題,由此帶來一系列值得思考的問題:怎樣結合程序設計內容培養非計算機專業學生的計算思維?如何結合學生所在專業(如注冊會計、國際貿易、金融、食品工程、機械等)需求,培養學生使用程序解決問題的能力,同時提升學生的創新意識和創新能力?
對于非計算機專業人才培養而言,計算思維教育的目的是培養一種思維習慣和用計算機解決問題的能力,像計算機科學家一樣思考、分析和解決問題,面對具體而復雜的現實世界抽象出信息處理的概念,基于概念來分析、綜合和演繹問題,進一步找出解決問題的方法;在實踐層面體現為利用計算機解決問題的能力,即利用程序設計語言或者軟件工具,將抽象概念和解決問題的方法變成程序或者操作步驟的能力。因此,非計算機專業的計算機公共課需要選擇合適的教學內容和教學模式作為計算思維和能力培養的載體,降低學生在理解計算機系統上的難度,并體現出計算思維中計算、抽象、自動化等核心概念;更需要給學生提供易于掌握的工具載體,使學生在學習和實踐中能夠體會到“具體問題抽象化,抽象解決方案具體化”的全過程。
2 研究現狀
計算思維最早由周以真(Jeannette M. Wing)教授準確提出并完整闡述[5]。計算思維是運用計算機科學的基礎概念進行問題求解、系統設計以及人類行為理解等涵蓋計算機科學之廣度的一系列思維活動。這些基礎概念包括仿真、遞歸、并行、抽象、分解、建模、啟發式推理、規劃、學習、調度等,希望人們能夠通過運用計算思維在各自的學科領域里面進行創造性的科學發現與技術創新。
國內許多高校都在尋求計算思維培養在程序設計課程上的具體落地途徑。能夠講授C語言課程的師資力量相對充足,因此許多高校開設C語言程序設計,采用傳統的教學模式,從數據類型開始由淺入深講解知識點,并配以大量的針對知識點的編程訓練,然而C語言體現的是“計算機系統結構時代”的計算思維外延[6],主要培養程序的高效運行模式,其底層系統級的特性更適合計算機專業學生學習。對于剛入學的非計算機專業學生尤其是文科類專業學生,通過C語言培養良好的計算思維能力會遇到較大困難,主要有3個原因:①高中階段的數學、邏輯及抽象思維訓練尚未讓學生達到順暢理解C語言的程度,表現為學生對編程還“沒有感覺”,學習C語言相對困難;②計算機體系結構相關知識和C語言語法的復雜性進一步增加了學習困難;③非計算機專業學生的專業學習和未來工作缺少C語言的應用場景,導致學生的學習動力不足。為了取得更好的C語言教學效果,教師需要在教學內容和教學方法上投入“更多”的時間和精力才能“略微”提高學生的學習興趣。
Python語言是一門發展了近30年的通用編程語言,語法簡單,接近自然語言,是使學習者不需要了解計算機底層知識而更多關注應用計算機解決問題的思路和方法,是“復雜信息系統時代”最直觀的表達工具,降低了學習的門檻。Python語言發展成熟,全部開源,大量第三方擴展庫為各個學科領域的專業問題處理提供方便易用的支持,學生可將其與各專業業務需求相結合,快速編寫解決復雜問題的可用程序和軟件,特別在圖形圖像、人工智能、數據處理和可視化等方面有得天獨厚的優勢。
Python語言是目前美國大學最受歡迎的程序設計語言,成為金融、商業、化學、工程等非計算機專業的首選語言課程。在我國,北京理工大學最早從2013年開始面向非計算機專業開設相關課程,隨后,南京大學、哈爾濱工業大學、中南大學等也相繼開設課程。截止2017年6月,全國近百所高校相繼開設針對非計算機專業的Python語言課程,國內教學改革如火如荼。在教育部愛課程網中國大學MOOC平臺上,出現了多門Python語言相關MOOC課程,在小象學院、實驗樓、優才學院等商業互聯網+教學平臺上,也出現了幾十門Python相關的課程,年均學習人數超過20萬。
面對Python語言的迅速發展和普及以及互聯網上豐富的教學資源和在線學習課程,國內高校面臨程序設計課程教學改革的難得機遇。北京工商大學從2016年開始嘗試把Python教學引入非計算機專業的計算機技術課程,已有教學實踐表明,Python語言程序設計不僅是計算思維培養的良好載體,而且利用Python特有的計算生態和優秀案例、基于MOOC和SPOC的混合教學模式所衍生出來的創造性思維和能力培養成果,也是令人鼓舞的。
3 計算思維從零開始:四段教學法
面對不知道計算機編程是什么及其跟自己所學專業有什么關系的學生講授Python語言程序設計,如何設計教學內容、節奏和方式,是一個挑戰。筆者在兩年的教學經歷中總結出一個四段教學的基本模式,即把一個學期的教學過程從預備級到高級劃分為4個階段——認識、會讀、會寫、會解決問題,每個階段的目標、做法、具體目標見表1。
第1階段是認識Python,為期2周。課堂教學介紹計算機基礎知識和Python基礎知識的同時,演示各種小例子程序。課后作業是讓學生執行現成的小程序,體驗程序執行的結果;讓學生了解用計算機解決問題的基本IPO(輸入—處理—輸出)模型,并且形成“Python程序蠻有趣”的認知。endprint
第2階段是會讀階段。通過拆解例題、解釋語句的含義、演繹解決問題的過程,不僅僅教學生學習Python語言的語法點,更重要的是引導學生理解程序是怎樣解決問題的。程序=算法+數據結構,一個好程序里蘊含的計算思維要素,遠遠超出一段文字描述。教學生讀程序,可以類比于欣賞一件藝術品。當我們教會學生欣賞程序時,也交給他們一把自學的金鑰匙,其重要性不言而喻。這個階段從第3周開始將一直持續下去,只是隨著學習的深入,閱讀程序更深入,技能更加嫻熟。
第3階段是會寫階段。對于零基礎或者文科背景的學生而言,花點時間專門糾正寫程序中語句對齊和程序段里的冒號是一件值得的事情。教師要讓學生意識到編程是一件非常嚴謹認真的事情,寫代碼需要準確的思維和判斷,不僅僅糾正的是一些學習習慣,更為重要的是心性的修煉;讓學生盡快轉換學習態度和思維模式是非常重要的事情。寫程序可以從解決簡單的問題開始(只有1~2行代碼),也可以從修改一個現成的復雜程序開始(10行甚至20行代碼)。教學實踐表明,由于生源差異,學生素質參差不齊。修改復雜一些的程序,意外的程序執行結果會給學生帶來智力挑戰或者意外的樂趣,可以刺激他們深入理解程序的邏輯流程、參數的含義以及程序構造的內涵,在做作業的過程中訓練邏輯性和嚴謹性。這個階段一旦開始,就會一直延續至終。
第4階段是會解決問題。期中以后,學生已經學完了Python的基本數據結構、控制結構、函數、迭代等內容,并且會使用turtle庫、math庫、random庫等第三方庫實現程序設計的基本功能,能夠解決一些問題。教師可以通過更為實際的、復雜的或者專門化的案例,教授解決問題的高級技巧和方法,包括如何抽象出問題的本質概念、用數據結構表達抽象概念、用流程圖表達解題思路以及借助流程圖優化思路、通過復用和函數優化程序等;還可以開展與專業結合的應用案例學習,如商業數據分析處理。
影響四段教學成功的因素,除了教師有效的引導、細致的監督考評、充足的課外編程訓練外,還取決于學生的學習心態和時間投入的保證。與C語言程序設計課程教學相比較而言,Python語言給學生留下的印象主要是簡單的語法和豐富的生態系統資源,可以使學生更快捷、方便地做出更多功能、更專業化的程序以解決實際問題,更易于建立成就感。
4 計算思維的顯化:演化式案例教學
以案例教學作為課堂教學的核心線索,以解決問題的需求組織知識點,是否具有更優的教學效果,是我們近年來一直探索的問題。傳統的程序設計課程教學大都以知識點本身的內在結構和演化邏輯組織教學,用實例說明語法和知識點的用法。知識的系統性比較強,有利于學生系統、全面、深入地掌握知識,但對于零基礎、非專業、缺乏學習動機的學生而言,學生容易在學習知識點的過程中迷失或者發出“我們學習這個有什么用,能做什么”的質疑。
解決這種問題的關鍵是回歸兩個基本點:課程教學目標和學習者普遍具有好奇心的心理特征。課程教學目標是培養計算思維和解決問題的能力,需要從擬解決的問題出發,分析抽取問題的本質,尋求解決問題需要的知識、工具和步驟,明確解決方案的步驟和預期的結果。就求知者的心理特征而言,在問題驅動下的學習是積極主動的,處于開放的心理狀態,能夠將學習到的新知識與大腦記憶中已有的知識點建立連接,所建立的知識體系與內在記憶和外在信息之間形成有機整體。如果教師能夠引導學生從問題出發,就更容易使課堂教學有吸引力和挑戰性,帶給學生更多的成就感。
我們基于已有的教學實踐和創新理念的文獻[7],提出演化式案例教學法,即課堂講授的內容以案例開頭,但問題及其解決過程是逐步演化和生長的,演化方式有兩種:種子生長式和關鍵路徑式。
種子生長式以簡單問題開始,逐步增加問題的變量和條件,引導學生不斷擴展解決問題的思路,引入新的程序設計語法要素和解題思路,逐步增加程序的復雜度。例如,從數字、字符數據類型開始,逐步演化到列表、元組、字典;從順序結構開始,演化到循環、分支、函數、迭代等結構;同時融入抽象、自動計算、復用等思維,編寫的程序像一顆種子長成一棵大樹一樣,由小變大,具有越來越多的功能和越來越復雜的結構。
關鍵路徑式以貌似復雜的問題開始,先引導學生運用流程圖工具,分析問題的本質以及解決問題的關鍵點和關鍵路徑,在問題空間里運用抽象、自頂向下、分而治之、逐步求精等思維拆解問題;然后再引導學生求解問題,運用系統模塊圖工具,在解空間里以自底向上、封裝與接口、聚合等增量式思維獲取解決復雜問題的最終解。編寫程序的過程像建筑工人做磚頭、搭架子、蓋房子或蓋大樓一樣:起初是一個個獨立功能的函數,有輸入輸出參數和處理過程,然后通過函數調用,連接成能夠解決問題的一組程序和文件。
當然,成功的問題驅動式案例教學模式對教師有很高的要求。首先,案例設計至關重要,關鍵要素包括知識點的組織、問題的彈性和解決方案的開放度。文獻[7]中已經提供了很多非常好的案例,如天天向上、文本進度條、七段數碼管、科赫曲線、中文文本分析、網絡爬蟲等,無論是在趣味性、實用性還是在問題的彈性、解的開放性上都具有鮮明的特色,都可以在課堂教學中采用上述的演化式案例教學法。其次,課堂講授是顯化案例設計的過程,教師對案例理解的深度、教師的授課技能和掌控課堂能力也決定了教學效果,需要教師不斷修煉提高。
5 Python 教學中的創造力培養
認知心理學有兩種重要的思維模式:發散思維和聚合思維[8]。向學生提出開放性的問題,啟發學生理解并發展與其專業或者興趣相關的其他領域的新想法和新觀念,是培養創新性思維和能力的關鍵要素之一。啟發式的課堂講授和隨后的開放問題,首先向學生提供了發散思維的起始點,引發學生自發的、直覺的、擴散式的發散思維過程。在問題的驅動下,學生會在大腦中搜索、篩選新的想法和方案,綜合先前分離的想法、概念或其他視覺信息、抽象符號,就可能形成創造性的激發和組合。
好的案例教學能夠把學生的創造性思維通過編程顯化出來,使其創作出意想不到的優秀作品,這也是Python語言程序教學實踐中的現象。例如,在講授函數和遞歸知識點時,以科赫曲線和太極樹為案例,講解自然界中一種普遍的分形現象:看似一個復雜的圖形實際上是由一個簡單的圖形,在參數不斷變化的條件下多次迭代產生的,如圖1所示。
課后作業是根據課堂學到的知識,自己編程創作一個有新意的程序。收到的作業體現了被激發的學生的創造力,為此我們專門組織了一次延續教學以演示和討論這些優秀的創意和作品,如圖2所示。
圖2(a)的3張圖是同一個程序執行過程中不同階段畫出的圖形。這些結果表達的是一點點微小的變異在無數次迭代情況下,演化出非常復雜的對象。背后的原理是什么、迭代次數與參數選擇怎樣影響結果、如何找到這樣的參數等問題,可以引發學生課上充滿好奇的討論,也可以成為引導教師和學生未來展開更深入的探討和研究的引子。
圖2(b)是一名注冊會計專業的學生用250行代碼畫出的藝術作品。在課堂討論中,教師帶領學生逐行分析源代碼,現場演示如何利用列表、函數等優化這個程序,使得程序更精煉簡潔,激發了更多學生的創作欲望并創作出后續的好作品。作品的創意之美令人驚嘆;而學生在課堂案例中吸取有效元素(如太極樹、迭代、函數、隨機數、列表等)基礎上展現出來的創造力,帶給我們非常有益的啟示,如果能夠加以利用改進教學內容,可以培養出更多的優秀人才。
6 結 語
針對互聯網與人工智能時代對非計算機專業人才的需求,教學實踐表明Python語言程序設計是肩負這個使命非常理想的載體。在實踐中探索的四段教學法和演化式案例教學法針對零基礎的非計算機專業學生特點,能夠激發學生的學習興趣,培養計算思維和解決問題的能力。此外,如果能夠將Python特有的計算生態資源和優秀案例與學生的專業或者興趣相結合,就可以激發學生的創造性思維和創新能力,引導學生開展基于Python的藝術創作和科學探索,通過不斷調整優化教學內容和教學方式,有效提升教學質量,達到培養計算思維和創新能力的育人目標。endprint