フィンローダのあっぱれご意見番

第70回:まず「なぜか」を理解すること

初出: C MAGAZINE 1998年02月号
Updated: 1998-04-20

[一覧] [ホームページ]


 最近JR山手線で携帯電話のベルを鳴らしたままという状況に何度か遭遇した。 一番長かった時は、渋谷から原宿まで延々とベルが鳴ったままだった。これは耐 えている人もかなり根性があるが、掛けている方も気合いが入っていると思われ る。半年前にはこのようなことは滅多になかったのだが、一体どうしてだろうか。

 想像なのだが、これも最近、山手線で「携帯電話は回りの迷惑になるので遠慮 しろ」というアナウンスの頻度が上がったような気がする。実際は敬語を使った アナウンスだが、要するにそういう意味のことを言っているのだ。これらを組み 合わせると一つの妄想にたどりつく。つまり「遠慮して使わないということは、 電話に出ないことを意味する」という解釈をしてベルが鳴っても取らない人が現 れたのではないか。

 これって余計迷惑だ。

 しかし、とりあえず車内の携帯電話が迷惑だとしよう。話が逸れるが、私は特 に迷惑だとは思っていないのである。車内の会話の方がよほど迷惑だ。先日も特 急で指定券など買って乗ったものだから、前に座った数名のグループが大きな声 でずーーーっと喋りっ放しで、こちらは寝不足なのに寝ることもできず、大変疲 れた。しかも内容がワイ談だし、こいつら酔っている。こういうのはアリで、携 帯電話で「何時に着く」という連絡はデッキに出ろというのがJRの強制意見なの である。とんでもない話だ。あ、もちろん私は携帯電話を使う時には周囲の人か ら22cm以上離すことにしているし、電波がいまいち不安なので自分自身からはも っと離すことにしている。(^^)

 何かわざとらしい話の逸れ方だが、話題を元に戻す。車内の携帯電話が迷惑だ ということを前提にしよう。この場合、うっかり電源を入れたままで車内に入っ てしまって、しかもバイブレータモードにするのを忘れて音量最大になっていた ため大騒音、という状況になったら、一体どうすればよいのだろうか? 「ご使 用をお控えなすって!」という警告があるのだから、やはりそのまま放置すべき なのだろうか?

 電源を切ればいいのである。話は実に簡単だ。もっとも、電源を切ってもベル が鳴ったままという電話機があるのなら、その限りでもない。そういう電話機は 多分実用化されていないと思う。しかし、着信しないでいきなり電源を切ったら、 相手はどうなるのだろうか? 自主的に切るまで発信した状態が続くのだろうか、 それとも「電波が届かない状態で…」というアナウンスが流れるのだろうか?


 fjで少し前まで、従軍慰安婦とか南京大虐殺の話題が盛り上がっていた。この 種の話題はいつも同じパターンである。証拠の有無とか信憑性でモメるのである。 その中でもfj.educationあたりでは、教科書にそれを書くことの是非について議 論がなされていた。教えた方がよいか、それとも教えない方がよいか、というの である。小学生が対象だとどうか、というような問題にもなったと思う。教える かどうかという点については、個人的には特に意見はない。教えたければそうす ればよいだろうし、教えたくなければ放っておけばよい。小学生から中学生とい う好奇心に溢れた年代の人なら、知りたければ勝手に調べるものである。もっと も、そのための手段が何もないというのは困るが、例えばWWWを見るだけでも、 情報山盛りの時代なのである。

 しかし、プログラマー的な発想かもしれないが、一つ気になることがある。プ ログラムが動作しないとか、効率が悪いとか、ここが使いにくいとか、困ったこ とはよく発生するものだ。その時に最も重要なのは「なぜそうなるのか」を理解 することである。Whyということである。これが理解できてこそ、その原因を論 理的に解決できるのだ。不思議なことに、プログラミングという世界一論理的に 動作しそうなモノでさえ、なぜか分らないが適当に変更したらうまく行った、と いう対症療法的なやり方も実在するというのが現実だが、基本は「なぜ」を理解 して、それに対応した対策を考えるというプロセスである。

 だから、従軍慰安婦や市民虐殺についても、同じことを考えるのである。市民 を何十万人とか何百万人殺した。悪いことである。そう教科書に書くのは簡単だ。 しかし、なぜそんな悪いことをしたのか、それを理解することは難しい。なぜ百 万人も殺したのか分らないと、これから西暦2,000年台に突入した後、また何百 万人も殺すようなことがあるかもしれない。その原因が解決していなければ、で ある。さて、原因は何だったのか。それは教科書には書いてあるのだろうか。ち なみに、私は読んだ覚えがない。

 デマとか創作という説もあるが、百人切りという話もあった。日本刀で百人も 切れないとか切れるとか、そういう話題はあったが、なぜ百人切って平然として いたのか、という点についてはfjではあまり触れる人がいないのである。はっき り言って、これは原因がまだ解決していないと思う。つまり、まだ同じことが起 きる可能性は残っているような気がする。なんでと言われるとうまく言えないあ たりが「どこがはっきりだ」というレベルなのだが、他国の国旗を焼いて盛り上 がれるような感情が残っているうちは平和なんてちょっと無理じゃないかという 感じだ。


