以下の良記事を受けて、なぜ人は嫌われるコードレビューをしてしまうのかという人間の心の闇、深淵を解きほぐしてみましょう。のっけから大言壮語で申し訳ない。あと本記事の副題に意味はありません。
これいい記事なんですよ
コードレビューは品質向上のために行う前向きで建設的な取り組みなのに、なぜかバトルが始まるという経験はこの業界の多くの人が体験したはず。
これは大体仕方ないところもあるんです。動物も人間もサイヤ人も、闘争本能というものがあるんで。
この本能は「攻撃された」と認識すると、脊髄が反射的に報復しようとしてしまうんですね。人間に搭載されている自動報復システムという奴です。
このシステムの実際の稼働に関しては、5chとかヤフコメに行けばよく見られますね。
閑話休題。
これが良記事である一つが、レビュアー(レビューする人)だけではなくレビューイ(受ける人)にも言及している事です。
引用すると、レビューイに関しては以下の2点について言及されています。
1.「人格攻撃されている」と思い込む
2.ダメ出しを受けて落ち込む
コードレビューは品質向上のために行うものですが、ダメ出しの場でもあります。
なので多くの指摘を受けるのですが、レビューイは 「指摘は攻撃ではない」 ことを意識しておかないと、脊髄が反応していまいます。
レビュアーは決して上位者でも評価者でもありません。 大切なのは視点を増やすことなのです。なので先輩がレビューイ、後輩がレビュアーでも全くおかしくありませんし、スキルの高低も関係ありません。違う角度から自分の仕事を見てもらう事に意味があります。
もし高スキルの先輩がレビューイでスキルの及ばない後輩がレビュアーという形態を実現できているとしたら、その開発現場は間違いなく伸びます。
スキルが高い人というのは大体経験豊富です。経験が豊富であれば豊富であるほど、人間というものはミスをする事が前提で、プログラムはバグがあって当然と認識しています。勿論、人ひとりの視点では考慮漏れが発生する事も。だからファーストテイクは多くの指摘を受けて当たり前だと理解しています。
そして指摘が少ない場合、自分の仕事が良く出来ているからだとは考えずに、レビュアーの指摘漏れだと考えます。そういう身体になっていくものです。
また、スキル上位者のコードをレビューするのは、物凄く勉強になります。
しかし!
多くの技術者の皆さんは、Uの字テーブルの向かいに座った奴といつ喧嘩が始まってもおかしくない、刺すか刺されるか、そんな雰囲気の殺伐としたコードレビューを何度も目にした事かと推察します。
なぜそんな事になるかご説明しましょう。
先程、指摘は攻撃ではないと書きました。
レビュアーは別に攻撃してるわけではないのになぜ攻撃されたと感じてしまうのか?
ここが問題なんですね。
現実には攻撃するレビュアーがいるんだもの。 レビュアーが攻撃しているから、昔の吉野家のような殺伐とした雰囲気になるわけです。
レビューイを攻撃していまうレビュアー
そもそも人間というのは、パチンコの数字が揃った時と、人を攻撃する時にドーパミンが出る生き物です。
攻撃するのは気持ちいいんですね。Twitterとかでやたら好戦的な人いるじゃないですか? 気持ちいいんですね。人は快楽には逆らえない生き物なのです。神様がそのようにお造りになりました。
そんでまあ、理不尽に説教するのって楽しいんですよね。説教そのものが楽しくなっちゃうから、ネタがなくなると過去に遡り掘り起こしてまで説教を継続します。気持ちよくて仕方がないんですね。
当たり前なんですけど、こういうレビューは品質に全く貢献しません。
単なる粗探しだからです。攻撃する材料を探してるだけで、生産的でも建設的でもなく、そのうち知識マウントとか始まっちゃって、後学のためにと列席している新人の子たちは「ウマ娘のログボ取りてえから早く終わんねえかな」と考え出します。
攻撃してしまうレビュアーの特徴として、否定から入るというのがあります。
レビュアーはレビューイを経験した事があるはずなんでね、本当は分かってると思うんですが、否定から入られると人はイラッとします。
その時点で身構えます。
開口一番レビューイの脊髄に訴えかけてしまうのは、優秀なレビュアーとは言えません。
@emjo1804さんの記事では、レビュアーに言及する項目で「褒める」という書き方をしてあります。素晴らしい。そうです、のっけからまずは肯定して「よく出来ている」事を口にすべきなのです。
その後で、「お客様からお金を貰う製品である以上、品質向上の観点から再考の必要性や、別の観点がないかをみんなで考えてみようぜ」という空気の醸成をするのが大事なんですね。
レビュアーが立場的に上位者である場合、レビューイに対して、あなたがいる場所は電気椅子でも針のむしろでもないという事を印象付けなくてはなりません。
そこまで気を遣う必要があるのかって話ですが、当たり前だろーが! 仕事で最大成果を得るための環境作りは上の立場の人間の仕事に決まってるだろうが! という事でございます。
もしレビューイが上位者の場合、指摘をしやすい空気を作ってやらないと行けないという事ですね。
そういう事までやるから、あなたの給料をその人より高いんですよ。
人を攻めるのは楽しいですね。分かります。
でもね、「レビューしてもらって凄く勉強になった」と感謝され尊敬される方が、もうちょっぴり楽しいですよ。きっと。
え? 私ですか?
さぞお前は尊敬されてるんだろうなって?
うふふ。あはは。
さて次の話題に行きますか。
指摘だけして結果を確認しないレビュアー
これ、物凄く多いです。
耳が痛いとか胸が痛い人いませんか? 私と一緒に教会の懺悔室に行きましょうか。
チェックはコストがかかりますからね。
もうね、後でチェックできない内容は指摘しない事すらあります。
勿論、レビューは指摘事項をどのように修正したか、確認が必要ですので、次の日程を決めるのがMUSTです。
これは初デートの終わりに、次のデートの約束を取り付けるくらい重要な事です。
これはレビュアーに責があります。
レビューをして品質を作るというのは一回限りで終わったりしません。これは絶対です。レビューをして、指摘事項の修正をして、その確認をやるまでは絶対的にワンセットです。
私も若い頃はレビューイとしてレビューを受けていた事がありますが、物凄く細かい指摘をしてくる人がいたんですね。
でもその人、それで終わるんです。指摘した事で満足して完了するんです。
はいはい言いながらレビューを受けてメモなんか取っちゃったりしてね、で、勿論一つ治しませんでした。
ハンガリアン記法教論者の言うことなんか知ったことか、どーせ見ねえんだから治したりしねえよへへへんってなもんでしたね。
カッコの位置とかいう宗教の違いとか知るかよってね。
要するにレビューの後工程がない場合、レビュアーはナメられます。
勿論レビューイが上位者の場合は、レビュアーを指導しなくてはなりません。次の日程は君が決めないと行けないんだよってね。
レビューとその確認は絶対的にワンセット。
ま、内容によっては「ここだけ治せばリリースしていいから。俺の確認は必要ないから」って宣言する事もあるんだけど。
否定ではなく肯定の言葉に置き換える重要性
記事では 「issues のタイトルを「~しよう」に統一する」 という章で書かれていますが、まったくもって手放しで賛成するものです。
言葉の使い方一つで気持ちよく働いてくれるんだから、これを取り入れない手はないわけです。
逆に言えば言葉の使い方一つで気持ち良く働けないという事にもなりますけどね。
コードレビューをしている時にふとこう考える事があります。
(……なんでこいつ自力実装してんだ? この機能は実績のあるものがGoogleでもApacheでもMavenに転がってるだろ)
ここでなんていうか、もう分かりますね?
「こんな複雑なもの良く作ったな! 凄いな!」
「ただこの機能はApacheの○○ってライブラリを使う事で実現出来るかも知れない。向こうは実績あるコードという強みがあるよね。でも自製品は柔軟にメンテナンスできるという強みもあるから、それぞれ一長一短があってね」
「で、単体の考慮不足がいくらかあるね。これの解消にちょっと工数がかかってしまうよね」
「一度そのライブラリも見てみて欲しい。参考になるところも多いと思う。勿論そっちを採用するというのも俺はアリだと思うよ」
「単体の追加とかもあるからね。工期と品質のバランスを鑑みて、検討してみて欲しい」
その人のパフォーマンスを一番引き出せるのは、機嫌良く仕事できるようにする事なので、この程度の言い回しは当たり前ですね。もちろん一事が万事この調子というわけではなく、その人の成長に必要だと思えば敢えて厳しい言葉を発したり、圧をかけることもあるけれども。
否定の言い回しを喉のあたりで保留して、一旦脳味噌に差し戻してこねくり回して、肯定的な言い回しに変えるというのは重要なスキルです。
ネガティブなワードを食い留められるように、喉を鍛えましょうという事ですね。喉立て伏せとか頑張りましょう。
レビュアーも未熟者
はっきりいって、私も何度もバチバチやりました。
レビューイとしてもレビュアーとしても。
こういう事を書いたら、この人はさぞかし素敵レビューをしてくれるのだろうと俺にレビューしてもらいたがる人もいるかも知れませんが、全くもってオススメしません。
何もかも見る価値がない。全部書き直せ。
結構平気でこういう事を言う奴です。
言ってる事とやってる事が違うって?
そうなんです。私もまた未熟者なんですね。未熟者にしては偉そうですか。
レビューイ、つまりレビューを受ける人はこう考えてもらってそんなに間違いではありません。
この人もまたレビュアーとしてはまだ未熟で、勉強途中なんだ、と。
人間なんてものは成熟してないんです。成熟してたら戦争なんてもんが起こるはずもございません。
いきなりでかい話を持ち出し有耶無耶にしたところでこの辺で。