なんだろう、この違和感、その2
なんだろう、この違和感 - tsucchiの日記の続きみたいなお話。
id:nowokay さんより、
「オブジェクト指向を教えない」が「オブジェクト指向禁止」につながらないことに注意してください。
「オブジェクト指向」に時間を割くなという意味であって、オブジェクト指向を使うなということではありません。
とのコメントをいただきました。
気持ちは分かるのですが、やはり違和感を感じます。
自分のスタンスはこっち(↓)
「プログラミングを教える」という目標が共通だったとしても、教える言語に応じて「避けることができない部分」というものがあるのではないか、と思うのです。
C ならメモリモデルっぽい話を避けるわけにはいかないし、Lisp なら再帰かな。Perl だと割と自由だけど、それでも正規表現を無視とかできないな。
で、Java の場合はそれが OOP なのではないか、と思うのです。初心者が、(SJC-P で聞かれるような)重箱の隅みたいな OOP の文法を覚える必要は全然ないと思うのだけど、継承とかポリモーフィズムくらいは分かってないとちゃんと Java を使うことは出来ないんじゃないか、と思うのです。
たとえば、JUnit は3.X の頃は継承なしで使えなかったし、java.util とか javax.swing のライブラリなんかは、継承の知識なしにちゃんと javadoc を読めるとは思えない。スレッドとかGUIとか、あるいはWeb系のフレームワーク使うのなら、抽象クラスとかインターフェースを使ったコールバックの仕組みを(おぼろげでもいいから)押さえてほしい。。。
これが Perl だったら、OOP を後回しにするのは全然 OK だと思う。OOP なしでもある程度言語を使えるから。(他人のコードは読めないから、いつかは覚えなきゃダメだけどね)。
でも Java は OOP を無視したり、後回しにして使える言語だとはとても思えないのです。
古典的な名著の題名にもあるように、「アルゴリズム+データ構造=プログラム」なのです。Java のデータ型には基本型*1以外はクラス型しかないのだから、OOP(少なくともクラス)を教えなければ、プログラミングが文字通りの「片手落ち」になってしまうと思うのですが。