書いても書いても

 終わる気配がない。実現すべきことを先読みできる物は先読みして型パラメータにしたりinterfaceにしたりしてガリガリと書く。将来の拡張性のためじゃなく、ここは絶対interfaceにしないとすっきりしない、ジェネリックにしないとすっきりしないところをやっているだけなのに、このTの中身はIHogehogeでいいんだっけ、IFooBar<U>にするんだっけ、いやいやIHogehoge<IFooBar<U>>か?とかだんだん混乱してきた。短期記憶に納まらない量の物を一気に書こうとしてる。二度手間になっても機能限定版を書いたあと書き直すべきだったかもしれない。しかしそんなペースではいつになったら終わるのやら。

 歴代SGはVer1.0が九ヶ月、2.0に六ヶ月、GUIツールを辞めて仕切りなおしの1.0が案外速くて4ヶ月。今回のはいつはじめたのか判然としないけど十月にはじめたとして今三ヶ月か。佳境だ。のるかそるか、今を乗り切れるかどうか。それにしても言語部分だけでこんなにかかるなんて。

 今までのやつはGUI作ったりノベルゲー実行エンジン作ったりするのに時間はかかったけど、言語部分なんてちょちょいだったんだけどなあ。ちょちょいったって一ヶ月ぐらいはかかるけど。C#をそのまま物語記述言語にしてしまうのは少し無理があったのだろうか。

 GUIでプログラミングするのがなぜダメか書こう。

-マウスの入力効率はキーボードをはるかに下回る。

マウスを動かしてクリックするなんてのは秒間二回できればいいほうだけど、キーボードは秒間十回以上叩けるわけだから入力できるデータ量が全く違う。

-人は言語で思考する。

ここが一番根本的なところで、オブジェクト指向言語であれば主語、動詞、目的語ときちんと言語の構造をなして表現が出来る。スタティックメソッドは命令文にしか出来ず、引数を書き換えたりとか不自然な表現もせざるを得なくなる。

GUIだと文自体が書けない。何をするかを絵で表現するにしてもプログラミングに必要なレベルの正確さには到達できず、文章で説明したらもとの木阿弥だ。文章でないと表現できないような物を書くなら最初から文章で表現するべきなのだ。

 GUIツールのいいところ

-安全

 これはもう絶対に安全。コンパイルエラーや構文エラーがないのはもちろんのことNullPointerExceptionなんかもなくせるしオーバーフローだろうがなんだろうがなくせる。システムが行えることの中からマウスクリックで一つを選択するわけだから間違いようがない。しかし無限ループだけはなくせなかった。SGの物語は無限ループを基本とするので無限ループ自体はエラーではないのだけど、途中にクリック待ちとかがないとStackがあふれて止まる。クリック待ちがあったとしても同じことを延々いい続けるとかになったらおそらくバグなのだけど、大きなスケールで見ればSGのゲームは同じことを延々言い続けるしかないわけでどこで線を引くのかがよく分からない。

 この安全性がバグをなくすのに役立ってくれればいいのだけど、クリックし間違えたりGUIで一画面で表現できる量が非常に少なくて確認に行ったりきたりしなきゃならなかったりで実にバギーな環境だった。これじゃあ無理だと考えてGUIでプログラミングする方向は全部あきらめた。

 プログラミング言語はプログラミング言語でなきゃいけない。言語でないものでプログラミングするのはほとんど不可能だ。UMLをコードに落とすとかそういう方向は全部うまくいかないだろう。なぜかといえばそれが言語ではないから。入力効率の点でも一画面に表現できる情報量にしても情報の正確性にしても人の思考とのマッチングにしてもGUIは言語より劣る。何一ついいところがない。GUI OSがその部分集合であるUnix系とかのCUI OSを駆逐できていないのも結局そこが根本的な原因だろう。コンピュータを操作するなら、マウスクリックより文字列を打ち込んだほうが速くて正確に複雑なことが達成できる。

 しかし文字列だけではinternetは出来ないし絵も書けないし動画もなんもできないんだからGUIの方が自由だし広いことは間違いないのだけど。しかしプログラミングは結局これからも未来永劫言語で行われるのではないかと思う。CUIはGUIの部分集合でしかないにしても、非CUIなGUIにはプログラミングに役立つものがほとんど何もない。