什麼時候該採用結對編程? - OSCHINA - 中文開源技術交流社區

2020-12-14 開源中國

編者按:原文作者Andriy Solovey從事軟體開發已有15年,做過開發人員、軟體經理和系統架構師。關注構建優質、可靠和可用的軟體。

結對編程是構建軟體系統的一種有效方法。採用結對編程,帶來的顯著效益:

  • 更好的想法——持續不斷的頭腦風暴、更大的知識庫、在理解上有更少的差異、有更多的腦力解決設計問題;
  • 更好的質量——更少的漏洞、想法的即時認證、始終如一的方法並更加遵守團隊會議中的要求;
  • 更全面的認識——經驗共享與知識共享、對於為什麼做、怎麼做和做什麼有更深入的理解;
  • 更高的生產率——更好地集中精力及更高的工作強度、彼此促進並激勵來達到最好的結果、更少的拖延和時間浪費;
  • 更多樂趣——大多數人喜歡分小組工作並且共同解決有趣的問題。


極限編程的領導者堅持主張所有重大的進展都應成對進行。但是我們能說在所有情況下結對編程都是最好的方法嗎?


程式設計師可以找到一些看似可行的方法來替代結對編程,這些方法不需要兩個人始終都在一起工作:

  • 想法——頻繁的團隊頭腦風暴與短期結對(或團隊)編程會議相結合,來解決最複雜的任務;
  • 質量——測試人員與開發人員共事,一起編寫自動化測試;
  • 生產率——清晰的目的與務實的工作方法可以讓你更集中精力、使方法更清晰並能帶來更高的效率;


什麼時候結對編程是最有效的方法?

最主要的因素是技術與挑戰相匹配。在獨自編程中,如果技能和挑戰能互相匹配,最高產的模式就是流模式(Flow)。結對編程添加了一個更有效的模式——指導模式(Coaching),它能夠提高全隊當前與未來任務的生產率。

成功的模式

1. 流模式(Flow)——兩個程式設計師共同從事一個有趣又有挑戰性的問題。他們會有不同的技術、遇到不同的挑戰,但是它們都善於找到好的解決方法。例如,其中 一個人可能是javascript專家,另一個人可能是強大的後臺程式設計師。他們能夠結合彼此的腦力、知識及經驗來共同處理複雜的AJAX任務,從而創造出 最好的解決方案。

2. 指導模式(Coaching)——老練的程式設計師在解決問題方面有經驗和知識,可以與其他不能有效地獨自解決問題的程式設計師分享。後來加入的程式設計師有足夠的理論基礎來理解這些解決方法和程序的實現。他會在學習中慢慢進步,成為更優秀的程式設計師。

失敗的模式

3. 浪費專家時間(Wasting expert time)——問題太簡單,以致專家的經驗無指導意義。

4. 不知所措的新手(Overwhelmed novice)——問題太過複雜或者需要太多新知識,使程式設計師學不到任何有用的東西。

有疑問的模式

5. 兩個專家共事一個易管理的任務——若兩個程式設計師都了解如何實現任務並且之前都成功地解決過相似的問題,那麼結對編程就沒有太多的用處了。

6. 一個程式設計師處於流模式(Flow),另一個在一旁學習(Learning)——若另一個程式設計師時不時地打斷他,並要求對一些基本的但與挑戰性問題沒有直接關係的事情做出解釋,那麼他很難專注於解決挑戰性的問題。

7. 一個程式設計師處於流模式,另一個專注於指導(Coaching)——如果想讓這種模式獲得成功,指導者應該思想開放,避免指導過多,同時也可以給另一個程式設計師想出自己的(甚至是更好的)解決方法的機會。

此外,心理問題可能會導致結對編程的失敗:

  • 專家的威脅——遭到其他技術更高的程式設計師更具「威脅」的程式設計師,會擔心自己被視為無能;
  • 需要時間考慮——結對編程之前,程式設計師需要更多時間去考慮,但他往往在仔細考慮自己的想法之前就被強迫開始結對編程了;
  • 寧可獨自工作——內向的程式設計師喜歡獨自工作(不合群的人);
  • 人員關係不融洽——程式設計師互相討厭對方。


我們能使結對編程一直有效嗎?

當然!把任務、技術和合作匹配起來。在兩個生產方式中找到成對的——流(Flow)或者指導(Coaching)。若成對的程式設計師能夠用他們自己的及從對方身上學到的技術來共同解決有趣的問題,那麼這個團隊將會是最高產的。

然而,結對編程應該是自由選擇或及首選方法,但它不應是強制性的實踐。就像你在這篇文章中所看到的,當結對編程不太有效的時候會產生一些模式和出現一些心理狀況。

