趙廣輝,李 屾,秦珀石,汪朝霞
(武漢理工大學 計算機科學與技術學院,湖北 武漢 430070)
隨著經濟和社會的快速發展,大學也隨之發生了極大的變化。自1977年恢復高考到1998年,我國高校錄取人數的增長率一直遠低于人口增長率。截至1998年,我國大學毛入學率約為6%,高等教育屬于精英教育階段。精英的學習動機明確,自學能力強,他們渴望通過學習實現自我,改變世界。學生主動學習能力強,老師只需要告訴他們“學什么”和“怎么學”就可以。
為提高國民素質,1999年高校開始擴大招生,伴隨新生人口數量的下降,大學錄取率和毛入學率迅速提高,在2002年毛入學率超過15%,達到大眾教育階段,2019年毛入學率超過50%,達到普及教育階段。目前進入大學的學生是伴隨著互聯網成長起來的,他們具有視野開闊、個性鮮明、獨立性強等優點,但也存在著學習動機不明確、自學能力弱、過度依賴教師講授、沉溺于娛樂和社交網絡等缺點。
在高等教育普及化階段,如何實現“大國辦強教育”,實現從教育大國向教育強國的戰略轉變,線下教學將起到至關重要的作用。
程序設計教學語言是具有顯著的時代特征的,隨著計算機硬件和應用需求的變化,程序設計的教學語言也隨之發生著變化。早期計算機計算能力弱,主要用于解決計算問題,Basic是適合應用需求的教學語言。隨著計算能力的提升以及多媒體技術的出現,Fortran、C語言、Visual Basic等才逐漸走入課堂。
隨著計算機技術和網絡技術的飛速發展,計算機的應用從單純的計算和數據管理逐步轉向人工智能與大數據技術。在這樣的背景下,目前程序設計公共課的主要教學語言C、Visual Basic等只能講授基本的編程方法,無法直接被用于復雜專業問題的求解,課程知識與學生應用需求脫節,學生對課程的滿意度低。
當前正處于工業4.0時期或稱為人工智能時代,程序設計等信息技術被越來越廣泛地應用于各個學科專業的學習、工作和研究過程。各學科對知識的交叉融合需求越來越強烈,需要對程序設計課程的教學內容、課程教學目標和教學方法進行全方位的重構,為學科交叉融合提供更多和更深層次的技術支撐。建設通識教育“金課”是通識教育工作的主要任務和高等教育工作的重要任務之一[1]。
吳巖司長提到:“線下課堂教學是“金課”建設的主陣地、主渠道和主戰場”[2]。與線上授課相比,線下授課具有一些獨特的魅力和優點,其中最重要的是言傳身教和身臨其境。
線下教學可以做到言傳身教,即可教書,又可育人。課堂教學除了知識傳遞以外,還有一個更重要的元素是文化傳承,教師通過言傳身教,把自己的思維方式、治學態度、科學精神傳承給學生。《禮記》有云:“師者也,教之以事而喻諸德也。”著名教育家陶行知先生也曾說過:“先生不應該專教書,他的責任是教人做人;學生不應該專讀書,他的責任是學習人生之道。”從教師教育學生的角度來說,線下教學中,教師可以以德治教、以德育人、言傳身教,對學生起到潛移默化的影響,達到潤物細無聲的效果。
課堂教學過程中,學生與老師處于同一物理空間,學生可以清晰地感受到授課老師的情緒,很容易受課堂學習和討論氣氛的感染。老師可以通過肢體語言的變換和語氣、語調、語速的變化吸引學生的注意力,提升學生的興奮度,而且學生還可以深度參與教學活動中,師生之間可以有包括思維互動、問答互動、情感互動、行為互動等各種互動,這些互動體現了師生之間的一種合作精神。這與現場看演唱會、球賽一樣,教與學的對象之間存在著一種能量的流動,這是線上教學無法比擬的。
2017年2月以來,教育部積極推進新工科建設,先后形成了“復旦共識”“天大行動”和“北京指南”,奏響了新工科建設的“三部曲”,而新工科建設中,繼承與創新、交叉與融合、協調與共享是主要建設途徑,其中,多學科的交叉與融合處于核心地位。這種交叉與融合催生出新工科、新醫科、新農科、新文科、新商科等眾多新興學科。教育部要求重視人工智能與計算機、控制、數學、統計學、物理學、生物學、心理學、社會學、法學等學科專業教育的交叉融合,形成“人工智能+X”復合專業培養新模式,到2020年建設100個“人工智能+X”復合特色專業。
這些新政策對程序設計公共課程教學提出了更高的要求,要求這門課程在為專業問題求解提供支撐的基礎上,承擔起人工智能和數據處理方面能力培養的重任。
現在正在進入人工智能時代,李開復、李飛飛等人工智能專家都斷言人工智能將是人類社會第四次工業革命的直接驅動力。現在社會正處于第四次工業革命前夕,云計算、物聯網、大數據和人工智能都離不開程序設計,這是程序設計課程存在的重要意義;同時,過去的知識和技能正在失效,需要構建新的知識體系和技術指標,對程序設計的課程內容、教學方法等進行革命性的變革和重構,以適應新時代的要求。
程序設計公共課的教學目標一般是掌握程序設計的基礎知識、技巧和方法,具有編寫結構良好程序的能力,為學生的后續課程學習打下良好基礎,其本質是培養具備基本編程能力的初級程序員。
在壓縮學分和課時的大環境下,學生很難再有機會進行后續計算機相關課程的學習,新工科倡導跨學科能力的大融合,跨界、整合、集成、創新,成為新一代人才的標準能力。程序設計公共課的教學目標也應提升為培養具備基本編程能力、數據分析能力、計算思維能力和復雜專業問題求解能力的學科交叉人才(如圖1所示)。

