編者按:本文來源創(chuàng)業(yè)邦專欄InfoQ,作者David Lloyd。
作為開源項目的積極貢獻者,我發(fā)現(xiàn)處理代碼評審問題是一件很浪費時間的事情,特別是當代碼評審帶有負面、主觀或爭論性的東西時。當項目維護者不喜歡貢獻者提交的代碼,經(jīng)常會出現(xiàn)這種情況。在最好的情況下,這種代碼評審策略會導致無意義的爭論。在最壞的情況下,它會阻礙項目貢獻,形成一個充滿敵意和精英主義的文化。
代碼評審應該是客觀和簡潔的,并盡可能面向確定性。代碼評審不是關于政治或情感上的爭論,而是一個技術(shù)問題。代碼評審的目標應該是不斷進取,提升項目及其參與者的水平。提交的代碼應該根據(jù)代碼的優(yōu)點而不是對提交者的意見來評判。
代碼評審策略以下是一些代碼評審策略,作為項目維護者,如果你看到不喜歡的代碼,可以嘗試應用這些評審策略。
1. 把拒絕變成問問題糟糕的評審:“如果你這樣改,就不可能……”。(這顯然有點夸張,真的不可能嗎?)好的評審:“如果你這樣改,那該怎么……?”
2. 避免夸大其詞簡單一點,把你的顧慮和問題說出來,這樣有助于你獲得期望的結(jié)果。
糟糕的評審:“這個變更對性能影響很大。”好的評審:“這樣改的話性能會比之前低一些,你有做過測試嗎?”更好的評審:“我會準備一些數(shù)據(jù)來驗證一下這樣改之后速度不會比之前慢?!被蛘哌@樣:“這個變更把之前的 O(n) 變成了 O(n2),不會影響性能嗎?”
3. 把帶有諷刺意味的評語留給你自己有些想法最好把它爛在肚子里,如果你不想讓人覺得你粗魯,最好不要把這些想法說出來。
“我覺得這個變更太糟糕了,它會毀了所有東西的?!薄澳阏娴挠X得軟件工程這個行業(yè)適合你呆下去嗎?”
4. 積極參與對于同一個問題,或許你會有不同的想法。如果你能夠積極參與,可能會得到比之前更好的解決方案。
糟糕的評審:“這個想法太糟糕了,我有更好的解決方案?!焙玫脑u審:“對于這個問題我也有一些類似的想法,或許我們可以比較或者組合一下我們的想法。”或者:“我也有一些類似的想法,我這樣做是因為……而你那么做是因為什么?”
5. 不是每個人的經(jīng)歷都跟你一樣有些東西對你來說是常識,但有些人可能并不知道,即使他們的能力并不差。你可以說這些東西是常識,但不要顯露出嘲笑或高人一等的姿態(tài)。
糟糕的評審:“你不知道這個明顯是錯的嗎?”好的評審:“這樣是不對的,因為當……的時候它會拋出空指針異常。”
6. 不要把復雜的東西簡單化有些事情對你來說是顯而易見的,但對其他人并不一定也是這樣。為別人提供可選方案或有用的例子可以讓他們也變得跟你一樣好。
糟糕的評審:“為什么不直接這樣?”好的評審:“這樣做會更簡單,比如……”
7. 尊重別人有時候,提交的代碼可能質(zhì)量很差,但表示一下對別人的尊重其實很容易。
糟糕的評審:“這些愚蠢的代碼人跟寫代碼的人一樣愚蠢?!焙玫脑u審:“感謝你提交的代碼,但我們不能接受它們,因為有一些問題(已經(jīng)列出來了)?!被蛘撸骸按a有一些問題,已經(jīng)列出來了。或許我們可以回退一步,一起討論一下用例?這樣可以幫我們往前進一步?!?/p>8. 管理你的期望和時間
如果一次提交的代碼太多,你沒有時間評審,可以讓提交者知道。
糟糕的評審:“代碼太多了,我不會合并它們的。”同樣糟糕的是直接忽略它們。好的評審:“可以把這些分成幾次提交嗎?我沒有這么多時間,而且一次也評審不了這么多代碼?!?/p>9. 使用禮貌用語
使用禮貌用語(比如“請”)表示對代碼提交者的尊重,特別是當你要他們在細節(jié)上做出一些調(diào)整(比如格式化)時。
“請你把與空格相關的變更放在單獨的 PR 里,可以嗎?”“請你把變量對齊,這樣更容易閱讀,可以嗎?”
10. 開啟對話你可能照著上面所說的去做了,但對提交的代碼仍然不滿意。這個時候你可以這么說:“我不喜歡這段代碼,但我也不知道為什么,我們可以聊聊嗎?”盡管需要多花一點時間,但這樣是值得的,因為這樣你和對方都能學到東西(一個講一個聽),而不是變成對立方。
即使是很有經(jīng)驗的程序員也可以這么說:“我也不知道為什么不喜歡這段代碼”。這不是在創(chuàng)造攻擊代碼評審人員的機會,而是打開一條共同求知的道路。
總 結(jié)避免使用雙關語或夸大其詞,避免爭論,避免精英主義或貶低他人,避免諸如“顯而易見”和“你為什么不……”這樣的評語。使用清晰、真實的陳述和支持性的語言,提出問題,推動事情向前發(fā)展。記住,同事和代碼貢獻者都是人,他們的付出和你的付出一樣值得尊重。
本文為專欄作者授權(quán)創(chuàng)業(yè)邦發(fā)表,版權(quán)歸原作者所有。文章系作者個人觀點,不代表創(chuàng)業(yè)邦立場,轉(zhuǎn)載請聯(lián)系原作者。如有任何疑問,請聯(lián)系editor@cyzone.cn。