プログラマyasuhoの隠れ家

某ソフトウェア企業に勤務するおじさんプログラマyasuhoです

月に一度はコードを見直そう


プログラムの性能向上はソフトウェアを分かりやすく、品質の高いものとする上で必要なステップであると私は考えます。定期的にコードをレビューすることで、プログラムの何が使いにくいのか、性能のネックになっている部分はどこか、といったことも発見できることでしょう。

ソフトウェアの高速化


MZ-80 パソコン開発秘話より:


Yahoo!ブログ - MZ-80 パソコン開発秘話(17) - BASIC高速化

当初の浮動小数演算は、指数・仮数部をメモリエリアに置き、教科書?通りチンタラチンタラ8ビット演算をしていた。
<...>
仮数部を、表裏のレジスタに全部 持ち込みレジスタ間で16ビット加算・シフト命令を、実行させるとメチャクチャ早くなった。従来の計算の約3〜4倍のスピードアップ。


昔に比べてパソコンやコンピュータの処理能力は飛躍的に向上しました。コンパイラの性能も上がった現代は、処理速度よりもソフトウェアの生産性や応用範囲が重視されています。多少冗長な処理を書いたって、高速なCPUがプログラムをストレスなく実行してくれます。


でも、それは正しい進化なんでしょうか。もう性能向上なんて時代遅れなのでしょうか!?

性能向上による効果


私は以下のような効果が期待できることから、性能向上は必要なことであると思います。

プログラムをシンプルにする


ロジックを見直すことで、プログラムはよりシンプルになります。


最も効果的にプログラムの性能を上げる方法は、アルゴリズムを単純にすることです。局所的な最適化を施すことが効果を上げる場合もたしかにあるのですが、全体を見直し、ムダな処理を簡略化することが最善であると思います。度重なるバージョンアップで肥大化したプログラムには特に効果があります。

バグを減らす


シンプル化により、多くの複雑な問題やバグを減らすことが出来ます。


これには異論もあることでしょう。「コードの変更によって余計バグを増やすのではないか」と。


たしかに性能向上は思いがけないバグをうむ可能性もあります。しかしながら、ひたすら機能追加していったコードには多くの「暗黙の了解」が存在します。それらを回避しながら機能追加やバグ修正をしていくことこそ、予測もつかないバグの原因になりがちなのではないでしょうか。

ユーザの不満を少なくする


ユーザのストレスや不満が減少します。


性能改善は速度の向上だけに効果があるものではありません。ユーザインタフェースやプログラム構造の見直しにより、ソフトウェアは分かりやすくなります。使いやすくレスポンスのよいプログラムは、それ自体の不満も少ないものです。

性能改善の難しさ


むろん現実にはこのような見直しが難しい場合もあるでしょう。プログラムに追加することより、削ることの難しさは私も理解しているつもりです。何が関連しているか分からない、テストの時間が取れないということも影響しているかもしれません。


確かに性能を上げることは大変です。でも、後になればなるほど抜本的な変更は難しくなっていきます。大規模な改造ができず、ユーザの要望に答えられないプログラムは死んでいくだけです。ひたすら追加だけしていくと、やがてプログラムは自分自身で身動きが取れなくなります。OSは3世代を超えると動けなくなる、なんて話もありますね。


時にはプログラムを作り直したくなることもあるでしょう。しかし、単純に作り直しただけのソフトウェアはたいてい失敗します。定期的にデザインを見直し、改修を加えていくのが経験上最もよいようです。もちろんあまりにも設計がまずい場合はこの限りではありませんが。

月に一度はコードを見直そう


プログラムを書いたら、月に一回はコード全体を見直しましょう。


多少冗長なロジックを書いても、コンピュータの性能がそれを問題ないものにしてしまうかもしれません。しかし、そういったプログラムは単に冗長なだけでなく、ロジックが複雑でバグを多く含んでいることが多いものです。単時間で効率よく書けることと、プログラムの品質は別物です。


プログラム開発の早い時期なら大規模な改修もしやすいでしょう。定期的にコードをレビューすることで、プログラム構造はより洗練されたものになっていきます。何が使いにくいのか、性能のネックになっている部分はどこか、といったことも発見できることでしょう。


プログラムの性能向上はムダな作業ではありません。ソフトウェアを分かりやすく、品質の高いものとする上で必要なステップであると私は考えています。