プログラムから見る「命令」と「実行」
プログラムのソースコードを見たことはあるでしょうか?
色んなアプリケーションが溢れている世の中なので、一度くらいは見たことがあるかもしれません。
僕は数値解析を良く行うので、プログラムを書いたり読んだりするのが日常です。
プログラムはたった何行かのコードで、たくさんの処理をPCに命令することができます。しかも、PCはメモリや時間が許す限り、命令されたことを忠実に実行し続けてくれます。
これはものすごいことで、人間が行っていた単純作業をPCは一瞬で実行してしまいます。数値計算用のプログラム言語Mathematicaだと、人間がやると1週間以上かかるような計算を1秒以内で行えたり、5次方程式を一瞬で式変形したりするので、もう計算は全部任せてもいいんじゃないかって思ってしまうときもあります。
それほどにすごいプログラムですが、面白いことに、同じ処理でも、命令の仕方は何通りもあります。仕事を頼むときの頼み方が何通りもあるのと同じですね。
さらに面白いことに、命令の仕方によって、処理にかかる時間が大きく変化します。
例えば、数値解析の場合だと、積分をする方法に台形則だったり、長方形則などがあります。これらは両方とも積分をするための方法なのですが、同じ結果を得るためにかかる計算時間が全然違います。台形則の方が速いです。
同じ積分をするという目的なのに、手段が異なると、必要なエネルギー(この場合は時間やメモリ)が変わってくるという、当たり前に見えるけれど忘れがちなこの事実を、プログラミングをしていて気づかされました。
これを人間同士に置き換えてみると、ちょっと面白いかもしれません。
ある会社で何か目的があったとします。その目的をAさんは知っているとしましょう。Aさんはその目的を達成するために、部下のBさんとCさんに「命令」しました。BさんとCさんは言われたとおりに「実行」してくれます。
こんな状況のとき、Aさん、Bさん、Cさんの3人が目的を達成できるかどうかは、もちろんBさんとCさんが「命令」通りに動いてくれること前提で、Aさんの「命令」次第になります。
もしAさんが長方形則のような単純な命令しか出せなかったら、BさんとCさんは非常に労力を使うことになってしまいます。
しかし逆に長方形則を知っていたら?あるいはもっと速い方法を知っていたら?
答えは明白ですよね。実行する人は尊い。でも、彼らが楽できるかどうかは彼らの上司次第なんですよ。
命令する側の人間は、勉強を怠ってはならない。そう思います。
今日はこのツイートから話を膨らませました。最所あさみさんのまねをしてnoteのもとはTwitterに書いていこうと思います。