2012年06月29日

生産性について

ソフトウェアの生産性については、プログラマ個人に大きく依存することは、昔からよく知られていることです。いろいろなツール・言語・フレームワーク・プロジェクト管理手法などでソフトウェア生産性は多少変わるかもしれませんが、それらによる影響がせいぜい数十パーセントであるのに対して、プログラマひとりひとりの生産性の差は10倍以上あると言われています。このコラムでは、プログラマ個人の生産性の差について、私の考察を述べます。

頭を使う仕事

よく、「私はプログラマです」と言うと、「頭を使う仕事ですよね」と言われますが、まさにその通りであると思います。プログラマがコーディングやデバッグを行うときには、コンピュータの中で起こることを頭の中でシミュレートし、結果を推論する必要があります。ソフトウェアの生産性の高低差は、このシミュレートと推論の速度の差によって生じる、と考えています。この能力は難しい数学の問題を考えるときにも要求される能力であり、実は理系のほうがプログラマに向いている傾向があるのは、コンピュータの仕組みなどのプログラマに必要な知識を持っているからではなく、シミュレートと推論の訓練ができているからではないかと思います。

生産性と知識の相関関係

資格試験に出題されるようなIT関係の知識を身につけることはプロのプログラマとして必要最低条件ですが、プログラマの生産性と知識の量には、実はあまり相関関係はありません。生産性をあげようと、プログラマ本人が懸命に勉強したり、会社がプログラマに勉強させようとさまざまな講習を受けさせたりしても、なかなか生産性はあがりません。プログラマにとって、自分の仕事の価値(価格/単位生産量)を上げるために、時代の流れに沿った勉強は常に必要ですが、本当の意味での生産性(生産量/単位時間)と知識量には相関関係はない、と考えておいたほうが良いでしょう。

生産性を上げる方法

上で述べたように、プログラマの生産性を上げるためには、シミュレートと推論の能力を鍛える必要があります。では、どうすればこれらの能力を鍛えることができるでしょうか。私は、日頃からの仕事の取り組み方が重要であると考えています。生産性を向上させる仕事の取り組み方、それは、「執念」、「あてずっぽう」、「考えるための習慣」の三つの要素からなります。

執念

プログラムのデバッグや数学の問題は、時間をかけて考えるだけで問題が解決できる場合があります。ある程度の時間を費やしても解けなければ、「この問題は解けない」と人は判断するわけですが、そう結論するに至るまでにかける時間には、大きな個人差があるのではないでしょうか。たとえば、数学の入試問題に受験生が挑戦する場合、一つの問題に挑戦して「解けない!」とあきらめるまでの時間は、平均10分くらいではないかと私は思っています。理系の数学の入試問題の中には、1問あたり30分以上の時間を費やして解くように作られているものがあります。このような問題は、まず、それだけ長い時間ひとつの問題を考え続けられる能力がないと、絶対に解くことはできません。数学の問題が「解けない」受験生の中には、「執念が足りない」ことが原因の人たちがたくさんいるのではないかと思っています。これに対して数学者は、何日でも(執念深い人は何年でも)一つの問題を考え続けることができます。あきらめた瞬間、解ける可能性はゼロになるでしょう。

プログラマの場合もあきらめずに考え続ける習慣が必要です。そのことによって、脳が徐々に推論やシミュレートの作業に慣れてゆき、それが生産性の向上をもたらします。そして、考え抜いた末に問題を解決できたという喜びが、次へのモチベーションとなり、このループを繰り返すことで、あきらめずに考える人ができあがってゆくのだと思います。

「頭を使う仕事」をしている人とは、一つの問題を3日くらい考え続けることができるような執念を持っている人だと私は思っています。

あてずっぽう

前節で「プログラムのデバッグや数学の問題は、時間をかけて考えるだけで問題が解決できる場合があります」と書きましたが、プログラムのデバッグの場合、推論しなくても他の手段で情報を入手できる場合があります。たとえば、デバッガで実行して、変数の値を見たり、トレースを見たりすることで、推論せずに情報が得られるような場合があります。また、そもそもバグっているプログラムを相手にしているので、そのほうが確実な場合もあります。

しかし、推論で同じ情報が導出できる場合には、手を動かしていろいろ情報を得るよりも推論で導出するほうが早いのではないでしょうか。ここで言う推論は、論理的な推論だけでなく、「モジュールAは世界的にメジャーなオープンソースで実績もあるので、そこに今回のような発生条件が緩いバグがあるはずがない」といった経験則的な「あてずっぽう」も含まれます。

私の個人的な感覚ですが、生産性の低い人に多く見られる傾向として、正確に情報をつかもうとして、推論よりも調査が先行するタイプが多いように思います。インターネットを検索したり、ログを見たり、デバッガを動かしたりする「調査」が先行し、脳で推論するのを最後の手段にしてしまうと、高い生産性はのぞめません。

弊社では、「手を動かす前に頭を働かせよ」というのをプログラマへの指針としています。推論を十分に行い、情報不足で行き詰った後に調査に入ることにより、調査の範囲が絞り込まれ、素早く解決することができます。どこまで推論して、どこから調査に切り替えるかのバランスが大事なわけですが、推論を重視することにより、短時間で問題解決ができると考えます。

考えるための習慣

上記の他にも、頭を使って仕事するために以下のような工夫が必要であると思います。

  • 甘いものを食べる
  • うろうろ歩き回って、脳に血液を送る(足は第二の心臓と言われています)
  • 眠い時は15分程度の仮眠をとる(仮眠がうまくいかない場合、コーヒーを飲んでからすぐに寝るという方法もあります)
  • 眠気を防止するために、夜更かしをせず、規則正しい生活をする

投資効果

さて、問題解決のために採る手段を決める時、もう一つ重要な要素があります。それは投資効果です。デバッガでのデバッグや、ログファイルの検索をおこなっても、後に残るものはありません。しかし、頭を使って問題解決をするという習慣や能力を身につけることは、スキルとして個人の資産となります。このスキルは問題の種類を限定せず、広範囲に応用でき、さらに、簡単にはまねできない価値の高いものとなります。

プロキューブでは、社員一人一人が「頭を使って」仕事をする真のプログラマであることを目指して、日々の仕事に取り組んでいます。

posted by プロキューブ at 17:16| Comment(0) | コンセプト
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: