小さなプログラムの組み合わせで、強力な何かになる

プログラムを書くという作業は、小さな命令の部品を並べて組み立てていく作業です。ひとつひとつの命令でできることは、ほとんどの場合とても単純ですから、それらが全体として何か人間に役にたつような動作をしてくれるようになるまでは、たくさんの記述が必要です。

ただし、普通は、命令のひとまとまりに「名前」をつけることができるもので、こうすると、ここはもとの命令をいちいち全部書き直さなくても呼び出せる部分になります。

三角形の面積を出すために、底辺の数値に高さの数値をかけて2で割る、という処理をあらかじめ命令の組み合わせで作って、それに「三角形の面積を出す」という名前をつけておけば、次からは、三角形の面積を出すためにいちいち同じ計算式を書く必要はありません。底辺と高さはいつも違う数値でしょうからそれはパラメータとして与えることにして、あとは、その「できあいのやつ」を呼び出せば、いつでも三角形の面積がだせるという具合です。

つぎに、三角錐の体積を何回も計算する必要が出てきたとします。すでに三角形の面積を出すのは「できあいのやつ」を活用してやれることが分かっていますから、それは再利用することにして、あとは錐の高さをかけてから3で割れば、三角錐の体積のできあがりです。この計算過程にも名前をつけておけば、今度から、三角錐の面積を計算することも楽になるでしょう。

この例はきわめて単純なものですが、もっと仕事レベルの複雑なものでも、本質は変わりません。すでに準備されている「名前のついた」処理のカタマリがあって、それを順番に実行することで要望を実現していったり、ときにはその順番通りに行う処理のカタマリそれ自体にも「名前」をつけて、同じような仕事をさせる必要があるときにもっと楽ができるようにしたり、と、そういう工夫を繰り返していくのです。楽さが積み上がっていきます。

どこかのアニメで、主人公の少年が、手元のコントローラーに向かって「戦え、鉄人!」みたいなことを叫んで、それに反応して大きなロボットが敵を殴る、みたいな場面があったとします。昔はああいうシーンを見て「そんなあいまいな命令で都合よくやれるもんか」と笑ったりしたものですが、今になって考え直してみれば、あれは「音声による命令を認識する」という小さいプログラムと、「周囲の文脈から、もっと細かい指示を推測する」という小さいプログラムと、「視覚情報からどれが敵かを判断する」という小さいプログラムと、「手足の可動部分をどう動かすとターゲットに打撃を与えられるかを計算する」という小さいプログラムと、「全体としてバランスを保ってロボットが倒れないようにする」という小さいプログラムの絶妙な組み合わせで実現しているのかもしれません。プログラミングは、再利用の積み重ねで最終的に恐るべき複雑さの仕事もこなしてくれるようになるわけで、なんならあれこそが技術の粋(すい)と言えるのかも知れませんね。