> “工程問題都很簡單。人際關系才是最難的。”
——比爾·庫格倫,前Google工程部資深副總裁
生活中總是充滿了離奇的轉折,就好像我們倆從沒想過會合作寫一本軟件工程的書一樣。
和大多數電腦狂一樣,大學畢業后我們發現自己的興趣和熱情(折騰電腦)居然也是不錯的謀生手段。而和那個時代的大多數黑客一樣,我們的整個20世紀90年代中期都是在干這些事情,用別人剩下的零件攢機,拿著一大疊軟盤安裝預覽版的 Linux,然后學著操縱 UNIX 機器。我們都是系統管理員出身,然后在互聯網泡沫剛起來的時候跑到小公司里去當程序員。泡沫破裂后,我們開始為那些幸存的硅谷企業(比如 Apple)工作,后來又跳槽去了一家創業公司(CollabNet),全心設計開發了一款開源版本控制軟件Subversion。
然而2000年到2005年期間,一些意想不到的事情發生了。盡管我們創造了 Subversion,但是我們每天的任務卻漸漸發生了變化。我們不再只是天天坐在那里寫代碼,而是開始領導一個開源項目了。這意味著我們要整天掛在聊天室和一堆程序員志愿者打交道,關注他們都在做些什么。這還意味著要幾乎完全通過郵件列表來協調各種新特性。我們逐漸發現一個項目成功的關鍵不僅僅是寫出漂亮的代碼:所有人向著同一個目標一起合作也是同樣重要的。
2005 年的時候我們一起創建了 Google 芝加哥分部,以程序員的身份繼續著我們的職業生涯。這時我們已經完全融入開源世界了——不僅僅是Subversion,還有Apache軟件基金會(ASF)。我們把 Subversion移植到 Google的 BigTable架構上,并以Google Code為名發布了一項開源項目托管的服務(類似于 SourceForge)。我們開始參加(后來開始做演講)各種開發者大會,例如OSCON、ApacheCon、PyCon,還有Google I/O。我們發現同時為企業和開源項目工作的經歷讓我們無意之間了解到了軟件工程團隊運作的奧秘。一開始我們做的演講都是輕松幽默的,大多是批判無用的開發流程(“Subversion最差實踐”),后來則開始轉向探討如何保護團隊不受害群之馬的影響(“開源項目如何應付害群之馬”)。越來越多的聽眾聚集到我們的演講會場,我們稱之為程序員的“集體療法”。每個人都對我們談論的問題有著切膚之痛,都想要對大家抱怨一下。
于是,六年來我們做了一大堆反響熱烈的和軟件開發過程中人際關系有關的演講。最后奧萊利公司的編輯瑪麗·特萊斯勒建議我們干脆把這些演講寫成一本新書。接下來發生的事情就略過不表了。

