「60%の人間はプログラミングの素質がない」件について

バカだけどプログラマになった身としては、そんなことは無いと思う。

60%の人間はプログラミングの素質がない

http://cpplover.blogspot.jp/2012/05/60.html


もちろん、誰でも努力すれば複雑に絡み合うマルチスレッドのプログラムを組めるとは思わないし、OSを作れるとも思わない。PhotoshopExcel, Mathematica や Cassandra 等世界に名だたるソフトを作れるなんて到底思わない。そういうプログラムを組めるのは超上級者の話だ。世の中どんな分野も初心者と上級者の間より上級者と超上級者の間のほうがはるかに距離が長いのだ。

ここで言っているのは、あくまで普通のプログラム。普通にライブラリを呼び出して、文字列をトリムをしたりリストをソートしたり、データベースに接続してデータの取得を行ったり、だ。他にも簡単な座標計算や、ファイルの読み込み、XMLの処理、ネットワーク越しに情報の取得、等々。

これらは別段難しいことではない。ごく普通のことだ。


初心者にとっては何がなんだか分からないだろうが、それでもこれらを習得するのに素質なんていらない。
100m走を10秒で走り切ることや新しいアイディアを出して儲ける事、将来の為替レートを予想することは素質は必要だろう。そういったものは生まれ持った才能や職人的なセンスが必要だからだ。しかしプログラミングに於いては生まれ持った才能は必要無いし、"ふつうの"プログラムを書く分には職人的なセンスも必要ない。そんなものは普通自動車免許の取得やカラオケの採点で90点を出すことと同様、努力でどうにかなるレベルのものだと信じている。(難易度が同じという意味ではない。努力でどうにかなるという点が同一であるという意味)


代入やシーケンスや再帰を最初から理解できる人はそう多くないだろう。自分の場合、= が代入を表すという事に慣れるのにだいぶ時間がかかった。というより int a = b; みたいに書かれても何をやっているのか、何か意味があるのか、わからないところがわからない状態だった。初めて再帰を知った時は何がなんだかさっぱりわからなかった。本に書いてあるとおりにコードを書いて動かしてもさっぱり理解できない。


そもそもプログラミングをはじめる以前の自分はどうだったか。思い返せば真面目に勉強なんてしたことがなかったし、偏差値は40台前半か30台後半くらいだった気がする。いや、そもそも自分の偏差値を良く知らなかった。というのも、そもそも模試をサボるか、受けにいっても結局理解できないから途中で抜けだして帰ってたからで、まともに模試を受けて自分の偏差値が返されるというのはとてもレアだった。高校の頃、古典が嫌いで(学ぶ意味を理解できない)、授業中は床に横になって寝ていた。枕として使えるよう綺麗なタオルはいつも持参していた。誰も来ない非常階段で寝て、起きたら授業に途中参加。高校は学校に行っていれば卒業できたが、大学はそうは行かないので少しは真面目に勉強しなければならなかった(ちなみに大学受験なんて当然のごとくしておらず、指定校推薦でFラン私立に入った。センター試験がどういうものなのか未だによく知らない)。もともと頭が良くないものだから、大学で一部の授業の単位を取るのには本当に苦労した。中国語はまともに授業を聞いても理解できないしテストも合格点まで届かないという事がわかっていたから、一限の授業だったが当然全て出席、一番早く教室に行って先生におべっか使ってなんとかなけなしの C 評価で単位を貰った。


それでも今は趣味プログラマではなく社会人プログラマとしてやっていけてるし、本当にプログラマになって良かったと思う。
バカだけど(いやむしろバカな自分にとっては)、プログラマになるという選択は数ある選択肢の中でも最良の選択だった。


プログラマになると、物事を考えるときに表面上の出来事を見るのでは無くその後ろにあるアルゴリズムを考えるようになれる。ソフトウェアやソースコードは手にとって触れる類のものではないから、見えない部分に関する思考力が増強されるのだと思う。

今の世の中、正しいことがまかり通らないことなんていくらでもある。むしろ正論を言うとなぜか強い風当たりを受けることさえある。しかし、ことコンピューターに限ってはいつも正しいし、たいてい間違っているのは自分だ。自分が正しいことをすれば正しい結果を得られる。これはこの業界の本当に素晴らしい性質だと思う。数学者や物理学者になれるほど頭が良くなくても、「正しい事が正しい」という当たり前の現実に身を任せられるのだ。人の感情が渦巻く世の中ではそうは行かない。その点については本当に窮屈で生きにくい世の中だと思う。


社会人プログラマになって、今は並列実行が当たり前のコードを書く毎日で、趣味の方では簡易 OS を作れたし(本当に簡易だが)、プログラミング言語を作って、更にその言語の上で別の言語を実装して楽しんでたりする。バカだけどプログラムは書けている。


自分の職業を蔑むわけではないが、プログラマはバカでもなれる職業に分類されると思う。いつだか id:amachang が言ってた。勉強できないやつはプログラマになれって。この意見には激しく同意する。

だから素質なんていらない。最初はそれなりに努力が必要かも知れないが、少なくとも努力で素質と言われているものは身につけられる。
努力が求められない業界なんて無い。どうせ努力するなら、プログラマになる努力をするのがベストだ。


id:amachang に敬意を表して再度ここであの名言を言っておこう。
勉強できない奴はプログラマになれ!