ぼくのC挫折記 (下)

                   第五回

 コピーのような基本中の基本をすぐサポートに問合せるのも間抜けな話だし、何事であれ、一通り自分で調べた上で教えを乞うのが礼儀というものだ。翌朝女子社員に基本的な使い方を伝授してから、OSのマニュアルをめくって、まあじっくり勉強しようと呑気なことを考えていた。ところへ「あの、Hさん、パソコンが動かないんですけど」と、ビックリするようなことが耳に飛び込んできた。

 そんなバカなと思いながら行ってみれば、なるほどウンともスンともいわない。システムディスクを挿入し直してリセットしても、読み込み不良を起こしてストップしてしまうのである。ふとある考えが浮んで、5インチのディスクを取り出し、センター・ホールの内側に指をかけ、ゆっくり円盤を回してみると……はたせるかな、くっきりと浮んでいたのはハンドクリームをたっぷり含んだ指紋であった。

「え? そこさわっちゃダメなんですか」

 はい、ダメなんです。テレックスを打つのはちょっと待ってね。残るは予備の1枚だけだから、 あわててマニュアルを調べると……あった、あった。COPYDISK というコマンドがみつかった。予備ディスクにプロテクトシールを貼って、さっそくバックアップを2枚作成したことはいうまでもない。

 OSのマニュアルの基本編はわりと親切に書かれていたから、重要なコマンドはすぐに飲み込めた。CP/MとMS−DOSは親子みたいなものだから、後に98を買った時にさほど困らなかったのは一種の先行者利益 (?) かもしれない。苦労したのはエディタである。 CP/Mの基本エディタは ED だが、これは EDLIN みたいなもの。 わが社のはCP/Mの68Kバージョンで、ED に毛のはえたようなSE というエディタも付属していた。

 手元に残っている Help for the Screen Editor を見ると(なぜかディスクに収録されていたドキュメントはほとんど英文)、 う〜むこりゃやっぱり EDLIN の親戚にちがいない。これに比べたら、MIFES や Vz はパラダイス、鼻歌まじりで盆踊りというくらいラクチンである。このありがたさは苦労した人間にしか分るまい……と思ったら、テレックスの話と一緒で、「冗談じゃありません。ディスプレイで作業できるだけでも贅沢な話です」という元プロの方のお話を聞いてギャフン。

 結局一番使いやすかったのは、BASICの特殊編集モードのエディタであった。なにしろ文字列の検索・置換・複写までできるんだから、無敵艦隊みたいなものである (笑)。おまけに SORD 製のこのBASICは、IF...END IF や CASE 文も使えたから、いくらタコなぼくにも、そのありがたさはすぐに理解できた。こういうのを「高級」言語というんだなあ、と感心したものである。


                      第六回

 CP/M上のBASICではいくつかプログラムを作成した。船舶の入出港データを管理するプログラムは、つぎはぎだらけとはいえ、X社の方にも評価していただき、まずは初級合格程度の出来に仕上がったと思う。そのプログラムは文字どおり活用した。このあたりで気をよくして、だんだん深入りするのがお決りのコースなのだろう。

 残念なのは、そのデータが現在死蔵されていることだ。MS−DOSマシンであれば……とくやしい思いがする。大規模な会社の膨大なデータであれば、「くやしい」ではすまされないに違いない。データの継承という点を視野に入れなかったのは、やはりぼくの知識不足であった。人は失敗しながら学んでいくものだというのは本当だ。

 さて、つまずきながらもようやくBASICになれてみると、気になったのがCコンパイラの存在である。Sさんに、BASICで十分じゃありませんかと忠告された時、ぼくはこう答えた。