簡而言之,結對編程應該是軟體小組工具庫中最有用的工具之一。要弄清楚什麼時候及如何使用它。

結束語

你已經結對編程了麼?如果你已經結了,歡迎在評論中和大家分享你的相關觀點、經驗和心得。


譯文出處:伯樂在線- 職場博客
譯文連結:http://www.jobbole.com/entry.php/489

相關焦點

  • 為什麼結對編程並不那麼受歡迎? - OSCHINA - 中文開源技術交流社區
    過去十多年中,筆者曾經與上百個開發團隊共同合作,這些團隊具有一個共同的特點就是:他們通常不會採用結對編程作為軟體交付的技術。
  • Delta Lake 進入 Linux 基金會 - OSCHINA - 中文開源技術交流社區
    自 2017 年 10 月推出以來,Delta Lake 已被 4 000 多家組織採用,每月處理超過 2 exabyte(十億字節)數據。「將 Delta Lake 引入 Linux 基金會的中立組織之下,將有助於依賴該項目的開源社區開發解決存儲和處理大數據(本地和雲端)的技術」,Linux 基金會戰略計劃副總裁 Michael Dolan 表示。
  • 關於編程裡的那些 ABCDEFG - OSCHINA - 中文開源技術交流社區
    它是一款開源 JavaScript 函式庫,由 Google 和它的社區來維護,用來協助單一頁面應用程式運行的。它的目標是透過 MVC模式(Model-View-Controller)功能增強基於瀏覽器的應用,使開發和測試變得更容易。函式庫讀取包含附加自定義(標籤屬性)的 HTML,遵從這些自定義屬性中的指令,並將頁面中的輸入或輸出與由 JavaScript 變量表示的模型綁定起來。
  • zmail 6.1版本更新 - OSCHINA - 中文開源技術交流社區
    Zmail的官方主頁:www.z-email.orgZmail的官方論壇:bbs.z-email.orgZmail的QQ群: 257959126系統要求redhat 6.x centos 6.x 64位最小安裝Zmail安裝說明:概述:(1)該安裝包為一鍵安裝包
  • 開源軟體蓄勢待發 - OSCHINA - 中文開源技術交流社區
    他稱:「人們現在對如何全面應用技術越來越理智。在Sleepy Cat,我們為自己是開源公司而感到自豪。在Cloudera,我們把我們自己視為研發開源軟體的企業軟體公司。」該公司還是開源軟體公司聯盟中的成員,《網絡世界》認為這些公司值得期待。
  • 開源社區的「忌諱」話題 - OSCHINA - 中文開源技術交流社區
    加拿大資深開源技術記者Bruce Byfield較早前發表了一篇名為「開源社區從來不想承認的九大事實」(9 Things That Are Never Admitted About Open
  • Netflix 的開源文化與技術 - OSCHINA - 中文開源技術交流社區
    Netflix利用開源或者自己開發的技術,讓公司能夠在分布於全世界50多個國家的伺服器上進行持續地構建和集成;能夠對用戶所產生的海量行為數據進行分析挖掘從而更好地推薦和改善自身服務;同時能夠通過性能剖析和安全審計保護用戶的隱私和數據,下面就讓我們來盤點一下Netflix所使用或貢獻的開源技術。
  • 開源春天,此時不來,更待何時? - OSCHINA - 中文開源技術交流社區
    要不然雲原生計算基金會(Cloud Native Computing Foundation,CNCF)首席技術官 Chris Aniszczyk 也不會毫不客氣地指出:「最初的開源概念必須得到修正,因為它不再適合當今這個時代,雲計算公司可以利用其壟斷力量採用成功的開源項目而不對其做出任何貢獻。」
  • 開放源碼是開源軟體嗎? - OSCHINA - 中文開源技術交流社區
    所以,與此類似的,在中文裡,我們可以認為:「開放原始碼」是一個動詞+一個名詞。而「開源」則是一個特定的詞彙。作為動詞,我們說將某某軟體開源,是一種行為。作為形容詞,我們稱某某軟體是一個開源(的)軟體,不僅僅是指我們能夠獲取到他的原始碼。
  • 5款開源雲計算平臺推薦 - OSCHINA - 中文開源技術交流社區
    我們熟知的幾個IT巨頭的雲計算平臺,如亞馬遜EC 2、IBM的藍雲、微軟的Azure、Sun Cloud等,那麼開源雲計算的平臺又有哪些呢?以下列舉了開源中國社區收錄的5款知名的開源雲計算平臺。Programs To Useful Systems)是 Amazon EC2 的一個開源實現,它與商業服務接口兼容。
  • 如何在 2020 年用 Java 安全編程 - OSCHINA - 中文開源技術交流社區
    在當今的開發環境中更是如此,各種新的安全性技術、黑客技術以及新穎的存儲和加密形式,意味著許多人都在質疑著 Java 的安全性。Java 開發人員還面臨著包括雲遷移的安全性問題在內的諸多挑戰。另一方面,新的安全審核技術(如混沌工程)也為開發人員提供了許多提高代碼安全性的機會。五個原則的具體內容如下:1.
  • Git 2.4.3 發布 - OSCHINA - 中文開源技術交流社區
    Git是一個開源的分布式版本控制系統,用以有效、高速的處理從很小到非常大的項目版本管理。開源中國 Git 代碼託管平臺:http://git.oschina.net/Windows下的Git請看這裡:http://www.oschina.net/p/msysgitGit 是 Linus Torvalds 為了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟體
  • Web 是開源最大的成功 - OSCHINA - 中文開源技術交流社區
    開源運動廣受歡迎,並且在軟體開發史上寫下了濃重一筆。但是它影響最深遠的地方在哪呢?有史以來,最成功的開源「項目」又是什麼呢? 事實上,總體來看,Web不就是開源運動最大的成功麼? 可能最有名的例子就是隱藏域眾多網站背後的LAMP,也就是Linux、Apache、MySQL和PHP。
  • 開源雲計算市場份額正在上升 - OSCHINA - 中文開源技術交流社區
    雲計算具備轉變政府機構接入IT服務方式的潛力,而開源是政府早期配置的幾種雲採用的基礎技術。
  • 納德拉時代下的微軟開源之路 - OSCHINA - 中文開源技術交流社區
    在鮑爾默時代,你很難會想像微軟會與「開源」這兩個字扯上什麼關係,因為在鮑爾默的心中,開源作業系統Linux是毒瘤。不過進入納德拉時代之後,微軟的態度來了一個180度大轉彎,儘管那句「Microsoft Love Linux」聽起來有些曖昧,但是微軟確實是深深愛上了開源。此前Linux基金會公布非營利組織R Consortium之後,微軟也成為了該組織的一名成員。但是現在,微軟又在開源領域有了新的動向。
  • Javascript 編程風格 - OSCHINA - 中文開源技術交流社區
    去年 11 月他有一個演講(Youtube),談到了好的 Javascript 編程風格是什麼。 有人說,編譯器的規範叫做"語法規則"(grammar),這是程式設計師必須遵守的;而編譯器忽略的部分,就叫"編程風格" (programming style),這是程式設計師可以自由選擇的。這種說法不完全正確,程式設計師固然可以自由選擇編程風格,但是好的編程風格有助於寫出質量更高、錯誤更少、更易於 維護的程序。
  • JavaFX 2012:徹底開源 - OSCHINA - 中文開源技術交流社區
    其中將JavaFX完全開源赫列榜首——在2011年的JavaOne大會上,Oracle已做出保證將開源整個JavaFX平臺。 以下是Richard Bair列出的2012年JavaFX 10大目標: 1.
  • Google限制Python使用引熱議 - OSCHINA - 中文開源技術交流社區
    Google論壇中網友公開詢問Collin Winter(Collin Winter是Python社區一位頗具影響力的開發者,他曾是CPython項目的核心開發者之一、也曾是Unladen Swallow(見文末注釋)的核心開發者,參與了很多Python項目的開發。)。
  • 一些編程上的策略 - OSCHINA - 中文開源技術交流社區
    這裡將向大家分享的是一些我對編程的思考總結,這些經驗在我畢生編程生涯中曾幫助我在無數的事情上作出正確的決定。這些編程策略有些是很顯然的,但實際編程中往往被人們忽略。運用管理技術在編程中運用管理技術。針對不同目的使用正確的工具。我有自己的喜好,但我努力克服。1. 異常處理和if-else語句的用法編程的時候,有些邊界情況我們需要確保能正確的處理。對這些情況我們通常的做法是使用if語句來檢查是否是這種情況。當程序運行時,這些檢查動作每次都會執行,來驗證是否是遇到了這些特殊場景。
  • 被詛咒的程式設計師的七宗罪 - OSCHINA - 中文開源技術交流社區
    下一代程式語言,最新的框架,最新的平臺。 我們程式設計師天生好奇。我們受惑於追求高效,堅信所有的東西都要經過優化。只有用了那種最新的語言,我們才能工作。 雖然不斷的追求改進是非常值得讚賞,但採用新事物也是有代價的。有避免不了的學習曲線。有適應問題。有未知的依賴問題。有未知的未知問題。 清除這些雜念。專心解決你手頭上的問題。