劉 敏 汪 瓊
(北京大學 教育學院,北京 100871)
最近十年,各國紛紛將開展中小學編程教育作為儲備科技人才、增強國際競爭力的重要工作舉措之一。自2013年英國率先提出小學生要學習編程以來,包括中國在內的許多國家也提出要普及中小學編程活動[1]。目前,國內不少中小學已經增加了編程教學課時,并肯定了編程教育的價值[2]。受益于經濟發展,大多數編程課已可以保證學生人手一臺設備,但是“獨立編程”并不是編程教學的最佳組織形式,目前流行的項目式編程教學也不一定能讓每個學生都發展編程能力,而在計算機行業盛行的“結對編程”則被證實是行之有效的編程能力提升路徑。
結對編程(Pair Programming)是指兩個程序員在一臺計算機上協同開發同一個編程任務的工作方式。人們常用駕駛汽車時的角色分工來解釋結對編程:控制鍵盤、鼠標并編寫代碼的人為駕駛員(Driver),而旁邊持續觀察、監控程序邏輯并提供輔助支持的人為領航員(Navigator)。一旦遇到問題,雙方共同討論解決。駕駛員和導航員可以根據工作內容自由地、周期性地交換角色,但在任何時候雙方都應是平等參與并共享編程產出。1999年,Beck[3]提出包括結對編程在內的12項極限編程(Extreme Programming)實踐,顛覆了原來軟件工程領域主流的瀑布式開發模式和螺旋式迭代的原型開發模式,強調程序員借助同伴的力量即時解決問題、把控編程質量,以解決企業開發周期長、迭代成本高等問題。三種軟件開發模式如圖1所示,可以看出結對編程所屬的極限編程模式是在并發地完成軟件開發的基本步驟,即分析、設計、開發和測試四個步驟同時進行。

