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

緊急の困難なプログラムの開発には、ゼロから開発するのが一番

2008年4月8日

このところ非常に忙しかったのだが、何とか峠を今日超えることができた。 ここまで、1週間もかかってしまった。 つまり、この1週間、このサイトの更新さえほとんどせず、 ひたすらプログラムを作りつづけていた訳である。 どのくらいプログラムを書きなぐったのであろうか。

プログラムというのもいろいろあるが、今回のはシミュレーションプログラムである。 今では、実際に物を試作して検討するのではなく、シミュレーションプログラムを作って 様々な条件を検討して、実際に物を作る、工事をするなどが増えている。 もちろん、実際に物を作るのは非常に金がかかったり、そもそも試作が不可能だったりするからである。 今回の突然降ってきた仕事というのも、そういう類いである。

まあ、何故こんなに急にやっているかというと、 年度末に済むはずの仕事を緊急に片付けるという、救急処理、 ようするに駆け込み寺をやっているからなのである。 駆け込み寺は大変であり、体力的にきついのでやめておきたいところだ。

それでも、最初に内容を聞いたときに、過去の、それも25年くらい前にさんざんやった プログラムを、今時のプログラミング言語で作ってしまうというような内容だったので、 「まあ、できるんじゃない」と年のことを忘れて始めてしまった。

技術計算、それも3次元立体幾何学を使うプログラムである。 3次元といっても、美しい絵を描いて満足するだけのグラフィックスではなく、 ごちゃごちゃと物理学(?)に従って計算しなくちゃいけないのである。 データの量はそれほど多くないことは分ったのだが、 できるだけ詳細なシミュレーションが望ましいのだが、 詳細にするためにはメッシュを細かくする必要があり、急激に計算量が増えていく。

シミュレーションでは、とにかく速度が重要である。 しかし、どのくらいの実行速度になるのか、なかなか予測ができない。 スピードが遅いプログラムは存在するのだが、それでは条件を変更しながら 何度も何度もシミュレーションを繰り返すことができない。 とりあえず、過去のシミュレータの10倍速を最低と思って作り出した。 また、以前のシミュレータは3次元空間を正確に反映していなかったのだが、 そういう点も全部クリアすることにした。

3次元幾何学のプログラミングをやったのは、昭和の終り頃であった。 最初にやったのは、某大学で作ったもので、丁度1980年だった。 何故かその後延々と使われ、結局プログラム開発から、利用が終るまで25年という長寿命の プログラムになったようだ。

3次元幾何学をいっぱい利用して、空間的に重ね合わせるなんてことをやると、 もう人間には結果がほとんど予想できなくなる。まあ、予想が困難だからプログラムを作って 確認する訳だから、プログラムの検証が大変だ。 結果の詳細がわかるように画像になるように工夫をする。 さらに、入力データに対称性を持たせ、出力結果もちゃんと対称になっているか確認する。 そして、入力データの対称性を少し崩し、それに伴って出力結果も少し崩れるか確認する。

そのような、計算が正しく行われているかどうかの確認を何度も行って、 問題がないのをなんとなく確かめたところで、実際のデータを入力していみた。 一番気になるのは、永久ループにでも落ち込んで、いつまで経っても終らないことである。 しかし、非力なノートパソコンでも、ちゃんと数分で終り、 結果を見たら、何となく納得できる内容だった。やれやれである。

プログラムは、実はJavaで作っている。Javaである必要はとくにないのだが、 スピードと、お客のパソコン環境、パソコン初心者のプログラミング能力を考えると、 これ以外の選択肢は難しかったのである。

プログラムは、丁度1週間で、2000行ほど書いた。消したプログラムは含めていない。 プログラムを書くのは本当に遅くなったものだ。 まあ、プログラム以外に、AutoCADを覚えたり、ドキュメントを調べたり、 テストデータを作ったり、結果を検証したり、ミーティングなども考えると、 1日500行程度だろうか。分速1行位。 大胆に400字の原稿用紙に換算すると、1枚20分で書き上げ、1日25枚という 並の作家ペースになるのだろうか。

まだまだやることは沢山残っている。峠を超えただけで、 これから山下りに相当する作業がたくさん残っている。 技術的な困難は少いと思い込んでいるが、ときどき思い込みが外れることがある。 そうならないことを祈って、これから1週間位でおかたづけである。

なお、救急治療とか、ICUとか、駆け込み寺とかは嫌いなので、 そういうプログラムは持ち込まないようにして欲しい。 なお、今回のプログラム開発に関しては、もちこまれた時点でのプログラムは、 実は全然利用していない。利用したのは、様々な資料などだけである。

緊急の困難なプログラムの開発には、ゼロから開発するのが一番だ。

O'Reilly Japan刊

3/14発売
増刷:第3刷決定♪

オープンソース
Scheme言語処理系
Gaucheの愛好者団体

詳細はブログで


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