想要編寫出色的軟件?這本書就是為你寫的
## 本書的讀者
本書是專門寫給那些想要更上一層樓以及編寫出色軟件的程序員看的。CEO、心理學家、管理層\計算機理論學家,還有焊電路板的技師等都不算是我們的目標讀者(雖然這些朋友或許也能讀得津津有味)。在此我們假設本書的讀者具備以下兩個重要條件。
? 你需要和團隊里的其他程序員合作。無論是為公司企業工作,或是某個開源項目或是學校作業的一員都可以。
? 你喜歡軟件工程,并且覺得它應該是一件很有成就感、很好玩的事情。如果你只是應付工作混口飯吃的話,那估計你對實現自我價值和獲得職業滿足感不會有什么興趣。
在討論程序員怎么才能“通力合作”的時候,我們總結出了一些表面上看起來和程序員這份工作風馬牛不相及的經驗和準則。我們會在各章里談到怎么才能更好地領導一支團隊和企業,怎么才能和用戶建立起良性的關系等話題。乍看起來這些章好像是專門寫給所謂的“管人的人”或者說“產品經理”看的,但我們可以保證,你的職業生涯到了某個階段的時候一定會有意無意地擔當起這樣的角色。所以先放下疑慮,繼續往下讀吧!這本書里講到的東西是每個軟件工程師最終都會碰到的。
## 警告:本書不是技術手冊
首先我們需要澄清一些事情。好學的程序員通常都喜歡去讀一些能將某些個特定問題用純數學的形式展現出來的書籍,而通常這樣的問題都存在完美的流程化的答案。
本書并不屬于這種類型。
本書主要關注的是軟件開發中有關人的那個方面,而人是很復雜的。正如在我們自己的演講中說到的那樣,“人基本上就是由一大堆間歇性bug組成的”。這里論及的問題和答案都是很凌亂的,很難用完美邏輯來解釋。本書讀起來像是論文集,而事實上它的確也就是一本論文集。每一章我們都會討論一系列相關的問題(通常是用案例故事的方式),然后針對整個主題再探討各種應對方案。你可能需要反復閱讀很多頁,努力把它們聯系起來,甚至思考數日才能融會貫通!
我們在此還要作一些聲明。正如我們在演講里開過的玩笑,“這里的觀點完全是基于我們自己的經驗得出的,完全屬于我們自己。要是你不同意我們的觀點,完全可以去自己做演講啊”。和我們的現場演講一樣,只要和本書主題相關,任何討論都是值得鼓勵的。我們歡迎各種反饋、修正、新觀點,以及反駁:你可以在http://www.benandfitz.com/ 上找到我們。本書的所有內容都來自我們的親身經歷和無數錯誤中得到的教訓。
你還應該注意,我們在例子中提到的都是化名,以保護無辜(或者犯錯)的當事人。
## 本書的內容都是課本里學不到的
我們認識的軟件工程師絕大多數都花了4~10年的時間在學校里學習計算機科學和軟件工程。截至本書出版為止,我們不知道有任何一門課程<sup>1</sup>
是真正教你怎么在團隊和公司里與人合作交流的。好吧,大多數學生都會在學校里被要求參與某個項目,但是教一個人怎么好好地和另一個人協作與把他直接丟到一個迫使他協作的環境里完全是兩碼事。絕大多數學生最后都不怎么喜歡這種經驗。

## 小結
所謂成功的程序員不僅僅是追逐最新的語言或是編寫最快的代碼。職業程序員幾乎都是要參與團隊合作的,而且事實上團隊直接影響個人生產力和幸福感的程度超出很多人的想象。
本書的目標很簡單:編寫軟件是集體項目,而且我們認為人的因素對結果的影響不亞于技術因素。大多數人雖然在編程技術上耕耘數載,但是在人際關系上卻從來沒有下過功夫,而學習與人合作也是成功路上不可或缺的重要環節。只要你能在軟件工程的“軟技能”上下點功夫,就能達到事半功倍的效果。
* * * * *
> <sup>1</sup> 我們讀過湯姆·迪馬克的《人件》,的確是一本好書,但它并不是一本專門教工程師怎么與人高效合作的著作,而是一本教管理人員怎么帶領團隊成功的著作。
- 內容提要
- 致謝
- 本書宗旨
- 對本書的贊譽
- 前言
- 第一章 天才程序員的傳說
- 幫我把代碼藏起來
- 天才的傳說
- 隱瞞是有害的
- 團隊才是王道
- 三支柱
- HRT實戰
- 下一步
- 第二章 培養出色的團隊文化
- 什么是文化
- 為什么要關心它
- 文化和人
- 優秀團隊文化中的溝通模式
- 高層面同步
- 每日進行的討論
- 使用bug跟蹤系統
- 溝通也是工程的一部分
- 說到底真正重要的還是代碼本身
- 第三章 大海航行靠船長
- 自然界沒有真空地帶
- @Deprecated Manager
- 主管才是新的經理
- 唯一要擔心的就是……好吧,所有的事情
- 仆人式領導
- 反模式
- 領袖的處事之道
- 人是植物
- 內部激勵和外部激勵
- 結語
- 第四章 對付害群之馬
- 什么是“害群”
- 保護團隊
- 發現威脅
- 第五章 操縱組織的藝術
- 優點、缺點和策略
- 理想的情況:團隊在公司里應該是怎么運作的
- 現實的情況:當環境成為成功路上的絆腳石
- 操縱你的組織
- B計劃:走為上
- 不要放棄
- 第六章 用戶也是人
- 管理大眾的印象
- 管理和用戶之間的關系
- 結語
- 附錄A 延伸閱讀
- 版權