« July 2005 | Main | September 2005 »

プログラマの生産性

ある問題があるとして、その問題解決の手順というのはいくつもあります。駅まで行く、という単純な問題でも徒歩で、自転車で、車で、泳いで、飛んで、といくつも選択肢があります。車を選択するにしても自分で運転するのか他人に頼むのか、自分の車を使うのか誰かの車を使うのか。このように選択肢は爆発する傾向にあります。

まっとうなプログラマであれば、駅までの距離に応じて適当な移動手段を選択するでしょう。しかし、「徒歩」しか移動手段を知らないプログラマであればフロリダまでも歩くことしか思い付かないのです。単純に知識の差だけで効率が変わってきます。

今時のプログラミングというのは、何かをいれたらそれに応じて何かを出すという入力と出力を決めていくということです。ボタンを押したら、それに応じて印刷する、とか。

自動販売機はお金をいれたら商品が出てきます。お金、硬貨だけでも1円硬貨,5円硬貨,10円硬貨,50円硬貨,100円硬貨,500円硬貨と6種類の種類があります。500円硬貨に至っては旧いのと新しいのと二種類ありますから7種類ともいえます。これらの複数の硬貨が投入されたときにどのように数えるか。まっとうなプログラマであれば、硬貨の価値を数値化、モデル化して100円硬貨であれば+100、500円硬貨であれば+500と点数を付けて行くでしょう。ある意味スゴイプログラマは100円硬貨が1つの時は100円、100円硬貨が2つの時は200円、というように組合せのパターンを考えようとするかも知れません。もちろん、こんなことをしていたのでは組合せを考えるだけで日が暮れてしまいます。同時に硬貨は10枚までしか受け付けない、といった制限でも付けば組合せは限定できます。しかし、今度はその組合せと金額が正しいかということを確認しなければなりません。組合せを作るのも大変なら確認するのも大変です。

組合せというのは大きな問題です。ゲームのコマンド入力等で「たたかう」「どうぐ」「じゅもん」「にげる」といった4つの選択肢があるとします。一人パーティのゲームであれば組合せは4通りです。2人であれば「たたかう」+「たたかう」、「たたかう」+「じゅもん」といったように組合せが増えて4×4の16通り、4人なら4×4×4×4で256通りになります。こうした爆発する組合せについて、それぞれ正しく動作することを確認して行くことは大変手間がかかります。

まっとうなプログラマであれば、パーティ一人一人の行動を他のパーティとは影響が無いように注意して作ります。こうすることで、4×4×4×4×…といった組合せではなくて4+4+4+4+…といった項目に抑え込んで手間が増えないようにします。もっと良いプログラマであれば、人数に関係なく4通りのコマンドをテストするだけで問題ないように作るでしょう。

確認項目が4つで済むプログラマと16通りで済むプログラマ、256通り確認しなければいけないプログラマ、では作業効率に大きな差ができます。しかもこれはパーティが増えればもっと差が大きくなるのです。100人パーティとか考えたくなります。

できないプログラマというのは問題をどんどん大きく育ててしまうので、結果的に作業効率に差ができてしまいます。

もちろん、最初に選択されても2番目に選択されても最後に選択されても問題なく動作する「たたかう」コマンドや、いつ、誰が選択しても動作する「たたかう」コマンドというのは、256通り確認しなければ行けない「たたかう」コマンドに比べれば作るのが難しいはずです。でも、それができるかどうかが大きな分かれ目になります。

厄介なのは、できる人とできない人の判断です。例えば256通りの確認が必要なコマンドを作るのは、確認が4つで済むコマンドよりも簡単なので、この人はどんどんコマンドを作って行くことでしょう。端から見ているとどんどん仕事を進めているように見える。「できる人」に見えてしまうのです。さらに質が悪い口が達者な人ですと「コマンドが4つで4人パーティですから組合せは256通りなんですよ」とか言い出して自分の作業量を正当化します。このために「できない人」をできない人と評価することが難しくなります。

こうして「できない人」は「できる人」がコマンド1つを作り上げる間に10個も20個もコマンドを作り上げるのです。ここだけ見ると「できる人」が1つ作る間に20個作るわけですから「できない人」は20倍の作業速度に見えてしまいます。しかし、「できる人」がコマンドを4つ、つまり全部作ったときには「できない人」は100個くらい、まだ半分も出来上がっていないことになります。

「できるプログラマ」「できないプログラマ」だけではなくて「できるように見えて実はできないプログラマ」という人もいるので見極めは大変難しいです。しかし、こうした作業の組み立て方、進め方の違いで作業効率というのは大きく違ってきます。

どんなに作業スピードが速くても、作業スピードよりも速い速度で問題を大きく育ててしまう人は結果的に能率は劣ることになります。こうした積み重ねが10倍、100倍といった差になります。

| | Comments (71) | TrackBack (0)

« July 2005 | Main | September 2005 »