在大量運用 AI 人工智慧的時代,為何外商軟體公司仍積極運用結對編程進行開發?導入敏捷超過 10 年的新加坡商鈦坦科技,作為台灣極少數落實結對編程的企業,邀請到鈦坦科技技術經理 Norman 進行專訪,來聽聽曾待過硬體製造業、新創公司的他,分享對軟體業結對編程的觀察與看法。
結對編程是兩個人共同開發程式的一種協作方式,在這種模式下,一位成員擔任 Driver,專注於編寫程式碼;另一位成員擔任 Navigator,負責檢查程式碼是否有錯誤或可以改進的地方。Driver 專心於當前的工作,而 Navigator 則從旁協助,確保整個過程更加順利,這樣的合作方式不僅提高了程式碼的品質,也促進了知識和技能的共享。
Norman 表示,結對編程結合了工作和學習,讓兩人不僅能一起協作,也能互相學習。這種方法能有效避免獨立開發時可能出現的盲點和錯誤。「越早發現錯誤,修復成本越低,因此結對編程是有效減少錯誤的好方法,從長遠來看,這不是增加成本,而是有策略的投資。」
鈦坦科技組織發展部經理方郁綺指出,鈦坦科技在導入敏捷後,為了避免遇到員工離職,便沒有人會維護原本的系統而導致「程式重寫(Code Rewrite)」的困境,故採取「結對編程」以避免此情況一再重演。
在一些新開的專案初期,鈦坦工程師甚至會啟動多人協作編程(Mob Programming),透過群體智慧來建構系統架構的基礎,這個過程也會讓團隊更了解此專案的核心商業需求,了解系統設計背後的商業邏輯。
Norman也強調,結對編程要達到好的效果,通常需要一位 Junior 和一位 Senior 一起協作。因為 Junior 技術能力不足,可能會影響到問題的發現和解決,而 Senior 則能提供更多指導和建議,也要避免一直是同一組人一起 Pairing,可以讓更多人互相學習和成長。此外,Norman 也遇過有些潛力不錯的 Junior 能發現 Senior 因為慣性思考而忽略的地方。
透過結對編程,開發者們可以提前溝通想法,減少實作時產生的落差,並從過程中學習如何說服別人,最後寫出來的程式由於經過多人思考會降低盲點,連帶提升程式碼的品質。
鈦坦科技自 2014 年導入敏捷開發後,開始採行結對編程,Norman表示,這是鈦坦人日常開發的一部分,在平日的實踐中,他發現通過 Pairing,可以迅速發現漏掉的一些測試案例,這對開發團隊來說是很大的幫助;此外,Pairing 也可以幫助團隊迅速瞭解到每位成員彼此的技能狀況,以及對領域知識的熟悉度。
Norman 表示,結對編程不是萬靈丹,並非適用於所有團隊,特別適用於解決複雜問題,因為越複雜的需求越容易出錯,即便是 Senior 也可能漏掉一些測試案例,透過結對編程則可以發現這些盲點。不過,如果是功能相對簡單或已做過多次的功能,那結對編程的效果可能不明顯,因為開發者對需求已經相對熟悉了。
曾待過硬體大廠、新創公司的 Norman,在加入鈦坦科技前,也沒有結對編程 的經驗,經過了五年的實踐與體驗,他分享了自身觀察到的三大重點,讓想要嘗試的人可以作為評估依據:
鈦坦科技的成員一加入公司,就必須進行結對編程,透過這樣的協作模式,團隊成員之間能夠相互學習、共同進步,從實習生時期就加入鈦坦科技,如今轉為正職 PD(Product Developer)的 Alisha表示:「敏捷自組織團隊以結對編程的方式進行開發,能大大降低新人的不安,不會有被放生的無助感,也能在過程中快速累積經驗、大幅學習成長。」
當團隊內有人離職或請長假時,許多人都會面臨「交接」難題,為了面對以及解決這樣的困境,可以透過「公車指數」(Bus Factor)這項指標,衡量團隊是否會因為人員變動造成工作停擺的衝擊,也是用來評估「資訊共享度」的衡量標準,指數越高代表團隊資訊共享度越高,個人的影響力較小;反之,指數越低就代表當一位專業角色離開時,工作越容易陷入停擺狀態。結對編程有助於讓更多人瞭解程式碼的細節,透過結對編程,不只能達成人才培育,同時也提高組織的可持續性。
奉行“Fail fast, fail cheap, fail often.”的原則下,鈦坦人不怕犯錯、重視溝通,共同對齊目標一起協作,透過結對編程,可以避免獨立開發時,因為個人習慣或思考的盲點而產生錯誤的功能。軟體開發秉持越早發現錯誤,修復成本越低的關鍵,所以結對編程其實是減少錯誤的好方法。可能面臨的挑戰是溝通成本,可能會比單獨開發花上更多的時間,不論這個溝通是花在理解彼此的想法或是學習對方的技術,又或是合作上的衝突,可能來自於雙方對同樣的需求有不同的想法,鈦坦科技透過建立團隊共通語言如 ORID 焦點討論法、SNT 行動原則等,幫助對話,了解彼此觀點,不斷對齊共同目標。
面對進入到 AI 被廣泛運用的世代,Norman 提到這些新興的人工智慧技術能輔助開發,讓開發者更快地學習新的語法和更短的寫法,不過這還是需要開發者對程式本身有一定的熟悉度,否則可能會誤用導致錯誤。
他建議,無論是 Junior 還是 Senior,都應該在結對編程時注意學習更多技術和領域知識,並適時停下來進行溝通,了解彼此的想法,這樣才能真正發揮結對編程的優勢,有效提高團隊的整體開發技術。