前の記事はこちら
コードレビューがうまくいかないのはコードレビューする側の人の責任ですよ。
コードレビューはそもそもが教育の側面が強いものです。
優れた開発者が優れた教育者ではない場合があるということは想像できると思います。そう、開発者は教育者ではないですよね。そして、ほどほどの開発者がほどほどの教育者ですらない場合もよくあります。
コードレビューという教育を主とした開発手法をうまく行うためには優れた開発者は優れた教育者、あるいはせめてほどほどの教育者、でなければいけないということになります。
私はこのブログでプログラミング教育をしていこうと思っています。教育者としては別に突出した才能はないですが意欲はあります。多くのプログラマとかエンジニアは教育について意欲も才能もないのではないでしょうか。当たり前です。開発者が求められているのは教育者の側面ではないからです。
そして、コードレビューの短所、問題点は全て「レビューをする側の教育する能力のなさ」によって生じます。これも当たり前です。レビューを受ける側ではなくレビューを与える側がコードレビューにおいての主導権を握るからです。
レビューされる人が無能だからうまくいかない。というのは場合によればありうる話ですが、レビューされる人は教育される側なのですから普通能力はないものですから仕方ないです。それでもよいレビューという教育がなされて、レビューされる人を成長させるという責任がレビューする人にあるのです。
そんな責任を引き受けた上でうまくやるようにレビューできる人は非常に少ないとは思います。(俺ぐらいですw )
私がコードレビューをする側なら全く問題ないです。全てうまくやる自信があります。もちろん実際にやってきたからです。しかし私がコードレビューをされる側ならそれは問題がないとはいえません。
コードレビューをする人は極めて善人なのでしょうか?そんなことは普通ないでしょ?
レビューする人が極めて善人である場合はレビューされる相手を気にしてなるべく否定せずにレビューをして、相手の能力をあげ、また、意見がわかれるようなコードの書き方の派閥や宗教争いになるようなものは相手を尊重します。これには問題がありません。
しかし、仕事をしていると他者のために配慮してくれる善人ばかりではなく自分の事しか考えない人もいます。
レビューする人が悪人というわけではないにせよ極端によい人ではない場合には、コードレビューは相手を存分に痛めつけるよい道具に使われます。
なにせ、しっかりした指導をしているという名目で相手をおとしめて自分が優位にたつということをすればするほど仕事ができるように見えるからです。
個人的な経験なのですけれども
どこの仕事現場での経験かはばれないように気をつけて書きます。
見る人が見ればわかりますが、まあ、わかる人たちはあまり見ないでしょう。そもそも私のことを無能力だから仕事についていけなかったとか見られているので私が書いている事には興味もないことでしょう。
コードレビューによって契約を失ったわけです。フリーランスなので雇用契約としての首ではないですが契約打ち切りなので同じようなものです。
ありがたいことに、その次に得た仕事では技術力を買ってもらって大きく収入があがり結果もだしまくっています。なので、契約を失った事によって収入アップのきっかけになったのでありがたいことです。怪我の功名とか、転んでもただでは起きない、っていうのかもしれません。
ある現場ではひどく無能力という評価を「コードレビュー」によって得ました。そして別の現場では成果を出しまくって、たいへん頼りになる人という評価を得ているということです。
こうやって仕事の契約を失っていきました。
私は外注のフリーランスなので、何もしらない状態でプロジェクトに参加するのでそこのプロジェクトのやり方などをいちから学ぶ必要があったりします。そういう時に既存のイマイチなコードにあわせてイマイチなコードを書かざるおえないときがあります。既存コードがいまいちだと改良するにも元が汚いコードすぎて読み解けなく苦労していて見当違いのコードを書いてしまう場合もありました。
丁寧に教えてくれる事は期待もしていませんが、誰も教えてくれないのは当たり前です。そういうところを補って仕事をするからフリーランスとしての実力を買ってもらえるわけです。
自分を一流という基準におくのもちょい恥ずかしいですが、いちおう自分基準で自分を一流としておきます(すいません。自分より能力の高い超一流レベルの人がたくさんいるのは知ってます。話の簡略化のためと思ってください)。わたしからみたら随分と技術力がない三流とはいいませんが二流レベルのプロパー(正社員のことをこの業界ではそう呼ぶ)の開発者が私のコードを何だかんだと難癖をつけて修正点もあやふやに指示をするので、何度も何度もレビューが通過せずに5回10回の差し戻しをされたりしました。
コード修正の指摘はひどくぼんやりとして未来予測のできていない筋違いのレビューをされたりして、仕方なくいうことを聞いて間違えた方向に修正させられて、結果役に立たずに破棄しなければいけないという場面もよくありました。ソイツはプログラマーとしては二流レベルですが教育者としては四流くらいだったと思います。目も当てられません。
しかし、このような仕事がうまくいかなかった時には、ぱっと見ているだけの他の人々からはレビューする側(実は四流)は頑張って教えているのにレビューされる側(プロジェクトに参加したばかりであまりわかってないけど実は一流)は、なんて無能な人なんだろう、というように評価されていきます。
私からみるとひどい話です。変なレビューされまくるのでソイツの無能さはかなり際立っていたのですが、既存のシステムを理解しているのはソイツなのでやり方聞いたり従ったりしなくてはいけなくてなかなか疲れました。
耐えかねて、ソイツの上司に「パワハラみたいなレビューされてるんですけど御社は協力会社のメンバーをなめてんですか?」という内容をもっとやわらかな表現で言ったところ、そのプロパーは上司のお気に入りだったので私がかなり嫌われる感じになってしまいました。「そんな主張はあなたの甘えでいいわけ」なんだそうです。
まあ、自社が協力会社の人を呼んでおいてパワハラ的なことをするみたいなことを指摘されるとは協力会社のくせになんと厚かましい!と思う経営者の気持ちはわからなくはありませんけれども。けれども。
そして仕事の契約を失いました。
また、別の人にレビューを受けた時、その人はプロパーではなく同じく外注だったのですが妙なコードへのこだわりの完璧主義でした。
仕事の依頼はテストコードの全体平均のカバレッジ上昇(つまり品質向上)だったので、私としてはなるべく全体的に品質をあげるために1ファイルの詳細まではこだわらずに多数のファイルテスト品質が高まるように調整して仕事していました。
が、そのレビューする人は完璧主義で木を見て森を見ずというか葉っぱの形のこだわりを見るような人でしたので1ファイルに対してカバレッジ100%をもっと超えて何もかもテストをする完璧主義にとらわれていました。何度もコードレビュー指摘するというような仕事のやり方をされました。
やれやれ...書いてて落ち込みます。仕事のできない人、そして教育ができない人がレビューする側に回るとほんと苦労します。
だって、その外注さんからしたら私を成長させる義務など全くなく、蹴落としたほうが自分の技術力を示すいい機会になるわけです。「正当な評価」という名目で私がいかに出来ないかをPRすればよいのですから。事細かく全てを指摘すればそれでいいでしょう。
教育者としては終わっていますが、それが外注さんとしての仕事なのでそうすることは理解できます。理解はできます。私は同じようなことはしませんが蹴落とせば有利になるという立場上のことはわかります。
で、これがコードレビューという仕事で起きる実際の事例です。
その人のコードレビューも何回繰り返しても全然終わらないことになりまして、
その仕事現場の管理者の人たちからは、能力のないのにいいわけがましくパワハラだといいがかりをつけているような人物(俺のこと)が、やっぱり能力がない人物だという評価をうけて、そういうことでその案件では「あなたはいらないよ」と判断されたりしました。
私の契約がなくなりました。苦いですね。ビターですよ。
ここでも書いたね。
ここでも書いているよ。
その現場の雰囲気的なところを補足しておくと
その現場では、有能な技術者をつれてきて、競わせて、そして、生き残るエンジニアだけ使っていこうといううまいとこ取りをするような現場だった気がします。外注同士でレビューさせると無能な人に有能な人がつぶされるというよい事例だということを実体験できたことはありがたい経験です。
またプロパーの方はかなり若い人でしたが若者が経験豊富なエンジニアを老害みたいにみなして「俺すごい。あいつ全然だめ」と勘違いしがちな事というのも学びました。
本当に有能な人が行うような、他の人と協力してよい影響をあたえあって互いに能力をあげていって仕事を完成させていく事ができるような振る舞いが求められるのではなく、他人をつぶそうとねらってくるような技術者が勝ち残るのをねらうことが社風としてあったのかもしれません。
社員同士は仲良くやっているようでしたが外注さんはなかなか風当たりが厳しかった、かもな。とは思います。生き残るのに必死にさせられた感ですかね。
さて。
自分がいかにできないエンジニアなのか、と思い知った上で、もう落ち込んで泣きながら実家にかえって引きこもったほうがいいですかね。
しかし、そこから復帰させたのは上で書いた通りです。
さて、次の記事に続きます。