at posts/single.html

LL とフレームワークと分業

ゲームとオブジェクト指向と一流の条件 - shi3zの日記より。

どうも最近、若い「プログラマ」の方々と話をすると話が噛み合ない。

クラスとオブジェクトの区別がついていなかったり、継承と集約(とコンポジション)の区別がついていなかったり

確かに、はじめて Java を使ったときにクラスとオブジェクトの違いが分からなかった記憶がある。 C で簡単なプログラムを書いた経験しかなかったので、 Java でプログラム(クラス)を書いたあとに、なんで new を使って複製(インスタンス)しないといけないんだろうと思ったりしてた。 これはもしかしたら Java の特性(クラスベース)によるのかもしれない。

そういえば、似たような話がまつもとゆきひろ×結城浩,Rubyを語る:ITpro(4ページ目)でも出ていたなぁ。 結城さんの回答はこう。

(結) インスタンスから考えることは重要なんです。Javaの説明をするときに,よくクラスの説明から入るんですが,私はインスタンスの説明から入る。私の本*39ではStringからですね。なぜかというと,もっとも具体的だから。文字列の例をいくつか挙げて,「これって中身は違うけれどもみんな文字列だよね」みたいな話をして,それにStringって名前を付けようと。インスタンスからクラスへ,っていう順番で説明する。これが自然だと思っています。

この時は本当になるほどって思った。 そういう意味では、数字も文字列もオブジェクトになってる Ruby だと自然にオブジェクトの概念(データ+メソッド=オブジェクト)が理解できると思う。クラスとか継承とかはそのあとかな。

irb> "HelloWorld".upcase
=> "HELLOWORLD"
irb> 1.next
=> 2

id:shi3zさんも以下のように書かれているように、まずは実践なんだと思う。

自分でクラスライブラリを設計して、初めて「クラスの継承とはなにか」ということが解った気がする。

フレームワークの功罪

んでもってフレームワークの話。 以下のような回答があったらしいけど、これが問題の本質を突いている。

「自分はStrutsで言われるがままにコーディングしていたのでそういう難しいことはわかりません」

はじめて(2001年くらいだっけ?) Struts を知ったときに、「Webプログラマはフレームワークを作る側と使う側に二極化するだろうな」と感じた。 フレームワークを使えば HTTP リクエストや Cookie のパースができなくても、 for と if を知っていれば Web アプリを作れちゃう。 フレームワークによって、フレームワークを作る側と使う側でのプログラマの分業が進んだ。 フレームワークに手を入れるような高度な機能は、一部の優秀なプログラマに任せて、それ以外の箇所はそれなりのプログラマに任せるというスタイル。

まぁ、似たような話はフレームワークに限らず、 Smarty のようなテンプレートエンジンや、 Ruby のような LL などなどあちこちで見られる。 Web アプリを作る需要がたくさんある状態だと、少数精鋭で開発するのには限界でちゃう。 だから、生産性を多少犠牲にしても、分業によって開発の安定性を選んでいるんじゃないかな。 開発チームから一人が抜けても、影響が少ない状態が望ましいからね。 デメリットとして、 SE とプログラマの対立とか、刺身タンポポとかの問題が出てくるし、これが幸せな状態かどうかは疑問だけど。

プログラミングと初心者でも似たような話を書いた気がするけど、より下の層(オブジェクト指向やポインタやフレームワークの仕組みやマシン語や…ケースバイケース)を理解するようにするか、それ以外の能力を発揮できるようにするかのどちらかかなぁ。 T字型の横と縦の話のような気もしてきた。

関連する日記