利益を生むプログラムコードとは?
ビジネスの舞台で稼働するコードは、それがシステムの一部として期待どおりに動き、利益を生む一役を担わなければなりません。
利益を生むコードは、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 の事だけ考えれば良いのです。
これはコードの読みやすさを向上させるというメリットもあるし、不具合を減らせる側面もあります。状態が複雑であればあるほど、不具合は起きやすくなるのです。
これにコメントを含めると、このコードはまるで物語を読むように理解しやすくなります。
プログラムは機械言語、つまりコンピューターが読むための言語と思われがちですが、「人間が読む」ということも意識すれば、もっと利益を生むコードになると考えています。