(47)
ソフトウェアと石
── 創造と発掘について
◆石を磨く
石を磨くことを趣味としていた頃があった。
自分でも意外だったのだが、この“石を磨く”ということが存外私の性格には合っていたらしい。それを経験したのは26〜7年ほど前、アリゾナ州にあるH社に長期出張していたときのことである。
H社内にある、石を磨く同好の士が集まる“ロックハンティング”のクラブに何となく入会してみたのである。石について特段の予備知識があった訳ではなく、仲間に誘われたのが入会しようと思い立った直接の動機である。仕事に忙殺される毎日ではあったが、折角アメリカに来たのだから何でも色々と経験してみたいというのが最初の気持ちであった。
クラブの正式な名前は、Pebble Pickin' Posse(略してPPP)と言った。“石拾い軍団”というくらいの意味であろう。当時の会長はエド・ケーシーという男で、小柄で人の良い西部男だった。彼は日本から出張してきている東芝の人達と仕事の上でも関係が深かったので、それが切っ掛けで多くの東芝マンが入会していた。私はその中の一人であったに過ぎない。私よりも熱心に活動していた東芝マンが他にも沢山いたと記憶している。
石を磨くといっても、機械を使って石を切断しその断面を磨くのである。日本に多い水成岩と違ってアリゾナの石は美しい。これこそ本物の石という感じなのである。その誕生の際に過酷な大自然の力で形作られたからであろう、断面が色鮮やかで美しい紋様がある。この断面に水をかけると色鮮やかな紋様が浮き出てくるが、乾くと直ぐに薄く消えてしまう。しかしその断面を時間をかけて鏡の面のように磨きあげると、水を付けなくても何時もその綺麗な紋様が見えるようになる。石というのはそういう性質を持っているらしい。
一口に石と言っても色々な種類がある。アリゾナという土地はまさに石の宝庫なのだ。小さいものは宝石に類する貴重なものから化石などの大きな石まで、凡そ石と名の付くものなら何でも磨く対象となる。そうやって磨いた石で、ボロタイ、指輪、ブレスレット、タイピン、置物などを作るのである。断面の不思議な紋様を利用して絵画(?)を作る場合もある。
![](images/rock5.jpg)
私は主にタイピン、ブレスレット、ボロタイなどを作った。ボロタイというのは長円形の飾り(これを石で作るのである)に長い紐を付けた簡単なタイで、西部ではこれさえ身に着けていれば、公式の場に出ても服装の面では絶対に恥をかくことがないという便利なものである。
休みの日になると私はケーシーの家のガレージ裏にある作業場に入り浸って、ひたすら石を磨くことに熱中した。そこにはPPPメンバのために石を磨くための道具類一式が用意されていて、メンバなら誰でも自由に使えるようになっていたのである。石の採取には月に一度程度の割合で催されるPPPメンバによる日帰り旅行があったのだが、私は子供が小さかったこともあり滅多に参加することはなかった。アリゾナの原野に石の採集に行くよりも、磨くことの方が私には数段面白かったのである。
石の採取旅行に参加しなくても、石はどこででも手に入れることができた。ちょっと町から外へ出れば、“XX STONE SUPPLY CO.”とか“XX GEM AND ROCK SHOP”などという看板を掲げた石を売っている店がいくらもあったからである。そういう店で、適当な大きさの石を買ってきては機械で切断してみる。美しい断面が得られるかどうかは一種の賭けである。石屋の主人に「これは掘り出し物だ」といって勧められてもそのまま信じてはいけない。切断してみるとたいしたことはなかったりするのだった。既に切断されて適当な大きさにスライスされたものも売っていた。私のような初心者にはそういうのを買ってくるのが無難なところであった。
石を切断するには蓋のついた大きな釜のような機械があって、その中に石をセットし油を流しながら時間をかけて少しずつカットする。切断している最中は油が飛散しないように蓋がされているので中の様子は見えない。両手を油まみれにしながらも、どんな断面が得られるかと期待しながら待つのは実に楽しいことだった。
石の断面を磨くには、今度は油ではなく水を流しながらグラインダーで磨くのである。表面の荒さによって各種のグラインダーを使い分ける必要があった。グラインダーから飛び散る水で上半身をぬらしながら、私は時間の経つのを忘れて取り組んだものである。これが一番時間と根気がいる作業なのだ。私は、ひすい、ガーネット、オパール、タイガーズアイ、前カンブリア紀の生物の化石や恐竜の化石などを磨いてボロタイやブレスレットを作ったりした。恐竜の化石など掃いて捨てるほどあったのだ。
H社の社内新聞にPPPサークルの紹介記事が出ることになったとき、会長から各メンバに対して一番の自信作を提出するようにとの話があった。良い作品を集めて写真に撮って掲載するのだという。私は迷わず前カンブリア紀の生物の化石で作ったボロタイを出すことにした。これを見た会長のケーシーは“エクセレント!”と言って褒めてくれた。仲間が言うには“Excellent”というのは最高の褒め言葉なのだそうである。そうであろう。そうであろう。
![](images/bolotie2.jpg)
妻は私が石磨きに夢中になっているので呆れてはいたが、特に反対はしなかった。彼女にとっても石に関心がなかったわけではないからだ。女性にとって“石”といえば、宝石それもダイヤモンドに強い関心があるものなのである。
あるときPPPメンバの夜の集まりで、ダイヤモンドについての講座が開かれることになった。メンバの家に専門家を呼び、石についての知識を勉強する会が定期的に開かれていたのである。テーマがダイヤモンドであることを知った妻は、私に是非とも参加するようにと勧めるのであった。私は別にダイヤモンドなどに興味はなかったが、そう言われて仕方なく参加してみた。そしてそこで、私はダイヤモンドの品質についての基礎的な知識を得たのである。
それまでダイヤモンドといえば、重さを表す単位のカラットの値が大きければそれだけ価値があるのだと私は単純に思っていた。しかし本物のダイヤモンドの価値は重さや大きさにあるのではなく(それもあろうが)、やはり石の透明度にあるのだということをこのとき初めて学んだのであった。「VVS1」というのが透明度に関する最高級の品質を表す等級なのだそうである<*1>。カラットの大小ではなく透明度に注目すべきなのだ。“VVS1”である。忘れまいぞ。
【注】<*1>ダイヤモンドの品質は、カラー(Color)、透明度(Clarity)、カット(Cut)、カラット(Carat)の4つの“C”で決まる。透明度の程度には VVS1 の更に上に IF, FL という等級があるが、これらの品質のものが一般の市場に出ることは希であるという。
|
そこで私は、帰国する前に例の“ROCK SHOP”の一つへ行って最高級の品質の“本物”のダイヤモンドを購入してみようと考えた(実は、妻に急かされたのである)。以前から通い慣れていたその店は大きいけれど決して立派ではない。小汚ないといえるくらいのそんな店で、高い買い物をしても大丈夫かという不安は正直のところあった。しかし、えい、ままよ、と買うことにしたのである。しかし値段はびっくりするくらい安いものであった。と言っても私にはどのくらいが高くて、どのくらいが安いのかさえ分からないのである。安いというのは妻の率直な感想であった。
店の主人は私が注文したそのVVS1という最高級の品質の石を無造作に白い紙に包んで手渡してくれた。紙の中央にダイヤモンドを無造作に置き、こな薬を紙に包むときの要領でそれを折り畳んで渡してくれたのである。本当に高品質のものをくれたのかと若干の不安はあったが、彼等がそんな不正を働く人達でないことは既にそれまでの付き合いで分かっていた。帰国後この石で指輪を作ったところ、制作を依頼された知り合いの宝石店の主人が「よい石ですね〜」と言ってくれたから、多分品質に間違いはなかったのであろう。
◆ロックハンティング
“石磨き”などというと日本では女性のやる趣味のように思われ勝ちであるが、アリゾナでは決してそのようなことはなく、立派に男性のやる趣味なのである。いや「女性には無理」と表現した方が正確かもしれない。前述した通り、石を磨く作業は油まみれ水まみれ(?)になることを覚悟しなければならないほど大変なものであるが、石の採取はもっと大変で、男性のやるスポーツという感覚なのである。まさに“ロックハンティング”という呼び方がぴったりする。
私も一度だけ、石の採取旅行(これをPPPトリップといった)に参加したことがあった。毎月のPPPトリップに熱心に参加し、いろいろな化石を採取してきた仲間がいて、そういう石を見せられた私はうらやましくてたまらなかったのだ。それで、私もそういう石を取ってみようと思い立ったのである。
リーダーの車に続いて参加者たちはそれぞれの車を連ねて砂漠の中の岩山へと分け入るのであるが、当然、道は舗装されていないままのひどいところなので土煙りが凄まじい。前の車が巻き上げる土煙りで全く視界が利かず、真っ昼間だというのに後続車はライトを点けて前車の尾灯を見失わないようにしてついていくのである。道をはずして谷に転落したりしないよう、随分と神経を使ったものである。西部劇映画によく出てくるシーンに、カウボーイ達がネッカチーフで(銀行強盗がよくやるように)顔の半分を覆って牛の群を移動させている場面がある。あれはこのような土埃(つちぼこり)を避けるためには必須のものだったのであろう、とそのときふと思ったりした。
そうやって悪戦苦闘の末に岩山を抜け広い草原に出ると、そこに目指す獲物はあった。草原の一角に大きな岩が一つぽつんとあるのだ。俵二つ分くらいはあろうかというその大きな岩が全部瑪瑙(めのう)なのである。石の採取にきた連中が代る代わるにこの石を砕いて持って帰るのであろう、ハンマーで挑戦した跡がいたる所に付いている。私も彼等の真似をしてハンマーを借りて挑戦してみたが、期待に反してハンマーは跳ね返されるばかりであった。私のひ弱な力ではびくともしない。精々表面が削ぎ取られる程度である。
側で見ていたアメリカ人の仲間の一人が「こういう風にやるんだ」と言って、私に代わってハンマーを握って力強く降り下ろす。すると見事に岩は打ち砕かれ、彼は大きな石の破片を数個手に入れたのである。彼は「どうだ」といわんばかりの表情をする。なるほど、なるほど、見事な腕前である。
私は、彼が少しは私にも分けてくれるのではないかと内心密かに期待していたのだが、それは空しいものであった。
日本だとこういう場合、フェミニスト振りを発揮して女子供や力の弱い者のために代わって取ってあげようという者が必ず出てくる。しかしアメリカでは、欲しい物はすべて自力で獲得する習慣になっているのである。私はそこらに散らばっている石の破片で満足するしかなかった。そして、これは普段食べている物の違いであろうとひとりごちた。インスタントラーメンとビフテキの違いはこういうところに出てくるのであろうと、悔しいけれど思ったのである。
“石拾い軍団”の一行は更に進んで、ちょっとした崖に出た。見上げると崖の中ほどに穴らしきものが見える。どうやらそこに良い石があるらしいのだ。10メートルほどの高さであるが、そこへ登って行って石を取ってくるのである。穴はそうやって石を取った跡らしいのだ。私は早々にパスすることにした。
石を取るには、崖を登らなければならない(これは多分、私にもできるだろう)。そして両足の位置をしっかりした岩の上に確保しなければならない(これもできるだろう)。その上で左手で手近な岩を掴んで身体の安定を保たなければならない(これも多分、できるだろう)。一方、右手はハンマーを持つために空けておかなければならない。よろしいか、私の体勢が十分に思い描けたであろうか。この姿勢で獲物に立ち向かうのである。
私はこの方法には根本的に問題があることを、賢くも素早く見抜いたのであった。非力な私がハンマーを振り下ろし、もし運良く岩を打ち砕くことができたとしても、石の破片をどうやって確保したらよいのか? 放っておけば石は落下してどこかへいってしまうであろう。振り下ろしたばかりの右手で素早くそれを確保するしかない。そんな早業が私にできるだろうか。多分私は身体全体で落下しつつある石の破片を受け止めようとするであろう。そしてそれに失敗して石は無情にも落下していって行方不明になることであろう(目に見えるようだ)。もしその石の破片が大きいものだったら、欲張りな私は我を忘れて左手で掴もうとするに違いない。いや、左手ではなく両手で(!)掴もうとするであろう。自分の命と石の破片とどちらが大切か天秤にかけるのも忘れて、それくらいのことはしかねない私である。パスしたのはそれこそ冷静で妥当な判断というものであろう。
◆本物のカウボーイ
結局、石の採取ではたいした収獲もなく旅行は終ってしまった。しかし最大の収獲は、その代わりに本物のカウボーイを見ることができたことである。あの西部劇映画によく登場するカウボーイは実は本物ではない。単なるエキストラであろう。アリゾナの砂漠で牛を追っている正真正銘の本物のカウボーイを見たいと、私はかねがね思っていたのだ。
実は私は昔から西部劇映画が大好きだった。あのジリジリと焼け付くような太陽の輝き、透き通るような紺碧の青空、巨大なサボテン、カラッとした空気。日本の梅雨時になると何時も思ったものだ。あのようなカラッとした空気のところに住んでみたいと。しかし今や私はその西部劇の本場に来ているのだ。ここで本物のカウボーイを見ないで何とするのか。
我々“石拾い軍団”の一行が林の中で休憩しているとき、そのカウボーイの一団が通り掛かったのである。林の中の道を、5〜6頭の馬にそれぞれ跨がって進んできたのをカウボーイハットの形から目敏く見付けた私は、胸がドキドキしたものである。何しろ本物なのだから。最初、彼等の姿は林の中の暗がりでシルエットのようにしか見えなかったが、たちまちの内に私の目の前に迫ってきた。道を避けて見ていると、赤銅色に日焼けした横顔を見せながら、彼等は私などには一瞥もくれずに通り過ぎていく。カウボーイハットを被り、中にはローハイドを着けている者もいてこの上なくかっこいい男達ばかりである。何しろ本物なのだから。
彼等は少し先の草原で、集めた小牛の睾丸を切り落とす作業を始めた(これにより、bullが性質のおとなしいoxになる)。何の感情も交えずに機械的にやっているその姿を遠くから眺めながら、私は残酷な行為だとは思いつつも本物のカウボーイを見たという興奮の方が強く、もはや石の採取などどうでもよいという気持になっていた。ただ残念だったのは、本物のカウボーイの写真を撮ることができなかったことだ。そのときのPPPトリップでは、私は不覚にもカメラを持ってこなかったのである。欲張りな私は沢山の石を採取することを想定して、抜かりなく両手をフリーにしておく道を選んだのである。その結果カメラは邪魔だと判断してしまったのだ。抜かったものである。
アリゾナでは、馬に乗っているからといってそれが本物のカウボーイであるとは限らない。よくカーニバルとかフェスティバルとかのお祭りが催されると、楽隊と馬に乗った一団が目抜き通りを行進することがある。そういうとき、私は真っ先に家族連れで見物に行ったりしたものである。
あるとき見物している最中にガスステーション(日本では、ガソリンスタンドという)のトイレを利用したことがあった。私がトイレから出てくると、入り口の所に金髪の美女が立っていてニッコリと私に笑いかけてきたのである。そして、これを預かってほしいと言って私に紐を差し出すのであった。その紐の先には、何と馬が繋がれていたのである。紐と思ったのは馬のたずなだったのだ。彼女と馬はパレードで行進している最中だったのであろう派手に着飾っている。
びっくりしている私にたずなを預けると、彼女はさっさとトイレに入ってしまった。否応を言っている暇などあらばこそである。馬とともに一人取り残されたときの私の不安な気持ちが分かってもらえるだろうか。いまだかつて一人で馬のたずななど持ったことのない男がいきなり持たされたのである。
長い人生のうちには予期せぬことがしばしば起こる。特に出張などで海外に出る機会が多いと、生活習慣の違いなどから思わぬ失敗をやらかしたり予期せぬ出来事に遭遇したりする。性格的にかなりタフでないと、そういうのを乗り切っていけない場合もある。しかし「予期せぬ」とは言っても、大抵は心のどこかに準備ができているものだ。私は海外で自動車事故に遭った経験があるが、そのときでも、事故には気を付けようと普段思っていたので頭の片隅には事故に遭ったときの対応の仕方くらいは当然インプットされていた。しかし馬のたずなを持たされたときの対応の仕方はインプットされていなかった。頭の片隅のどこを捜しても、記憶のひだ(もし、そういうものがあればの話だが)の間を捜しても何も見付かりはしなかった。私にとってはまったく予期せぬ事態だったのである。目の前に見る本物の馬の圧倒的な大きさ。馬体から照り返されるように感ずる馬の熱い体温。馬が動かないようにと念じながら、私は唯ひたすらたずなを持って彼女の帰りを待ち続けるしかなかった。
馬はじっとおとなしくしてくれているが視線は私を見詰めている。馬は乗り手の実力を直ぐ見抜くというが、たずなを持っているだけの男の実力も見抜けるのだろうか、などと考えているときに救いの神は現れた。一人の男性がやってきて「私が預かってあげましょう」と言ってくれたのである。多分、私がへっぴり腰で怖そうにしている様子を見かねたのであろう。私はこれ幸いと、その男性にたずなを渡してほうほうの体でその場を離れたのであった。
しかしその後で私は考えた。あれは彼女の仲間だったのだろうか。いや、もしかすると馬泥棒だったのかもしれない。あそこは毅然と断って彼女の戻るのを待つべきだったのではあるまいか、などとそのときのことがウジウジといつまでも頭を去らないのである。20数年を経過した今でも心に引っ掛かるものがある。もしかすると「日本人に馬を預けたら、盗まれてしまった」と言っている金髪の女性が今でもアリゾナにいるかもしれない。もしそうなら、日米親善の観点からもこれは由由しきことだと思うのである。
このように、アリゾナではどこにいても馬に出会うことができる。したがって馬に乗る人は多いのだが、本物のカウボーイには滅多に出くわさない。それに出会えたのであるから私は幸運だったというべきであろう。
このようにして私は石にしろ、カウボーイにしろ、馬にしろ、本物というのは予想外に凄いものだということを実感したのであった。
◆創造と発掘
ところで、これまで私は芸術的な趣味として絵画、書道、彫刻、版画、陶器、篆刻など色々なことをやってきた。そのでき上がりが本物の芸術と呼べるかどうかは別にしても、これらの行為が無から有を作り出す創造活動であるという点では誰も異論をとなえないであろう。しかしアリゾナで覚えたこの“石を磨く”という趣味は、そのいずれとも少し性質を異にしているように思える。無から有を作り出すという点では多分同じようなものかもしれないが、石を磨くというのは、もともと自然の中に存在していた石の紋様をただ人間の目に見えるような形にしただけのことなのである。私が作り出した紋様ではないのだ。本来、太古の昔からこの世に存在していたものを、たまたま私が発掘して日の目を見させただけのことなのである。
絵を描いたり、彫刻したりする創造的な活動とは違い、これは発掘活動なのである。創造と発掘というのは、ちょうど発明と発見の違いに似ているのではないかと思う。“発明”に対応するのが無から有を生ずる“創造”であるとすれば、“発見”に対するのは、適当な言葉が思い浮かばないので、ここではとりあえず“発掘”と呼ぶことにしよう。私は、石を磨くという行為は創造性の強い“発掘”ではないかと思う。
ソフトウェアの分野におけるプログラム開発作業は、この意味では高度に“創造”的な行為であろう。この世に存在しないプログラムコードを、ゼロから作り出すというのは、まさに創造活動そのものである。ハードウェアも含めたコンピュータシステム全体が発明と創造の産物なのである。
しかし私は、プログラム作りにおいても、時として“発掘”行為ではないかと感ずることがある。そう聞くと、読者の中には早とちりの人がいて、墓の盗掘を思い出し、他人のプログラムを盗作することを想像した人がいるかもしれない。そうではないのだ。私が言いたいのはこういう事である。
プログラム作りという行為は、そのプログラムが支障なく動作すれば、それですべての作業が完了するというほど単純なものではない。単にプログラムの虫をつぶすだけではなく、実行性能やプログラムサイズを考慮して更に改良を重ねる必要がある。一応、動作したプログラムであっても、さらに1ステップでも短くしようと何度も何度もプログラムを作り直すのである。保守性を考慮して読みやすい美しいプログラムに整形し直すこともある。そう、まるで“石を磨く”ようにプログラムを磨き上げるのである。
そうやって一つのプログラムを様々な角度から見直し、磨き上げ、精製に精製を重ねる作業を経た後で、初めて完成されたプログラムとなる。そのようにして完成したプログラムの中には、これ以上改良の余地がないほど見事で、完璧なプログラムというものが存在する。
プログラムとして本来あるべき姿になって、これ以上のコードの改良は最早あり得ないほどのプログラムになる。そういったプログラムは、後で見直してもどこにも手直しの必要がないと思うほどの完璧なでき栄えであることが多い。いや、少しでも変更したら全体が台無しになってしまうと思えるほどになるのである。
しかし、そういうプログラムを作れる機会は、そう滅多にあるものではない。それだけに、そのような見事なプログラムを作り上げた後では、何か不思議な力が働いて自分がそのプログラムを「作らされた」と感ずることがある。元来、存在していなければならなかった物を、遂に自分が「掘り当てた」という風に感じるのである。多分これは、経験しないとなかなか理解できないことであろうが。
プログラム作りではなく文章を書く場合でも、同じような経験ができるのではないかと思う。推敲に推敲を重ねて苦心惨澹の末に作り上げた文章を、数年後に読み返してみたとき、そのとき自分の頭に浮かぶ文章と寸分違わぬ同じ文章がテキスト上に展開されていたという経験はないだろうか。自分の気持ちを余すところなく表現していて、どこにも手直しの必要を感じない。そういう(自分にとって)完璧な表現になっている文章に出会ったことはないだろうか。私にはそういう経験がときどきある。そういうとき、その文章を「掘り当てた」と感ずるのである。
コンピュータの歴史を振り返ってみるとき、初期のコンピュータの入力プログラム(イニシャルローダーなどと呼ばれた)には、そういう見事なプログラムというものがあったように思う。これら先人の作品を「発掘されたもの」と呼んでは開発者に対して失礼ではあるが、それが古典ともなりうる見事なプログラムであることは衆人の認めるところとなっている。
最近の若いプログラマの方々には、一度でよいからそのような“発掘”された“本物”のプログラムを味わって読んでほしいと思う。小さなプログラムではあるが、本物の“凄さ”を知ってほしいのだ。最近のプログラムは大きさで凄さを発揮しているものばかりだから。
◆私が掘り当てたプログラム
自分の作ったプログラムを例にあげるのはちょっと気がひけるけれど、私にもそのような自信作がいくつかあった。読者の理解しやすいように比較的簡単なプログラムを例として、この「掘り当てた」という感覚の実態を説明してみようと思う。
その昔、入力機器として紙テープ読取装置(紙テープリーダー:PTRともいう)が主流で使われていた頃のことである。
新たに高性能の紙テープ読取装置が開発され、その入力プログラムを私が作ることになった。紙テープ上の7ビットコード<*2> を読み込んで、6ビットの内部コードに変換するのである。コンピュータ内で扱われるコードとしては当時はまだ6ビットコードが使われていた。したがって、英字は大文字/小文字の区別がなくすべて大文字に変換することになっていた。英数字と特殊文字、それに若干の制御コードを読み取り、その他の文字は読みとばせばよい。話は実に単純だった。
【注】<*2>パリティーコードも含めると8ビットのコードになる。
|
私の作った入力プログラムは難なく動作したが、カタカタと音をたてて紙テープを読み続けている内にときどきリードミスを起こすことが分かった。原因を調べてみたところ、1文字読んではカタッといって止まり、また1文字読んでは止まりを繰り返している内に紙テープを送るスプロケットの穴の位置が次第にずれてくるのが原因であると判明した。高速の読取り性能が逆にあだとなったのである。
上司とともにハードウェア部門へ行って、紙テープ読取装置の設計担当者と解決方法についての話し合いが持たれた。しかしハードウェア側ではどうにもならないという。結局ソフトウェア側で何とかせよということになってしまった。昔からこういった類いのトラブルの対処責任は、必ずと言っていいほどソフトウェア側に来てしまうものなのだ。これは昔も今も変わらないことであろう。
問題の解決を一任されてしまった私は、そこでない知恵を絞って大いに悩むことになったのである。そしてそのあげくに、次のようなことを考えた。カタカタと音をたてないようにするには、1文字読んだ後で紙テープ読取装置がストップする前に、再び次の文字を読んでしまおう。頻繁にストップすることがないようにすれば、カタカタといわなくなってリードミスが起こる確率も減るであろう。そこで紙テープ上に改行文字が現れるところまでの1行分を、一気に読み込んでしまうことにした。今なら、入力バッファを保持していて1行分をまとめて読み込むのなどは常識である。しかし当時のコンピュータはCPUのスピードが遅いので、必要になる都度1文字ずつ読むという方式が普通だったのである。
そういう1行読みの入力ルーチンを作ってはみたが、どうしても一定時間内に次の文字を読むことができない。紙テープ読取装置はカタカタと音をたてて、無情にもリードミスを起こしてしまうのであった。う〜む、これは思ったほどには簡単にいかないぞ。
コード変換を行う場合、実は7ビットコードの下6ビット分を取ればそのまま内部コードとなるものがほとんどなのである。限られた数の特別な文字コードだけを抜き出してコード変換すればすむ。後は制御コードへの対応と入力バッファに並べる操作だけである。したがって、いくつかの条件分岐があるだけで変換アルゴリズム自体は極めて単純なのである。しかし、各命令の実行速度が書いてある表と首っ引きでいくら計算しても、どうしても時間内に1文字の変換操作が終わらない。
結局、様々な条件分岐を重ねている内に時間を消費してしまっていることが分かった。そこで、条件分岐を減らすための工夫として、すべての文字コードを例外なくコード変換するという方法をとることにした。と言うのは、それまでの方法はコード変換の必要なものと必要でないものとを先ず分け、次いでコード変換の必要なものから制御コードを区別し、‥‥という具合になっていたのである。
ここで私はコード変換の極意を自然に体得した。例えば1文字だけコード変換が必要で残りはすべて変換なしの場合であっても、すべて変換ありのルートに乗るようなアルゴリズムにしてしまえばよいのである。変換するふりをして、全く同じコードを生成すればよいのだ。これにより、変換アルゴリズムは極めて単純になり、かなりの数の条件分岐が不要となって時間の節約になった。あとは制御コードの処理と、バッファ操作だけに時間を使うことができる。
コード変換には、多少メモリは食うが表を使うことにした。文字コードの値で表を参照することにより一挙に変換するのだ。実に単純でプログラムとしては面白味に欠けるが、これこそがコード変換の極意なのである。これにより変換速度は格段に速くなったが、まだ紙テープ読取装置の性能には追い付かない。もう一歩のところまで来ているのだが。
こうして色々と悩んでいる内に、私は分岐命令の実行時間の表から不思議な性質があることを発見した。条件分岐するときに用いる分岐命令というのは、ある条件が成立したときは指定した別の番地の命令へジャンプし、成立しないときは次の命令へ続くようになっている。この分岐命令を調べてみると、どれも条件が成立しない場合より、成立してジャンプするときの方が実行時間が速いのである。なぜそうなっているのかは分からない。
私は早速この性質を利用してみることにした。時間の掛かる処理はすべて条件ジャンプする先の方に置くようにし、全体を大掛かりに作り直すことにしたのである。このようにして作り上げた新しいコードで時間計算をしてみると、どのルートを通る場合でもすべてドンピシャリのぎりぎりの時間内で処理を終了できることが分かった。う〜む、いいぞ、いいぞ。
実際にプログラムを作り紙テープ読取装置で試してみると、うまくいくではないか。紙テープは改行コードの位置まで1行ずつ、スパッ!、スパッ!と音もなく読みとられていく。実に心地よい切れ味である。リードミスも全く起こらない。私は、遂にやったぞと心の内で思った。しかしそんなことはおくびにも出さぬのがプロというものである。
いや「プロというものは‥‥」なぞといばる積りはないのだが、何となく人に話す気にならなかったからである。と言うのは、私は独力でこれを完成させたけれど何か自分一人で作ったような気がしなかったのである。高速の紙テープ読取装置の性能といい、分岐命令の実行時間に関する特別な性質といい、舞台装置が揃い過ぎている。あの命令とあのコードの組み合わせがなければ、決して越えることができないように、あらかじめハードル(紙テープ読取装置の性能)が設定されていたように感じたのである。すべてがちょうど頃合のところに設定されていたのだ。後でプログラムを見直してみても、どこにも改造すべき場所が見当たらない。このようにコード化するしか解決の方法はないのだ。誰が何度やっても必ずこういうコードにしかならない。これは絶対に、誰かに作らされていると感じたのであった。
「誰かに作らされた」などと表現すると、何か神がかり的に聞こえてしまって、天才音楽家が自然にメロディーが浮かんできて名曲を作ってしまったという話に似てくる。しかし私の場合は決してそのような立派なものではなく、本来自分のやるべき仕事をやらされたという感じなのである。
私は当然存在しなければならない入力ルーチンを単に掘り起こしただけなのだ。分岐命令の時間的特徴を発見したのですら、別に自慢すべきことではない。もし発見できなかったら、単にコンピュータの命令を十分に使いこなせなかったドジなプログラマがいたということになったのであろう。ドジなプログラマがいて、使い物にならない紙テープ読取装置が存在したというだけのことで、すべてが終ってしまっていたかもしれないのである。
当時の私がこれを“発掘”という便利な言葉(?)で理解していたかどうかはあやしい。しかしこのような考え方をすることは、私のような孤独なプログラマにとっては救いだったのである。解決策のない難しい問題に直面したとき、どこかに解があると信じて取り組むことはどんな場合でも大切なことである。どこかに真の解決策が存在していて、自分は何とかしてそれを発掘するのだという風に考えていれば、どんな難題に直面した場合でも決して挫けることはなかったからである。
もっとも、プログラマとしての私が、最初からこのような考え方ができた訳ではない。後から振り返って見たとき「作らされた」と感ずるような良いプログラムを何度も開発するという経験を積み重ねた後で、やっとこのように感ずることができる境地に至ったというのが正確なところであろう。
“倉庫番”という名の有名なコンピュータゲームがあるが、あれも解があると信じているから長い時間をかけてでも挑戦しようと思うのである。解の存在が保証されていなければ、馬鹿らしくて誰も挑戦しなくなるのではなかろうか。あれと同じことなのである。
最近はプログラム作りの方法も変わってきて、時間をかけて“名人芸プログラム”を作るよりも、時間をかけずに虫のない安定して動くプログラムを早く作る方が重視されるようになってきている。この考え方は、私が主に携わってきた基本ソフトウェアの分野のプログラムと、一般利用者の作るアプリケーションプログラムの分野とでは、当然異なる見解になろうが、全体的な風潮となりつつあることは確かである。
プログラムというものは、とにかく虫がなくてトラブルなく動けばよい、多少冗長でも早く使えるようになった方がよいという考え方は、オブジェクト指向技術の進展にともなって、益々その傾向を強めていくことであろう。
これからは“発掘した”と感ずるような名プログラムは、生まれてこなくなるのではないかと思う。本物は、益々少なくなっていくようだ。残念なことである。■
【良いプログラムとは】
・利用者にとって良いプログラムとは、
無料で使えるプログラムのことである。
・開発者にとって良いプログラムとは、
クレームの来ないプログラムのことである。
・保守マンにとって良いプログラムとは、
トラブルが発生しても直ぐ利用者ミスが原因と判断できるプログラムのことである。
(1996-12-02:掲示、1998-5-1:削除、2007-3-1:再掲示)
|