抽象化の果てに

2005-12-30
以前、オブジェクト指向神話を揶揄して書いた文章が引用されていたのでちょっと捕捉。書いた場所は、ここではないので日記を探しても見つかりません。ごめんなさい。

抽象化は人の使う強力な道具です。モデルを使うことで複雑な問題を分かりやすくし、理解を深めることが出来ます。が、抽象化は情報を切り落とし、現実のある側面のみを強調していることを忘れてしまいがちです。美しいモデルを作るために捨てたモノに足下をすくわれることが多いです。

TCPは、下層にある信頼性のないネットワークに対する完全な抽象化を提供しようとしているが、しかし、ときどきネットワークは抽象化から漏れ出て、あなたは、抽象化があなたを守ってくれない何物かの存在を感じ取る。そうしてこれは、私が「漏れのある抽象化の法則」と名付けた法則の一例になっている。

自明ではない抽象化はすべて、程度の差こそあれ、漏れがある。

身近な例では、仮想メモリはメモリが膨大にあるように見せてくれるがパフォーマンスまでは保証しないし、double型の計算でコンピュータ誤差に泣かされるのも、抽象化が漏れているのです。

何か抽象化を否定しているようなことを書いていますが、最初に書いた通り、人が使える最強の武器の一つだと思っています。ただ、それが自分の都合に合わせて不自然に形を変えてしまってることを見落としがちで、こと、プログラミングだと致命傷になりかねないということです。抽象化の難しさについてはオブジェクト指向はバラ色の未来を約束するかなどが参考になるかも知れません。