プログラマの実力を測る3つの指標

「こいつ・・・できる!」と思わせるプログラマにたまに会うのですが、その実力の評価の指標が必ずしも一つではないなー、というのを常々思っていました。この評価指標を言語化できないかと考えていましたが、はてなインターンに行ってたときにいろいろなタイプのプログラマに会って、この指標で評価可能なのではないかと思いついたものを3つ書いてみます。
私の観測範囲内から考えたことなので、「こんな指標もあるよ」という意見がありましたら是非是非ご教示ください。
ちなみに指標と言っても、数値化可能なものではなくて、この人はなんとなくこの指標の能力が高そうだなーと考えるのに使うためのものです。


指標1. アルゴリズム思考能力

数式からプログラムに落とし込む能力や最適なアルゴリズムを考えることができるかという指標。ちゃんとコンピュータサイエンスを学んできた人が強い指標になります。
この能力の高度な活用が求められる場面は実は少ないのではないかというのが私の感覚ですが、必要になった時に勉強して一朝一夕で身に付けられるものではないので、この指標が高い人は貴重だと思います。
ただ、この指標の評価が高い人がアルゴリズムをプログラムに落とし込むときに綺麗なコーディングが行えるかは別問題で、研究機関の人が書いたコードを読むと結構汚い書き方をしていることもままあります。*1


指標2. やりたいことを表現できる能力

やりたいことに対して、どんな書き方をするか、どんなライブラリを使うかといったときの自分なりのベストプラクティスをどれだけ持っているかという指標。
いわゆるtipsとして公開できる話が多いですが、Webにある玉石混交の中から適切なものを選択するのは容易ではありません。同じググるにしても、具体的に何をすればいいかわかっている人とそうでない人では効率に雲泥の差があります。
「〜をやりたいと思ってるんですけど」といった大抵の質問に対して即答できる人がこの指標が高い人です。この指標が高い人は、個人としての生産性が非常に高いことも特徴と言えるかもしれません。
指標1と同様に、この指標が高い人が必ずしも綺麗なコーディングができるわけではありません。


指標3. クールな設計をする能力

いわゆるほかの人から見てもわかりやすく拡張しやすいクラス設計などを行うことができるかという指標。言語を問わないものもあれば、その言語特有の設計方法があると思います。
漫然とコーディングを行っていても身につかない能力で、いい実装のソースコードリーディングや実践を通じて鍛えるものだと思います。
ブログの記事などでは書ききれないことが多いので、その人のソースコードを読んだりペアプロする機会がないとこの指標の正しい評価は難しいかもしれません。
アルゴリズムなどの高度な知識を持っているわけではありませんが、個人的には一緒に仕事をしたい人の指標です。*2



指標2に関してはいろいろな仕事をこなしていった結果能力が高まるかも知れませんが、指標1、3は意識的に勉強しないと鍛えるのは難しいです。

*1:以前アルゴリズムを研究にしている人は「速度の検証だけなので動けばいいという考え方で書いている」と言っていました。

*2:こういう人とペアプロをしたりするとものすごく参考になります。