歯車機械と OOP

LOGOのパパート先生は「歯車マニア」です。子どものころから歯車に魅せられたパパート先生は、かけ算九九の表を歯車で考えてみたり、2変数方程式に初めて出会ったときは即座に作動装置を連想しちゃったそうです。

そんなエピソードをマインドストームで読んだ当時は「うっはぁ、世の中いろんな人がいるものね・・」と思ったのですが、機械式時計にハマり(笑)、OOPを理解するにつれ、なるほど歯車で動く機械は OOP とホントによく似ているなぁと想うようになりました。

バネやゼンマイ、歯車で動く機械だって、今のモータとコンピュータで動く機械のように動きます。時計だってカメラだって。でも、歯車機械ってとってもドミノ的で、原理的に受動的です。

シャッターを切る力は人間が巻き上げレバーを巻き上げたときの力をバネのテンションで貯め置いたものですし、シャッターを切る動作も手繰り手繰ればシャッターボタンを押しさげる力です。時計だって巻き上げたゼンマイの力で動いて、脱進機でその回る力をトットットッとちょっとづつ止めていて、その運動が歯車を経るたびに意味づけされて針の動きになるわけです。結局詰まるところ人間の力が伝言ゲームを経ているだけのとっても受動的な仕組みなのに、自発的で生物感があるように見えてしまうのが歯車機械です。

これは、結局センダは手繰り手繰れば人間なのだけど、巧妙なドミノ倒しでその力が増幅されたり分けられたり合わさったり貯められたりすることで、オブジェクトが自発的に動いているように思えてしまうOOPと、うーん、似てる。似てるわぁ、と思うのです。


* * *


Smalltalk の動的な環境はその歯車感に拍車をかけます。歯車作用の途中で止めてみたり、また続きから動かしてみたり、歯車を抜いていたり。そんなことが可能だからとても楽しいし理解するのが楽です。歯車機械の動きを理解するには、本や図解よりも実物を動かしてみたり分解してみたりするのが何倍も効果的ですが、そんなところを連想させます。

分解したり、動いているモノを触ったりして理解することはとても大切です。「オブジェクト指向プログラミングは子どもでも理解しやすい」というのは、Smalltalk のシステムのように直接オブジェクトをこねくり回すことで、動いているできあいのシステムを「歯車」こと「オブジェクト」にまで分解することが出来るシステム込みだという前提付きかもしれません。

メソッドを追加したり、隣のオブジェクトを別のモノに変えてみたりを今まさにメモリ上にあるオブジェクトに対して行えるというのはとても楽しいことで、一度味わったらやみつきです。この楽しさに子どもも大人も関係ありません。

OOP + 動的で均質なシステムのもたらす 歯車機械とよく似た「理解のしやすさ」のようなものこそ、ブラックボックスに甘んじる今のコンピュータにもっとも足りないモノだなぁと思うのです。