「せっかくあるんだから、一度使ってみたいんです。簡単な四則計算ができる程度でいいと思っています。Cの概念くらいはつかめるでしょうから」

 事実そのつもりだった。ある程度の段階に達すれば、よほどのうぬぼれ屋でないかぎり、おのれの力量のほどは見当がつく。ものになりっこないとは承知しているのだが、目の前にボタモチがあるのに、指をくわえてながめているのはつらいものだ。難解なマニュアルを読むのはウンザリしたが、やはり誘惑には勝てず、Cへの挑戦が始まった。

 しかし、予想以上にCは手ごわかった。BASICには基本編・応用編の2冊のマニュアルが付属していたのに、Cには基本編がなかった。マニュアルは雑然とした内容で、最後の方にライブラリ関数の仕様が簡潔に書き連ねてあるだけ。「ユーザがすでにCの基本をマスターしている」ことを前提としていると明記されていた。予備知識のないユーザは、まず『プログラミング言語C』を参照せよというのである。

 ここからは喜劇といおうか悲劇といおうか (笑)、てっきり『プログラミング言語C』を初心者向けの一番やさしい入門書と思い込んだぼくは、さっそく本屋に走った。なにしろ古典中の古典だからご存じの方も多いことだろう。この本は決して平易な入門書などではない。やさしいどころか、そのあまりの格調の高さには驚かされた。のちにCP/M研究会の方々にお聞きしたところでは、基礎を一通り飲み込んだ人が熟読玩味すべき書物なのだという。無知というのは本当に悲しい。


                   第七回

 実際にプログラムを動作させながら読めばまだしも、肝心のコンパイラの動かし方がなかなか飲み込めなかった。マニュアルはいかにもにわか作りといった感じで、文章も活字も、紙質さえも異なる、さまざまな文章を寄せ集めて一冊にしたものだった。易から難へという構成ではなく、基本的なことが後に書かれていたりしたから、当面必要なコンパイルの方法が一度に了解できないのにはイライラしたものである。

 そんなわけで、プログラム例を頭の中でBASICに翻訳しながら、ぼくは『プログラミング言語C』を読み始めた。今にして思えば、頭の体操にはなったけれども、実にばかばかしくトンチンカンなやり方だった。非能率もはなはだしく、結局65頁でギブアップしたのだが、後日CP/M研究会でこの話をしたら、「へえ、よく65頁までやりましたね」といわれて大笑いになった。ほめられたのか、からかわれたのか、いまだに判然としない (笑)。

 『プログラミング言語C』に降参した頃、ようやくコンパイルの方法がわかった。当時のメモで再現してみると、まず SE(Screen Editor) でソースを入力し、拡張子を C としてファイルをセーブする。次に C 「ファイル名」を実行するのだが、この時には拡張子を付けてはいけないのである(こういう部分をマニュアルから読み取るのが難しかった)。 最後に CLINK 「ファイル名」を実行すると、68K という拡張子の付いた実行ファイルが生成される。

 たとえば、 HELLO.68K ならOSのプロンプトから HELLO と入力すれば、かの有名な (笑) "hello world" が画面に表示されるというわけで、拡張子の違いを除けば、MS−DOSともちろん変らない。いうまでもなく、さっそく HELLO.C を試してみた。画面に無事文字列が表示されたときの嬉しさは格別だった。統合環境でチョイチョイというのとは大違いで、さんざん苦労した成果なのだから無理もない。

 ところが、いくつか簡単なプログラムを試してみると、プログラムの実行にずいぶん時間がかかるのに気がついた。BASICインタープリタより遅いのである。原因は実行ファイルのサイズがばかでかいところにあった。なにしろ HELLO.C をコンパイルすると 30K バイト以上になるのだから、フロッピー・ベースのシステムでは読み込みに時間がかかるはずだ。なんらかのオプションを指定すれば、たぶん最適化できたのかも知れないが、当時はそういう知識がなかったから、ひどくガッカリした。

 勉強のつもりだったから、多少の遅さには我慢したが、やがて大きな壁にぶつかったのである。 それは実数計算であった。 コンパイルすると、 出るわ出るわ、WARNING や ERROR が一画面では収まりきれぬくらいドンドン現れる。今細かいところは忘れたのだが、マニュアルをひっくり返してみたら、もともと整数オンリーで実数はサポートしていなかったのを、そのバージョンから実数計算可能にしたのだという。

 実数に関する記事は、マニュアル本体にはなく、ワープロ印刷してホッチキスで綴ったペラペラの追加の説明文が付属していた。それも、実数に関係する関数の仕様を記載しただけのもので、サンプル・プログラムなどは一切掲載されていなかった。百の説明文よりも、たった一つの短いサンプル・プログラムのほうがありがたいことは、みなさんご承知の通りだし、パソコン用のまともなコンパイラにはふんだんなプログラム例が付属していることもご存じの通りである。ぼくはう〜んと唸った。

              お茶の時間


 記憶というものはまことに頼りないもので、わずか六、七年前のことなのに細部を思い出せなかったり、思い違いをしていたり……前回までの分を読み返してみても、頼りない部分がいくつかある。ごまかしても仕方がないから正直にいうと、やっぱりトシのせいなのだろう。 今回は番外編である。

 この連載、読者諸賢にとってはつまらぬところが多いとは思うが、今これを書いておくことには意味があるような気がするのだ−−少なくともぼくにとっては。それは丁度、街角を写した何の変哲もない一枚の写真も、数十年後には幾分かの価値を持つのと似ているのではないか。

 書いているうちに記憶が蘇るということもある。前回はサラリと書き流したから、 DISKCOPY なんて簡単にやってのけたみたいだが、さにあらず (笑)。実は、その前の段階、つまり FORMAT に首をひねっている自分の姿が鮮明に、ウソのように鮮明に浮び上ってきた。人っこひとりいない事務所に残ってディスプレイとにらめっこしている若き日の自分(ホントかよ?)の姿が。

 いまだにCP/Mのフォーマットというのはどうなっているのかよく分らないが、INIT だったか FORMAT だったかを実行すると確か3種類くらいの選択肢が現れる。どれがどれやら、さっぱり意味がわからないのだから閉口した。フォーマットとコピーを同時にやってくれるFDみたいな便利な道具なんてなかったんだからなあ (笑)。

 頼りはほとんどプロ向けのマニュアルばかりだから、あれをして叱られ、これをしてエラーを出し……自分でいうのもおかしいが、「昔の人」は偉かった。「今の人」はマニュアルがちょっと難しいとすぐに不平を鳴らす。もちろんマニュアルの出来はいいに越したことはないし、お粗末なものが多いことも承知している。しかし、少しはこっちの頭を疑ってみることも必要だろうし、しつこく試行錯誤を繰返すしぶとさも必要だろうと思う。

 98のMS−DOSなんて参考書はよりどりみどり、本屋で選ぶのに困るほどだから、文句をいうほうがどうかしているのだ。サルにもわかるなんとか、というタイトルの本もあったような気がする (笑)。ろくに勉強もしないで不満ばかりいうのはタコです、と断言しても叱られないと思う。わかろうとする気持のないことには話にならないの だ。

 純情だったぼくは、分らないのは自分の勉強不足だと認識したまではよかったが、勉強不足を補う参考書が少ないのには弱った。当時すでにCP/Mなんて下り坂もいいところだったのに、ようやくみつけた薄っぺらいCP/M−86の参考書には「CP/Mでこの世はバラ色」みたいなことが書いてあった。今思えばダボラもいいところである。しかも、その本が役に立ったのはほんの一部で、DDT (MS−DOSの SYMDEB に相当)の説明などはほとんど参考にならなかった。 86と68じゃ逆さまだから仕方がないか。

