無我程式設計(Egoless Programming)是一種程式設計風格,不是程式碼規範,旨在把程式碼評審中的人為因素最小化,應當在一個友好、合議方式進行,個人感情放一邊,從而提高程式碼質量。
在《The Psychology of Computer Programming | 程式開發心理學》書中,溫伯格首次提出了無我程式設計十誡。本文則是 Stack Overflow 聯合創始人 Jeff Atwood 對這十誡的註解。程式設計師普遍很自我(ego),都應該看看本文,時刻提醒自己。
1. 理解並接受這個事實:人都會犯錯
關鍵是在錯誤引入到產品前,儘早發現。幸運的是,在我們的行業中,除了那些在噴氣推進實驗室(JPL)開發火箭導航軟體的人來說,大多數錯誤並不要命,所以我們可以並且應該從錯誤中學習,一笑了之然後向前看。
2. 你和你的程式碼是兩回事
切記,審查程式碼是為了找出問題,問題當然會被發現。當發現問題時,別有情緒,別往心裡去。
3. 天外有天,人外有人
三人行必有我師焉。尋求並且接受其他人的意見,特別是當你認為不必要的時候。
4. 不要盲目地重寫程式碼
修改程式碼和重寫程式碼,兩者有明確的界限。搞清楚區別,通過程式碼審查,改變程式碼風格,而不是做一個孤獨的執行者。
5. 以尊重、敬意、耐心對待非技術人員
經常和程式設計師打交道的非技術人員普遍認為程式設計師充其量不過是一群自負的人,還是愛哭的嬌氣包。不要用生氣和不耐煩強化這種偏見。
6. 惟有改變方永恆
以開放的態度對待改變並用微笑接受改變。將每一次需求、平臺、工具的改變看作一個新挑戰,而不是一些要反對的麻煩。
7. 真正且唯一的權威來自知識,不是地位
知識帶來權威,權威帶來尊敬。所以如果想在無我的環境裡獲得尊敬,那麼請增長知識。
8. 為信仰戰鬥,但也要優雅地接受失敗
要清楚,有時候你的想法會被否定。即使結果證明你是對的,不要報復,或者最多說幾次‘我早就告訴過你’,不要讓你過去的想法成為殉道者或者戰鬥口號。
9. 不要做個死宅
不要成為一直在小黑屋裡程式設計,只在買可樂時出現的人。這樣的人不與人接觸,不被重視,不受控制並且不能融入開放合作的環境。
10. 對事不對人
要批評的是程式碼,不是寫程式碼的人。儘可能讓評論正面,並且只關注於提升程式碼。評論只涉及內部標準、程式設計規範、提升效能等等方面。
軟體的人性標準是永不過時的,《The Psychology of Computer Programming | 程式開發心理學》英文版早在 1971 年出版了,正好是我出生後第二年。