ホームページ目次1996年前の話次の話

全国的デバッグは超強力

1996年8月20日

今は夏である。暑いので、とても勉強などできないので学校は夏休みにして いるのである。私も、暑くてくたばっているので、コンピュータの難しい技術 について解説している本は全然読んでいない。だから、読書感想文のコンピュ ータコーナーは、最近何も追加していない。

かといって、何も本を買っていないとか、貰っていないとかいうのではない。 もちろん、落ちこぼれになってはいけないと思って、 『LINUXネットワーク管理』 はときどき目を通して、眠気をも催している。その他にも、『256倍』とか、 本は転がったままになっている。雑誌も面倒で読んでないなあ。無知になる一 方である。

さて、先日、私のプログラムの阿呆さ加減がメールで知らされて来た。 『ののぐらむ、お絵書きロジック』 など、色々な呼び方がある、このところ非常に流行していて、ゲームマシン などでもソフトが出ていて、パズル月刊誌のメインである、このパズルを解い てしまうサービスを始めた。

これにより、パズル雑誌を買って来て、問題を入力するだけで、数秒もすれ ば解答がブラウザ上で見る事ができるサービスをしている訳である。いちおう、 このパズルを私に、どの雑誌でも一切取り上げなかったころに私に紹介してく れたA氏に敬意を表して、以下、『ののぐらむ』と呼ぶことにする。もちろん、 世間では、『お絵書きロジック』、『イラストロジック』の呼び名の方が知名 度が高いようだ。

このプログラム、実は非常に単純に作れる。もちろん、解くプログラムであ る。昔々、C++というオブジェクト指向言語らしいものをちょっと練習しよ うとしたとき、本の練習問題などは味気なくて解く気もしなかったので、この 問題を解いてみることにした。確か、私がC++で作ったプログラムの第2作 目が『ののぐらむ』であった。

それで、まあ、いつものように、適当に数時間ででっちあげ、動作確認した。 もちろん、あちこちの雑誌の懸賞問題などを入れてみて、その結果を調べるの である。

「どんな問題だって数秒以下で解けるようだから、まあいいか」

ということで、十分なデバッグもしないで、ただの練習ということで終りに しておいた。しかし、まあ、最近のインターネットブームで、世の中に多数の 『ののぐらむ』の会話型のページが出来てきた。それで、ちょっとやってみる と、本当につまらんのが多くて、うんざりしておった。

そもそも、解答は1つしか存在しないように問題を作成しなければならない のに、複数の解がある不良問題が多数存在している。解のチェックもしていな いんだ。

‥‥‥‥ということなどがあって、それでは、太古の昔に、ほんの練習とし て作成したプログラムであるが、手をできるだけかけない形で、サービスを提 供することにしたのである。それで、C++で作った解くプログラムにデータ を受渡しする部分をperlという、これまた訳の分からぬ言語でちょいと書いて、 とりあえず問題を入力してからボタンを押すと、数秒もすれば解答を見られる ようにしておいた。

すると、日本中のパズルマニアが利用したかというと、そうではなく、パズ ル関係ではなくて人工知能関係の人々がよってたかってプログラムの動きを調 べて下さって、あっと言う間に問題が露呈してしまった。

どういう現象かというと、殆どの場合には、数秒以内で解いてしまうのだが、 ある種の問題を入れられると、延々と考えこんでしまうのである。人間がやっ てもたいして時間が掛からないと思われるようなパターンでさえ時間が掛かっ てしまうのである。

それで、どうしてかと思って調べてたら、重要な検査方法を1つ抜かしてい た。まあ、単純至極、馬鹿な、阿呆なミスであった。背理法による決定部分が すっぽり抜けていた。人工知能、いやパズルのプログラムを組む人間にとって、 これを抜かすなんて、常識では考えられないようなドジであった。

その修理のやり方は、考えるのは1分も要しない単純な常套手段である。し かし、直して、テストして、以前のプログラムも問題無く動作することを確認 したりしていたら、2時間以上費やしてしまった。夏バテか、年のせいか、私 ものろくなったものだ。

さて、昔々BASICコンパイラなんてものをいくつかか作ったことがある。 今から15年程度前の話である。とくに、日電のPC-6001用に私が作成したB ASICコンパイラは驚異的に売れた。確か、当時で4万本売れた。PC-6001を 買った人の数人に一人は買ったことになる勘定だった。

昔のコンパイラは、CDではもちろんなく、フロッピィでもなく、カセット テープでもなく、ROMで売っていた。32KのROMを2個で、8KBのコ ンパイラをセコセコと、Apple-IIにCP/Mボードを差し込んで作った。良く熱暴 走するので、蓋を開けて、強力なファンを載せて強制冷却したり、接触不良も 頻発していたので、ときどきひっぱたいたりしながらの開発であった。まあ、 当時は、どこもそんなものだった。

それでも、何とか完成し、発売にこぎ着けた。ROMによる発売だから、テス トは十分にしておかないと危ない。それで、個々の命令のテストはもちろん、 既に手元に有った多数のプログラムを使ってテストを行なった。

そして、大々的に発売したのである。バグではないかという質問も多数来た が、全て利用者の誤解であった。、ついに、本当の バグが1つやってきた。

最近はBASICを全然やっていないので、全くどうなっているのか知らないが、 当時のBASICは、各行の先頭に行番号があり、その後に命令が続いていた。コ ンパイラであるから、各行を解釈して、マシン語に変換していたのであるが、 行の解釈を間違えていたのである。行番号の後ろには、必ずスペースが1個以 上入ると思い込んでいたし、手元に集まってきたソフトは、どれも行番号と命 令部分との間にはスペースがあった。

間にスペースさえ入れればコンパイルできるのであるから、たいした問題で はないといえばそうなのであるが、世の中そうはいかないのである。自分では 何も作らず、文句ばかり言うのがいっぱいいるのである。人の些細なミスを派 手に宣伝しまくるのが大勢いるので、マニュアルで逃げることにした。つまり、 マニュアルに、

行番号の後には、かならず1つ以上のスペースを入れること

としたのである。卑怯ではあるが、ROMを使っているので、交換などしようと すると黒字が赤字に転落してしまうのである。

まあ、そういう訳で、非常に多数の人に利用してもらい、トラブルを指摘し てもらうのが一番である。何でもそうであるが、自分一人でやっても、どうせ ろくなものはできない。

公開こそ最高のデバッグである。


ホームページ目次1996年前の話次の話