圖1 Python程序設計課程教學目標
在教學內容方面,選擇人工智能和大數據領域的標準語言Python語言作為教學語言,符合時代性和前沿性。阿里集團前董事局主席馬云先生說過:“在未來的30年中,數據將會成為生產資料,計算會是生產力,互聯網會是一種生產關系。”現在是工業4.0時代、人工智能時代,大數據與人工智能是主旋律。Python是人工智能、數據分析領域的第一語言,也是目前應用最廣泛的通用程序設計語言,其近20萬第三方庫為其構造了良好的生態圈。Python語言被廣泛應用于各學科、各專業,用于快速、簡潔地解決各種復雜專業問題,且針對不同的專業設計了一系列與專業問題相關的教學案例。通過這些案例搭建的知識到應用的橋梁,普通學生可以具備基本編程能力,大部分學生能夠具備數據分析和可視化能力,優秀的學生具備解決復雜專業問題的能力。
在教學方法方面,融入斯坦福大學提出的“軸反轉”理念,先能力、后知識。把知識融入問題之中,從一個問題出發,朝著一系列問題求解的目標,在問題中將相關知識與技能、過程與方法穿插起來。帶著問題學習,讓學生知道解決一個問題需要具備哪些知識,再有針對性地學習相關知識的應用,強調問題的求解和知識的綜合運用。
3.2.1 備教材、備教案和備學生
線下授課除了傳統教學中的備教材和備教案外,還可以備學生,根據學生專業和個性特點因材施教。不同學校的學生層次不同,同一學校的學生也存在較大的差異性。孔子《論語·陽貨》中把學生大致分為3類:“上智”“中人”和“下愚”。上智不教而成,聞一知十;中人不教不知,聞一知二;下愚雖教無益,只能教給他們與智力水平相符的知識。教學中根據不同學生的認知水平、學習能力以及自身素質,選擇適合每個學生特點的學習方法進行有針對性的教學,發揮學生的長處,彌補學生的不足,激發學習的興趣,樹立學習的信心。
教材選擇是非常重要的一個環節,要根據學生認知水平選擇有適當難度的教材。教材難度不夠,將無法激發學生的挑戰欲;教材難度過高,又會讓學生失去學習的信心。教材內容可以超過授課內容的30%~50%,給學生自主學習留下一定的空間,也保證課程具有一定的挑戰度。
教學案例設計可以根據學生專業背景和需求的不同進行個性化的設計,教學的內容應各有側重,不能千篇一律。《論語·學而》有云:“不患人之不己知,患不知人也。”不了解學生的個性差別,千篇一律地灌輸知識,不考慮哪些學生能接受,哪些學生不能接受,學生接受多少,是很難保證教學效果的。
備學生主要是通過聽其言、觀其行,了解學生的專業方向和興趣愛好。學生專業背景不同,需求不同,教學的方法和內容應各有側重,不能千篇一律。通過備學生,可以實現因材施教和個性化教學。
3.2.2 以賦能為目標的教學設計
傳統的程序設計課程教學主要是程序設計基礎知識的講授,同時用一些經典案例講授基礎算法和一些單純數學問題的求解[3]。在這種教學模式下,知識與應用脫節,學生無法將程序設計課程內容與具體的應用結合起來,學習目標不明確,難以培養濃厚的學習興趣,學習動力不足。
Python語言是一門通用的程序設計語言,可以被用于幾乎所有專業問題的求解。為充分發揮出Python語言的優勢,設計大量專業問題求解案例,利用這些案例搭建從知識到應用的橋梁,實現學習基礎知識、掌握應用技術和提升綜合能力[4]。
受學時的限制,不可能把全部案例用于課堂教學中。采取的方案是把基礎知識中容易理解掌握的和操作性的知識提取出來錄成微視頻,供學生自行下載學習。課堂教學重點放在基礎知識中不容易理解部分以及各專業都可能用到的、通用性最強的數據分析、處理和可視化部分的講解。
對于復雜專業問題的求解,因問題與專業結合緊密,甚至需要專業背景知識才能完成,可以按學生的學科專業組織個性化教學。考慮到程序設計公共課有統考要求,因而可以在課堂理論授課過程中只講授與專業相關的復雜問題,例如,如何厘清問題的核心,如何對問題進行抽象,如何將其分解為一系列規模較小的可計算問題以及如何確定合適的算法。教學過程中,給學生樹立學科交叉的理念,打破傳統學科的界限,在不同學科之間的融合過程中尋找創新的機會,將其具體實踐與實現放在實驗課程中,讓學生借助一些與之相關的微視頻,通過分組討論和小組合作完成復雜專業問題的求解,真正具備應用程序設計方法求解復雜專業問題的能力。
其中最重要的是案例資源建設,這是提升課程挑戰度的關鍵。這部分工作需要老師不斷地提升自己,通過大量的編程實踐,熟練掌握哪些知識可以解決哪些實際問題。老師要能夠花時間、花精力選取有通用價值的專業問題案例,對其進行抽象和簡化,保留足夠的復雜程度和難度,把盡可能多的程序設計知識融合進去。學生需要通過較多時間的學習、思考和討論才能夠完成,達到解決復雜問題的目的。以賦能為目標的教學設計如圖2所示。

