達人プログラマーを目指すための素質

http://1yg.net/archives/554という記事がはてブで相当話題になっているみたいです。

そんな感じで、自分の考える「プログラミングの出来る人と出来ない人の決定的な違い」は
文字の羅列に興味を持つ事が出来、理解しようと真剣に取り組めるか否か
だと思う。

この文章を頭ごなしに批判する記事もありますが、「好きこそものの上手なれ」ということで、職業プログラマーを目指す上での必要条件としてプログラミング作業に興味が持てるかどうかという点は間違っていないと思います。超一流の天才クリエーターを目指すのではなく、あくまでも職業プログラマーとしてやっていくという前提において、しかも、過酷な労働や割に合わない報酬といったことが盛んに言われるような環境で、長いこと仕事を続けていくためには「プログラミングが楽しい」と思えなくては始まらないですからね。*1
ただ、私としてはプログラムを無味乾燥な文字の羅列として捉えるよりも、よりビジュアルなクラスの構造を頭でイメージしながらコードを書くことが多いため、その「興味」を示す方向が多少違っているなとは思いますが。つまり、より右脳的発想で考えているなということはあります。私もまだ修行中の身の上で偉そうなことは言えないですが、そういう観点でプログラミングのプロを目指す上での素質のある人というのはどういう人なのかというのを私なりに考えて見ました。
まずは、当然左脳的な論理的思考が得意であるべきということはありますが、それに加えて最近のオブジェクト指向的な発想でアーキテクチャーを考えながらコーディングするというということを考えると、ビジュアル脳的、右脳的思考も重要なように思います。そうすると、たとえば、囲碁、将棋、チェスといった頭脳ゲームが得意な人というのはかなり高い確率でプログラマーの素養があると言えるのではないかと思います。囲碁では相手の次に打つ手を読むという論理思考だけでなく、定石を駆使して臨機応変にパターンを当てはめたり、石の生死の判断を求められたりしますからね。実際、こういったゲームの有段者で達人プログラマーという人もかなりいると思います。それから、ゲームということで言えばRPGシミュレーションゲームといったある程度時間をかけて攻略するようなタイプのゲームに興味を持って相当やりこむようなタイプの人はプログラマーの素質があると思います。こうしたゲームは決められた大量のルールのある世界で、最適なストラテジーを考えるということですから、プログラミングに共通するものがあります。とにかく大量のルールを覚えるのが嫌いなタイプだとこうしたゲームは受け付けられませんから*2
あと、忘れてはならないのは学校の勉強が得意かどうかという点ですね。一般的に、教科書をいくら暗記して学校の成績が良くても*3仕事ができるかどうかには関係ないと言われます。一般的にはその通りなのですが、プログラマーの場合にはちょっと違っているかなとも思います。第一に国語、数学、英語などの基礎学力(特に高校レベルまでの)はプログラミングを行ったり本で独習する上で非常に大切な基礎となります。また、一部のクリエーターなどと言われる天才的プログラマーを除いて普通の職業プログラマーに求められるのは、要件がある程度決められた範囲で最適な実装手段を考えることになります。この点で、期末試験の範囲が決まっていて、その範囲をしっかり勉強してよい点数を取ることができる秀才タイプの人はPGに非常に向いていると言えると思います。(必ずしもオール5タイプでなくても特定の得意教科を徹底的に勉強するタイプも可)悪い言い方をすれば決まりきったパターンに当てはめることしかできないということですが、それはそれで一つの才能ではないですかね。受験数学の問題をパターンに当てはめて解いていくなどは、デザインパターンを当てはめるという行為にも近いと思います。しかも、ガリ勉君は、本をたくさん読んで勉強する習慣が当然身についていますからね。ですから、本来は学歴の高い人はPGに非常に向いていると思うのですが、残念ながらそういう高学歴の人でPGになるという人は非常に限られているようですね。
http://newslogs.browncat.org/2007/08/toudai_programmer.html
本来は潜在的にプログラミングの才能を持った人はもっとたくさんいるはずなのに、社会的地位の低さゆえかそういう適正を持った人がこの業界でPGになってくれないという事実はあるのかもしれないとちょっと思いました。
結局当たり前の結論になるのですが、論理的思考、視覚化などのセンスがある程度あって、常に勉強をする努力を怠らない人というのがプログラミングのプロとして大成するためには大切なことであると私は考えます。

*1:数年ですぐにやめていく人も多いと思うので、多くの方の指摘されるように全体としてはプログラミングが特に好きでなく仕事としていやいややっている人もたくさんいるかもしれませんが、相当ぬるい環境でない限りそういう人は仕事として長続きしないのでは?

*2:私の嫁さんがそのタイプで、ドラクエなど初心者向けのRPGでもレベル10くらいですぐに飽きてしまいます。いろいろなアイテムやモンスターの特徴を覚えるのが面倒らしいです。対照的に私はいろいろなアイテムを集めたり、ハマルとのめりこむタイプです。いろいろコレクションしたり凝り性な性格はPGとして有利なところがあるでしょう。

*3:一般的には学歴が高くても。ただし、学歴は家庭環境などさまざまな要素にも左右されるものですから、一概に名門校の卒業証書を持っていることが重要というわけではもちろんありません。ここでは勉強する努力をすることという点を強調しています。