2014年8月2日 星期六

你們 code review 了嗎?

        工作上進行 code review 好一陣子了,這也算是我第一份有全程進行 code reivew 的工作。經過這段時間,深刻感受到導入 code review 後,對技術能力的提升或是團隊氣氛的養成都有相當大的幫助。

        我們目前的流程是利用 Github 的 pull request 來 code review ,「所有」程式碼都不允許直接 merge 進 master 。同時整合 Jenkins 自動建置 pull request 的 code 進行測試,任何團隊成員看到 pull request 通過測試後都可以進行 review 。負責 review 的人決定是否要進行 merge ,基本上是一個非常簡單的流程。

比起之前的工作經驗,我觀察到導入 code review 後,帶來了以下三點改變:

ㄧ、權力

        在工作當中常常遇到最令人尷尬的事情就是  pull(update) 後看到沒有寫好的 code :在沒有 code review 的時代,發現有問題的 code 你只能拍拍他的肩膀說:這裏好像有點問題誒?
        因此, pull (update) 以後腦中只能不斷思考:
我該講嗎?
我該講嗎?
我該講嗎?
...
        講了以後,可能會發生兩種情形:

1. 可能這段 code 是寫的人沒想到,你提醒他他會非常感激你,你們的友誼更加穩固;

2. 不過 99% 的情況是寫的人真得認為這樣寫完全沒有錯而且還自信滿滿,你善意的提醒一不小心就傷害了我們 programmer 脆弱的自尊心,讓人以為你在針對他、找麻煩,最後造成團隊成員彼此間強大的敵對意識,進而讓整個團隊分崩離析。

        另外,職場上難免有所謂的輩份,一個剛加入的小菜鳥即使看到一些問題,立場上也往往難以對前輩開口,只能悶在心裡,對團隊的向心力造成了損傷,也錯過了改善團隊的機會。
        有了 code review 後,我們賦予了 reviewer 足夠的權力可以對 review 的 code 指指點點、比手畫腳,大大降低所謂的「針對性」。畢竟,每個人都可以 review 所有人的 code ,加上 review 這件事是依照「公司規定」死板板的流程,我是萬般不得已也要做的,完全不是在針對某些人啊!不管 author 是 junior programmer 還是 CTO ,再怎麼樣菜的人只要當上 reviewer 後,都能對其 code 進行 review ,我們知道人非聖賢、孰能無過,往往許多問題都可以經由這個過程得到解決。

然而,有了權力以後,隨之賦予的就是:

二、責任

        在 retrospective 中,有沒有聽過一段話很熟悉:

這段 code 不是我寫的,我只是路過的,完全不知道是怎麼一回事!

        在沒有 code review 的時代,相當容易發生這種情況。因為每個成員各自為政,萬不得已千萬別碰別人的 code ,輕則搞出 bug , demo 出包,淪為戰犯;重則得罪他人,不小心又傷害了某些人小小的自尊心,破壞了整個團隊的「和諧」!

        在 code review 的時代,每段 code 都保證有兩個以上的人看過:一位是 author,一位是 reviewer 。再也不能有人說:這段 code 我沒看過,問寫的人吧!掛上 reviewer 就得與 author 一同負起這段 code 的責任,不管你是 CTO 還是 junior programmer 都一樣。如此一來, reviewer 即擁有有足夠的權力可以給予建議,找出問題。可以培養團隊成員的責任感與信任感,不只對自己負責也要對成員負責,從而達到良好的合作團隊。

最後,在這個過程,最有價值的即是:

三、學習

        讓我們回想一下,平常,你什麼時候會去看甚至是改別人寫的 code ?我個人只有兩個時機:

1. 寫的新功能剛好會使用或修改到其他人寫的部分。

2. demo 出 bug 要找戰犯的時候。

        有了 code review ,你每天都必須不斷的讀懂別人寫的 code 。可能很多人以為進行 code review 就是 reviewer 在指導 author 。不過,以我親自體會,其實往往是 reviewer 從 author 那學習的更多。身為 reviewer 肩負的重責大任,怎麼樣也得看懂其在寫什麼,在這個過程中無形的對 reviewer 的閱讀、思考的能力進行了鍛鍊。

        在一個團隊中,每個人擅長的地方都不太一樣,在 code review 的過程中,最有價值的就是看每個人寫的 code ,瞭解其思考模式,找出優點並提出問題。而 author 在與 reviewer 對談的過程中也有一個機會檢視自己的盲點並且得到改善的機會!

比起 pair programming ,我認為 code review 是一個不會耗費太多時間成本,又可以擁有其優點的方式。

大家找工作時記得問:你們 code review 了嗎?

沒有留言: