結對程式設計,我的噩夢

老碼農發表於2013-04-29

自從極限程式設計的概念出現,我讀到了一些材料,大談結對程式設計的好處。佈道師告訴我們,它將提高程式碼質量,有利於知識的傳播,甚至提高生產率,同時培養開發者之間深刻到靈魂的聯絡。 (see: spooning).

排斥結對程式設計的人都被認定為牛仔,懶蟲,或社會的隱士。嗯,我不屬於這些(至少我不認為),但我仍然討厭結對程式設計的想法。下面是我的理由……

我們不再是一種尊重沉默的文化。外向的人贏了。什麼事都必須通過協作完成。每個人都必須隨時準備好時間給每個人。不再有個人空間,不再有對工作的分擔。基本上,我們相信兩個腦袋總是比一個更好。

(伯樂線上額外配圖)

然而對我們來說應該是明顯的,這個理論並不一定放之四海而皆準。在程式設計世界,一些偉大的創新和精妙的作品卻並不是從一個團隊或一個結對湧現出來的。我想到了Ant,當時Java社群的一個巨大飛躍,只是一個傢伙在從歐洲到美國的航班上開發出來的。或者更近的例子,想想做出 MINECRAFT 的 Notch,做 Instapaper 的 Marco Arment,或是做 DuckDuckGo 的 Gabriel Weinberg:這都是單槍匹馬乾出來的。事實上,世界上最有影響力的程式設計師之一(如果他還不算是最有影響力的人的話)史蒂夫·沃茲尼亞克有一句著名的口號:

“一個人工作…不要進什麼委員會。不要加入什麼團隊。”

更進一步,一些科學和藝術中最偉大的思想家都是低調的(例如:內向)性格 – 想想達爾文,愛因斯坦,牛頓,或者甚至蘇斯博士。即使約翰·斯坦貝克都說過:

有史以來就沒有什麼東西是兩人一起創造出來的。根本沒有好的合作,無論是在音樂,藝術,詩歌,數學,還是哲學,都是一樣。一旦創造的奇蹟已經發生,團隊可以建造和擴充套件它,但一組人從來沒有發明過什麼。珍寶只能藏在一個人孤寂的內心。

好吧,我在這裡忽悠哲學,但是當我們回到我們自己的小角落–軟體開發的時候,既然我們可以很容易地想到這麼多的反例,我們為什麼還要相信如某些人所宣稱的,超級協作(例如結對程式設計)是確保質量或工作效率的前提呢?對於某些人來說,為什麼結對程式設計在任何時候都是硬性規定呢?

我相信這只是某些人的個人心理的反映。簡單地說:有些人喜歡這種工作作風,所以他們大聲疾呼,並推廣給所有人。

然而,事實是,我們中三分之一是性格內向的人(程式設計師中的比例可能更高!)。在一般情況下,我們不僅偏好單獨工作,而且獨自工作時成效更顯著。我們並不是不喜歡別人,而是我們的大腦更容易被外部刺激所擾亂(不管好還是壞,結對也是刺激的一種)。對於我們來說,高質量的工作是和得到和保持自己的“區域”有關係的。如果確保了這一點,我們就能做到高效率。如果確保不了,我們就做不到。

德馬科和李斯特在其著名的編碼戰爭遊戲實驗中(出自《人件》一書)證明過這一點 – 他們發現,對程式設計師工作質量最好的預測指標既不是工作年頭或薪酬,而是辦公環境的安靜程度。

這曾經是一個廣受尊敬的見解。事實上,《Joel 談軟體測試》一文中關於好的工作場所的第八個問題是“程式設計師有安靜的工作環境嗎?”然而,可悲的是,超級協作的文化已經無情地碾壓過我們更好的感性,而我要誠實地說,我覺得這種文化超爛。

結對程式設計,這個“一切都在一起”文化的延伸,已經滲透進我們的思維到相當的程度,以至於許多人認為,一個人單獨工作不僅是無效的,而且很無聊。對於我來說卻恰恰相反。我最好的工作是獨自完成的,而且這種連貫的狀態是我做為程式設計師最享受的。這不是做“牛仔”,或自以為不會犯錯誤。我是一個嚴格程式碼審查的熱情倡導者,我每天也都從別人的見解受益。我只是說結對程式設計的超級協作狀態不會使我成為一個更好(或更快樂)的程式設計師而已。請記住我說的話。

當人們描述說結對程式設計是使他們從中受益的一種實踐,好吧,我知道了。但是如果他們要邁出下一大步,倡導(或要求)我按他們的做法來,因為他們“知道”我會從中受益(他們有一些“資料”來證明這一點!),還是打住吧。使人們產生高質量的工作的方法因人而異。想想世界上(或者就是你的專案裡)一些偉大的成就,這個道理應該淺顯易懂。宣稱這種外向人群理想中的結對程式設計方法是對所有人有效的“最佳實踐”是愚蠢的,我不在乎敏捷開發教條主義者會說什麼。

打賞支援我翻譯更多好文章,謝謝!

打賞譯者

打賞支援我翻譯更多好文章,謝謝!

任選一種支付方式

結對程式設計,我的噩夢 結對程式設計,我的噩夢

相關文章