2021年3月14日日曜日

今だから話そう「『ソフトウェアの法則』の裏話」


・Knuhsの書斎 から転載

── 私の「記憶の引出し」から

はじめに
 コロナ禍の中で家に引き籠っていると、外部からの刺激が少ないせいかエッセイのネタがさっぱり浮かんできません。そんなとき古い資料を整理していると(“整理”と言うと聞こえは良いが、単に引っ掻き回しているだけなんですが)、昔書きたいと思ったが結局は書かないままにしてしまったテーマや出来事の数々が思い出されてくるのです。

 そして、捜している資料が運よく見つかったりすると、それを読み始めて止まらなくなってしまうのです。そんなときは必ず若い頃の気持ちに戻ってしまい、私の“記憶の引出し(*1)”をフルに活用すれば、何か書けそうな気がしてくるのです(困ったものです)。そして体力が続くかどうかも考えずに年甲斐もなく厄介な仕事に挑戦してしまうのです。文章を書くことはボケ防止にもなるからと自身への言い訳に利用しているのです。
【注】(*1)「記憶の引出し」については、別途紹介することにします。
プログラムの掲示
 古い資料の中から偶然見つけたのですが、以下に示すような社内掲示板に載せた記事(program)の控えを発見しました。
 先ず、これが掲示板の読者に向かって私が何を伝えようとしたかを読み取ってください。冒頭の日付が『ソフトウェアの法則』という本の発売日になっている点がヒントになるかもしれません。

登録者 (TSE)木下 恂 990092050039   登録日時 95-10-25 13:00
表題   program

program:
  //* 『ソフトウェアと‥‥』の加筆修正版を読みたい方へ

declare:
  Book = "ソフトウェアの法則(中公新書)";
  me   = TgMailAddress(990092050039);

start:
  if ( you.want(to.Read(Book)) )
  then if ( your.conditions == TRUE )
       then
       {  send(mail) to(me) title("贈呈希望: '社内便宛先' 'YourName'");
          wait(a_few_weeks);
          if ( you.are(fortunate, enough, enough, enough & enough) );
          then you.may(receive(Book));    //* may = かもしれぬ
          else goto BookStore;            //* with money
       }
       else goto BookStore;               //* asap
  else ;  //* I still hope you goto BookStore. (挿絵もあるでよ)
  exit;

 your::conditions
{  1:社内便が使える
   2:締切り(この掲示が消される)前である
   3:自費で買えない事情がある
   4:読んだ後、複数の知人に購入を勧めたい
   5: me の悪口は言わない
}

how_to_select
{  //* 私情は一切まじえないことを誓う(たとえ応募者が東芝社長でも)
   1:i = 10 (贈呈する本の冊数)              //* え? ケチだ?
   2:応募者の名を、到着順に表 T へ登録する  //* 面倒だけど
   3:重複応募した人の名を T から削除する    //* 断固として
   4:表 T が空なら、終り                    //* むむ? 人気がない
   5:表 T に 0,1,2, ... と順番号を振る      //* ゼロから数える
   6:n = 最後の応募者の順番号               //* 最後の人できまる
   7:if (n<i) then { 全員当選; 終り }       //* よかった、よかった
   8:m = 順番号 n の人のメール番号          //* 英字があれば 0 とする
   9:k = m mod (n+1)                        //* 計算が面倒なので下5桁
  10:順番号 k から k+i-1 までを当選とする  //* 表はサイクリックに見る
  11:終り                                   //* やれやれ
   //* 当選者は、メール番号の下5桁と名前の頭文字のみで発表します。
}

end; //* 本掲示は、vox掲示板管理者の承認を受けています。


 プログラムとは、自分の意思(プログラムの内容)を人やマシンに伝えるためのものですから、伝わりさえすればどんな言語で記述されていても構いません。ここでは英語風に書いてみました。誰にでも大体の意味は分かるだろうと思います。ただ、読む人が理解したいと熱意を持って努力するかどうかで理解度も変わってくるものです。

