プログラミングは特殊な技能か?

プログラマーとは特殊な人種だと思われている節があるようだ。
しかし本当にそうだろうか。できることをできないと思い込んでいるだけではないのか、それを検証してみる。
まず、一般人にプログラマーを理解してもらうとっかかりとして、ソロバンの達人について説明する。
ソロバン経験者でなくても有名な話だが、ソロバンの初級者はソロバンを計算機のように使い、中級者は意識せずに使い、上級者はソロバンがなくても同じ速度で暗算ができるようになる。
特に上級者がなぜこのようなことができるかと言うと、単に頭の中にソロバンをシミュレートした物があり、それを操作することで計算をしているのである。
こう言った「頭の中にしかないものを操作する=頭の中にしかないものの状態を把握する」ことは、人間実は誰しもがやっていることである。慣れた人間がブラインドタッチできるのもこれと同じだ。自動車の「車体感覚」なども類似である。
目の前に実物がある物について、どこをどう動かせばどんな風に動くか、それを頭の中でシミュレートする。ここまでは誰でもができることである。(当然、向き不向きはあるが、全くできないと言うのも珍しい)
プログラミングと言う作業は、この延長上にある。
コンピュータとは、実際に触ることのできないソロバンと考えるとしっくりくる。普通のソロバンに比べると、遥かにたくさんの変数があり、それらの組み合わせも事実上無限にある。何より、内部の状態を現実に見ることは(ほぼ)できない。言ってしまえば、この世に最初から存在しないソロバンを想像して、それを脳内で操ることができるかどうか。それがプログラマーと一般人を分ける壁だと考える。
この、存在しないものを想像して動かすと言う知的作業に、特殊な才能を必要とするかどうかが、特殊かそうでないかの焦点になるだろう。
さて、それを踏まえた上で自問自答してみる。
プログラマーは特殊な技能か否や。否。人間は人間と言うブラックボックスを想像してその動きをシミュレートできる。人の心を類推することができる。その能力を持ってすれば決まった動きしかしないコンピュータの想像など簡単そのものである。
向き不向きはあるだろうが、単純に先入観から「自分には難しい」と思い込んでいる場合がほとんどだと考える。
……まあ、だからってプログラマーのイメージはよくならないし、なる理由にもならないし、なりたがる人間が増える訳でもないんだけどね。