# 三十一、作為哼哈二將,只管去做事
這個站應該是關于軟件管理的,不過有時候你并沒有那個權力去改變組織的行政 命令。很顯然的,如果你只是圖騰柱底層的一個普通程序員,絕對不可能命令大 家開始建立時程或問題追蹤數據庫。事實上當你成為經理之后,可能會發現管理 開發人員很像養貓,不過沒那么有趣。光會說「照這樣做」并不真的能照這樣做。
在約耳測試分數低的組織里工作可能會讓人沮喪。不管你程序寫得多好,同事 還是會寫出讓你羞與為伍的爛程序。另外管理階層在決定產品時也會作出爛決策, 所以你只好被逼浪費自己的才能,去為針對兒童的AS/400版退休計劃游戲除錯 (譯注:誰家小孩會玩退休計劃游戲,更別提能用到AS/400了)。
我建議你大可離開。不過萬一你基于某些原因必須繼續待著,比如股票選擇權還 沒有到手,或是住的地方太小沒有更好的工作,又或許老板抓了某個你愛的人作 為人質。不管如何,在一個爛團隊里討生活實在叫人抓狂。不過還是有些策略能 從底層改善你的團隊,而我要與你分享其中幾項。
## 策略一:去做就是了
有很多事一個人就可以改善項目。沒有每日編譯服務器嗎?架一個。在你自己的 機器上設一個定時的工作,在每天晚上編譯并把用電郵發送結果。編譯的步驟太 多嗎?寫個makefile吧。沒有人做可使用度測試嗎?用幾張紙或VB原型自己去找 收發室的人來做吧。
## 策略二:利用病毒性營銷的威力
約耳測試中很多策略都可以在不合作的團隊中一個人施行,其中有幾項做得好的 話還能推廣到整個團隊。
舉例來說,假設團隊中沒人愿意用錯誤追蹤數據庫。別因此覺得困擾,自己去用 就是了。把你自己程序里找到的問題輸進數據庫。如果你找到確實是其他人該修 的問題,就用錯誤數據庫把問題指派給他。如果你用了好的問題追蹤軟件,這時 候就會用電子郵件通知他。沒有也不打緊,如果他們沒有修正問題,你還是可以 一直寄電子郵件提醒。最后他們總會發現問題追蹤的價值,然后像自愿般地開 始使用這個系統。如果QA團隊拒絕把問題輸入問題追蹤數據庫,你只要拒絕其他 方式的錯誤回報就好了。等你重復告訴大家約三千次:「請聽我說,我很想修 好這個問題,不過我會忘記,能不能請你把問題輸到系統里?」他們就會開始使 用數據庫。
團隊里沒有人要用源碼版本管理嗎?建立你自己的CVS儲存庫,必要時可以放在 你自己的硬盤上。即使沒有人合作,你還是可以把其他人的程序自己放進系統。 然后當他們發生某些可以用版本管理解決的問題(通常是誤把`rm *?`打成`rm *`時,就會來找你幫助。最后大家都會知道他們自己也可以由版本管理取出程序代 碼。
## 策略三:建立一個卓越圈(Pocket of Excellence)
團隊不排時程?不寫規格?自己來寫吧。花一兩天針對你的工作寫份小規格和時 程,不會有人因而抱怨的。
找些更好的人進團隊。想辦法參與雇用面試過程并招募好的人才加入團隊。
找出那些愿意又有能力改善的人,想辦法讓他們支持你。即使是再爛的團隊還是 很可能有聰明人在,只是缺乏寫出好程序的經驗。幫助他們脫離困境,安排他 們學習。看他們登入的程序,如果他們做了什么蠢事,不要寫電郵高傲地指出他 們的程序哪里不對。這樣只會激怒并讓他們更加護短。應該故作無知地回報該 錯誤會導致的問題,讓他們去找出原因。等他們自己找到問題,印象就會深刻多 了。
## 策略四:讓笨蛋無害
即使最好的團隊都會有一兩個笨蛋。團隊里有爛程序員讓人頭痛的地方,就是他 們的爛程序會攪亂你的好程序,另外就是好程序員得花時間幫壞程序員擦屁股。
身為底層工作人員,你的目標是損害最小化,也就是所謂的牽制策略。有時候這 些天才會花兩星期寫出一點點程序,而且寫出來的東西爛到不可思議,完全不 可能用。這時候你會很想花15分鐘把這段程序從頭再寫過。請忍住這種誘惑,因 為這是個把這些白癡拖住幾個月的大好機會。只要一直報告那個程序的問題, 他們就只好一直在這段程序卡義/刀個萬,直到你找不到其他問題為止。而這幾個 月他們就不會在其他地方造成傷害了。
## 策略五:遠離干擾中斷
所有好的工作環境都一樣(個人辦公室,安靜的工作狀況,優越的工具,很少干 擾和更少的大型會議)。而所有不好的工作環境都各有不好的原因。
不幸的是,幾乎在任何公司里都不太可能改變工作環境。長期租賃表示可能連執 行長都無計可施。這也說明了為何只有少數的軟件開發人員擁有自己的辦公室。 對公司來說這會造成兩種傷害。首先是更難以請到頂尖的開發人員,這些人偏好 能提供更佳環境(當其他條件相等時)的公司。其次是干擾的程度會讓開發人員 的生產力急速下降,開發人員會發現自己根本無法進入狀況并專心工作。
想辦法離開那個環境。拿臺筆記本電腦到公司的餐廳去,里面有很多大多時候都 空著的桌子(而且沒人找得到你)。可以把某間會議室預約一整天然后在里面寫 程序,然后用工作成果來證明,獨自在一個房間作業能完成的工作會多上許多。 等下次出現緊急狀況,經理要求在明天之前完成工作時,你就知道要說什么了。 他們會找間辦公室給你在那天用,然后不久他們就會開始覺得應該整年都保有這種生產力。
上下班都晚一點。其他人下班之后的時間生產力最高。如果所在的開發團隊習慣 晚到,你可以早上九點就來,在其他人上班干擾之后專心做事,這段時間的成果 會比后面的時間加起來都多。 不要開著你的電郵和實時通訊。需要的話可以每小時去收一次信,不過不要一直 開著。
## 策略六:提升自己的價值
如果你并不是真的很有貢獻,這些策略通通都沒用。如果你寫不出好的程序,那 么你「應該」正在寫程序的時候,其實只是在問題數據庫里浪費時間還惹人厭。 如果你被掛上做不出東西卻只關心流程的惡名,大概就沒什么職業生涯可言了。
曾經一度當我在某家新公司開始當個底層程序員時,發現公司約耳測試太概只有 兩分,于是我決定要改善這種狀況。不過我也知道良好的第一印象非常重要,所 以安排自己在每天前七個小時都照大家的期望單純只寫程序。頻繁地把程序登 入版本管理,是讓開發團隊認為你很好的最佳方法。不過我會在每天下午回家前 保留一小時改善流程,利用那段時間修正讓產品難以除錯的問題。我架了一臺每 日編譯服務器和一臺問題追蹤數據庫,還把所有長久阻擾開發的煩惱都解決掉。 我針對當天要做的事撰寫規格,也寫了文件逐步解釋如何從頭建立一臺開發用的 環境。內部有個重要的程序語言沒有任何文件,我也把它完整的文件做出來了。 整個流程慢慢地變得愈來愈好。雖然除了我(還我帶的小組)之外沒有寫規格或時 程,不過除此之外約耳測試已經提高到十分左右。
即使你沒有當家作主,還是可以讓事情變得更好,不過你必須像西澤的妻子一樣 無可質疑之處,否則就會一邊進行一邊樹敵。
- 第一部分 位與字節:編程實踐點滴
- 一、語言的選擇
- 二、深入底層
- 三、joel測試:改進代碼的12個步驟
- 四、每一位軟件開發人員必須、絕對要至少具備UNICODE 與字符集知識(沒有任何例外!)
- 五、輕松寫就功能規格說明書 - 第1節:為什么煩心?
- 六、輕松寫就功能規格說明書 - 第2節:什么是規格說明書?
- 七、輕松寫就功能規格說明書 - 第3節:但是……如何?
- 八、輕松寫就功能規格說明書 - 第4節:技巧
- 九、輕松制訂軟件進度表
- 十、每日連編是朋友
- 十一、難伺候的故障修復
- 十二、軟件開發中的5個世界
- 十三、稿紙原型開發
- 十四、不要被太空架構師所嚇倒
- 十五、開火與運動
- 十六、人員技能
- 十七、源于計算機學科的三個錯誤思想
- 十八、二元文化
- 十九、自動獲取用戶故障報表
- 第二部分 開發人員的管理
- 二十、面試游擊指南
- 二十一、重金激勵害多利少
- 二十、二不配備測試人員的五個首要(錯誤)原因
- 二十三、任務換人有害無益
- 二十四、絕不去做的事情,第一部
- 二十五、冰川下的秘密
- 二十六、漏洞抽象定律
- 二十七、程序設計界的LordPalmerston
- 二十八、評測
- 第三部分 Joel對常態問題的遐想
- 二十九、RickChapman解讀愚昧
- 三十、在這個國家狗是干什么的? 我們有多么天真?
- 三十一、作為哼哈二將,只管去做事
- 三十二、兩個故事
- 三十三、巨無霸麥當勞與天才廚師JamieOliver
- 三十四、沒有什么像IT看起來那么簡單
- 三十五、提防非自主開發綜合癥
- 三十六、策略I:BEN&JERRY公司與AMAZON
- 三十七、策略II:雞與蛋問題
- 三十八、策略III:讓我回去!
- 三十九、策略IV:大件與80/20神話
- 四十、策略V:公開源代碼的經濟因素
- 四十一、墨菲法則肆掠的禮拜
- 四十二、微軟公司是如何敗北API之戰的
- 第四部分 對.NET稍多的評說
- 四十三、微軟精神失常了
- 四十四、我們的.NET對策
- 四十五、請問,我可以使用連接程序嗎