圖1 三種軟件開發模式(來自Beck)
結對編程在企業中的成功實踐很快引起了計算機科學教育工作者的關注,他們認為結對編程也可以運用于教學場景中。目前,國外已經積累了豐富的結對編程教學經驗,并且已有研究發現:結對編程在提高學生編程能力、計算思維、編程學習熱情、元認知等方面有積極效果[4][5][6]。
但是在我們向一線老師推薦結對編程的時候,常會遇到挑戰:“結對編程與獨立編程或項目式編程相比有何特別之處?”“中小學生編寫的程序都不長,有多大必要非要兩人用一臺設備結對編程?”“如何結對效果最好?”……為了有理、有據地解決一線教師的疑惑,本研究進行了較為廣泛的文獻搜集、分析并綜述了國外有關結對編程的實證研究成果,據此剖析結對編程的學理價值和成功關鍵,以期推動結對編程在我國中小學的應用,進而開展更為有效的編程教育。
有效的教學組織形式需要與教學目標、教學內容相適應,學生要想獨立學好編程并非易事。Winslow等[7]發現,計算機專業的學生在專業入門課程中往往會被挫敗感壓垮,導致學業表現不佳甚至直接退課或轉專業;Simon等[8]也指出,學生在獨立編程過程中是非常孤獨的,并且學生在學習伊始很容易喪失信心和學習熱情。
除了挫敗感和孤獨感外,學生在獨立編程的過程中還需要克服很多其它障礙,如學生需要接觸并掌握一種新的計算思維方式,“像程序員一樣思考”,并且面對困惑和不確定性時能夠及時反思[9],否則其編程學習很可能是低效的甚至是無效的[10]。缺少個性化的學習反饋也是學生面臨的重要困難之一,當學生在編程過程中遇到困難而得不到即時反饋和解答時,學生的學習進度和信心都會受到影響[11]。此外,學生初學編程時往往需要花費很多時間才能定位錯誤代碼,完成程序調試[12]。要想克服這些獨立編程時常見的問題,需要學生有充分的自信、勇氣和韌性。
項目式編程在一定程度上可以緩解或解決上述問題。與學生單獨學習編程相比,項目式編程能夠較為有效地提升學生的編程學習效果、學習動機和滿意度。但是,目前流行的小組合作編程學習也存在一定不足,如實證研究發現小學生在合作編程學習活動中難以有效學習“事件”(Events)、“并行”(Parallelism)等較為復雜的計算思維概念,而且小學生的漏洞調試能力(Debugging)在小組合作中的提升也較為有限[13][14]。不過,項目式編程與結對編程并不沖突,因為項目式學習中的每段程序也是可以以結對編程的方式產出的。
與項目式編程中多人分工獨自編程的組織形式相比,基于出聲思維的雙人協作結對編程規程簡單,結對學生雙方的對話讓編程思維顯性化,加快了即時反饋的頻率和效率,有利于學習并掌握計算思維邏輯。有研究發現,結對編程能夠強化學生對計算機科學知識的記憶和理解,同時顯著提升學生的計算思維能力和推理技能[15]。結對編程為結對雙方提供了在社會互動中建構意義的機會,學生在提出自身編程方案的同時,傾聽與尊重對方的觀點,這對于學生超越依靠自身努力可以企及的理解程度、開展深度的編程學習有重要作用[16]。而且,結對編程能夠增強學生的編程學習動機并提升其面對挑戰時的毅力,尤其是能顯著提升女學生的自信心和編程學習興趣,而同伴給予的幫助、支持、鼓勵、關注也都對女學生的學習動機和效果有促進作用[17]。
此外,結對編程還能有效消解學生對計算機編程學習的恐懼。Bergin等[18]指出,很多新手學生會畏懼編程這一未知的知識領域,對編程學習缺乏信心,而讓學生尤其是表現不佳或起始學習水平較低的學生單獨學習編程更是會加劇其恐懼心理,進而導致其不愿意主動發起討論或表現出其它消極的學習行為。也就是說,學生在學習編程時的自信程度和自我效能與其舒適度有關,且會通過學生的編程學習行為而最終影響其學習效果。Wilson等[19]的研究也發現,舒適度是影響新手編程學習效果的重要因素,學習者的恐懼情緒會導致其無法集中注意力、自我懷疑并開始厭惡編程學習。而在結對編程的過程中,結對雙方輪流扮演糾錯者的角色,并逐漸適應不斷發現問題并調試代碼的編程文化,這可在一定程度上消解學生對編程學習的恐懼。
基于豐富的實證研究結果,以及對獨立編程、項目式編程和結對編程的比較,本研究認為結對編程是編程教育中卓有成效的教學活動組織形式。中小學階段是培養學生編程興趣和能力的初始階段,采用結對編程教學組織形式,可以有效保護并保持學生學習編程的興趣和自信,支持其在相互支持和鼓勵中快速、扎實地掌握編程的基本技能。
“如何結對最合適”,是初次接觸結對編程的人常問的問題。以下多視角的研究發現能夠給教師一定的參考和啟發。
從互幫互助的角度來看,教師可能希望有編程經驗的學生與沒有編程經驗的學生結對搭配。但是,有研究發現編程能力較強的學生在不匹配的結對編程中學習滿意度較低,而能力較弱的學生滿意度更高、編程能力提升速度也更快[20]。有研究揭示了造成這一現象的部分原因:經驗較為豐富的學生往往對同伴缺乏耐心,認為向同伴解釋編程概念并等待同伴理解是“浪費時間”,因而選擇獨立完成編程任務[21],中等和較低編程水平的學生則因為可以在合作中觀察水平較高的學生解決問題而從中受益[22]。
有關結對規則影響結對編程學習效果的其它研究也表明:結對出現問題的關鍵可能不在于學生的年齡、性別、能力等特征,而在于結對同伴之間能否建立平等關系[23]。真正影響結對編程實施效果的,是學生感知到的結對匹配度[24]、與同伴的合作態度和意愿[25]等。這些研究發現提醒我們:結對雙方各方面的差異不要太大,明確角色分工和合作規程將有利于消除或減少矛盾的發生。例如,Williams等[26]主張通過教學視頻幫助學生理解“駕駛員”和“導航員”的角色、輪換角色的重要性,并強調結對編程中雙方積極參與的價值。
一般來說,中小學學生編程能力差別不大,且適應能力強,有實證研究發現良好合作的結對雙方其角色分工往往并不是涇渭分明的,而是可能在合作過程中自然出現“教師—學生”或“思考者—實干家”等有效且充滿活力的學生角色分工變體[27]。多項調查研究結果顯示,多數學生比較滿意結對編程的學習過程。例如,Carver等[28]發現不管是根據個性特質還是根據編程成績表現進行配對,學生對結對編程的滿意度都較高;學生普遍認為結對編程過程中雙方能夠平等地交流和進行角色輪換,公平地承擔工作量。
在編程教育領域,對女生和弱勢群體學生的研究也對學生結對編程策略有所啟發。例如,Kaur等[29]發現兩個同性別的組員更傾向于民主協商,而異性成組更容易催生權威角色;Ruvalcaba等[30]指出,社會經濟背景較差的學生和拉丁裔學生在結對編程過程中提出異議、提問質疑、解釋、指明方向、對抗等行為的頻率較低。可見,在編程教育中有意識地開展同性別結對或相似社會背景學生的結對,對于激發女生和弱勢學生學習編程的興趣將有所助益。
前文介紹了結對編程的優勢,說明了結對編程比獨立編程更有助于初學者掌握計算思維,而且可以增強學生的編程自信。但是,仍有教師認為對初學者來說,結對編程并非必要,因為程序不長,獨立編程的學習速度似乎更快——Shah等[31]的研究證實了這一點:與獨立編程相比,結對編程的小學生需要更多時間才能完成編程任務,因為學生剛開展結對編程時,溝通與合作會占用相當一部分的時間。此外,中、小學生在結對編程的過程中可能會出現不平等的溝通與角色分工,這會影響結對編程的效果和學生的學習體驗。
Lewis[32]比較了結對編程與“獨立編程+間歇性合作討論”(學生各自在電腦上獨立完成同樣的任務,每隔5分鐘與同伴開展一次討論)的學習效果,其研究結果表明:兩種干預下六年級學生的成績沒有顯著差異,但參與結對編程的學生個人成績差距較大,其原因可能在于結對編程中可能出現的不愉快合作會削弱學生的掌控感和學習熱情,異質結對模式下弱勢學生會成為旁觀者而缺乏參與,導致個人成績差距拉大;接受獨立編程+間歇性合作討論干預的學生對待學習Scratch、參與編程課程以及未來從事相關職業的態度都更為積極,完成編程任務的速度更快,但這也可能是因為存在“對答案”的行為。
Lewis的研究發現似乎說明:結對編程并非最佳的教學組織形式,而在獨立編程活動中增加定時討論所取得的學習效果更好。這種間歇式合作討論雖能在一定程度上確保學生的思維溝通基本處于同一個進度,但在現實中卻很難讓合作真實地發生,可能會出現學生認為沒什么要討論的而各自繼續忙編程的情況,從而失去相互學習、相互啟迪的機會。還有一些實驗也有類似的研究結論,這是因為沒有理解結對編程要求兩人一臺電腦的學理機制,或者說沒有看到編程活動背后合作質量的重要性:相較于獨立編程過程中隨機出現的合作,結對編程的優勢在于用合作規程強行讓兩人同步思維,學生可以更容易辨識出彼此想法的差異、更方便觀察和模仿同伴,故更容易在此過程中提高自己的編程能力。可以說,結對編程創造了合作互學的“合法性”機制。
雖然結對編程有出聲思維、合作學習等促進深度學習的基因,但在實施過程中如果學生不理解這些內涵,也難以達到理想的教學效果。例如,結對編程中常見的現象是雙方都迫不及待想當“駕駛員”,而擔任“領航員”時注意力往往不夠集中,并且雙方在交流上存在爭吵、忽視同伴聲音等問題,這多是因為學生還沒有學會合作,需要教師為學生提供合作技能和沖突解決訓練、向學生示范結對編程活動形式、幫助學生明確結對編程中的角色分工等[33],而不能因為學生不會合作就讓他們回到低效且易孤獨的獨立學習模式。那么,怎樣有效地開展結對編程呢?
針對上述問題,研究者紛紛展開了深入的研究。例如,Denner等[34]關注結對編程中的哪些同伴互動會影響學生的“無畏探索”(Intrepid Exploration,即在完成任務的過程中不懼挑戰和挫折而勇于持續探索),為此他們對16名中學生的結對編程過程進行錄像和編碼分析,結果發現:在結對編程過程中同伴雙方平等的意見交換、動態的角色分工、用語言或非語言方式互相鼓勵等行為對學生的“無畏探索”有積極推動作用,而不平等的溝通乃至權力爭奪、“領航員”注意力分散等行為會產生阻礙作用。Shannon等[35]招募了66名中學生開展基于Alice設計開發動畫游戲的結對編程教學實驗,運用扎根理論對結對編程視頻錄像進行分析后,發現學生在編程中出現了合作、破壞、探索三種行為模式:合作行為有學生雙方通過語言或非語言的交流來分享觀點和解決方案等;破壞行為有“駕駛員”獨斷專行、霸占電腦控制權以及毫無建設性的爭吵或消極抵制對方想法等;探索行為強調結對雙方批判性、建設性地進行觀點交流,包括闡述、解釋、辯論、傾聽、反思等,為此他們建議:在開展中小學結對編程的過程中,教師應該密切關注結對雙方的行為表現,及時處理不平等、具有破壞性的行為。上述兩項研究發現有助于教師在開展結對編程前對學生進行合作話術培訓,以及在結對編程的過程中辨識合作是否和諧。
此外,還有一些研究關注結對編程過程中角色輪換的時間間隔對學習滿意度的影響。例如,Zhong等[36]將150名六年級學生分為四組,分別按照在結對編程過程中每5分鐘輪換角色、每節課(20、30、40分鐘)后輪換角色、每項任務(5~15分鐘)后輪換角色、學生自主決定一節課內何時進行輪換操作,結果發現:自主決定何時輪換角色的小組和每5分鐘輪換的小組更享受整個結對編程過程,其原因可能在于這兩組學生的自主權得到了尊重;在半結構訪談中,有學生表示每5分鐘輪換的方式更像“蹺蹺板”,這對學生來說更加平等、也更有趣味。
結對編程能否培養學生的獨立編程能力是教師關注的重點問題之一,尤其是對于那些編程能力較弱的學生,教師十分擔心他們在結對編程中會過度依賴同伴,等到需要他們自己獨立編程時就很可能會面臨失敗。而對這一問題的相關研究證明,結對編程教學至少不會對后續學生獨立完成編程產生負面影響:
①多項追蹤研究的結果表明,結對編程學習經歷能為學生后續的獨立編程打下良好基礎,使學生更有可能獲得獨立編程的成功。此外,與獨立編程的學生相比,有結對編程學習經歷的學生在增加任務難度時,其成績下降幅度明顯較小[37]。
②有研究通過訪談發現,學生也認為結對編程為其后續獨立編程奠定了較為扎實的基礎[38]。Smith等[39]以2468名參加“計算科學導論”課程(Introductory Computer Science Course)的學生為樣本,追蹤他們兩年的學習成績表現,發現結對編程能夠顯著提升學生長期的學習成績,而且對初始成績較差的學生影響最大。需要注意的是,已有的證實了結對編程具有長遠影響的文獻多以大學生為研究對象,而直接討論中小學生結對編程長期影響的實證研究較少。
③現有的一些研究間接地論證了中小學結對編程的長期影響,認為結對編程有助于培養學生的元認知能力,這能間接地作用于學生后續開展資源分配、策略調適以及獨立編程等任務情境,但前提是需要教師有意識、有策略地將元認知教學融入編程教學中。例如,Breed等[40]以南非貧困地區郊區學校的99名中學生為研究對象,發現在編程教育過程中學生的元認知能力發展并非自然發生,常見的情況是教師對元認知了解甚少,或是教師有意識地開展一些元認知練習活動但學生不愿意花時間參與其中,而是更愿意花時間完成編程作品,故提出應首先增強教師自身的元認知意識和價值感知,并為其提供教學設計指導,這從長遠來看對于提升學生的元認知能力有積極作用。后續研究肯定了這種長期積極影響的存在,認同在結對編程過程中融入元認知會對學生的計劃、信息管理、監控和評價等元認知策略的運用有顯著的正向促進作用。
目前,雖然較大規模追蹤中小學結對編程長期影響的研究成果較少,但上述研究發現也還是給出了一些積極答案。基于此,教師在一線教學中可以持續關注這一問題,并與研究者共同探索如何促進結對編程向獨立編程順利過渡、結對編程這種教學組織形式有何長期影響等問題。
結對編程利用“學習在交談中發生”的學習發生機理,通過“出聲思維”讓結對雙方共同發現問題、集思廣益出對策,有助于學生形成計算思維、學會合作,建立編程自信,掌握編程能力,培養克服困難的韌性,理應成為中小學編程教育的首選教學組織形式。
梳理并分析上述研究發現,本研究歸納出在中小學階段開展結對編程的四個要點:①告知學生出聲思維的要求、價值和作用,強調在結對編程中雙方即時交流思維的重要價值。②定時輪換角色,如5分鐘一換。這不僅是讓每個學生都有機會操作練習,也是為了防止“導航員”松懈走神,逼著他們同步思考以順利接手。剛參加結對編程活動時,一些學生以為從“駕駛員”換到“導航員”就是休息,意識不到“導航員”角色其實更燒腦,如需要主動預判、系統化查漏補缺等,故在角色輪換方面還需教師予以點撥和指導。③教師要認識到不同結對模式下所需的教學支持和干預不同——在同質性分組中,教師需為能力較差的小組提供即時的支持和反饋;而在異質性分組中,教師更需關注組內學生平等的角色劃分和學習參與,通過觀察學生的話語和行為表現及時調節不平衡的學生關系。④教師在結對編程教學過程中應注重元認知能力的培養,幫助學生實現從結對編程向獨立編程的順利過渡。后續研究可進一步細化結對編程的作用路徑和實施策略,并以此為切入點剖析合作學習對編程教育的影響。