もう"クソコード"と言わなくて済むようにするためにできること
Twitterのタイムラインなどで度々見かけたので、読んでみたら共感度高めの内容でした。
だから、人のコードをクソコードって言っておいて、相手が怒ったら、お前のことをクソって言ってるんじゃなくてコードに言ってるんだ、なんていうのは、はっきりいってごまかしの類だと感じる。
こういうのは頭ではわかるのだけど、いざ「は?何これ?意味わからん」などと言われるのは辛い。言われると反射的に嫌な気持ちがやってくるので、なるべくなら使いたくない。しかし、実際にクソなコードが目の前にあるので、それをどうにかしなければクソコードが見過ごされてしまうので、それはそれで何とかしないといけないのである。
なぜ他人のコードに対して否定的な発言をしてしまうのか。もちろん、コード自体が酷い場合もある。それだけでなく、修正の意図が掴みづらい内容の時もある。更に、意図がわからないのは、技術的な問題による制約で理解しづらいコードを書かないといけなかったり、コーディング規約の考え方が異なるなど色々ある。端的にそれらをまとめると、情報が一致していないということだと思う。コードをかいた人、それを見る人の情報のズレをどれだけ無くせるかがこの問題にとって重要なのではないだろうか。
対策としてできそうなことを考えてみた。
褒める
ダメなところばかり言われても気分が良くないので、良いところも言うようにする。
タスクの粒度を小さくし、コードの修正量が少なくなるようにする
褒めるのもなかなか難しい(と自分は思ってしまう)。褒める量より、否定的なことを言う量の方が多くなってしまったらどうしよう。なので、そもそも酷いコードが生まれないようにする方が良いはずだ。タスクが大きなものなら、コードの修正範囲や量も大きくなる傾向がある。なので、意図がずれにくいように、修正量が減らせるようにタスクの粒度を小さくしてみると良いだろう。
一緒にコードを書く
粒度を小さくしても、知らないところで修正されたコードを見ることには代わりがない。なので、いっそのこと一緒にコードを書いてしまう方が手っ取り早いだろう。最近だとモブプログラミングを実践する現場が少しずつ増えている。筆者もモブプログラミングを2年ほど続けているが、コードレビューのストレスは無くなった。そもそも従来のコードレビューという形ではない。常にコードレビューのような状態である。けれど、レビュワー/レビュイーという関係ではなく、同じ課題を解決するためのフラットになれる。目の前で自分のやり方と異なる書き方をされたとしても、まだコード量が小さいうちに手を止めて、どう進めるのが良いかすぐに議論することができる。モブプログラミングに対して懐疑的な人は「複数人で1つのタスクというのは効率が悪いのではないか」と思うようだ。実際にやっている身としては、効率の悪さは感じていない。むしろレビューによる差し戻しのようなことが無くなったので、以前よりゆっくりかもしれないが、着実に前にだけ進んでいる感覚はある。
----
チーム外の人みたいに普段一緒に仕事をしない人からあれこれ言われるのは無視していいのだけれど、この問題がチーム内で起きているととても厄介だと思う。本来同じ課題に向かうべきチームメンバーの関係がギクシャクし始めるだろうし、それを見る周りも良い気持ちではない。仲間同士で指摘しあい、チームとして成長していけると良いのかな、と思いました。