コンピュータの本質

ふだんは触れることのないアセンブリの世界なんてものを覗いてみてしまったおかげでいろいろ考えることがあった。そのひとつが最適化と速度向上の話である。

この頃、Windowsだとか、近頃ではLinuxも肥大化が進んでしまってシステムの巨大化はもう行くところまで行ってしまったかの感がある。それに反発する人も少なくないらしく、自前でアセンブラアセンブルコードから機械語に翻訳するもの)まで作ってしまって、私のものはこれこれのものよりもサイズが小さいし、動作も速いなどという人もいる。

でも、コンピュータというのは結局のところ人間の道具でしかないのである。どういう道具かというと、人間が楽をするための道具であったりするのだ。ブラウザを開いたり、メーラーを開くのは人間がわざわざ会うまでもない話であったり、書籍にして出版するまでもない、または雑多すぎてできないようなお話をウェブで公開したりする。そういう楽になる、楽をするのがコンピュータの役割である。

コンピュータを使うというのは、ちょうど旅行に似ているかもしれない。北海道から大阪まで旅行するのに飛行機、列車、自家用車、高速バス、自転車か、はたまた徒歩とかいろいろな手段や方法がある。徒歩だとお金はかからないものの、人が一日に歩くことのできる距離はたかがしれているので、一ヶ月ぐらいかかる。それに疲労というおまけまで付いてくる。自家用車でなら何とか2,3日で行くことができるかもしれない。飛行機でならたったの3時間である。その代わりものすごくお金がかかる。

ちまちまとアセンブルコードを書いて行くのは、できる実行ファイルの速度はたしかに速いかもしれない。C言語で書くと遅くなってしまうかもしれない。Javaなどで書くともっと実行速度が遅くなってしまうと思う。でも、C言語のほうがアセンブルコードよりも抽象化の度合いが高いために思考をコードに具現するのはC言語のほうが有利である。また、バグの修正などもC言語のほうが容易にできる。

二律背反な事象というのは世の中にいろいろあるがコンピュータの場合、分かりやすさと速度は二律背反らしい。つまり、分かりやすさを追求すれば速度が犠牲になり、その反対も真だということである。なぜそんなことになるのかというと、コンピュータの思考回路と人間の思考回路は異なっていることから生じる問題である。人間の思考をそのままコンピュータに落とすことができれば、速度が犠牲になるなんてことはないけれども、コンピュータと人間との間に通訳を用意すると、速度が遅くなってしまう。(この通訳も人間が楽をするために、ほとんどの場合はコンピュータのプログラムである)

たいていの人間は速度追求よりも人間の扱いやすい、人間がわかりやすいものを求めるので速度は犠牲になるのかもしれない。でも、速度が犠牲になっていろいろな資源を無駄に食ったところでコンピュータはまだまだ力持ちだったりするから、安心なのかもしれない。