熊晶 高峰 王愛民



【摘要】針對師范院校計算機(jī)專業(yè)實踐教學(xué)存在的問題,提出利用結(jié)對編程進(jìn)行實踐教學(xué)改革的方案。分析了結(jié)對編程的特點、結(jié)對原則和實施要求,并與傳統(tǒng)的實踐教學(xué)進(jìn)行了實驗對比。實驗結(jié)果表明,結(jié)對編程能有效降低Bug出現(xiàn)頻率,提高學(xué)生動手能力和團(tuán)隊合作意識,促進(jìn)了實踐教學(xué)改革。
【關(guān)鍵詞】結(jié)對編程:師范院校;實踐教學(xué)改革;計算機(jī)專業(yè)
【中圖分類號】G40-057 【文獻(xiàn)標(biāo)識碼】A 【論文編號】1009-8097(2013)07-0122-05
引言
在我國高等教育體制中,師范院校計算機(jī)專業(yè)培養(yǎng)目標(biāo)主要包括兩個方面:一是要求畢業(yè)生具備教書育人的良好教育理論素質(zhì)和技能:二是要求畢業(yè)生具備勝任所從事崗位的扎實的學(xué)科專業(yè)知識以及較強(qiáng)的實踐能力和創(chuàng)新能力。長期以來,由于受傳統(tǒng)教師教育培養(yǎng)模式的影響,師范院校計算機(jī)專業(yè)實踐教學(xué)僅被看作是一種輔助性和驗證性手段,導(dǎo)致出現(xiàn)重理論教學(xué),輕實踐技能,重思維能力,輕動手能力的現(xiàn)象,培養(yǎng)出來的學(xué)生難以適應(yīng)社會需求。隨著師范院校就業(yè)形式多元化的發(fā)展,畢業(yè)生不僅可以選擇當(dāng)老師,還可以從事軟件開發(fā)、網(wǎng)絡(luò)管理、信息技術(shù)等操作能力較強(qiáng)的工作。針對河南省4所師范院校的一份調(diào)型結(jié)果顯示:計算機(jī)師范生只有34.7%的學(xué)生非常愿意和愿意從事教師職業(yè),其中計算機(jī)專業(yè)科班出身的學(xué)生只有29.68%的人愿意從事計算機(jī)教學(xué)。由此可見,推行實踐教學(xué)改革已成為師范院校的迫切要求。當(dāng)前師范院校計算機(jī)專業(yè)應(yīng)該著力培養(yǎng)“教師+IT工程師”新模式的人才,因此,如何提高學(xué)生的計算機(jī)應(yīng)用能力,培養(yǎng)專業(yè)素養(yǎng)高、綜合能力強(qiáng)、動手能力突出的實踐型人才是亟須解決的問題。
對計算機(jī)專業(yè)而言,實踐教學(xué)是培養(yǎng)計劃的重要組成部分,而提高編程能力、踐行軟件工程思想、培養(yǎng)團(tuán)隊合作精神則是實踐教學(xué)中的重要環(huán)節(jié)和目標(biāo),因此,各院校均將實踐教學(xué)擺在了重要的戰(zhàn)略位置上。目前,師范院校計算機(jī)專業(yè)的實踐教學(xué)環(huán)節(jié)主要包括教學(xué)(課程)實驗、實習(xí)實訓(xùn)、課程設(shè)計、畢業(yè)設(shè)計(論文)、實踐創(chuàng)新等方面,實踐操作方式大體分為獨(dú)立完成和團(tuán)隊合作兩種。但是不論哪種方式,都存在不足:獨(dú)立完成方式開發(fā)周期長、開發(fā)效率低、Bug出現(xiàn)頻率高,不利于培養(yǎng)團(tuán)隊合作精神,不利于踐行軟件工程思想:團(tuán)隊合作方式無法保證團(tuán)隊成員均能各司其職,無法達(dá)到全面發(fā)展,并且存在著“窩工”、“吃大鍋飯”等現(xiàn)象。往往團(tuán)隊中只有小部分人真正動手編程,其他人員僅僅是借用團(tuán)隊實驗成果達(dá)到實驗或考核目標(biāo)。通過分析目前實踐教學(xué)實施過程中存在的問題,我們提出利用結(jié)對編程思想來改革傳統(tǒng)實踐教學(xué)方式的方案。
一 結(jié)對編程概述
結(jié)對編程的定義為:兩名程序員合作開發(fā)同一產(chǎn)品模塊(設(shè)計、算法、代碼),這兩名程序員分別扮演“駕駛員”和“導(dǎo)航員”的角色,共同思考問題,共同負(fù)責(zé)產(chǎn)品模塊的各個方面。“駕駛員”控制鼠標(biāo)、鍵盤并編寫代碼,“導(dǎo)航員”主動持續(xù)地觀察和輔助“駕駛員”的工作,找出代碼的缺陷,思考替換方案。結(jié)對雙方的角色不是固定的,而是進(jìn)行周期性的交換。任何時候雙方都是平等活躍的參與者,在整個項目開發(fā)過程中,兩者共享所獲得的工作成績。
結(jié)對編程是極限編程12個最佳實踐中最重要原則之一,是團(tuán)隊設(shè)計的基礎(chǔ),它與傳統(tǒng)的開發(fā)過程有很大的不同。在傳統(tǒng)開發(fā)過程中,每個開發(fā)人員負(fù)責(zé)系統(tǒng)的一部分開發(fā)任務(wù),各自分工,互不干擾。而結(jié)對編程是兩人結(jié)為一對,共同完成同一個開發(fā)任務(wù)。兩人在同一臺計算機(jī)面前進(jìn)行編程活動,“駕駛員”進(jìn)行操作編碼,“導(dǎo)航員”觀察代碼并考慮設(shè)計問題。一旦發(fā)現(xiàn)問題時,暫停編碼工作,雙方討論解決。結(jié)對者的角色根據(jù)需要進(jìn)行不斷調(diào)整和交換,包括與其他結(jié)對小組交換成員。
結(jié)對編程的概念起源于20世紀(jì)90年代中期。經(jīng)過近20年的研究和發(fā)展,多數(shù)軟件企業(yè)因其具有可以減少風(fēng)險、提高生產(chǎn)效率、代碼質(zhì)量高、有利于交流學(xué)習(xí)等優(yōu)點而積極采用結(jié)對編程。也有一些企業(yè)對其持反對態(tài)度,主要理由是認(rèn)為結(jié)對編程浪費(fèi)人力資源、對程序員要求太高、公司人手短缺等。高校教學(xué)中應(yīng)用結(jié)對編程思想的目的與軟件企業(yè)采用結(jié)對編程的目的不同,前者主要是幫助學(xué)生提高編程能力和培養(yǎng)團(tuán)隊合作精神。在教學(xué)方面,最有代表性的是在1999年猶他州立大學(xué)做的一項試驗,結(jié)果表明雖然結(jié)對組在最初階段比獨(dú)立工作的學(xué)生完成同樣任務(wù)花費(fèi)的時間更多,但很快結(jié)對組花費(fèi)的時間大幅度下降,而獨(dú)立工作的學(xué)生需要花費(fèi)比結(jié)對組更多的時間來達(dá)到相近的代碼質(zhì)量。國外研究顯示,教學(xué)過程中采用結(jié)對編程可以提高學(xué)生的記憶力、自信心、學(xué)習(xí)興趣、代碼質(zhì)量和學(xué)習(xí)成績。國內(nèi)研究表明結(jié)對組的共同學(xué)習(xí)失敗率小于獨(dú)立學(xué)習(xí)失敗率,采用結(jié)對編程進(jìn)行實踐教學(xué)的班級普遍在編程能力和質(zhì)量上優(yōu)于采用傳統(tǒng)實踐教學(xué)的班級。而且,結(jié)對編程有利于培養(yǎng)學(xué)生互相學(xué)習(xí)的良好習(xí)慣,提高學(xué)生的自信心,促進(jìn)團(tuán)隊合作和人際交往。但是,目前針對師范院校計算機(jī)專業(yè)特點的結(jié)對編程研究還很少。
二 實踐教學(xué)改革中對結(jié)對編程的要求
綜合考慮師范院校計算機(jī)專業(yè)本科生的實際情況,對實踐教學(xué)改革中踐行結(jié)對編程從工作環(huán)境、項目選擇、結(jié)對原則等方面提出相關(guān)要求。
1 工作環(huán)境要求
由于結(jié)對編程工作模式是兩人坐在一起共同完成程序的設(shè)計、編程和測試,因此需要將傳統(tǒng)的“一人一桌一機(jī)”的工作環(huán)境改造為“兩人一桌一機(jī)”環(huán)境,使工作臺和設(shè)備的擺放便于結(jié)對搭檔之間的交流與合作,為了不影響其他結(jié)對組的工作,最好將工作環(huán)境設(shè)置為隔斷式空間。如圖1所示。
目前,大多數(shù)軟件公司的工作環(huán)境與圖1類似(傳統(tǒng)開發(fā)仍然是“一人一桌一機(jī)”),這樣可以讓學(xué)生“身臨其境”感受未來實習(xí)或工作單位的工作環(huán)境。
2 項目選擇
實踐教學(xué)不是單純的課程實驗,提高學(xué)生編程能力最好的方式是項目驅(qū)動式。考慮到師范院校計算機(jī)專業(yè)學(xué)生的實際能力和編程素養(yǎng),功能全面、業(yè)務(wù)邏輯復(fù)雜、代碼量龐大的大中型項目并不適合作為實踐課題,而通常情況下只由一人工作幾天甚至半天即可完成的微型項目也不能起到鍛煉技能的作用。因此,團(tuán)隊結(jié)構(gòu)簡單,開發(fā)人數(shù)在4~6人,代碼量在18人月以下,項目目標(biāo)簡單,不需要與周邊系統(tǒng)集成,對系統(tǒng)高可用性要求一般的小型項目是最佳選擇。同時,宜選擇學(xué)生感興趣的、業(yè)務(wù)邏輯比較熟悉的小型項目進(jìn)行實踐,如單機(jī)版游戲開發(fā)、多媒體教室預(yù)約管理系統(tǒng)、單詞記憶軟件等。
3 結(jié)對原則
實踐教學(xué)改革的目的是最大限度地提高學(xué)生實際動手能力、培養(yǎng)團(tuán)隊合作精神和創(chuàng)新精神。實踐教學(xué)改革中的結(jié)對編程除了滿足基本的原則外,還應(yīng)突出以下幾點:
(1)按照編程水平高低,將學(xué)生分為高級、中級和低級三個級別,因此結(jié)對組合有“高級+高級”、“中級+中級”、“低級+低級”、“高級+中級”、“高級+低級”、“中級+低級”幾種形式,為了達(dá)到學(xué)習(xí)和提高的目的,應(yīng)該優(yōu)先選擇“高級+低級”的模式。在這種模式中,力求達(dá)到高手培養(yǎng)新手的“幫帶”效果。
(2)結(jié)對編程的雙方有一個較長的磨合過程,應(yīng)該讓學(xué)生盡早“結(jié)對”,爭取在實踐項目開始時,結(jié)對雙方已經(jīng)有多次合作經(jīng)歷。因此,在課程實驗階段,就應(yīng)該讓學(xué)生自行尋找“搭檔”,并經(jīng)常更換“搭檔”,以期找到最“志同道合”的伙伴。伙伴的選擇盡量將性格融合的,技術(shù)互補(bǔ)的配對。
(3)結(jié)對編程的雙方經(jīng)常交換角色。角色可以定時交換,也可以根據(jù)開發(fā)任務(wù)交換。假設(shè)A為“高級”者,B為“低級”者,則難度大的任務(wù)由A擔(dān)任“駕駛員”,此時B在一旁觀摩和學(xué)習(xí);難度小的任務(wù)由B擔(dān)任“駕駛員”,此時A在一旁監(jiān)督和指導(dǎo)。
(4)結(jié)對雙方必須保證地位平等。“低級”者容易產(chǎn)生依賴和畏難心理,所以在結(jié)對編程過程中需要鼓勵“低級”者積極主動,而“高級”者應(yīng)該以指導(dǎo)和溝通為主。兩人是平等的,只有經(jīng)驗多寡之分,沒有地位高低之分。對“低級,,者而言,獨(dú)立操作實現(xiàn)一個功能模塊后,往往異常興奮,在結(jié)對中也會表現(xiàn)得越來越積極。因此,安排難度適中的結(jié)對任務(wù)有利于加強(qiáng)“低級”者參與結(jié)對的意愿。
(5)結(jié)對雙方必須全力以赴。結(jié)對編程本身能促使人竭盡全力,兩人一起工作的時候,沒有走神分心的條件。一旦編程過程中出現(xiàn)問題,則立即停止,雙方共同討論解決。
(6)結(jié)對雙方必須對待解決的問題有相同或相近的認(rèn)知。結(jié)對雙方對開發(fā)任務(wù)都必須做到逐步了解、思路一致、編碼規(guī)范一致,包括標(biāo)識符命名規(guī)則、注釋風(fēng)格等。編程時先經(jīng)過討論,達(dá)成共識,然后方能動手編寫程序。
(7)任務(wù)出錯或不能完成,應(yīng)由雙方共同負(fù)責(zé),不能相互指責(zé)。兩人意見不同時,可由指導(dǎo)教師協(xié)助解決,不要各執(zhí)己見、據(jù)理力爭。
(8)指導(dǎo)教師給予學(xué)生更多鼓勵,結(jié)對雙方之間也需要相互鼓勵、相互學(xué)習(xí),可以產(chǎn)生共同的榮譽(yù)感、責(zé)任感和成就感。
三 實驗對比及分析
1 實驗設(shè)計
我們在課程設(shè)計這一實踐教學(xué)環(huán)節(jié)中,采用對比實驗的方法對結(jié)對編程進(jìn)行評價。在課程設(shè)計開始之前,學(xué)生已經(jīng)在課程實驗階段進(jìn)行了結(jié)對編程訓(xùn)練。對比實驗班級有44名同學(xué),分成兩個實驗對比組:一組采用傳統(tǒng)的小團(tuán)隊開發(fā)方式,稱為傳統(tǒng)組,組員各自獨(dú)立編程;一組采用結(jié)對編程的團(tuán)隊方式,稱為結(jié)對組,結(jié)對組由若干結(jié)對單元組成,結(jié)對單元采取兩人結(jié)對編程方式。指導(dǎo)教師擬定4個課題并事先劃分好模塊,分別交由兩個實驗對比組完成,均采用面向?qū)ο蟪绦蛟O(shè)計。對比組分配如表1所示。
表1中,對比實驗組的具體要求如下:
(1)兩組均要求遵循軟件開發(fā)流程,需要提交相關(guān)文檔。
(2)兩組均分成三個階段,由指導(dǎo)老師根據(jù)時間確定,每個階段同時考查各組的完成情況。階段考查時,傳統(tǒng)組需提交各成員的任務(wù)分配記錄;結(jié)對組需提交結(jié)對交換記錄。
(3)兩組均以答辯的形式給出每個課題的最終成績,并事先告知:傳統(tǒng)組各成員均有自己的成績,根據(jù)自己對課程設(shè)計的貢獻(xiàn)給出;結(jié)對組每個結(jié)對單元的兩人共同獲得一個成績(若結(jié)對單元之間經(jīng)常互換結(jié)對角色,則參與交換的人員共同獲得一個成績)。
2 實驗結(jié)果及分析
對比實驗組的實驗結(jié)果分別如圖2、圖3、圖4所示。
圖2顯示在課程設(shè)計初期,結(jié)對組花費(fèi)的平均開發(fā)時間比傳統(tǒng)組長,原因是結(jié)對組在結(jié)對編程之前需要進(jìn)行討論和交流,達(dá)到共識后才進(jìn)行動手編程,而且有些結(jié)對單元還處于磨合期。隨著項目的進(jìn)展,結(jié)對組的編程效率逐漸增加,與傳統(tǒng)組的開發(fā)時間差距也逐漸減小。
圖3顯示,在各個開發(fā)階段,結(jié)對組的平均Bug數(shù)量均較獨(dú)立組少,原因是結(jié)對單元的兩人對同一任務(wù)實行結(jié)對設(shè)計、結(jié)對編碼、結(jié)對測試和結(jié)對評審。因此,在動手編程之前已進(jìn)行了充分的交流和討論并達(dá)成一致意見,而且在編程過程中,一人編程,另一人隨時對編程中的錯誤進(jìn)行監(jiān)督和提醒,有效降低了Bug數(shù)量。
圖4顯示了兩個實驗對比組的平均成績(4個課題的總平均成績),成績的考核綜合考慮了開發(fā)時間、Bug數(shù)量、團(tuán)隊合作精神、項目完成質(zhì)量、編碼風(fēng)格等指標(biāo)。實驗結(jié)果表明,結(jié)對編程的效果明顯高于傳統(tǒng)方式。
四 結(jié)對編程對實踐教學(xué)的改進(jìn)
通過考查學(xué)生結(jié)對編程過程及對比實驗分析,發(fā)現(xiàn)采用結(jié)對編程的學(xué)生,其編程素質(zhì)有了明顯的提高。因此,我們提倡在教學(xué)過程中采用結(jié)對編程思想來改革計算機(jī)專業(yè)實踐教學(xué)。
1 結(jié)對編程的優(yōu)點
(1)動手能力較低的學(xué)生學(xué)習(xí)和上手速度快,主要原因為:一是學(xué)習(xí)的內(nèi)容均是實際需要的,目的明確,針對性強(qiáng):二是有人幫帶,手把手的演示,比自己看書摸索進(jìn)展快、效果好;三是邊學(xué)邊用,知識點掌握扎實。
(2)結(jié)對編程改掉了一些學(xué)生的編碼壞習(xí)慣,同時也學(xué)習(xí)了他人的編程優(yōu)點:如快捷鍵的靈活運(yùn)用,解決問題的搜索技巧等。另外,代碼的層次和語句變得更優(yōu)美易讀。
(3)工作效率提高了。結(jié)對中,一人對另一人實際上有監(jiān)督作用,有效杜絕了學(xué)生上機(jī)時聊天、打游戲、泡論壇、看電影等現(xiàn)象。結(jié)對編程時兩人合作能更有效地交流,相互學(xué)習(xí)和傳授經(jīng)驗,解決問題能力有較大提高。而且,在結(jié)對過程中,結(jié)對雙方經(jīng)常有思想的碰撞,在討論中更容易培養(yǎng)創(chuàng)新意識。
(4)程序Bug明顯減少,代碼質(zhì)量顯著提高。結(jié)對編程,首先需要兩人共同理解,經(jīng)過討論,形成一致思想,才可以編程。這樣減少了由于理解錯誤帶來的風(fēng)險;其次,結(jié)對編程在編寫代碼的同時進(jìn)行著代碼評審,出錯幾率降低了很多。所以結(jié)對編程能有效減少Bug數(shù)量。
(5)每個學(xué)生都有動手實踐的機(jī)會,都能在實際操作中學(xué)到實用知識,避免了前述傳統(tǒng)團(tuán)隊開發(fā)中“窩工”、“吃大鍋飯”的現(xiàn)象發(fā)生。由于每人需要完成自己的結(jié)對任務(wù),所以幾乎不存在照搬照抄他人成果的情況。
2 對師范院校實踐教學(xué)的促進(jìn)作用
結(jié)對編程除了具備上述的優(yōu)點外,對師范院校的計算機(jī)專業(yè)而言,還有著獨(dú)特的優(yōu)勢。
(1)培養(yǎng)和提高了師范生的教學(xué)技能。師范生的教育實習(xí)是一個重要環(huán)節(jié),但是多數(shù)學(xué)生的實習(xí)效果并不好,往往表現(xiàn)為不能進(jìn)入教師角色,無法勝任頂崗課程教學(xué)任務(wù)等。究其原因是教育實習(xí)之前的試教環(huán)節(jié)存在弊端,因此嚴(yán)抓試教工作是教育實習(xí)取得成效的前提。但是,由于課時的限制,教師不可能讓每個學(xué)生都試講并給予指導(dǎo)。而結(jié)對編程環(huán)境恰好可以提供一個良好的試教平臺,這也是提倡“高級+初級”結(jié)對方式的原因所在。因為,在幫助和指導(dǎo)“搭檔”的時候,學(xué)生可以切身體會到“學(xué)會”和“教會”是兩個不同的層次,要想講清楚一個知識點,需要有耐心、勤思考。另外,被輔導(dǎo)的對象也會有無形的動力去努力學(xué)習(xí),并模仿“搭檔”的教學(xué)方式。因為老師講解某個知識點可能無法完全站在學(xué)生的角度去考慮,學(xué)生如果聽不懂會認(rèn)為“老師懂這些是理所當(dāng)然的”,而且性格內(nèi)向的學(xué)生可能會羞于向老師請教。但是,如果這個知識點是由自己的同學(xué)來講解的話,則情況大有改觀。在這個過程中,學(xué)生往往能收獲到成功的喜悅。
(2)增強(qiáng)了女生的自信心。師范院校女生居多,而且大都受“女生不適合學(xué)計算機(jī)”等片面觀點的影響,往往對編程望而生畏。在結(jié)對編程中,不論知識點的難度大小,每個人均需要親自動手操作。在公平對等的編程環(huán)境中,她們能真正動手敲程序代碼,一旦完成了自己的第一個小程序,她們往往很有成就感,自信心也極大增強(qiáng)。如果能得到老師和“高級”者的鼓勵和贊許,她們的進(jìn)步會更大。
五 結(jié)束語
結(jié)對編程是一種新的編程思想。雖然部分軟件公司在項目開發(fā)中,對使用結(jié)對編程的方法持消極態(tài)度,表現(xiàn)為:(1)管理人員的反對;(2)不能讓兩個人干一個人的活;(3)編程人員的反對。究其原因主要是考慮開發(fā)成本等經(jīng)濟(jì)效益以及程序員編程水平相差大。而在本科教學(xué)中這幾條因素的影響很小,故可以實施和推行。通過對比實驗結(jié)果表明,結(jié)對編程可以加快學(xué)生的學(xué)習(xí)速度,同時還能提高程序的設(shè)計質(zhì)量、減少程序缺陷、提高學(xué)生的操作技能和團(tuán)隊合作精神,并且在此過程中結(jié)對學(xué)生的心情更加愉快,學(xué)習(xí)積極性、自信心都得到了明顯增強(qiáng)。但是,也存在著一些問題:如有的學(xué)生喜歡獨(dú)立編程,不愿意結(jié)對(存在個別學(xué)生選擇獨(dú)自完成課程設(shè)計而不參與團(tuán)隊開發(fā)的現(xiàn)象):有時會出現(xiàn)不適合結(jié)對的時機(jī),比如對新技術(shù)進(jìn)行嘗試和攻關(guān)的時候:如何采取有效措施讓“低級”者真實地參與結(jié)對編程等。在下一步的實踐教學(xué)改革中,將關(guān)注以上問題,尋找合適的解決方案。