いいプログラムとは修正や変更がしやすいもの

仕事や趣味でプログラミングをする方は多く、いいプログラムとは何かについての考え方もそれぞれ違います。
プログラムの良さの指標にはソースコードの短さ、実行時間、可読性などが挙げられますが、私はそれらよりも拡張性や仕様変更に強いことが大事であると考えています。
この記事ではそれらについて説明し、初心者の方、経験の少ない社会人の方や学生の方、趣味でプログラミングする方の参考になれば幸いです。
なお、私は金融業界で開発をしていた経験があり、10年以上のプログラミングの経験があります。

よいプログラムの指標

一般には、プログラムの良さの指標には拡張性や仕様変更の容易性、簡潔さ、実行時間、可読性などが挙げられます。

1.拡張性や仕様変更の容易性

私はこれらの指標の中で最も大事なものがこれであると考えています。
この理由は、IT業界の開発案件では新規開発するものが少なく、既存のシステムに新しい機能を追加したり仕様の変更などがほとんどだからです。
業務の主な内容が既存のプログラムの変更であり、プログラミングはそれに適応することが求められます。
また個人でプログラムをする際にも、機能を追加するたびに新規でプログラムを書くよりは、既存のプログラムを修正するほうが簡単です。
以下に機能が追加されてもうまく動作するプログラムのサンプルを示します。

サンプル

関数にデータx, yを与える際には、引数にデータではなくデータを格納したオブジェクトObjを記述します。

int funciton1(int x, int y){
// 処理
}

int function2(Data Obj){
int x = obj.x;
int y = obj.y;
// 処理
}

function1の記述方法でx, yを関数の引数として与えると、引数の数を増やすなどの変更のたびにfunction1も変更する必要があり、function1の呼び出し箇所の全てで影響があります。
function2の記述をする場合には、引数が増えてもそれが表面化することはないのでそのまま動作します。
なお、既存の呼び出し箇所での無影響テストが必要になりますが、その手間はfunction1の場合よりも十分小さいので、開発工数(時間)やテスト工数を削減することができます。

2.プログラムの簡潔さ

プログラムの簡潔さは実行時間や実行ファイルサイズなどに影響するので重要とよく指摘されますが、必要以上に冗長である場合を除いて、簡潔さほど重要ではありません。

実行時間:

簡潔であればその実行時間も短く見えますが、実際のプログラムの実行時間は簡潔さでは決まりません。
例えば変数の代入や関数の呼び出しより、例外処理を伴うファイルアクセスやSQLの実行のほうがはるかに時間を要するので、変数の代入や関数の呼び出しを減らしても実行時間はほとんど同じです。
なお数万件のレコードなど大量のデータを処理するSQLのように実行に数時間かかる場合は例外であり、修正や仕様変更のしやすさよりも実行時間を短くすることが重要かもしれません。
十分に実行時間が短いSQLなどの場合には、拡張性や仕様変更の容易性を優先すべきです。

実行ファイルのサイズ:

プログラムが簡潔であれば、プログラムやそれをコンパイルしたりビルドした結果である実行ファイルのサイズは小さくなりますが、プログラムのサイズは数Kバイト、実行ファイルのサイズは大きくて数Mバイトです。
現代のデバイスの性能やメモリの容量を考えると、それらのサイズを小さくすることにほとんど価値がありません。
余談ですが、私が子供のころに遊んだファミコンのメモリは2Kバイトしかなく、実行ファイルのサイズを小さくするために、使用頻度が低いひらがなを削除する必要があったとのことです。

 

この記事では私の考え方を紹介しましたが、分野によっては違う考え方が使われているかもしれません。
例えば、金融系の業務では仕様変更しやすいことが重要とされましたが、大学でプログラミングを習った際にはこのことを指摘した教員はいませんでした。
また個人ではなくプロジェクトの開発要員として働く場合には、そのプロジェクトの考え方に従ったほうがいいでしょう。
この記事で紹介したアイデアが役に立つと幸いです。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です