ミームの死骸を待ちながら

We are built as gene machines and cultured as meme machines, but we have the power to turn against our creators. We, alone on earth, can rebel against the tyranny of the selfish replicators. - Richard Dawkins "Selfish Gene"

We are built as gene machines and cultured as meme machines, but we have the power to turn against our creators.
We, alone on earth, can rebel against the tyranny of the selfish replicators.
- Richard Dawkins "Selfish Gene"

ちょっとまて、オブジェクト指向って実はすごいんじゃね?


何度か話題に出している=おもしろい 大学院の講義「システムモデリング」だが、今回の講義はオブジェクト指向についてだった。


なにやら凄い興奮したのでその記録を残しておく。


すべては、オブジェクト指向モデリングありき。

やろうと思えばCでもアセンブリ言語でも機械語でもLispでもオブジェクト指向はできる。オブジェクト指向言語とは単にオブジェクト指向モデリングを実装しやすい*1ってだけ。

重要なのは設計であって、その後のどの言語でマッピングしようとも変わらない。自動化してもいいくらい。だから下請けに作らせるのですね。
「言語は何でもええ」と言っていた友人を思い出した。


メモリと高級言語

I/Oやオブジェクト属性の初期化でバグの7-8割が発生する理由は、メモリ操作を行うから。

最近は@natsutanさんとTwitterで話したり、どんどん低レイヤーに下がっていくスーパーハカーの友人と話したりして意識に下地が出来ていた*2こともあり、このくだりが面白いと感じた。


高級言語でもメモリを意識しないとあかんのやね。いや、メモリを意識せずに済むようにうまくパッケージ化されているんだけど、元々の仕組みがわかっていないと本当に効率的なコードは書けないわけだ。


is-a, has-aの関係


Rubyスーパークラスだのなんだの言ってたのはis-aの関係か。

以降、妄想成分注意


プログラミングを勉強するときに、本とかドキュメントを読んで一ページ目から順に勉強する人が多い。たしかに、これもいい勉強方法の一つだとは思う。でも、僕はこれが苦手だ。楽しくない。だから、僕は目的を分割して必要な部分だけ飛び飛びに学んでいる。ジグゾーパズルを作るみたいな感じ。ジグゾーパズルを作るときに左上から一個ずつ探していたら時間がかかってしょうがない。必要なところから評価(具現化)するというところは、遅延評価的なのかなとか思った

遅延評価的勉強法 - IT戦記


いい機会なので、私の言語学習法をこの際披露することにしましょう。私の場合、一番の特徴は、「必要を感じるまで学ばない」「本当の問題に出会った時に、それを全力で解く」「学ぶ時には『原典』に当たる」ということでしょうか。私はこれを「遅延学習」と呼んでおります。実はこのことはコンピューター言語に限った事ではないのですが、コンピューター言語の場合、このことが特に顕著です。

404 Blog Not Found:私の言語遅延学習法 - 三つのルール+1


必要な時に必要な理解がやってくる。僕もそのタイプに近いかもしれない。というか、勉強テーマ自体が分散している。その間の深い溝が自分の中で埋まる瞬間の快感と言ったらない。もちろんただの勘違いだったり馬鹿みたいなアナロジーを使ってたりするけども。


この講義でかなりのピースがカチカチとはまった。
一人で高揚してたけど、周り見ると寝てたりその場で作成するシステムの設計を始めてる人もいたから、情報な人には常識なんだろうな。


今までの断片的な知識が繋がっていく快感を感じながら、僕は2006年夏のインターンを思い出していた。僕は大学三年の時にいくつかインターンを経験したが、そこで初めて社会に認められたことが今の僕の自信の源泉になっている。社会に興味を持ち始めたきっかけでもある。

ともかく、そのインターンで教えられた内容と今回の講義がリンクして、ドキがムネムネするなどしていた。あのときは僕の下地不足で理解できなかったが、今考えると実はかなりハイレベルなことを教えてくれてたのだとわかる。UMLとか書いて設計きちんとやったし、is-a、has-aとかもちゃんと教えてもらった。
「ソートって何?」レベルの*3僕にはもったいない内容でした。

そして、夏の内定者4人を集めてその数ヶ月後に行われた冬のインターンにおいて、何をやらせたかったのか、何を意図していたのか、今頃わかった気がする。
オブジェクト指向言語Rubyで開発を経験したインターン生は、夏の開発でオブジェクト指向開発の根幹がしっかり身についていれば、他人との共同開発ができて然るべきだ。
だから共同開発をやったわけだ。

結局大学などとぶつかってうまく時間が割けず、僕も慣れないJavaScriptに手を出すなどして破綻気味になり、納得いく結果は出せなかったが…。あのときこの意識があれば、もうすこしうまくやれたかもしれない。

ここに書いたこともまた、盛大な勘違いである可能性もわりと高いが。


生命はオブジェクト指向で設計されたシステムだ。


DNAはスパゲティコードでも、その表現型たる生命体はとてつもなく効率化されたシステムだ
確かオブジェクト指向は生物にインスパイアされてアラン・ケイが考案したものだとどこかで読んだことがある。オブジェクト指向は人間の自然な発想に沿ったものである、と。
だからこそ構造化プログラミングに変わって提唱されて以来、15年間取って代わるものもなくシステム開発の頂点に立ってきた。危険な弾言だな。アスペクト指向とかあるらしいけどよくわからない。
そういわれてみると、研究計画を立てるとか、もっと日常的な意志決定する時の思考回路を思い出すと、確かにオブジェクト指向な考え方をしているかもしれない。


この考えに照らせば、ワークスアプリケーションズインターン*4やりたがっていることは、彼らが主張している通り「才能のセレクション」なのだとわかる。それもオブジェクト指向思考(?)がデフォルトである人材を見つけることではないか。

つまり、一つのシステムを考えに考えて考え抜かせ、実装させる。実装自体は実はあまり重視してなくて、自然な指向オブジェクト指向に近い人間を探しているのではないか。その人材がすなわち、「ゼロをイチにできる」人間である。



このブログも極論劇場の看板を掲げるべきですね

*1:文法とか、用意された仕組み(ガベージコレクションなど)などによって

*2:心理学用語で言うところのスキームか

*3:よく放り出されなかったものだ><

*4:インターンしか社会経験がないかわいそうな人なので許してください