カレンダー

2018/12
      
     

広告

Twitter

記事検索

ランダムボタン

時々うまくいく理由は

by 唐草 [2018/11/06]



前回のあらすじ
 書いたプログラムが、3回に1度ぐらいしか動かないというレアな状況に巻き込まれる。これは最悪と言われている「よく分からないけど動いている」状態よりもまずいのではないだろうかと悩む。
 
 昨日の続きである。
 なんで入力が一定なのに毎回違う結果が帰ってくるのだろう?これはまるでアナログな振る舞いようである。外部からのノイズに影響されて安定しない状況のようである。
 でも、ぼくが操っているのは0と1だけで動くデジタルの申し子のコンピュータだ。真空管とかを使っているわけではない。ノイズの心配は絶対にない。今どきのコンピュータが誤作動するほどのノイズと言えば、電子レンジぐらい。当然電子レンジなんて動かしていないし、電子レンジと同じぐらいのノイズが常時飛び交っていたらぼくの体もただではすまないだろう。
 プログラムがうまく動かないのは、99.99%使う人のほうが悪い。頭ではそうわかっているのだが、その事実を素直に認めたくないのもまた事実である。昨日の段階では、レアな結果に驚きと少しばかりの怒りを感じて冷静さを失っていた。無意識のうちにぼくは絶対に悪くないと自己弁護していた。
 一晩経って冷静さを取り戻した。
 やはり、ぼくのプログラムが悪いのだろう。悔しいが、その事実を認めざるを得ない。もしコンピュータのほうが悪かったら、もっと多くの人が気がついて大きな問題になっているはずである。しかし、そんな噂は全く聞こえてこない。
 プログラムを実行するたびに結果が変わるという現象は、デジタルらしからぬ振る舞いのように感じられる。1000万回やっても毎回同じ結果を返すのがコンピュータではないのだろうか?ぼくは当然のようにそう考えていた。でも、これが根本的な間違いだった。間違いと言うか、単なる思い込みでしかなかった。
 初心に帰って基本的なことを確認していたら、基本中の基本を忘れていたことが発覚した。毎回必ず同じ結果を返すなんて言うのは、幻想でしかない場合もあるのだ。
 高速列挙型とか辞書型と呼ばれる配列を使用した場合、配列内の順番は保証されない。この基本を完全に忘れていた。同じデータで高速列挙をすれば、順不同とは言え毎回同じようにバラバラになると思い込んでいた。
 ハマる場合は、いつだって自分の思い込みが原因だ。ゲームで痛いほど学んだこの教訓が全く生かされていない。