ニフティサーブFPROGORGのリアルタイム会議は、毎週金曜の23:59から始まる ことになっている。実際に集まるのは翌日土曜の01:00頃なのだが、これは「土 曜01:00」とアナウンスしたらなぜか日曜の01:00に来る人がいたりするので、間 違える人のいない金曜23:59という表現にしてあるのだ。01:00というと深夜とい うイメージで、即ち土曜の深夜というと実際は日曜であるところの土曜の終了直 後、という連想になるらしい。

 秋に話題になったのだが、最悪のプログラムコンテストというのを開催してい る。発端は何だかよく分らないが「こんな問題はどうか」という雑談で、「10万 までの素数を求める速いアルゴリズムを探せ」という話題が出て、「ただし楕円 定理を用いること」という条件はともかく、「ただしモンテカルロ法を用いるこ と」というあたりから怪しくなったわけである。

 モンテカルロ法で10万桁の素数を出すというのはいくらスパコンが速くなった と言っても厳しいので、いきなり10桁でもいいという話になった。ちなみに、ど んな方法を使ってもいいから円周率を20桁表示しろという問題の場合、Borland C ++だったらmath.hに20桁書いてあるというのが面白すぎる。これに気付かないと ちょっと苦労するかもしれない。リアルタイム会議というのは「外れ」の時間に 来ると面白くも何ともないが、「当たり」の時間だと結構笑えたり猛烈に真剣な 討論になっていることもあるので、これは宝くじのようなものだ。

 さて、最悪のプログラムコンテストだが、この時に話題になったのは「最悪の ソートアルゴリズム」だった。サーチやソートは最適化の研究が最も進んでいる (と思われている)分野の一つだが、わざわざ最悪になるように頭を使う人もあま りいないような気がする。しかし無意識にそれが出来る人もいるようで、たまに 「なんだこりゃ」というソースを見ることがないわけでもない。

 List 1は、文字列を比較して、一致したら0、一致しなければ1を戻す関数であ る。チェックサムで比較しているというのがミソである。これをFPROGORGに掲示 した所、すかさず「チェックサムではなくCRCで比較してはどうか」とか、ポイ ンタを使わずにstrlenで長さを求めてから配列の要素で足し算した方が効率が悪 い」という突っ込みが入った。私はまだまだ修行が足りないようだ。

---- List 1 (文字列の比較) ----

int string_compare(char *s1, char *s2) {
    int sum1, sum2;
    char *s;

    sum1 = 0;
    for (s = s1; *s; s++) {
      sum1 += *s;
    }

    sum2 = 0;
    for (s = s2; *s; s++) {
      sum2 += *s;
    }

    if (sum1 != sum2)
        return 1; /* 異なる */

    return string_compare(s1 + 1, s2 + 1);
}

 このような邪悪なプログラムを書くためには、何がどうして邪悪なのかを理解 していなければならないから、結局、最適なプログラムを書くのと同じ程度の技 能が必要になるだろう。もちろん、生れつき素質がある人は別かもしれないが。


 ところで、本当に携帯電話を使わせないぞという気迫を込めた説得をしたいの なら、電車が到着した時に「渋谷、渋谷、○○線はお乗り換えです。乗車の時に は携帯電話の電源をお切りください」のように言えばいいのである。毎駅これを やられたら結構いや〜んな感じかもしれないが、うっかり切り忘れるという人は 流石に激減するのではなかろうか。

(フィンローダ ニフティサーブ FPROG SYSOP)


(C) 1998 Phinloda, All rights reserved
無断でこのページへのリンクを貼ることを承諾します。問い合わせは不要です。
内容は予告なく変更することがあります。