Sorry! Only Japanese Pages.(Last Updated:13/Dec/2001)

失敗から学ぼう


人は失敗するもの。でもすぐに忘れてしまうもの。失敗は成功の教師であり、他人の失敗に学ぶのは成長の第一歩。ましてや自分の失敗から学ぶのは大切なり。

Codeを書けば何でもできる…けど
MOSA湘南2001に参加しました。そして、新居氏のセッションを見ました。新居氏はMOSAエディタなるものをその場で作成してゆきました。Interface Builderは本当にすごい。ドキュメント毎のウインドウを開いて、メニューの管理、開いているウインドウの管理、ドックアニメーションや、フォント・書式、アプリケーションや書類のアイコン、果てはスピーチまでもがものの30分で完成してしまった。その間コーディングすることはほとんどなかった。ファイル入出力のためのわずか10行に満たないコード。でも最後にちょっとしたハプニングがあり、予定していたRevertの処理と、画像張り込みがうまく動かなかったのです。
時間が来たため新居氏はセッションを終わりましたが、私は考えました。Revertの処理が呼ばれていないということはフレームワークが呼び出す必要がないと考えているからだ。それはなぜか?ドキュメントのダーティフラグが立っていないからだ。そして休み時間やセッション中に探索を始めました。ドキュメントを読めばNSDocumentにはisDocumentEdited()で書類が編集されたかどうかを調べる方法があり、それをセットするmethodはsetChangeCount()。そこまでわかればあとは試すだけ、いつそれをセットすればよいのか?TextViewに何か入力されたとき、それはNSTextViewのinsertTextが呼ばれる。そしてそれをDocumentのクラスへdelegateしてやればよいのだ。あとは10行足らずのコードを書くだけでOK。
休憩中に新居氏を見つけてこのことを告げると、新居さんは納得しながらもなにか釈然としない様子。そして次の休憩中に新居氏は、あれはこうすればいいのですよ。と言って教えてくれたのは、

Interface BuilderでNSTextViewのundo allowedをチェックする

でした。それだけ。画像読み込みは同じくGraphic allowedをチェックするだけ。
ひとかどの自身のあるプログラマーは、人から「・・ってできる?」と問われれば即座に「できます。そういうコードを書けば」と答えます。どんな問題でも大抵解を持っています。ある種のコーディング神話です。特に大昔からプログラミングしている人はこの神話の呪縛にとらわれてしまっています。かつてはAPIとかライブラリとかいうものがほとんどなくなにもかも自分でやっていました。音を鳴らすのはサウンドチップを直接操作、通信するのはSerial Controllerのレジスタを直接たたき、画面描画もVideoRAMに書き込む。何もかも自分のコードで実現し、実現できたわけです。ですから、APIが整備されFrameworkがなんでもやってくれる時代になってもまず、自分たちがかつてやってきたように、VRAMでなくともBitmapに直接触ろうとしたりします。そんなこともっと簡単にやる方法があるのに、それを探そうとせず、自分のコードを書いて解決しようとします。チェックボックス一つクリックするだけで実現することができるのに(しかも上記ではRevertだけでなく、Undoまでできてしまっている)、自分がかつてやった方法を試そうとする。しまいに、それがゆるされていないと「このAPIはだめだ、欠陥だらけだ、・・すらできない」となるのです。Assemblerの時代からC, C++, そして本当のオブジェクト指向言語の時代へ、ダイオードなどのI/O機器の時代からCUI,GUI,2.5 GUIの時代へ、全てを自分の手で各時代は終わりました。すでに用意されていることは、それを利用しもっと本質的な問題解決だけをコーディングにより実現すればよいのです。でもそれに気がつくことができない。
私はPowerPlantでGUIアプリケーションをオブジェクト指向でクラスライブラリで作成する便利さを学びました。そしてそれは大変すばらしいものでした。しかし、Cocoaはもっとすばらしい。Mac OSが普通に提供している機能はすべて、Cocoaが提供してくれているはずです。それを自分でコーディングしようなんて考えるのはばかげています。過去の経験にとらわれず、新しいプログラミングの方法を習得すべきです。

Welcome to the new world of Cocoa!

トップ

(c)Copyright 2001, KUROKI Masayuki