オブジェクト指向神話

MS-DOSからWindows3.1に移行したとき、私はプログラミングを投げ出した。ウィンドゥを一つ出すのに100行近くのソースを書かないといけないし、HANDLEやら何やらもうさっぱり意味がわからなかった。「プログラミングとはこれほど難しいものなのか」と思った。


Windows95になって、OpenGLをいじるようになってからもその思いは拭えず、依然、HDCが何かもよくわからないままプログラムを書いていたのをよく覚えている。Windowsのそういった呪縛から逃れるためにDirectXを勉強しはじめ、BM98を作った。当時はオブジェクト指向設計にすらなっておらず、OOPが分からないのでC++を単なるbetter Cとして使っていた。まともなオブジェクト指向設計が出来るようになったのは、そのずっと後になってからである。


そんな暗中模索の状態だったが、「動くプログラム」は書けた。そもそも私は機械語あがり(アセンブラもなしで16進数で入力していた世代)なので、すべてがグローバル変数だろうが、関数という概念すらなかろうが、「動くプログラム」を書く方法は、自分の体が知っていた。だけど、それは我流で旧式の間違ったプログラムなのだと信じていた。「自分はこういうプログラミングしか出来ず、世間のプログラマのレベルに追いついていない」のだと思い込まされていた。


それは半分は当たっているのだけれど、半分は外れていた。OOAやOODを重視し、クラス設計を行なう人が、まともに「動くプログラム」すら書けないことが現実的には多々ある。「動くプログラム」が書けないのでは当然お金はもらえない。そういった業界の不思議に直面して考えが変わった。そもそも現実世界をソースコードモデリングすることなど出来ないし、そもそもモデリングすることにどのくらい意味があるのだろうかと考えるようになった。


id:akirameiさんは、次のような(皮肉な)例を挙げている。


ナップザック問題を解くのに、ナップザックやら缶詰やらのクラスを作って
「さぁ、モデルは出来た。あとはコードに落とすだけだ」

確かにどこかおかしい。でも、実際、OOPのブームのときには、そう本気で考えている人がたくさん居たし、私もどこかそういうお祭りに踊らされていたのかも知れない。