プログラミングの超簡単な言い回し

 読者の多くは、実際のプログラムにあまり接した経験がないかもしれない。そこで、プログラミングができる方には読み飛ばしてもらうとして、めちゃめちゃ簡単なプログラムの「仕組み」をまとめておこう(ここでは、簡単なBASIC言語の例を出すが、他の言語も似たり寄ったりである)。
 プログラミングというと、何やら小難しい、意味不明のアルファベットと数字の羅列、みたいなイメージがあるかもしれないが、個々のパーツ、つまり命令文まで分解してみれば、きわめて簡単なことがわかるはずだ。
 ここでは、プログラムで頻繁に出てくる「くりかえし」に焦点を当てよう。

X=0
FOR I=1 to 5
X=X+1
NEXT I
PRINT X

 ここで使われているのは「FOR〜NEXT」というくりかえしの文型だ。くりかえしの回数を記録するIという「カウンター」が1回から5回になるまで、Xに1を足し続けるのだ。あらかじめXという変数というか「箱」には0が入っている。ふつう、

X=X+1

などと書いたら、両辺からXを引いて、

0=0+1

つまり、

0=1

となって矛盾が生じてしまう! だが、プログラミングの場合、変数には時間の要素も含まれるので、実は、

新しいX=古いX+1

という意味なのだ。たとえば、「X」という札のついた、古い箱の中身がボール2個だとしたら、それにボールを1個足して、それを新しい箱Xに入れるから、中身はボール3個になる。この作業が終わったら、カウンターを見て、それが3回だったら、NEXT I、すなわち次のIである4回目の計算をする。そして、カウンターのIが5回になったら計算をやめ、答えの「5」を印刷して終わり。
 今の場合、1回目の計算でXが1、2回目の計算でXが2……などとなって、最終的に答えは、X=5になるわけだ。
 なぜ、このような簡単な計算を長々とプログラムを書いて実行するのか、疑問に思われるかもしれないが、実際には、あらゆる高等数学を駆使して、めちゃめちゃ複雑な計算を実行する。
 JAXA(宇宙航空研究開発機構)が宇宙探査機を制御して惑星の軌道に乗せるのも、宇宙物理学者がアインシュタイン方程式を解いて宇宙の運命を計算するのも、投資会社が顧客から預かったお金の最適な運用を予測するのも、すべて、こういったプログラムの言い回しが何千、何万と集まった結果なのだ。
 ところで、この「おもちゃ」プログラムで、最初にやった計算が、

X=0

だったわけだが、これがなかったらどうなるだろうか。その日、パソコンを立ち上げて最初の計算だったら、Xの値は0にリセットされているから心配いらない。だが、一日の業務の途中で、前の計算(=前の箱の中身)が残っていたらどうなるか。
 たとえば箱の中にボールが5個入ったままだったとしたら? その場合、X=0と中身をリセットせずに計算を続行すると、5個のボールに5個のボールが足されて、答えはボール10個になってしまう。この10個という数が他の計算にも引き継がれていくと、しまいには、投資会社が大損をして潰れたり、探査機が壊れたりすることだってありうる。
 いや、実は、冗談ではなく、2016年に打ち上げられたJAXAのX線天文衛星「ひとみ」では、「X=5をX=0にリセットしなかった」のと似たようなミスを犯してしまい、衛星が高速回転を始め、遠心力でバラバラになってしまった。実際の事故の背景は複雑だが、数字のリセットのミスで、280億円の天文衛星が観測開始前に空中分解したのだ。ソフトウェアの開発を担当していたNECは5億円の賠償金をJAXAに支払ったが、巨額の国民の血税が無駄になった残念な事故であった。
 あるいは、2005年に新規上場したジェイコム株(現ライク社)をみずほ証券の担当者が「誤発注」し、407億円の損害が生じてしまった事件も記憶に新しい。本来なら「61万円 1株売り」という数字を入れるべきところ、「1円 61万株売り」と、数字を逆さに入力してしまったのだ。約1分半後に入力の間違いに気づいたトレーダーは、慌てて注文を取り消そうとしたが、なぜか東証のシステムが受け付けず、東証と直結されている別のシステムから取り消そうとしてもダメで、電話で東証と直接交渉したが、やはり取り消すことができず、ジェイコム株は急落した。大量の誤発注に気づいた他の証券会社や個人投資家が「この機に乗じて儲けてやろう」と動き始め、市場は大混乱に陥った。
 もちろん、最初に数字を入れ違えたトレーダーも悪いが、単に数字を入れる順番を間違えただけだ。スマホの打ち間違いやメールの誤送信なんて、誰でも経験しているではないか。そういったヒューマンエラーが407億円の実害にまで発展したのは、そもそも、東証のプログラムに問題があったからだともいえる。みずほ証券は、まさにそう考え、東証に415億円の賠償を迫ったが、東証側が拒否したために、両者は最高裁まで争うこととなった。2015年に最高裁判決が確定し、最終的に東証が約107億円(プラス金利)をみずほ証券に支払うこととなった。賠償金額としては損害額の4分の1だが、プログラムのバグ等の不備の責任は重く、裁判所は、7対3の割合で東証の責任が重いと認定したのである。
 プログラムのレベルでは、単なる数字の入れ間違いやリセットのし忘れにすぎない。だが、プログラムが、リアルな世界の探査機や証券取引とつながった瞬間、ささいなミスが巨額の損失や事故へとつながる。
 読者のアタマの中では、
「核ミサイルの制御プログラムで同じようなミスが起きたらどうなるのか」
といったところまで想像が膨らんでいるかもしれない。そう、その場合、x=5をx=0とリセットしなかったために、何百万人の尊い人命が失われる可能性だってある。
 今後、プログラムの塊のような人工知能やロボットが、どんどん人類社会に参入してくる。プログラムのバグや入力ミスやリセット忘れによって、巨額の損失や、人命が失われる事故をどうやって防げばいいのか。未来のプログラマーたちの肩にかかる責任の重さは増すばかりだ。