▼プログラムの意味
 前出の“program”は、実は発売したばかりの『ソフトウェアの法則』という本を「希望者に贈呈しますよ」と伝えるための掲示だったのです。しかし『ソフトウェアの法則』という本のことを知らない人が多いと思いますから、先ず、本が作られた経緯から説明することにしましょう。

本が出来上がって‥‥
 この本が出版された(1995年)当時、世間では「パーキンソンの法則」とか「マーフィーの法則」とかが有名でした。私はコンピュータのソフトウェア開発の分野で仕事をしていましたから、“ソフトウェアの法則”があっても良いのではないかと考え、ソフトウェアに関するエッセイを書き上げるとその最後の部分に、関連するテーマで“ソフトウェアの法則”の新作を添えるようになりました。

▼掲示板へのこだわり
 そのときエッセイを投稿していた場所が実は全社的に活用されていた社内掲示板だったのです。いろいろな掲示板が作られていましたが、私が主に活用していた“vox”(ラテン語で“声”の意)という名の掲示板にはコンピュータ関係の情報が掲示されていましたから多くの参加者がいる特に活気のある掲示板だったと思います。ここで私は、コンピュータのソフトウェアに関する投稿を通じて多くの仲間から鍛えられてきたのです。

 その結果として生まれた本ですから私は「掲示板」にこだわりたかったのです。たとえば、章番号の1,2,3‥‥は、掲示板Ⅰ, 掲示板Ⅱ, 掲示板Ⅲ‥‥ と表記されています。最後の「あとがき」の後ろに置かれた“ソフトウェアの法則集”は「特定掲示板」と命名され裏表紙の方から表表紙の方へ向かって読むように工夫されていました。しかし、こういった掲示板にこだわった造りに気が付いた人はいなかったようです。

 そうやって書き溜めたエッセイと法則集とを一冊の本にまとめて出版することになったとき、私は、密かに書名を“ソフトウェアの法則”にしたいと考えました。同時に掲示板上で知り合っていろいろと協力してくれた方々にその本を贈ることができたらいいなぁと思ったのです。

 多くの技術者が見る掲示板ですが、特にプログラミングに関心のある方々を選んで贈呈するにはどうしたらよいか、といろいろな方策を考えました。そしてプログラム
を記述するプログラム言語と同じようにアルゴリズム(論理)を使って私の意図を program 上に詳細に記述してみたのです。

 出版された日の午後、私は会社の休憩時間になってからこれを掲示板上にアップしたのです。
 このプログラムで私が何を伝えたかったのか、プログラミングに関心のない方でもある程度は理解してもらえたのではないかと思います。いかがでしたか。

書名について
 実は、本のタイトル(書名)を“ソフトウェアの法則”とするに当たっては大きなリスクを抱えていたのです。
 当時書き留めていた“出版までの記録”(以下に示します)が残っていたので、それに沿って説明することにします。「ソフトウェアの法則」という書名を思い付いたのは原稿を出版社に渡す前のことですが、正式に出版社から決定通知をもらったのは 1995-8-25 のことでした。

出版までの記録
出版までの記録

 出版の初期の段階から発行されるまでの8ヶ月間、このタイトルが他の出版物で使われてしまう可能性があるので心配していたのです。特に正式に書名が確定してからの2ヶ月間はストレスは相当なものでした。もし他の本で使われてしまったら書名の変更が必要になります。代わりとなる適当なタイトルは思い浮かびません。出版予定日の前日(1995-10-24)の夜になって、私はやっと「これで大丈夫だ(!)」という確信を持つことができたのでした。

 そこで気が大きくなったのでしょう、お世話になった社内掲示板の仲間たちに贈呈する計画を実行に移すことにしました。単に「本を贈呈をする」と言うよりも私の「ソフトウェアと〇〇」という一連のエッセイの読者でプログラミングに関心のある方に贈りたいと思って工夫をしたのです。

