45-限界を知る

プログラマが知るべき97のこと」の45個目のエピソードは、リソースに関する話です。このエピソードは、アルゴリズムと計算量に関する記述が目立ちますが、冒頭にあるようにリソースの限界を知ることが重要であるという主張です。
ソフトウエア開発には様々なリソースがあります。ハードウェアの性能、アルゴリズム、作業に費やせる時間、お金、プログラミング言語の制約・性能などです。これらのリソースはプログラマが個人ではどうにもならないものと、何とかできるものに分けられます。例えば、プロジェクトに投入するお金やハードウェアに関しては、ある程度はともかく完全にコントロールできません。限られたリソースでどれだけの効果を出せるかが求められます。一方で作業に費やせる時間やプログラミング言語の制約などはプログラマが自分でコントロールできるリソースです。限界はありますが、訓練をしてスキルをあげていくことで、リソースの限界を大幅に引き上げられます。エキスパートには訓練をすることで誰でもなれるのです。
どのリソースも正確に、特に限界を知るには訓練をしてスキルを磨かなくてはなりません。例えば、プロジェクトの予算を引き上げることは難しくとも、スキルを高めることにより見積の精度は高まるでしょう。見積の精度が高まれば、お金というリソースの限界も見えてきます。また、自分のスキルの限界も見えるようになります。この規模のプロジェクトであれば自分の限界に比べてどの程度の難易度かが客観的に判断できるようになるでしょう。
このエピソードで書かれている計算量とアルゴリズムの話もその1つです。最適なアルゴリズムを選択するためには1つのアルゴリズムを知っているだけではなく、幾つかのアルゴリズムの特性を知っている必要があります。要件を実現するだけであれば1つのアルゴリズムを知っているだけで充分ですが、最適なアルゴリズムを選択するのがプロの仕事です。プログラミングのスキルなどは学習により限界を知り、お金などのリソースよりも簡単に限界をあげることができます。
自分の持つ戦力を把握することは戦いにおいて最も基本的なことです。戦力を把握すると言うことは、限界を知ると言うことです。限界を知るには学習するしかありません。学習し、経験することで本当の力になるでしょう。

プログラマが知るべき97のこと

プログラマが知るべき97のこと