富豪的プログラミング
ちょっと貧しいGUI
ユーザインタフェースのプログラムといえばすっかり
グラフィカルユーザインタフェース(GUI)があたりまえになりました。
ところが最近の計算機はメモリもディスクも大量に装備しているし
CPUパワーも従来とは比べものにならないのに、
意外と貧乏臭いインタフェースが生き残っているようです。
よく見られる以下のようなインタフェースはちょっと貧しい
と思われます。
- ウィンドウ枠のドラッグ
マウスでウィンドウを動かそうとするとき、
ウィンドウの枠だけマウスに追随し、中身はドラッグ終了後に
再描画されるというシステムがあります。
画面描画が遅かった時代はこういう工夫も仕方がなかったかもしれませんが、
今でもこういうインタフェースを使っているのは貧しいでしょう。
排他的論理和で枠を書いたりもとに戻したりしていれば貧しさ度アップです。
でも調べてみたら同僚のほとんどが
枠だけドラッグのシステムを使っていました。
- スクロールバーの移動と連動しないウィンドウ
「カンガルー跳び」現象というのもあります。
- 多段undoできないエディタ
履歴情報ぐらいケチらずに充分覚えておいて欲しいものです。
- ファイルのセーブ
いちいち指示しないと編集結果が消えてしまうかもしれないというのも
貧しいものがあります。
黙っていても編集結果ぐらい記憶していて欲しいものです。
- 検索実行
辞書などを検索するとき、
検索キーワードを入力してから検索実行を指示するような
インタフェースもよく考えると貧しいものです。
検索の実行と表示に1/10秒もかからないのであれば、
キー入力により
検索条件が変わるたびに検索実行/表示すればよいでしょう。
ところで10年ぐらい前はワークステーションでもGUIがあまり
普及していなかったので、ウィンドウシステムや各種のインタフェース
ツールキットの研究開発が盛んでしたが、最近は
新しいウィンドウシステムが作られたなどという話をとんと聞きませんし、
GUIのプログラミング手法とかデバッグ手法というのも
ほとんどお目にかかれなくなってしまいました。
実際ここ数年のbit誌を見てもそういう記事はほとんどありませんし、
計算機インタフェースの学会でもその手の研究は
あまり流行っていないようです。
この理由はずばり、ウィンドウシステムやツールキットが充分普及したので、
苦労しなくてもGUIが簡単に作れるようになってしまったという
思い込みが浸透したからだろうと思います。
特に素晴しいプログラミング技術やインタフェース部品が
発明されたわけではありませんから、
実のところはユーザの我慢レベルとプログラマの我慢レベルが
妥協点に達してきただけではないかと思います。
この過程で結構貧乏臭いインタフェースが標準になってしまったようです。
WebのCGIがその典型的な例ではないでしょうか。
かたやインターネットの音声だの動画だのが話題になっている
時代に、ユーザ側からは字の並んだだけのメニューからの選択や
文字入力しかできないという仕様はかなり貧しいですが、
JavaやVRMLの話題が沸騰しているのに対し、
CGIの仕様が問題になっているとか新しいバージョンが計画されているとか
いう話はあまり聞きません。
CGIでも最低限の指示はできますし、
ユーザが簡単にプログラマに変身できてしまうので、
貧しい仕様で満足させられてしまっているようです。
これでは昔のBASICのようです。
富豪的プログラミング
プログラマというものは、つい昔の癖で効率的なプログラムを工夫したり
資源を節約したりしようとしがちですが、ユーザインタフェースの
プログラムを開発するときにはこれが裏目に出ることもあります。
というのも、ユーザインタフェースのプログラムでは
機械の効率よりも使い勝手が優先されるべきですし、
プロトタイプの作成とその評価/改良のサイクルを
数多く繰り返す必要があるのですが、
計算機資源を節約しようとすると
これらの条件が後回しになりがちだからです。
これを解決するのが富豪的プログラミングです。
以下のような富豪的プログラミングを行なえばこのような問題は
起こりません。
- メモリや実行効率を気にしないでお気楽にプログラムを作る
効率を重視したプログラムは作るのが大変ですし、
ちゃんと動かすにはデバッグも大変です。
富豪的プログラミングでは一番単純で短いアルゴリズムを使います。
- 条件が変わる度にすべての計算や表示を行なう
再表示が必要な場所だけ書き直ししたり、出力のバッファリング
をしたりする貧乏性な工夫はバグのもとになるので行なわず、
条件が変わる度に計算を再実行したり全体を書き直したりします。
富豪的プログラミングでは現在の状態を記憶しておく必要が少なくなるので
プログラムが短く、バグを含みにくくなります。また、ユーザが何か
操作を行なう度にシステムがすぐに反応するので、直感的操作が可能に
なります。
アイコンのドラッグのようないわゆる
直接操作インタフェースは富豪化への第一歩です。
ユーザの入力により
検索条件が変わるとすぐに検索を再実行して表示を更新する手法は
動的検索と呼ばれており、
将来の検索システムでは常識になると思われます。
またユーザの操作に応じてリアルタイムに連続的に
ズーミングを行なうことにより巨大なデータを簡単に
操作しようというズーミングインタフェースが
最近注目を集めています。
こういった
インタフェース手法は富豪的な発想が無いと思いつかないでしょう。
豊かな資源から豊かな発想が生まれるのです。
Webの成功はその富豪的発想が鍵だったのではないでしょうか。
クリックする度に海外から画像を転送するなどというのは
貧乏人には思いもよらない発想です。
最近は結構富豪なインタフェースツールキットもあるようで、
カーネギーメロン大学で開発されたAmuletというツールキットを使うと
``Hello, world''とウィンドウに表示するプログラムの
サイズが5MBになります。素敵な富豪感覚ですね。
腹が減ってはこれからのシステム設計はできないのかもしれません。
もちろん
発想がいくら富豪でも実際にプログラムが動かなければ仕方がありませんが、
最近のPCは昔に比べると超大富豪的ハードウェアを持っていますから
何も気にしなくても富豪的プログラムが動いてしまうことも多いですし、
プロトタイプの時だけでも高速な計算機を使って
豊かな気持ちでインタフェースを設計するのが大事でしょう。
まだまだ貧しさがひそんでいるかもしれません。
というわけで、これからのGUIプログラム/デバッグは
富豪化がポイントでしょう。
私は最近は富豪的プログラミングしかしないのでGUIのデバッグなど
したことがありません。はずなんですがね。
by 増井俊之 (富豪化理論研究家)