鄭 重, 譚立湘, 王 雷, 白雪飛
(中國科學技術大學 a.微電子學院;b.信息科學技術學院,合肥 230026)
計算機已經(jīng)成為現(xiàn)今人類生產(chǎn)和生活中不可缺少的重要工具,在各個領域都有著廣泛的應用。培養(yǎng)既熟悉本專業(yè)知識又熟練掌握計算機技術的高水平人才,是新時代人才培養(yǎng)的目標,也是未來教育發(fā)展的必然趨勢[1]。計算機程序設計是高等院校計算機基礎教學系列中的核心課程,主要講授結構化程序設計方法。作為配套實驗課程,計算機程序設計實驗是我校公選基礎必修課,面向全校所有專業(yè)的大一新生,旨在培養(yǎng)學生的計算思維及利用計算機解決專業(yè)問題的能力[2-3]。
多年的教學實踐表明,不同院系的新生對程序設計課程的重視程度不同,在同一教學模式下,教學效果差別較大。相比信息、機械等工科類專業(yè)的學生,一些化學、生物等純理科專業(yè)的學生對利用程序設計求解專業(yè)問題缺乏深入的體會,導致對程序設計實驗課程的重要性認識不足。在他們看來,計算機程序設計實驗只是一門計算機類必修的基礎課程而已,與自己所學的專業(yè)關系不大。部分理科生覺得自己將來主要是在實驗室里做實驗,不會去編寫程序,缺乏學習程序設計的積極性和主動性,學習效果不佳[4-5]。
面對不同專業(yè)背景的學生,如何提出有針對性的教學策略,激發(fā)他們對計算機程序設計實驗課程的學習興趣,培養(yǎng)兼具專業(yè)技能及程序設計能力的復合型人才,成為計算機程序設計實驗課程教學的一項新要求[6]。
以本校化學專業(yè)為例,開展面向大一新生的計算機程序設計實驗教學模式改革,教學研究路線如圖1所示。首先通過問卷調查、座談等形式,從“教”和“學”兩方面開展課前調研:①與教師交流。根據(jù)化學專業(yè)本科生的培養(yǎng)方案,與專業(yè)課程教師深入交流,了解程序設計在化學專業(yè)學習中的重要應用,聽取他們對程序設計實驗課程的教學建議。②與選課學生交流。了解他們的計算機程序設計基礎和對程序設計實驗課程的教學期望?;趶V泛調研,充分掌握化學專業(yè)新生的學習特點和需求,為程序設計實驗教學改革提供科學依據(jù)[7]。
圖1 教學研究路線示意圖
基于以上調研結果,結合程序設計課程的教學目標,從學生正在學習的化學專業(yè)知識中提取與計算機程序設計相關的典型問題,貫穿到程序設計實驗教學內容中;組織多樣化的教學形式,多方位展現(xiàn)程序設計在化學學科中的廣泛應用;在實驗教學內容和教學形式上都著力融入化學背景,建立既符合計算機程序設計課程的教學要求,又能反映學生專業(yè)需求的計算機程序設計實驗教學模式[8],并根據(jù)課后學生對教學效果的反饋,不斷優(yōu)化改進。
傳統(tǒng)的實驗課堂教學主要涉及計算機程序設計課程本身的難點和易錯點,如迭代算法、排序和查找等,內容較為抽象,學生興趣不大。根據(jù)計算機程序設計課程教學大綱,在原有程序設計實驗的基礎上,充分考慮大一學生的知識結構,對教學內容與相關化學知識進行整合。在程序設計案例的講解中植入化學背景,讓學生體會利用計算機解決本專業(yè)問題的思路和方法;編制與大一新生正在學習的化學課程緊密結合的實驗習題,讓學生通過上機實踐進一步鞏固所學的程序設計方法。教學實踐證明,以解決化學專業(yè)問題為導向的程序實驗教學內容設計,可以引導學生將計算機特有的處理方法應用到所學專業(yè)中[9-10],是解決他們學習程序設計課程動力不足的有效途徑。
無機化學是本?;瘜W專業(yè)新生開設的第一門專業(yè)課。表1 列出了與無機化學課程相結合的程序設計實驗教學典型案例。
表1 與無機化學相結合的計算機程序設計實驗教學案例
迭代算法是計算機程序設計課程要求掌握的基本算法之一。用二分迭代法和牛頓迭代法來求解一元方程的近似解是經(jīng)典的上機實驗題。通常是給出一個一元多次方程,求某個區(qū)間或某點附近的一個近似解。題目的描述一般沒有特定的專業(yè)背景,學生只把它當作單純的程序設計練習來對待,不了解它的具體應用,理解不夠深刻。
將迭代算法和無機化學課上求解弱酸溶液中的氫離子濃度的問題結合,設計上機習題:已知某一元弱酸溶液的濃度為C(mol/L),求該溶液中的氫離子濃度及溶液的pH值。設該溶液中的氫離子濃度為x,由化學中的溶液平衡理論,可得:
式中:ka為弱酸的電離常數(shù);kw為離子積常數(shù)。
對于方程(1)可用二分迭代法來求方程的一個近似解。二分迭代法的原理是:對一元方程f(x)=0,先取兩個粗略解x1、x2,若f(x1)·f(x2)<0,則原方程在區(qū)間(x1,x2)中至少有一個根;若f(x)在(x1,x2)內嚴格單調,則在該區(qū)間中僅有一個實根。取x3=0.5(x1+x2),并在x1與x2中舍棄函數(shù)值與f(x3)同號者,則x3與剩下的粗略解組成一個新的含根小區(qū)間。如此重復便可以構造出一個序列:x1,x2,…,xn-1,xn。當xn與xn-1之差小于給定誤差,如10-6時,xn便是所求的近似解,如圖2(a)所示。
圖2 二分迭代與牛頓迭代示意圖
牛頓迭代法有更高的收斂速度:設xk是方程f(x)=0 的精確解x*附近的一個猜測解,過點Pk=(xk,f(xk))作f(x)的切線。該切線方程為
其與x軸的交點方程為
解為
式(2)即為牛頓迭代公式。方程(1)經(jīng)過更少的迭代次數(shù)后,也可以求得符合誤差要求的近似根,如圖2(b)所示。求出氫離子的濃度x后,根據(jù)式:pH =-1 ×lgx即可求出該弱酸溶液的pH值。
積分運算在各個學科都有重要的應用。在化學專業(yè)的很多實際問題中,被積函數(shù)的原函數(shù)不是初等函數(shù),或者即使是初等函數(shù)但表示形式非常復雜,不能利用Newton-Leibniz 公式求解,只能用數(shù)值積分的辦法來求積分的近似值。
在計算機程序設計實驗教學中,介紹數(shù)值積分的梯形法,其基本思想是求。如圖3 所示,先將(a,b)區(qū)間進行n等分,分別以a =x0<x1<…<xn=b表示各分點,h =(b -a)/n,再用直線段分別連接點(xi,f(xi)),(xi+1,f(xi+1)),i =0,1,…,n -1。
圖3 數(shù)值積分梯形法示意圖
函數(shù)y=f(x)在(a,b)之間的定積分,可以用n個高為h的梯形面積之和近似表示:
程序設計實驗中介紹一元函數(shù)數(shù)值積分的梯形法時,一般采用正弦函數(shù)、余弦函數(shù)和指數(shù)函數(shù)等。由于專業(yè)應用背景并不明確,學生并不清楚這種利用計算機進行的近似計算的用處。對于化學專業(yè)的學生,可以在教學中把程序設計里的數(shù)值積分梯形法和氣體等溫膨脹做功聯(lián)系起來,編制如下的上機實驗習題:已知某氣體的狀態(tài)方程為(p+a/V2m)Vm=RT,1 mol該氣體由體積V1恒溫可逆膨脹到V2,求此過程中氣體所做的體積功W。根據(jù)
即可利用數(shù)值積分梯形法近似求解。
在化學分析測試中,得到的通常是一組離散的數(shù)據(jù)(i=1,2,…,n)。由于測試儀器或試劑昂貴,或是樣品難以獲取,導致只能獲得有限個測試數(shù)據(jù),造成實驗點的空缺和信息量的不足。插值計算是根據(jù)已得到的實驗數(shù)據(jù)構造出一個近似的函數(shù)關系式來描述這些數(shù)據(jù)的數(shù)學方法,解決實驗點空缺的問題。
最簡單又充分光滑的函數(shù)是多項式,所以常取多項式作為近似函數(shù)。拉格朗日(Lagrange)插值法是其中的一種方法,其構造出來的多項式P(x)可表示為
稱為拉格朗日多項式,其中L0,L1,…,Ln是多項式的一組基底,稱為拉格朗日基底,
次數(shù)n較高時,拉格朗日多項式會出現(xiàn)計算不穩(wěn)定及上下振動現(xiàn)象,沒有實用價值。常用的是一元三點拉格朗日插值:以經(jīng)過三點(xi-1,yi-1),(xi,yi)和(xi+1,yi+1)的二次多項式作為插值函數(shù),
用計算機程序設計去實現(xiàn)一元三點拉格朗日插值的步驟如圖4 所示:首先讀n個數(shù)據(jù),以合適的數(shù)據(jù)類型存儲在內存中;然后對這n個數(shù)據(jù)以橫坐標的值排序;再讀入求值點,通過查找尋找一元三點拉格朗日插值所需的3 個數(shù)據(jù)點,從而得到所求的多項式(5);最后進行多項式求值,獲得所需函數(shù)值。
圖4 一元三點拉格朗日插值流程圖
結合大一無機化學實驗中的問題,設計上機習題:已通過實驗測得某氟化酮液體在不同溫度下的密度值如表2 所示,請推算該液體在其他非表中實驗測點溫度下的密度。
表2 不同溫度下某液體的密度測定值
在這道實驗題中,學生可以練習程序設計中的排序、二分查找、多項式的計算、數(shù)組、鏈表及文件等多項技能。
訓練學生應用計算機學科領域獨特的思維方式去解決化學專業(yè)問題,是培養(yǎng)學生計算思維能力的重要抓手[11-12]。創(chuàng)設結合化學專業(yè)知識的程序設計實驗案例,可以讓學生體會程序設計在解決專業(yè)問題中的作用,領悟學習計算機程序設計的必要性與重要性。學生通過自己動手解決這些專業(yè)問題,不僅提高了程序設計技能,也深化了對化學知識的理解。
除了在實驗教學內容中融入化學專業(yè)知識之外,還組織化學實驗室參觀、高年級同學分享學習經(jīng)驗、基于化學專業(yè)問題的計算機程序設計比賽等多樣化的教學活動,充分展現(xiàn)程序設計在化學中的重要應用,提升化學專業(yè)學生學習程序設計的熱情。
本校的化學學科是雙一流A +學科,具有很強的科研實力。帶領學生有針對性地參觀化學-計算機交叉類實驗室,讓學生切身體會計算機程序設計在化學專業(yè)領域內的重要應用。如我校化學與材料科學學院楊金龍院士課題組和計算機學院安虹教授課題組合作,在“神威·太湖之光”超級計算機首次實現(xiàn)千萬核心并行第一性原理計算模擬。這項重大研究成果是2021年5 月,習近平總書記在兩院院士大會和中國科協(xié)第十次全國代表大會上,提到的近年來我國在戰(zhàn)略高技術領域取得的10 項新跨越之一,充分說明了計算機軟、硬件在尖端研究領域所起的重要作用[13]。讓學生觀看計算機模擬的化學反應中人類肉眼所看不見的分子或原子的微觀動態(tài)過程,能自主進行化學實驗的科學家機器人等[14-15],用生動實例展示計算機是推動化學領域研究進步的重要工具。通過這些參觀幫助學生開拓眼界,充分認識計算機程序設計對其專業(yè)學習的重要性,激發(fā)他們內在動力,從而主動學習計算機程序設計這一學科研究中不可缺少的基本技能。
開課伊始,邀請本專業(yè)高年級同學和新生座談:分享他們學習本門課程的經(jīng)歷,交流學習時曾遇到的困難,以及如何解決困難等學習經(jīng)驗;通過親身實例講述計算思維及計算機程序設計在他們現(xiàn)今的專業(yè)學習和研究中所起的重要作用。實踐表明,來自同專業(yè)高年級同學作為“過來人”的“經(jīng)驗貼”很受大一新生的歡迎,為尚處迷茫狀態(tài)的新生們起到了導航的作用。他們曾經(jīng)的“共同經(jīng)歷”讓新生們產(chǎn)生了共鳴,他們的“肺腑之言”增強了新生學好程序設計課程的信心。此外,高年級同學的“暢言”對教師優(yōu)化教學內容、改進教學方式也提供了重要的信息參考。
傳統(tǒng)的計算機程序設計實驗目的是對理論課堂教學的各個知識點進行訓練,大多是一些驗證性質的實驗,采取統(tǒng)一化的教學,沒有專業(yè)區(qū)別;實驗設計也較為孤立,對各章節(jié)知識點的系統(tǒng)性缺乏關注,綜合型和創(chuàng)新型實驗較少。這種較為單一的練習對學生計算思維能力的訓練不夠,且很容易使學生失去學習興趣。為此,將程序設計課程中的若干知識點串聯(lián)起來,設計融入化學背景的綜合性編程題,舉辦基于化學專業(yè)問題的計算機程序設計比賽。如表3 所示的教學流程:首先發(fā)布比賽題目,學生可以自由選擇教師設置的編程題,也鼓勵他們從專業(yè)課程中自主選擇化學問題;學生自由組成小組,以小組為單位共同完成這些編程題;主講教師和助教老師作為指導老師,分別指導各個小組;完成以后,以小組為單位進行作品展示,教師與同學同為評委,評價各小組完成的質量。為了提高學生的積極性,比賽結果在課程考核中占一定比例。比賽結束后,師生共同討論總結,為后續(xù)的教學活動改進提供建議。
表3 基于化學專業(yè)問題的計算機程序設計比賽
實踐表明,基于化學專業(yè)問題的計算機程序設計比賽,可以引導學生在學習計算機程序設計課程的同時,主動結合專業(yè)知識,充分發(fā)揮學生的主體積極性,培養(yǎng)他們的創(chuàng)新精神和團隊意識[16]。
以往化學專業(yè)教學班的計算機程序設計實驗課程考核結果,和信息、工科類專業(yè)教學班相比,通過率和優(yōu)秀率一直較低,主要原因之一是該專業(yè)學生對課程的重要性缺乏正確認識,學習主動性不夠。自從實行與專業(yè)相結合的程序設計實驗教學改革以來,化學專業(yè)教學班的課程測評通過率和優(yōu)秀率都有了明顯的上升,達到甚至超過了信息、工科類專業(yè)教學班的平均值,學生對課堂教學的滿意度也達到了“非常滿意”的最高等級。根據(jù)近兩屆學生的反饋,以化學問題解決為導向的實驗教學模式讓他們對程序設計的重要性有了新的認識,學習的積極性和主動性明顯提高,程序設計能力和計算思維能力不斷增強,為后續(xù)學習中運用計算機解決專業(yè)問題打下了基礎。
根據(jù)化學專業(yè)學生的學習需求,在教學過程中緊密聯(lián)系學生的專業(yè)知識背景,從中提取問題并合理引入到計算機程序設計實驗教學內容中,創(chuàng)設融入化學背景的程序設計案例,引導學生探討其算法的設計與實現(xiàn);挖掘多種教學資源,組織豐富的實驗教學活動,讓學生深刻感悟計算機程序設計在化學中的重要應用,從而激發(fā)化學專業(yè)學生對程序設計的學習興趣,培養(yǎng)他們利用程序設計解決專業(yè)實際問題的能力和計算思維能力,克服傳統(tǒng)程序設計實驗教學模式與學生專業(yè)背景相脫節(jié)的問題,有效提升了課程的教學效果。