プログラミングにおける「勘」とその鍛え方

チーム開発でレビューをしていると、「パット見は問題なさそうだが、なんかバグってそう」と感じることがあります。

これは全く理論的な気づきではなく、直感的な「勘」なのですが、意外と精度良くバグを発見できることが多いです。1

ある時、友人に「そういう勘ってどうやって鍛えるんですか?」と聞かれました。とっさに「経験かな。」と答えたのですが、確信があるかと言われると微妙です。「どういう経験を積めばいいのか?」と聞かれると答えられなかったと思います。

最近、改めてこの話題について考える機会があったので色々考えてみたのですが、「良いコードを読んだ回数に比例して勘が冴えるようになる。」 という結論にたどりつきました。

このブログでは、その結論に至るまでの思考をメモしておこうと思います。

他のクリエイティブな作業との比較

まず始めに、このような勘が他のクリエイティブなものでも発揮されるのかどうか考えてみます。

例えば、作曲。「プロの作曲家が作曲した曲」と「勉強したての素人が作曲した曲」を聴き比べてみると、素人ながらも「プロの曲の方が良いな」と感じることができます。
同様のことがイラストや文章などにも言えます。「最近イラストを書き始めた人のイラスト」と「プロのイラスト」の見分けをつけることはできます。

ここでポイントなのは、 クリエイター側になったことがない全くの素人なのにも関わらず、何故か違和感を感じ取ることができる ということです。

では、 何故作曲をしたことないのに聞き分けができるのでしょうか?

それは 「耳が肥えている」 からだと考えています。 日常生活にはたくさんの音楽が溢れています。それらのほとんどはプロが作曲した曲であり、それらに耳が慣れてしまっているのです。だからこそ、クオリティが低いものに対して敏感に反応できるのです。

ここで話をプログラミングに戻しましょう。 プログラミングを始めるとき、ソースコードに目が肥えている人はほとんどいないです。したがって、他のクリエイティブな作業とは異なり、素人の勘が冴え渡ることはないのです。

勘の鍛え方

では、最初から備わっていない勘をどのように鍛えればよいのでしょうか?

これは先の作曲の例から考えれば単純で、「良いコードを読むこと」 が良い鍛え方だと考えています。「経験が豊富な先輩のコード」や「多くの Contribution がある OSS」など、良いコードは身近に沢山溢れています。それらを読めば読むほど、目が肥えて勘が冴えるようになります。

そして、基本的に良いコードを読む回数はプログラミングの経験年数に比例します。だから、最初勘の鍛え方を聞かれたときに「経験」と答えてしまったのです。

まとめ

クリエイティブなことを学ぶとき、「とりあえず手を動かしてみる」というアドバイスはよく初心者に対して使われており、プログラミングに対しても言われています。
確かに手を動かすことは大事ではありますが、あるタイミングで「良いコードを読む」インプットの時間を増やすことで、より良いプログラマーになれるかもしれません。


  1. 勿論杞憂である場合も沢山ありますが ↩︎

Top