他の業界の他の職能では、出来るひととあまり芳しくない人の格差は、
数字として十数倍程度が限度ではないでしょうか。
しかしながらプログラマの世界では平気で百倍以上は違います。
コードの生産性だけをとっても一人月(一人が一ヶ月働く工数)の目安に使われる数値は、
一千数百ステップ~二、三千数百ステップ程度だと思います。
「あまり芳しくない人などは三ヶ月かかっても五百ステップのプログラムも完成できなかったが、
逆に出来るひとは1ヶ月で二万ステップ以上のプログラムをくみ上げた。」
などは普通に良く聞く話です。
これだけでも百倍程度は十分に違うわけです。
私が実際に見た中で最も多くのコードを生産できるプログラマの生産性は、
一人月で五万ステップ分のC言語のプログラムを組み上げるものでした。
当然ながら正常動作を確認する作業も必要なため、
一日辺りのコーディング量に直すと五千ステップ程度はコードを書けないと到達できない数字です。
それでいてバグの数は片手もないほどでした。
スピードを上げれば、精度が犠牲になるわけではありません。
それどころか、経験的には必ずスピードと精度は比例するように思います。
個人のスキルにほぼ全てが依存していることを考えると至極当然のことです。
スピードを上げるために必要なことは三つあると思います。
一つは俗に言われる「だんどり」といわれるものです。
言い換えれば、自分自身の作業をシミュレーションする能力です。
これはプログラミングに限らずどのような作業でも同じだと思います。
もう一つは、単純に集中力です。
だからこそ以前のブログで述べたように、この仕事に好きな部分を見出せるかどうかが重要なのです。
どんな優れたプログラマであっても、覇気なく、集中力が足りていなければスピードも遅く、
精度の悪いものを作り込んでしまうでしょう。
根本的にはモチベーションの問題です。
最後の一つは、決断する時間を短くすることです。
業務システム開発においては、仕事に費やされる時間の半分以上の時間は、「まよっている時間」です。
決して考えている時間ではありません。
「そんなことはないですよ、一日中コーディング(または機能仕様作成、またはテスト、、、)していますよ。」
という方はよく思い返して仕事中の自分自身を観察みて下さい。
きっと言っている意味が解るはずです。
どんなレベルの作業でもそれはおこります。
まよっていることをきちんと自覚してそれぞれの決断スピードを高めることは、
より複雑な作業を行う良い訓練になるでしょう。
ここで断っておかなくてはならないことは、
早く決断しようとすると二十パーセント程度は間違ってしまうということを覚悟することです。
どんなに習熟しても、過去に経験したことのない新たな決断の場合は、
逆に八十パーセントを間違ってしまうかもしれません。
どうか決断することを恐れないで下さい。
それよりもアイドリングしてしまうことのほうがもったいないのですから。
私の経験からいうと、「スピードが速く、精度の高い人」は、
最初は「スピードが速く、制度の悪い人」になるように思います。
「スピードが遅く、精度の高い人」を目指そうとしてはいけません。
そんな人は、実際にはいないように思います。
あとは「スピードが遅く、精度の悪い人」がいるだけです。
以上、明確な理由は述べられず、あくまで個人の経験からくる私見ですが。。。