#初めに
私は他人にダメ出しできるほど優秀なプログラマーではありません。おわり。
先進めなくなるので続けます。チームで開発するようになって約3年。自分ダメダメだなーとは思いつつも、自身の成長を一番感じたのがコードレビューだったのでこんな記事を書くことにしました。
個人で開発している方や、各々が完ぺきなコードを書けるチームにいる方、1分1秒の時間が惜しいプロジェクトにいる方(そこまで行くとコードレビューちゃんとされているかわかりませんが)には向かない内容となります。また、捉え方によっては馬鹿が優秀な人の足を引っ張ることにも見えますので、自分の環境に合わないと思う方は参考にしないでください。
とおもったら、会社としてやってるところもあるんですね。
https://qiita.com/awakia/items/8344ba751426e386e0f5
他にも、かっちりしたレビュー記事はたくさんあるけど、新人や若手でレビューする側としての心構え的なところが伝わればいいなと思います。
レビューは自信をもって行いましょう
難しいコードがつらつら書かれていて、よくわからないけどOOさんだから大丈夫でしょうとApproveなんてしてしまうと目も当てられません。自分が知らないことは指摘のチャンスです(なんのチャンスだ)。知っていてなおかつ指摘事項があれば激熱です(信頼度40%)
明らかな指摘事項であればはっきりと伝える。それは新人だろうと関係ありません。ただ、自信がない箇所への指摘はしないというのはダメです。”わからない”ということを指摘しましょう。
私がレビューで気になった点に関しては、指摘方法を以下のように分類するように心がけています。
①そもそもバグがある
言うまでもないですね。どういったケースでどういう問題が起きるかをどや顔で指摘します。
②リファクタリングの提案
「拡張for文使えや」「LINQって知ってる?」「ifififififififififやめーや」くらいなら、まあ初学者でもわかるところですね。デェベテランの実装だろうが許す必要はありません。
③何かいているかわからない
ここから未知の領域です。知らない関数を使っているだけならググって終わりなのですが複雑なコードが入り組んでいたりすると調べるのが困難になります。そういった場合には「ここの実装は何やっているんですか?」とか「(可読性が低いので)ロジックがわかるようにコメントをつけてください」とか詳しくないんですよ~感を出しておきましょう。
レビュイーにボコられよう
ふつう逆ですが、私はレビュワーがダメ出しを受けることに非常に価値があると思います。特に、指摘に反論される際の最大の利点は
**「そんなこともわからないの?」**
と言われることがそうそうないからです。私は一度もありません。(参考リンクだけコメントで返されたりとかはあるけど)
レビュー以外で質問する場合と違い、レビュイーが書いた内容についての質問なので、レビュイーは100%内容を理解しているはずです。ですので、指摘に対しては100%納得のいく回答が返ってくるはずです。しかし、私が経験した中では調べてもわからないから指摘した内容について、100%の回答が来ることは半分もありませんでした。というのも、指摘するとレビュイーももっとわかりやすいコードに直したりとか、脳内保管されたアルゴリズムをコメントに出してくれたりとか、何かしらの修正が入ります。
一方で、完全論破されることも当然あります。その場合は、自分の新たな知識を蓄えることができたとポジティブにとらえましょう。もしも、何かいているのかわからないという指摘をして「そんなこともわからないの?」といった回答をする人がいたら、その人は自分に酔っているだけで大した実力はないと思います。rejectしちゃいましょう。優秀な人はどや顔で論破してくるので安心してボコボコにされてください。
ボコられたら次に活かそう
自分の指摘が間違っていたなら、反省はしてもレビュー数が減ることにはならないように気を付けましょう。全く同じ指摘ミスなんてなかなかしません。自分で考えて指摘することはレビューを受けるよりもずっと記憶に残るため、知識習得がかなり効率的に行えると思います。
そして何度もレビューしていくと、いつの間にか自分よりずっと優秀な方に対しても適切にミスを指摘できる比率が増えます。自分より優れていることが明らかな人に適切な指摘をできると、非常に自信が持てるのでそこまで粘り強くいきましょう。
おまけ 代替案の提示
私は少しでもわかりにくいなと思ったら代替案の実装を提示します。すると次のような修正が返ってきます。
・既存のほうが良い理由の説明コメント
・提示した実装そのまま
・提示した内容をレビュイーがさらに改善した実装
3つめが重要で、レビューで自分の実装を書くと理想的な実装になる場合があるのです。レビュワーなのにレビューを受けられるなんて素敵ですね。...なんて言い方したら怒られると思いますが、自分ならこう書くというoutputをレビューに交えることは、自分の実装スキル向上と、レビュイーがどういう思想で実装をしているかを知るチャンスにつながります。知識が無いからこそ、代替案の提示が成長の糧になると思っていますのでやってみてください。
まとめ
先輩に指摘なんて...と思いがちですが、世の中そんな悪い人ばかりではありませんよ。