要するに、わからないながらもやる気はあった。やる気はあったが、結局わからなかった (笑) というばかばかしい一席。この連載、次回で終りである。

                    第八回

 『プログラミング言語C』はぼくの手に余ったし、この場合あまり役にたちそうになかったから、もっと初級用の参考書をさがしてみたら、各種Cコンパイラの比較が載っていた。なるほど、CP/M68K-C のデータ型ビット長をみると、 float とdouble の項目は空白になっていた。たぶんユーザからの要望に応えて、後から実数をサポートするようにしたのだろう。

 参考書の実数計算プログラム例をいくつか打ち込んでコンパイルしているうちに、ようやく手ごたえがあった。無事コンパイルが終了したので、ひょっとしたら……と思いつつリンクしてみた。やった、成功だ。だが、それで万事めでたしなら、なにも「挫折記」なんぞと銘打って連載することはない。ご想像どおり、実にばかばかしい結末が待ち構えていた。

 プログラムの内容はよく覚えていないが、なんでも何回か割算を繰返してその結果を表示するという、ごく単純なものだったと思う。さっそく実行してみると、ディスク・ドライブがごとごと動き、やがて画面に計算結果が表示され始めた。ぼくはホクホク喜んだ。これがうまくいけば、たいていのプログラムは実行できるはずだ。実務に使う分にはグラフィックなんかに用はないから、とにかく計算できればいい。

 しかし、よくよく画面を見ると、信じられないようなことが起っていた。整数部分は正しく計算・表示されていたのだが、小数点以下は目茶苦茶だった。たとえば、

      1234.1A「イ3Pロ

などと表示されるのには、目を疑った。

 あわててソースを徹底的に見直したが、どこにもミスはない。どのコンパイラにも対応しているはずの、ごく基本的な短いプログラムだったが、念には念を入れて、考えられる限りの書き方に変更して、何度もコンパイルしなおしてみたが、結果は同じであった。

 ここにおいて……ぼくはついに白旗を掲げて降参した。万事休すである。Sさんの予言めいたアドバイスがなければ、素直に教えを請うたところだが、いまさらみっともなくてそんなことはできなかった。いっそ札幌に行ってX社の研修を受けようかとも考えたが、あいにくぼくは計算機係ではなかった(笑)。

 Sさんのアドバイスの意味は、今のぼくにはよく分る。Sさんは当時FM7と98を自宅で使っておられた。マシンが98なら、もっと使いやすいコンパイラがあるし、参考書もすぐに役にたつ。「そうですね、Cの基本をやってみるのもいいでしょう」と賛成してくださったのではないだろうか。まさか自社の製品に付属するCが特別使いにくいとはいえなかったのだろう。

 事実、その後98を購入して、Cで実数計算をしてみたら、そのあまりのあっけなさにぼくは驚いた。68K-C で味わった苦労には一体どんな意味があったのか、時間の浪費ではなかったのか。考えれば考えるほどばかばかしくなってきたものだ。

 挫折の痛手は深く (笑)、ぼくはそれ以来Cをほとんどいじらなかった。 最近少しイタズラしているけれど、要するに挫折しない程度に遊んでいるにすぎない。一介のおじさんパソコンユーザーとしては、これでいいのだろう。

 実にあほらしくむなしい連載だったが、これで一応幕を閉じたい。もしぼくの挫折にいくらかでも意味があるとすれば、本職でもあるまいに (笑)、 C言語に挫折なんてする必要はなかったのだと悟ったことだろう。

                                    (1993年6月連載)

くずかご 雑 録 野爺画報 トップページ