閆 晟,徐 彬,2
(1.東北大學(xué) 計算機(jī)科學(xué)與工程學(xué)院,遼寧 沈陽 110819;2.東北大學(xué) 國家級計算機(jī)實驗教學(xué)示范中心,遼寧 沈陽 110819)
學(xué)習(xí)程序設(shè)計能夠解決不同專業(yè)的不同需求,同樣的,計算機(jī)科學(xué)課程可以培養(yǎng)學(xué)生的計算思維[1],因此,C 語言在各大高校都成為了學(xué)生的必修課程,但是作為剛剛?cè)腴T學(xué)習(xí)編程語言的學(xué)生來說,單獨上機(jī)編程的難度非常大。在這種情況下,學(xué)生的成就感低,學(xué)習(xí)的積極性受到了很大的影響。研究表明,計算機(jī)教學(xué)實踐中引入結(jié)對編程的模式有利于提高學(xué)生的編程能力[2-4],因此,可以在C 程序設(shè)計課程的上機(jī)操作環(huán)節(jié)引入結(jié)對編程模式。為了測量結(jié)對編程模式和傳統(tǒng)單人模式之間的差異,設(shè)計一項實驗,評估結(jié)對編程模式在課程中的實施效果。
結(jié)對編程技術(shù)是指來自同一工作站的兩個程序員在同一個任務(wù)上協(xié)同工作。隨著極限編程的興起,這種技術(shù)已成為軟件行業(yè)中一種常見的編程方法[5]。兩個程序員在一起處理一個項目時,一個程序員編寫代碼,叫作“駕駛員”,另一個程序員在生成新代碼時不斷地檢查它,叫作“導(dǎo)航員”?!榜{駛員”主要關(guān)注正在編寫的代碼,而“導(dǎo)航員”可以在更加廣泛的程序中結(jié)合上下文中進(jìn)行審查。一般來說,程序員會在“駕駛員”和“導(dǎo)航員”兩個角色中隨時互換。
結(jié)對編程已經(jīng)成為敏捷開發(fā)方法中一種重要的實踐模式,在軟件開發(fā)領(lǐng)域得到廣泛的重視和研究。研究發(fā)現(xiàn),結(jié)對編程對編程過程有多種積極影響,雖然結(jié)對編程增加了大約15%的開發(fā)時間成本,但它產(chǎn)生了全面更好的代碼,從而減少了所需的測試和錯誤修復(fù)量[6]。
如今結(jié)對編程已經(jīng)在許多計算機(jī)科學(xué)課程中獲得普及,研究表明,這種學(xué)習(xí)策略活動是有效的[7-9]。結(jié)對編程為學(xué)生提供了高效的編程環(huán)境,學(xué)生可以在這種環(huán)境下生成質(zhì)量更高的代碼,并且增強(qiáng)編程的信心[10]。結(jié)對編程對于提高學(xué)生編程興趣、對代碼的理解能力以及編程程序的成功率都有著很大的幫助。有報告指出,結(jié)對編程能夠使學(xué)生不斷檢查他們的編程及學(xué)習(xí)方式,因為他們對同一個問題有著不同的觀點。這種方式可以擴(kuò)展學(xué)生學(xué)習(xí)編程的學(xué)習(xí)策略,有助于改變一些學(xué)生的固定心態(tài)[11]。
實驗數(shù)據(jù)來自于2019 年春季東北大學(xué)材料系學(xué)習(xí)C 程序設(shè)計課程的學(xué)生。本實驗統(tǒng)計了來自材料系大一年級8 個班級共計255 人的數(shù)據(jù),其中,男生所占的比例為79.6%,女生比例為20.4%。采用問卷調(diào)查方式收集并分析所有學(xué)生的信息,結(jié)果列于表1 中,其中,60%的學(xué)生表示沒有編程經(jīng)驗,90.2%的學(xué)生此前沒有聽說過結(jié)對編程,僅有9.8%的學(xué)生了解過結(jié)對編程。
實驗總共進(jìn)行5 周,學(xué)生每周在東北大學(xué)在線編程社區(qū)完成編程任務(wù),并且完成在線測驗。為了測量結(jié)對編程模式與傳統(tǒng)模式的有效性,將8 個班級分為兩組,其中1—4 班共計131 人作為實驗組;5—8 班共計124 人作為對照組。在第1 周兩組學(xué)生都采取傳統(tǒng)模式,在第2—5 周對實驗組采取結(jié)對編程模式,對對照組采取傳統(tǒng)模式,圖1 中總結(jié)了設(shè)計模式。實驗組的學(xué)生可以和組內(nèi)任何一位學(xué)生進(jìn)行配對,不限次數(shù)。
表1 學(xué)生人數(shù)對比
圖1 比較結(jié)對編程與傳統(tǒng)模式的實驗設(shè)計
實驗數(shù)據(jù)包括學(xué)生每周在在線編程社區(qū)完成程序題的提交正確率,以及學(xué)生在完成編程任務(wù)之后完成測驗的分?jǐn)?shù)。這些測驗均為選擇題的形式,其中包括概念和編程問題。
為了確保兩種模式的學(xué)生能接受相同數(shù)量的作業(yè),我們收集了編程任務(wù)中15 道程序題的提交正確率,并且對每個題目的正確率和每周測驗分?jǐn)?shù)進(jìn)行均分。
根據(jù)學(xué)生的反饋以及每周的教學(xué)內(nèi)容,可以得出第4 周和第5 周的編程任務(wù)更具有挑戰(zhàn)性。15 道程序題的具體難度等級為PA1—PA4 簡單、PA5—PA8 中等、PA9—PA15 困難,編程任務(wù)難度隨時間的增長遞增。
實驗組和對照組提交正確率波動示意圖如圖2 所示,在第1 周的3 個問題中,實驗組的提交正確率低于對照組;在其余的12 個問題中,實驗組的提交正確率明顯高于對照組。這個結(jié)果是預(yù)期的[12],因為在第1 周兩組學(xué)生均采用傳統(tǒng)模式,單獨完成上機(jī)任務(wù)。在實驗組采用結(jié)對編程模式之后,提交正確率有很大提升,并且超過采用傳統(tǒng)模式的對照組。在結(jié)對編程模式的初始階段,實驗組和對照組波動類似,表明結(jié)對學(xué)生和不結(jié)對學(xué)生解決問題的能力接近,但是隨著結(jié)對編程模式的推進(jìn),實驗組的波動逐漸平緩,表明結(jié)對編程模式傾向于使學(xué)生更好地應(yīng)對比較困難的編程任務(wù),學(xué)生解決問題的能力得到了加強(qiáng)。
圖2 實驗組和對照組提交正確率波動示意圖
對實驗組和對照組的代碼提交正確率數(shù)據(jù)進(jìn)行雙樣本t檢驗,兩組之間的差異見表2,可以看出兩組在提交正確率上有著明顯的統(tǒng)計學(xué)差異。一般來說,對照組得分差異為負(fù),這表明對照組的學(xué)生在提交正確率上比實驗組的學(xué)生差。
表2 實驗組與對照組在上機(jī)編程的差異性分析
接下來,檢查對照組和實驗組之間對于周測驗是否存在差異,結(jié)果如圖3 所示。因為每周測驗的總分值不同,因此取每次成績占總成績的比例進(jìn)行比較,結(jié)果表明來自對照組和實驗組的學(xué)生在所有的5 個周測驗上的表現(xiàn)非常相似。
對實驗組和對照組成績數(shù)據(jù)做雙樣本t檢驗,結(jié)果見表3,沒有發(fā)現(xiàn)兩組數(shù)據(jù)的統(tǒng)計學(xué)差異。
由于測驗中只包含選擇題,因此可以得出,結(jié)對編程模式對選擇題類型的測驗并沒有明顯影響。這表明結(jié)對編程模式并不能使學(xué)生解決考試環(huán)境中的選擇題類問題。
圖3 對照組和實驗組在周測驗的分?jǐn)?shù)
表3 實驗組與對照組在周測驗上的差異性分析
在實驗中,實驗組的學(xué)生可以在組內(nèi)任意配對,因此產(chǎn)生了不同配對次數(shù)的差異。為了研究這個差異是否對上機(jī)編程產(chǎn)生影響,檢查不同結(jié)對次數(shù)的組合在每周編程任務(wù)上的表現(xiàn)差異,結(jié)果如圖4 所示。不同結(jié)對次數(shù)的組合在所有編程任務(wù)上的表現(xiàn)非常相似,沒有發(fā)現(xiàn)統(tǒng)計學(xué)差異,因此,結(jié)對次數(shù)并不會對上機(jī)編程產(chǎn)生明顯影響。
圖4 結(jié)對次數(shù)不同在編程任務(wù)上的表現(xiàn)
在實驗結(jié)束后,為了衡量學(xué)生對于結(jié)對編程的體驗,向?qū)W生分發(fā)了簡短的問卷。
Q1:是否愿意繼續(xù)結(jié)對編程?
Q2:是否覺得結(jié)對編程更有效率?
Q3:是否覺得結(jié)對編程對于提高編程水平有幫助?
表4 的結(jié)果表明,學(xué)生對于結(jié)對編程的態(tài)度是積極的,大多數(shù)學(xué)生都贊成結(jié)對編程模式,并且認(rèn)為結(jié)對編程模式對自己有幫助。圖5 所示是收集到的學(xué)生認(rèn)為結(jié)對編程的好處。
在實踐過程中發(fā)現(xiàn),在沒有開展結(jié)對編程模式時,基礎(chǔ)薄弱的學(xué)生對于指導(dǎo)教師的依賴性較強(qiáng),消極地對待解決不了的問題。在開展結(jié)對編程模式之后,這部分學(xué)生可以和結(jié)對成員之間相互討論。根據(jù)系統(tǒng)記錄的代碼提交時間,發(fā)現(xiàn)這些學(xué)生能夠很快解決編程上出現(xiàn)的問題,更能獲得滿足感,學(xué)習(xí)積極性和主動性也有很大提高。
表4 學(xué)生對結(jié)對編程的認(rèn)知調(diào)查 %
圖5 學(xué)生認(rèn)為結(jié)對編程的好處
采取結(jié)對編程模式的學(xué)生在上機(jī)編程環(huán)節(jié)中的表現(xiàn)要優(yōu)于采取傳統(tǒng)模式的學(xué)生,并且在應(yīng)對困難的編程任務(wù)時,結(jié)對編程顯現(xiàn)出明顯的優(yōu)勢,但是在實驗中,沒有發(fā)現(xiàn)選擇題測驗的分?jǐn)?shù)與上機(jī)編程存在任何差異或者相關(guān)性,表明結(jié)對編程模式并不能幫助學(xué)生解決考試環(huán)境中的選擇問題。
總的來說,結(jié)對編程模式是有效的,這種模式能夠充分地發(fā)揮學(xué)生上機(jī)編程的自主能動性,有效減少上機(jī)過程中實踐能力差、消極對待等現(xiàn)象。
在下一步的研究中,將考慮結(jié)對編程對于非選擇題的考試測驗的影響,并且關(guān)注部分消極學(xué)生的態(tài)度,改善結(jié)對編程模式,使學(xué)生更樂于接受結(jié)對編程,學(xué)習(xí)更加高效。