富豪的プログラミング
ちょっと貧しい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 増井俊之 (富豪化理論研究家)
/icons/水平線.icon
1997年のbitの記事なのだが割と読まれたようで、一時は「富豪」でググると私のページがトップに出たぐらいである。「インターネットで一番の富豪だ」と自慢してたのだが流石に最近は駄目になってしまった。bitはあらゆる計算機関係者が読んでた良い雑誌だったのだが現在はWikipediaにエントリすら無いようだ。(2018/4/12) 富豪的でググると今でもこの記事がトップに出る (2020/3/16) https://gyazo.com/934494172a94d94425966607a6f71435