ブログ

利益を生むプログラムコードとは?

So Nomiyama

ビジネスの舞台で稼働するコードは、それがシステムの一部として期待どおりに動き、利益を生む一役を担わなければなりません。

利益を生むコードは、2つの使命があります。ひとつは与えられた役割をきちんと果たすという事。もうひとつは、そのコードが容易に理解でき、改修しやすくあるという事です。

後者はあまり意識されていません。ビジネスプログラマは多くの場合、納期や品質を保つことに精一杯で、誰かのために理解しやすく書こう、なんて考える余裕がないからです。

私は、この「理解しやすさ」がとても重要だと思っています。作家がストーリーを読み手に丁寧に伝えるように、コードも誰かが読むことを意識する必要があります。読みやすさを優先した結果、処理がちょっとだけ遅くなっても構わないとさえ思っています。

読みやすいコードは、保守メンバーを心から安心させます。スパゲッティでブラックボックスのように見えるコードの面倒は誰もみたくないのです。

保守メンバーの理解が早いということは、改修コストが下がるという事です。当然これは利益になります。

優秀な人ほどコードは難読化しやすいように思います。これは読み手と知識の差が大きいから必然です。ですので、そういう時ほど「これは多くの人が理解できるか?」という問いかけが常に必要だと思います。

自分しか理解できないコードを大量生産してしまうと、誰も保守できなくなり自分の仕事が増えてしまいます。その結果、自分も周りも苦しめてしまうのです。

一つ例を挙げてみます。以下のようなプログラムがあったとします。

1def print_profile(human, japanese, kansai):
2
3    if human == True:
4        if japanese == True:
5            if kansai == True:
6                print('私は関西人です。')
7            else:
8                print('私は関西人ではありません。')
9        else:
10            print('私は外国人です。')
11    else:
12        print('私はロボットです。')
13

パッと見ただけで何をやっているかわかりません。if と else の応酬で、目線を上下左右に行ったり来たり動かす必要があります。

これを書き直してみます。

1def print_profile(human, japanese, kansai):
2
3    if human != True:
4        print('私はロボットです。')
5        return
6    
7    if japanese != True
8        print('私は外国人です。')
9        return
10    
11    if kansai != True
12        print('私は関西人ではありません。')
13        return
14    
15    print('私は関西人です。')
16

プログラマでなくても、これが読みやすいコードであることがわかると思います。

この2つのコードの挙動は全く同じですが、書き直した方のコードは、物語を読むように上から下に読んでいくだけで理解できます。

なぜ理解しやすいかというと、状態の数が下に行くほど減っていっているからです。もし human が True でないなら、「私はロボットです。」という結果を表示して、後は用がないのでさっさと処理を抜けます。

この「さっさと処理を抜ける」というところがポイントです。こうすることで状態の数がひとつ減り、それ以降は japanese と kansai の事だけ考えれば良いのです。

これはコードの読みやすさを向上させるというメリットもあるし、不具合を減らせる側面もあります。状態が複雑であればあるほど、不具合は起きやすくなるのです。

これにコメントを含めると、このコードはまるで物語を読むように理解しやすくなります。

プログラムは機械言語、つまりコンピューターが読むための言語と思われがちですが、「人間が読む」ということも意識すれば、もっと利益を生むコードになると考えています。

ABOUT ME
So Nomiyama
So Nomiyama
ソフトウェアエンジニア
フリーのソフトウェアエンジニアです。Webアプリ、スマホアプリ作っています。 Google Cloud / App Engine / Python / JS / HTML / CSS / Cordova / キャンプ / 登山 / カメラ / 料理
記事URLをコピーしました