2006/06/10
脱オブジェクト指向のススメ
脱オブジェクト指向のススメ - 雇われIT社長の乱心ブログ [ITmedia オルタナティブ・ブログ]
何かあちこちで賛否両論なので、僕も一言コメントを。
まず、オブジェクト指向にこだわる必要はないという意見には全面的に agree。少なくとも、オブジェクト指向のためにオブジェクト指向を学ぶのはまったく無意味だ。しかし、これは必ずしも「オブジェクト指向を知らなくていい」ということを意味しているわけではない。オブジェクト指向が持つカプセル化の概念、抽象データ構造、is-a の継承と委譲、クラス分割の考え方(オブジェクト指向設計)などは、どのプログラマでも知っておくべき基礎知識だ。オブジェクト指向にこだわる必要はないというのは、これらを実装するのに、必ずしもオブジェクト指向言語を使う必要は無いという意味だ(たとえば、BSD Kernel の実装を見よ)。
本文にも「寝ても覚めてもコードを書くことです。そうしているうちに、いつの間にか、オブジェクト指向も身に着く(というか、その本質が何かに気づく)でしょう」と書かれているので、玉木氏の本意も上のようなところなのではないだろうか。ただ、「寝ても覚めてもコードを書く」という方法論よりも、オブジェクト指向を学んだ方が近道な気はするけど...。
同じ議論で、関数型言語にこだわる必要は無いけれど、関数型言語のエッセンスは学んでおくべきだと思う。そして、そのための一番簡単な方法論は、関数型言語を(あるいは、少なくとも Lisp/Scheme を)学ぶことだと思う。
何かあちこちで賛否両論なので、僕も一言コメントを。
まず、オブジェクト指向にこだわる必要はないという意見には全面的に agree。少なくとも、オブジェクト指向のためにオブジェクト指向を学ぶのはまったく無意味だ。しかし、これは必ずしも「オブジェクト指向を知らなくていい」ということを意味しているわけではない。オブジェクト指向が持つカプセル化の概念、抽象データ構造、is-a の継承と委譲、クラス分割の考え方(オブジェクト指向設計)などは、どのプログラマでも知っておくべき基礎知識だ。オブジェクト指向にこだわる必要はないというのは、これらを実装するのに、必ずしもオブジェクト指向言語を使う必要は無いという意味だ(たとえば、BSD Kernel の実装を見よ)。
本文にも「寝ても覚めてもコードを書くことです。そうしているうちに、いつの間にか、オブジェクト指向も身に着く(というか、その本質が何かに気づく)でしょう」と書かれているので、玉木氏の本意も上のようなところなのではないだろうか。ただ、「寝ても覚めてもコードを書く」という方法論よりも、オブジェクト指向を学んだ方が近道な気はするけど...。
同じ議論で、関数型言語にこだわる必要は無いけれど、関数型言語のエッセンスは学んでおくべきだと思う。そして、そのための一番簡単な方法論は、関数型言語を(あるいは、少なくとも Lisp/Scheme を)学ぶことだと思う。