当選者は‥‥
 program に書いた通りに10名を決定しましたが、締め切り後に2名の方が欲しいと申し出てきたので、結局12名の方々に贈呈することにし社内便で発送しました。
 ところが、実は最近までずっと12名の方に贈呈したと思い込んでいたのですが、この文章を書きながら念のため過去の記録を調べてみました。すると驚いたことに14名に贈ったという記録が出てきたのです。当選者の名前と社内便の発送日時から考えて、どうやら以下のようなことがあったと解釈しました。

 program の解読に成功し、かつ細かい応募条件を満たして「本が欲しい」と伝えてきた人は予想外に少なかったのです。最終的に応募者は12名となりましたが、2名だけを当選外とするのは気の毒になってしまいました。結局12名全員の当選にしてしまったのだと思います。その後で、締め切り後の応募が2名あったというのが実際のところだったようです。社内便での発送日の違いからそのように解釈しました(人の記憶などというものは本当にあてになりませんね)。

 当選のためのルールを勝手に決め、その挙句に勝手に変更しているのですから世話がありません。約束通りにできなかったことを申し訳なく思っています。

 後で知ったことですが、同じ東芝グループの会社間でも社内便が使えない事業場があるのだそうです。最初から応募を諦めて“goto BookStore;”に従って書店に走ってくれた方々がいたことも知りました。応募者の数が少なかったのは、多分そのためかもしれません。重ね重ね申し訳ないことでした。

本に虫が‥‥
 「本の虫」と言うと、それは四六時中本を読んでいるような読書の好きな人のことですが、書物に取りつく“シミ”や“シバンムシ”などの本当の虫を指す場合もあります。しかしここで言う“本の虫”とはコンピュータの虫(バグ)のようなものを指しています。つまりプログラムのバグと同じで誤植のことです。

 発売前に十分な校正作業を行って誤植のない状態にするべく努力するのですが、初版の段階ではいろいろな虫が発見されることが多いのです。この本も例外ではなく、残念ながら出版後にいろいろなバグが出てしまいました。それも私のミスで生じたとんでもない虫を発見してしまったのです。

 発売直後のことでした。家で何気なく本のページをパラパラとめくって見ていたときに突然気が付いたのです。「ソフトウェアと環境」の章で使った挿絵に間違いを発見したのでした。この章で私は、コンピュータの開発環境について書いているのですが、その中で日本の家屋が狭いことを欧米人が兎小屋“rabbit hutch”と揶揄していることに触れました。そのため挿入したカットが以下のものだったのです。


 ( 修正前の挿絵 ) 

 このカットを描いたとき、止せばよいのに表札を描いて“Rabit”という名前を書いてしまったのです。何気なく見ていて突然気が付いたのですから、普通なら自慢したい(*2)ところですが、その瞬間の私は背筋が凍り付くような想いでした。
【注】(*2)プロのプログラマになると、他人の書いたプログラムリストをチラッと見ただけでバグを見つけてしまう名人もいるのです。
 恥ずかしい。どうするか? こんなみっともない状態を放置することはできません。私は出版社に電話して挿絵の入れ替えをお願いしました。それが“出版までの記録”の日付 11-02 の場所に記録されています。

 幸い、出版社は挿絵の入替えを許してくれました。修正されたカットは早速出版社に送られ二版以降は修正されています。修正版は私のウェッブ上の“美術館”の中に『「ソフトウェアの法則」で使った挿絵の原画集』として飾られていますが、この挿絵の原画だけはその後行方不明になっています。飾られている修正版は二版以降の印刷物からコピーしたものです。興味のある人は比べてみてください。

【追記】
▼なお、2001-11-23 以降は『ソフトウェアの法則』は、電子版として読むことができます。

▼『ソフトウェアの法則』の正誤表は、以下の場所で見ることができます。
  http://www.hi-ho.ne.jp/skinoshita/seigohyou.htm