2012年06月15日
良いプログラミングとは?
今回、異論もあるでしょうがプログラミングの話を少し。いちおう、持論なり独り善がりの文章にもなりますがお許しを。
かなり昔、当時勤めていた会社の社長や上司と話をしていた時に「良いプログラムとは?」と言う話題になり、その時に出た結論(?)が第一に正常動作するプログラム、次に読みやすいプログラム…と言うことになりました。
これを覆すような意見を述べるつもりはありませんが、何時ごろからかこの第一と第二の順位の差が感覚的に以前ほどではなくなってきた(差が縮まってきた)気がします。
ってか、今の時代、プログラムを作り上げてそれで終わりって事はほとんどありません。たいていの場合は仕様の変更が入ったり、そもそもの仕様が違ってたりで手が加わりますし、それが他人の場合もあります。また、作られたプログラムを参考に他のプログラムに転用することも大いに考えられます。
そうすると、第一条件の「動く(正常動作する)プログラム」と言うポイントを覆す事はできませんが、ならば第二のポイントである読みやすさと言うのをないがしろにするわけには行きません。
ちなみに私が自分で使うことを目的とした(つまりは他人に見られる可能性がない)プログラムでも、取あえずは新人研修でも使えるようなロジックを組む様に心がけています。
で、いきなりこんな話をし始めたのは…以前にやっていたプロジェクトに本日から復帰し、他人の作ったプログラムを解析するって作業なんですが、これが読みにくいことこの上なし。プログラムで解析のポイントとなるのは条件文による分岐と、データの取得&加工のロジック(抽出条件やデータ加工の根拠)なんですが、どちらもコメント文が少なく、たまにあってもロジックに沿ってない(下手すりゃ真逆)ありさま。
例えば「If Not(Flg_A And Str_Name <> "NEW") Then」ってな条件文を書いてる。「True/False」のどちらかの値をとるフラグ「Flg_A」と、ある状態を保持する文字型変数「Str_Name」を評価するってモノですが、これを素直に書くと「If (Not Flg_A) Or Str_Name = "NEW" Then」となるはず。(ってか、カルノー図とまでは言わないが、この程度の論理式は…)
まぁ、そのロジックをそのまま書くわけには行かないので、簡単な置き換えで再現できる例を書きましたが、一事が万事、こんな調子。
他にもイロイロと書きたいことがあるが、今日はこの辺で。
かなり昔、当時勤めていた会社の社長や上司と話をしていた時に「良いプログラムとは?」と言う話題になり、その時に出た結論(?)が第一に正常動作するプログラム、次に読みやすいプログラム…と言うことになりました。
これを覆すような意見を述べるつもりはありませんが、何時ごろからかこの第一と第二の順位の差が感覚的に以前ほどではなくなってきた(差が縮まってきた)気がします。
ってか、今の時代、プログラムを作り上げてそれで終わりって事はほとんどありません。たいていの場合は仕様の変更が入ったり、そもそもの仕様が違ってたりで手が加わりますし、それが他人の場合もあります。また、作られたプログラムを参考に他のプログラムに転用することも大いに考えられます。
そうすると、第一条件の「動く(正常動作する)プログラム」と言うポイントを覆す事はできませんが、ならば第二のポイントである読みやすさと言うのをないがしろにするわけには行きません。
ちなみに私が自分で使うことを目的とした(つまりは他人に見られる可能性がない)プログラムでも、取あえずは新人研修でも使えるようなロジックを組む様に心がけています。
で、いきなりこんな話をし始めたのは…以前にやっていたプロジェクトに本日から復帰し、他人の作ったプログラムを解析するって作業なんですが、これが読みにくいことこの上なし。プログラムで解析のポイントとなるのは条件文による分岐と、データの取得&加工のロジック(抽出条件やデータ加工の根拠)なんですが、どちらもコメント文が少なく、たまにあってもロジックに沿ってない(下手すりゃ真逆)ありさま。
例えば「If Not(Flg_A And Str_Name <> "NEW") Then」ってな条件文を書いてる。「True/False」のどちらかの値をとるフラグ「Flg_A」と、ある状態を保持する文字型変数「Str_Name」を評価するってモノですが、これを素直に書くと「If (Not Flg_A) Or Str_Name = "NEW" Then」となるはず。(ってか、カルノー図とまでは言わないが、この程度の論理式は…)
まぁ、そのロジックをそのまま書くわけには行かないので、簡単な置き換えで再現できる例を書きましたが、一事が万事、こんな調子。
他にもイロイロと書きたいことがあるが、今日はこの辺で。