圖2 以賦能為目標的教學設計
3.2.3 “軸反轉”理念的教學組織
在教學過程中,融入斯坦福大學提出的“軸反轉”理念,先能力、后知識[5]。把知識融入問題中,帶著問題學習,強調問題的求解和知識的綜合運用。從一個應用問題出發,將其分解為由淺入深的一系列子問題,將相關知識與技能、過程與方法貫穿于多個教學環節中,讓學生知道解決問題需要具備哪些知識,帶著使命去學習相關知識的應用。
圖3所示是一個數據可視化的教學案例。教學時先拋出這個問題,將其分解為列表及列表操作、讀文件數據、字符串處理方法、字符串到浮點型數據類型轉換、分支與二重循環、Matplotlib繪圖及標注美化等子問題。在學習列表知識時,將問題簡化,數據直接放入列表,讓學生知道把列表傳給plot()函數即可實現圖3(a)的繪圖;在學習文件時,再次拿出這個問題,讓學生掌握從文件中讀取一組數據、處理字符串、轉換數據格式,再完成圖3(a)的繪圖;在學習數據可視化時,再增加一重循環,讀取文件中的多列數據,實現圖3(b)多組數據曲線的繪制;再增加區間判定,實現圖3(c)所示指定區間曲線的繪制。先明確能力目標,再將知識分解融入各小目標中,隨問題復雜程度的提升,代碼數量從5行逐漸提升到20行,使學生循序漸進地具備綜合運用多種知識解決復雜問題的能力。

圖3 貫穿式案例設計
在教學中,除了課堂傳統意義上的互動外,通過把所有教學資源數字化,利用平臺進行教學和訓練,可以實現數字賦能互動。在作業、練習、實驗和自主學習過程中,采集學生的學習行為數據,利用人工智能技術對學生學習情況進行分析、評價和預測,階段性地對學生掌握程度進行預測,對進一步的學習給出建議,實現數字賦能互動。
經過兩年多的探索和實踐,這種教學設計取得了較好的教學效果。表1是2019年采用這種模式教學的實驗班級和同期平行教學班級各分數段人數比例情況。從數據對比中可以發現,與平行班級相比,實驗班級低分段人數比例明顯較少,高分段的人數比例較高,優良率明顯提高。

表1 考試成績分析 %
Python語言是人工智能和大數據的標準語言,隨著云計算、大數據、物聯網、人工智能、區塊鏈等技術被廣泛應用于各行各業,Python程序設計課程對各學科的支撐作用將超過以往的任何時期。Python程序設計課程的建設不可能一蹴而就,必須經過反復探索和實踐。課程建設也沒有終點,需要進一步花時間、花精力、花情感將之建設為受學生歡迎的好課。