速いプログラムと管理しやすいプログラム

記事
IT・テクノロジー

速いプログラムと管理しやすいプログラム

プログラムには、書き方によって、処理時間の短いプログラムやメモリの使用量が少ないプログラムや管理しやすいプログラムがあります。その違いはどこにあるのでしょうか?この記事では、プログラムの書き方の違いについて考えてみました。


速いプログラムとは?

速いプログラムとは、処理時間が短いプログラムの事を指す場合が殆どです。 同じ処理でも、プログラムの書き方で処理時間が変わってきます。プログラムを評価する指標には、こうした処理時間の他にも利用するメモリ容量なども評価する場合もあります。例えば、処理時間と使用するメモリ容量は相反する場合が多く両立するのは難しくなります。従って、用途や目的によって何を優先するかを決めてプログラムを書くことになります。

ところで、より速い処理をするために何が必要がを考えてみると、何が実行時間を遅くしているかを見極めてその部分を改善するというシンプルな事です。実行を遅くする要因はいろいろありますが、複雑な計算をする場合には、同じ計算を何回かする場合がありますが、そうした計算結果を変数として保存しておくと、計算をやり直す事が避けられるので処理時間を節約できる場合があります。こうした事が積み重なると、使用するメモリも増えて行くという事になります。


また、別の話になりますが、別の要因は、関数の呼び出しは意外に処理時間の低下の原因になる場合があります。特に、関数の中から別の関数の呼び出しが重なると、処理のオーバーヘッドが大きくなります。関数の中から、同じ関数を呼び出す場合(再帰呼び出し)をすると特にオーバーヘッドが大きくなります。これは、関数の呼び出し処理の際に CPU の中で起こる処理と、OS などの実行環境の処理によるものです。

関数を利用理由は?

ところで、プログラムで関数を利用する理由は何でしょうか?

大きな理由は、頻繁に利用する機能をまとめて、利用しやすくするという目的の場合が多くなります。 当然、関数を利用してモジュール化を進めることで、再利用も可能になりますし、プログラム自体の見通しも良くなります。 つまり、読みやすく管理しやすいプログラムになるというのが大きな理由です。

これだけではなく、高速化したり、極端にメモリを節約したプログラムは、読みにくくなる場合が非常に多くなります。 つまり、管理しやすいプログラムと速いプログラムも相反する場合が多くなってしまうという事です。

速いプログラムと管理しやすいプログラムのどちらが良いか?
では速いプログラムと、管理しやすいプログラムのどちらが良いかという事になりますよね?

この質問は難しい質問になります。 もちろん、プログラムの目的と利用方法によるものが大きくなります。処理時間が最優先の場合には、選択の余地がありません。

それ以外の場合でも、処理時間が短いという事は「高性能」という事ができるので速いプログラムの方が良さそうに見えます。 ところが、最近はコンピュータの性能が良くなって、処理時間の差というのは余程大きなデータを処理しないと大きな差が出ないことが多くなっています。例えば、同じデータを処理するのに処理時間が5分かかるプログラムと、処理時間が 6 分かかるプログラムを考えてみてください。この 1 分の処理時間の差をどう考えるかという事になります。


1 分の差でも、同じ処理を60回すれば、トータルでは 60 分の差になります。例えば、プログラムのコンパイルなどを考えると、コードを修正する度にコンパイルをして実行する場合、デバッグをしている場合には、1 日に何回もコンパイルをする事になります。そう考えると速いプログラムは魅力的です。一方で、プログラムを入力する作業の場合には、コンピュータの処理時間より、人間が入力する時間の方がかかる場合が殆どです。その場合には、プログラムの入力処理を頑張って高速化する意味は少なくなります。従って、これも目的や用途によるという事になりそうです。

しかし、プログラムを商品として扱う場合を考えると、管理しやすいプログラムにした方が、圧倒的に管理にかかる費用は節約できます。これは、自分が書いたプログラムでも時間が経つと詳細を忘れてしまう場合も多く、高速化のために「技巧的」な書き方をしたコードを読むのが大変になります。自分が書いたプログラムの場合はまだ良いのですが、これが他人が書いたプログラムの場合は、何故そのような書き方をしたのかがなかなか理解できない場合も多く、バグの修正や機能の改善・追加が大変になる場合が多くなります。 プログラムにバグはつきものですし、長期的には機能の改善・追加は必須になる場合が殆どです。また、作業するエンジニアも変わる可能性がある事を考えると見やすいプログラムの方が扱いが圧倒的に楽になります。

まずは見やすいプログラムを目指そう!

専門的なプログラムを開発するようになると、性能の改善(処理時間の短縮)を求められる場合も出てきます。しかし、一般的なプログラムの開発では、まずは、「見やすい(管理しやすい)」プログラムを目指す事を強くお勧めします。

理由は、いくつかありますが、二つ大きな理由を挙げるとすると、

* 他人が読んでもわかりやすい  → 他の人でもコードを変更できる・レビューが容易
* バグを減らすことが可能  → 見やすく、理解しやすいコードの方が不具合を出しにくい
という大きな利点があります。

もちろん、性能は大切な要素ではありますが、最近の CPU の性能の改善は目覚ましいものがあって、多少処理のオーバーヘッドがあっても性能は以前ほど差がつかなくなっている事を考えると、性能はハードウエアでカバーしてソフトウエアは管理のしやすさと、問題点の少なさを追求した方がバランスの良い実装が可能になります。

まとめ
プログラムを書くうえで、技巧的な凝った書き方は、処理時間を短縮したり、使用するメモリの容量を減らしたりする事を可能にする場合もありますが、コードが読みづらくなったりする欠点も持っています。

最近の CPU の性能を考えると、ほとんどのソフトウエア開発では、読みやすいコードを心掛けて開発する方が、将来的なコードの管理を考えるとメリットが大きくなります。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す