なんとなく書いたら、アクセス数が10000件超えたソースコードをきれいに書くための方法の記事。r-westさんの「きれいなソースコードを書くために必要な、たったひとつの単純な事」と、uwiさんの「誰がためのきれいさ?」と、フォローのトラックバックまで頂きました。僕のも含めてそれぞれスタンスが違いますが、どれが正しいとか、どれが一番いいかというのはないと思っています。人によってどっちがいいかは別れるはずです。人によっていちばん苦労がなくて、モチベーションがあがる方法がそれぞれの人にとっての正解である、というのが僕の考えです。
モチベーションマネージメントというのがよく言われるけど、「モチベーションを上げろ」と言われて上がる人なんていませんよね?僕がそのモチベーションについて考えるときに、一昨年からよく利用させてもらっているのが、岡田斗司夫さんの人生の取り扱い説明書です。「人生テスト―人を動かす4つの力」という本も出ています。絶版みたいですが。ウェブサイトを見れば本の内容はほぼ全部載っていますので、ムリに本を買う必要はないです。
モチベーションを上げる4つのベクトル

この人生の取説では以下の4種類に人を分けます。それぞれのタイプごとにモチベーションが上がるきっかけが違います。つまり「唯一の方法は4種類に分類できる」となります。それでは、それぞれのタイプを軽く説明します。もし、もっと詳しい情報や、具体例が欲しいという方はWebサイトの方へ。
学者タイプ
新しい知識を収集するのが好きなタイプ。あまり役に立つとか立たないとか気にしない。うんちくを語ったり、たまに人の役に立つとうれしい。空気を読まずに、自分の理屈を展開したりも。新しいのが好きな反面、一つのものにじっくり取り組むのが苦手。理由が分からないことが不安。ムリに人と関わろうとしない。
一つのことをじっくりする職人タイプに憧れる。一方、勝ち負けに一喜一憂する軍人タイプをバカにしている。人の視線ばかりを見ている王様タイプの思考が理解できない。
職人タイプ
自分の美学にこだわるタイプ。コツコツ努力型。自分の世界を理解してもらえることが幸せ。しかし、自分の世界観を人に押しつけがちな面もあり、否定されると全力で抵抗する。自己満足のために詩的なブログを書いたりも。
他人との関わりに関係なく新しい知識を収集したがる学者タイプをバカにしている。人とすぐ仲良くなれる王様タイプに憧れる。一方、勝ち負けにこだわる軍人の価値観が理解できない。
王様タイプ
人と楽しく過ごすということが幸せ。リアクションも豊富で聞き上手な反面、あまり理論的に考えていないで雰囲気に流されることも。人前で目立つことも多い。
規律的な軍人タイプに憧れる一方、自分の世界にこだわって人との関わりが不器用な職人タイプをバカにしている。そして、理屈重視の学者タイプの思考が理解できない。
軍人タイプ
勝ち負けにこだわり、上下関係、規律に厳しいタイプ。ブランドに弱い。ものをもらったらきちんとお返しをする。相手のあら探しをしたり、議論もメタな方向に逃げたり、とにかく負けない、というのにこだわる。
人の視線を気にするあまり、損な役回りをすることもある王様タイプをバカにしている。理論的にしっかりした不動の立場を持つ学者タイプを尊敬する。一方で、自分の世界に閉じこもりがちな職人タイプは理解できない。
タイプごとの違いを理解する
それぞれ見てきましたが、重要なのは、「自分とは違う価値観があるんだ」というのを知ることかな、と思います。自分の考えを相手ごとにきちんと伝えるための作戦を立てられるようにもなるでしょう。また、自分が足りない部分を再確認するのにも使用できます。また、相手に合わないものを無理矢理押しつけることも減ると思います。
それでは、それぞれのタイプ別のソースコードをきれいにする方法について考えてみます。
学者タイプのソースコードをきれいにするメソッド
僕の方法は学者タイプ。「新しい考え方は好き」「押しつけはしない」という方向性。僕の場合は、コツコツやるのが得意でないということもあり「きたないコードにピンときたら」というイベント駆動型の方法になっています。また後半のいくつかのやり方は、実際に具体的な方法をいくつか提案していますがちょっと理屈っぽいですよね。「なぜ?」と「なんのために?」の説明も必ずしもここで語る必要はないですもんね。
学者タイプ型のソリューションとしては、より理論的(理屈っぽい)な方法もいくつか考えられると思います。
職人タイプのソースコードをきれいにするメソッド
「××するための○○個の△△」というのはだいたいこれですね。r-westさんの方法はこれ。職人は自分の美学のためにはコツコツ努力できるタイプです。僕はマメじゃないので、尻を叩いてくれる人がいないとこの方法は真似できません。残念ながら。はてブ数は僕の倍近いですが、本当はもっと差が開くかなぁ、と思ってました。僕のアイディア重視の方法よりも具体的ですもんね。
職人も、人によって色々な美学があります。もしかしたらこれとは違う美学が必要かもしれません。「××のソースコードを読んで修行せよ!」みたいなのに反応するタイプの人もいるかもしれません。
王様タイプのソースコードをきれいにするメソッド
いちばん文章化に消極的なタイプ。シンプルな文章で説明されることが多いと思います。uwiさんのブログの記事はたぶんこのカテゴリです。王様タイプの人は「きれいにした方が、次に見る人がムダな苦労をしなくて済むよね」というようなことを言うだけですごい勢いでやってくれます。価値基準は「他者の喜び」。ただし、プログラマーにはあまりこのタイプの人はいないような気がします。
軍人タイプのソースコードをきれいにするメソッド
今回のトラックバックにはなかったのですが、すごい厳格なコーディング標準とかになりそうな気がします。トップダウン型で、優秀な人も、そうでない人もいっぱい混ざっているような大きな組織に均一な品質をもたらすような方法論を考えてくれそうな気がします。あるいは、負けず嫌いなので「きれいなコードを書く方が優秀な開発者なんだよ」的な空気を作ると勝手にコードをきれいにしまくる可能性も?
重要なのは、伝える相手に合わせること
僕が実際にアドバイスをした人には、倉貫さんの「ぬか床メタファー」(PDFのP13)を一緒に伝えたところ、バッチリ理解してもらえました。何やら「植物を育てるのは好き」だからだそうで。僕の最初のアドバイスは多少ストライクゾーンをずれていたかもしれないけど、結果的にはオーライ。相手の価値体系に沿った提案をするのが一番無理なく入ってもらえます。人生の取説は、相手の価値体系を理解するのに使いやすい方法論です。プレゼンとかにも使えます。
一言「コードきれいにする」といっても、タイプごとに動機もいろいろあります。「このコードを読んでくれる人のため」「自分の美学」「時間をかけても後から仕事が楽になってトータルではお得」「ルールに準拠させて管理を楽に」「自分が(他の人よりも)すぐれた技術者である証明」などなど。どれも本当であって、どれが合っているとか、間違っているとかはありません。「自分に近いのはどれか?」というのはあると思いますけどね。
性格分析を分析する
この手の性格分析で重要なのは「普段はこのタイプ」というだけでなく、「せっぱ詰まったらこのタイプかな?」というのと、「できればこのタイプになりたい。あこがれているんだよね」という視点も重要です。もしかしたら、今の自分のタイプではなく、あこがれのタイプの方が重要になる場面もあります。
今回は人生の取り扱い説明書を使いました。モチベーションという観点ではこの分類法が使いやすいです。また、コミュニケーションの仕方を分類するのであれば、めんたねオリジナルのSMマトリックスが今のところ一番分かりやすいです。思考プロセスを紐解くのであればnomicoさんオススメのエマジェネティックス―人の本質を“見抜く”科学
かな?僕はまだ読んでないのですが。あとは組織の構成を分析するのであれば、FFS(Five Factor and Stress)理論がよさそうです。また、人生の取り扱い説明書とほぼ一緒で、「せっぱ詰まったらこうなる」というのも追加されたのがLIFOサーベイ。個人の実力を伸ばすという観点で見るならば「さあ、才能(じぶん)に目覚めよう」でおなじみのストレングスファインダー
もありますよね。それぞれの分類方法は「なんのために分類するのか?」という目的が違います。場面ごとにうまーく使い分けるのがコツかな、と思います。あと、切り口が違うので、それぞれの分類法の関連を調べるのは苦労が多い割に実りが少ない気がします。参考までに、ストレングスファインダーと、人生の取り扱い説明書を関連づけたチャートを貼っておきます(誰にもチェックしてもらってないので間違っているかも)。これぐらい要素数に違いがあれば、少ない方の座標軸にマッピングさせることができますが、項目数が同数だったりすると非常に面倒です。

何にせよ、自分の性格が分かれば、行動を起こすのに必要なエネルギーを減らすことができます。また、努力の過程もラクになるかもしれません。また、同じチームの人のパターンが分かれば、やってもらうのもラクになります。ゴールはソースコードをきれいにするということ。その過程に「唯一の方法」がたくさんあっても別にいいんです。結果さえ出せればね。
もし、具体的に紹介させていただいた例以外に「私はちょっと違う方法を使用している」という人がいたら、ぜひともそれをブログかどこかで発表するといいと思います。数十万人のソフトウェア技術者がいるので、どんな方法であれ、少なくとも数万人の人はその方法がいい、と同意してくれるはずです。トラックバックお待ちしております。