プログラムで手を抜くこと
オルタナブロガーであるCMパンチの佐々木さんのお話を聞く機会がありました。
長年の疑問であったギターのストラップの長さの好みはどこから来るのかという問題について答えが見つかって幸せでした。
それはさておき、「音楽をやる人は演奏で手を抜くことはしません」という話がとても心に残りました。また、鳴らした音楽がテイク1で録れてもテイク15で取れてもギャラが一緒というところも共感しました。
プログラミングでも手を抜くということは非常に難しいです。例えば手を抜くということは「こんな処理する人いないだろ」とか「こんなデータ来ないだろ」とか「こんなプログラム使い捨てだろ」で済ませることが思い浮かびます。
設計書では文字が絶対に来ない前提になっているけれども、上位モジュールの設計書を見た感じでは文字も数字も入って来る気がするし、何よりテストデータは数字だけだけど本番データに文字がざくざくと入ってる。あぁ0c7。という場面はよく見かけます。少し話題がずれますが、これらは国内の開発では気を利かせて水面下で処理されることが多いものの、いざオフショアだったり欧米と絡んだ開発となると一気に表面化して大変な問題を引き起こす種となることがあると聞きます。
また、共通化ができそうな処理をわざわざコピペしたり、コピペして別々のプログラムにするべき部品を無理矢理ひとつにして条件分岐を書きまくるということもあるかもしれません。「できるだけ頭を使わないようにする」という意味では手を抜いていることには違いないですが、将来的に損をしそうな気もするので得をするものではないようです。
そもそも自分で作っているコードで雑な作りをすれば、同じコード内の別のところで苦しくなってくる部分が出てくるかもしれません。それは最終的に自分で始末する必要があります。そうなってくると、できるだけ効率的なプログラミングをすることや、他人が作った部分から持ってこれるところを探すことや、偉大な先人が作ったパターンを流用することこそが「手抜き」の近道なのではないかという気がします。
もともと情報工学系の世界には人間がやりたくないことを機械任せにすることで発展してきたという部分があります。プログラムが達成する目的もさることながら、プログラムの開発工程においてもその合理性は重要視されます。そのため、できるだけ人間がやらなくて済むようにすること、すなわち手抜きする事は非常に重要なことになります。
手を抜くために徹底的に考え、無駄をそぎ落としたコードを書くこと、これがプログラミングの手抜きであるとするならば、完成したプログラムは他人から見たらまったく手が抜かれていない美しいコードであると言えるのではないでしょうか。
と、思いつつ例外的なところでは「あと1時間で起動しなかったら億単位の損害」なんていうシャレにならない場面で作るプログラムにはコメントも妥協も何もありませんが、そういうプログラムは後から見たら「手抜き」な感じが否めません。必死な思いで作ったものなのに、後から見ると手抜きに感じられてしまうのは少し悲しいです。