仕事のためのコードレビューと教育のためのコードレビュー
はじめに
この記事は「教えたい人と学びたい人をマッチングするサイト」MENTAのアドベントカレンダーに寄せて書いた記事になります。主な対象者はプログラミングを学習している方々、コードレビューをしたりされたりするエンジニアの皆さんとなります。
MENTAでの活動
私はMENTAで以下のようなサービスを提供しています。
- 教材によるインプット
- 課題演習によるアウトプット
- アウトプットのコードレビュー
- チャットでの質疑
- 通話によるメンタリング
これらを組み合わせて生徒さんのプログラミングスキルが伸びるように各自の進め方を調整しています。私がMENTAで教え始めた頃は「通話によるメンタリング」が一番大事かなと思っていましたが、現在では「アウトプットのコードレビュー」を最も重要視しています。
生徒さんの数が増えてくると毎日多くのコードレビュー依頼が来るようになり、エンジニアとして会社勤めをしていた頃よりも多くのコードを読むようになりました。その中で個人的にコードレビューの奥深さ、楽しさに気づけるようになりましたし、コードレビューを通してその方のコーディング力のレベルや性格が自然とわかってくるようになりました。
仕事におけるコードレビュー・教育のコードレビュー
仕事におけるコードレビューは完璧さと速さを求められると思います。プロダクションの製品に汚いコードが入ることは絶対によくないことですし、もしかしたらそういったコードの綺麗さよりも速くリリースすることを求められるあまり、しっかりコードレビューがされない現場もあるかもしれません。
そういった実利的なコードレビューに対して、私がやっているような学習のためのコードレビューはいわばコミュニケーションとしてのコードレビューになります。
学習者とコードレビュワーはお互いにどのような姿勢で取り組めば実りの多いコードレビューができるのかということについて書いていきたいと思います。
コードレビューとは「何を知らないかを知る」プロセス
まず学習プロセスとしてのコードレビューで一番大事なことは「指摘する点が多ければ多いほどコーディング力アップの可能性が高くなるのでお互いに嬉しい」ということです。
これはおそらく仕事のための(=マージするための)コードレビューと一番違うところだと思います。もちろん業務のコードレビューでも教育的な意味合いをもつことはよくあるでしょう。しかしあくまでエンジニアのメインの仕事は本番環境で動作するコードをたくさん書くことなのですから指摘される点が少ないに越したことはないでしょう。しかし学習のためのコードレビューではできるだけ多くの指摘点があった方が良いのです。というのも指摘される点というのはその学習者が持っている悪い癖や知らない知識をピンポイントに示したものだからです。この指摘ポイントを貯めれば貯めるほど学習者のスキルはアップするでしょう。
プログラミングを教える側の人にとって学習する側の人が「何を知らないか」を知ることは非常に難しいです。そもそも何を知らないかを認識するにはその周辺知識についてそこそこ知っていなければいけないからです。この「知らないこと」を炙り出してくれるのがコードレビューというプロセスなのです。ですから私は当初は通話で「あなたは何ができて何ができませんか?」と聞いていましたが今はまずコードを書いてもらって提出してもらうことでそれを把握しようと努めています。
コードを書く側が意識すること
学習する側、つまりコードを提出する側の人たちが何を意識してコードレビューを提出したら良いのかをまとめてみます。
- 完璧なコードを出す必要はないので不恰好な書き方でも自分が一番良いと思えるコードを書こう
- ネットで調べたコードをなんとなくわかった状態でそのまま貼り付けるとコードレビューの意味がなくなってしまうので勿体無い
- 一度指摘されたポイントは次から間違えないようにしよう。同じ指摘を何回も受けてしまうとレビュワーの負担になってしまう。
これらのことを意識してコードを提出すると良いと思います。不恰好なコードは学習者が成長するための宝の山のようなものなのですから恥ずかしがらずにどんどん見てもらいましょう。
教える側が意識すること
次に、誰かをエンジニアとしてスキルアップさせたいと思っている人に向けて僕なりのポイントを書きます。
- 影響範囲の小さいプルリクエストを出してもらいましょう。提出されたコードの量があまりに大きいと大概「コーディングに対する指摘」ではなくアプリケーション全体の「設計に対する指摘」になってしまい、学習者の方にとって難解な内容になってしまうことがあります。相手のスキルがわかってきたら徐々に大きなコードレビューを行っていきコーディングに対する指摘から設計に対する指摘へと進化させていくと良いと思います。
- 本番環境にマージされるようなコードレビューでない場合完璧なコードは目指さなくて良いと思います。たくさん指摘するポイントがある場合特に重要だと思うポイントから指摘していきましょう。その一つを学習者が学んで身につけてくれればそれだけでそのコードレビューの価値は非常に高いと言えるでしょう。
- コードレビューをすることはレビュワー側がより正しい知識を身につけるきっかけにもなります。完全に自分だけの判断で他人のコードの書き方を否定するのは勇気がいるでしょう。だから公式ドキュメントやネット上でのディスカッションなど多くの意見を集めるはずです。そのプロセスがレビュワー自身の成長にも繋がるはずです。
最後に
私はMENTAでの活動を通してコードレビューが大好きになりました。上でも述べたようにコードレビューはプログラミングの成長を促すのに最も良い方法の一つだということに気づいたからです。今後は多くの人がコードを提出し、コードレビューに参加するようになると良いなと思っています。
自分にこんな気づきを与えて、素敵な人たちとの出会いの場をくださったMENTAさんにはいつも感謝しています。今後ともよろしくお願い致します。
Discussion