最後の技術者たち:消えゆくIT伝統芸の記録(6)
第六話 FORTRAN
死なない数式の言語
本稿は、読者の問いから始まるドキュメンタリー風創作コラムです。実在の番組取材ではありませんが、かつて日本の技術現場に存在した空気と、現在のAI時代への問いを重ねて構成しています。
第一話では、ファジー制御について古代守さんに話を聞きました。
機械が、人間の『なんとなく』を理解しようとしていた時代。そこには、人間の曖昧さをバカにしない技術者の姿がありました。
第二話では、アセンブラについて真田志郎さんに話を聞きました。
レジスタ、番地、割り込み、クロック。機械語のとなりで、機械の都合を人間が引き受けていた時代の物語でした。
第三話では、COBOLについて沖田十三さんに話を聞きました。
そろばん、銀行数字、紙幣勘定、ATM、夜間バッチ、土地神話。COBOLは、銀行員の身体技術と社会の記憶を機械の中へ移していった言語でした。
第四話では、TRONについて徳川彦左衛門さんに話を聞きました。
国産OS、スーパー301条、通商戦争、Huawei、そしてAI神話。TRONは、社会の機関室を自分たちで設計しようとした技術者たちの記憶でした。
第五話では、FAXについて相原義一さんに話を聞きました。
FAXは、紙を送る機械ではありませんでした。責任を送る機械でした。紙一枚で金が動いた時代から、SNSの数行で市場が揺れる時代へ。情報戦争の形は変わりましたが、人間の信じやすさは変わっていませんでした。
第六話で訪ねるのは、FORTRANです。
FORTRAN。
古い言語です。
そう言われます。
いまどきFORTRANか。
まだ生きているのか。
大学の古い研究室に残っているだけではないのか。
PythonやJuliaやC++やAIがある時代に、なぜ数十年前の言語を使うのか。
そう問うのは簡単です。
けれど、その問いだけでは、FORTRANの本質には届きません。
FORTRANは、古い言語ではありません。
数式が現実に耐えたかどうかを、何十年も確かめられてきた言語です。
今回、読者から寄せられた問いは、こういうものでした。
『FORTRANは昔の言語だと思っていました。ところが、いまでもスーパーコンピュータや科学技術計算で使われていると聞きます。なぜ、そんな古い言語が今でも残っているのでしょうか』
この問いをたどるために、私たちは一人の元数値解析技術者を訪ねました。
港町を見下ろす丘の上にある古い家。
書斎の窓からは、海と造船所のクレーンが見えます。
そこに、南部康雄さん、七十八歳が暮らしています。
かつて重工系メーカーの研究部門で、流体解析、構造解析、熱解析、タービン設計、ロケット部品、原子力関連設備の数値計算に関わってきた技術者です。
机の上には、分厚い数値解析の教科書、黄色くなったFORTRANのリスト、パンチカードの束、磁気テープのラベル、古い計算結果のプロット、そして『検算済』と赤字で書かれたファイルが置かれていました。
南部さんは、古いプログラムリストを指で押さえながら、静かに言いました。
『FORTRANというのはな、コンピュータに数式を食わせるための言葉じゃった』
FORTRANは、Formula Translation、つまり数式翻訳に由来する名前です。IBMのFORTRANは1954年に作られ、1957年に商用リリースされた、近代的な高級言語とコンパイラの歴史において非常に重要な言語です。IBM自身も、FORTRANを現代コンピューティングへの扉を開いた影響力の大きいソフトウェアの一つと位置づけています。
南部さんは、少し笑いました。
『いまの若い人は、コードを書くと言う。わしらのころは、式を機械に渡すと言ったほうが近い。微分方程式、行列、反復計算、収束判定。紙の上にあった式を、どうやって機械に計算させるか。それが仕事じゃった』
FORTRANが使われてきた領域は、派手ではありません。
けれど、どれも現実の世界に直結しています。
気象予測。
海洋予測。
流体解析。
構造解析。
熱伝導。
原子力。
航空宇宙。
材料計算。
数値線形代数。
高性能計算。
Fortran-langの説明でも、Fortranは科学・工学の早い段階から計算を導入した分野、たとえば気象・海洋予測、計算流体力学、応用数学、統計、金融などで使われ、高性能計算において重要な言語であるとされています。
南部さんは、窓の外のクレーンを見ました。
『橋が落ちるかどうか。翼が震えるかどうか。炉が熱を持ちすぎないか。台風がどこへ行くか。船体にどんな力がかかるか。そういうものは、気合いでは分からん。計算するしかない』
計算するしかない。
その言葉には、重みがありました。
人間の感覚だけでは見えない現象があります。
空気の流れ。
水の流れ。
熱の広がり。
応力の集中。
振動の成長。
乱流。
衝撃波。
境界層。
固有値。
収束誤差。
それらは、目で見えません。
しかし、現実に存在します。
見えないものを、数式にする。
数式を、離散化する。
離散化したものを、行列にする。
行列を、コンピュータに解かせる。
その結果が、現実に耐えるかどうかを確かめる。
FORTRANは、その現場にいました。
『FORTRANはな、きれいな画面を作るための言語ではない。現実にぶつけるための言語じゃ。計算結果が間違っていれば、紙の上で間違うだけでは済まん。橋も、翼も、炉も、機械も、現実のほうで答え合わせをしてくる』
答え合わせをしてくるのは、現実です。
この言葉は、FORTRANの世界をよく表しています。
プログラムは動いた。
計算も終わった。
グラフも出た。
論文も書けた。
それでも、終わりではありません。
その値は、物理的に正しいのか。
単位は合っているのか。
境界条件は妥当なのか。
丸め誤差は許容範囲か。
メッシュは粗すぎないか。
収束しているのか。
初期条件を少し変えても壊れないか。
実験値と合うのか。
南部さんは、古いグラフを見せてくれました。
手描きの軸。
プロッタで引いた線。
赤鉛筆で書かれた注記。
端には、『再計算』『境界条件確認』『実験値と比較』という文字がありました。
『計算機はな、答えを出す。だが、正しい答えを出したとは限らん。そこを取り違えると危ない。コンピュータが出したから正しい、というのは、もっとも危険な信仰じゃ』
この言葉は、AI時代にもそのまま響きます。
いま、私たちは生成AIに質問します。
AIは、もっともらしい答えを返します。
文章も、コードも、数式も、グラフも出します。
しかし、出力されたことと、正しいことは違います。
南部さんは、少し厳しい顔になりました。
『AIがコードを書いてくれる時代になった。それは便利じゃ。だがな、便利と正しいは違う。計算が走ることと、現実に合うことは違う。そこを間違えると、科学技術計算では痛い目を見る』
FORTRANの世界では、何十年もその痛い目を見てきました。
配列の添字を一つ間違える。
単精度と倍精度を取り違える。
単位系を混ぜる。
境界条件を間違える。
初期値を誤る。
行列が悪条件になる。
収束したように見えて、実はしていない。
その一つひとつが、結果を変えます。
ときには、設計判断を変えます。
ときには、安全性を変えます。
『FORTRANの古いコードにはな、妙な一行が残っていることがある。なぜここで係数を少し変えているのか。なぜこの条件だけ別扱いなのか。なぜこの配列だけ余分に取っているのか。若い人は汚いと言う。だが、それは過去に現実と喧嘩した跡なんじゃ』
現実と喧嘩した跡。
その表現は、COBOL編の『社会の都合の厚さ』にも似ています。
COBOLのコードには、制度と業務の例外が埋まっていました。
FORTRANのコードには、物理と数値計算の例外が埋まっています。
境界で発散した。
乱流モデルが合わなかった。
実験値とずれた。
特定の条件で不安定になった。
コンパイラを変えたら結果が微妙に変わった。
ベクトル化したら速くなったが、丸め誤差が変わった。
スーパーコンピュータを変えたら、昔の結果と一致しなくなった。
そういう戦いの跡が、古いコードには残ります。
南部さんは、古いリストの一行を指さしました。
『この一行は、コメントだけ見ても分からん。なぜこうしたかを知っている者がいなくなると、ただの古いコードに見える。だがな、その一行で計算が安定していることもある。消すのは簡単じゃ。消したあとに何が起こるかを知るのが難しい』
FORTRANは、しぶとい言語です。
なぜ、しぶといのでしょうか。
理由はいくつかあります。
数値計算に強い。
配列を扱いやすい。
コンパイラが長年最適化されてきた。
科学技術計算の既存資産が膨大にある。
検証済みのライブラリがある。
古いコードが、今も研究や産業の中で使われている。
たとえば、数値線形代数の代表的なライブラリであるLAPACKはFortran 90で書かれており、連立一次方程式、最小二乗問題、固有値問題、特異値問題などを解くためのルーチンを提供しています。
またBLASは、ベクトル演算、行列ベクトル演算、行列行列演算の標準的な基本部品であり、効率的で移植性が高く、LAPACKのような高品質な線形代数ソフトウェアの開発に広く用いられています。
南部さんは、ここで少し皮肉っぽく笑いました。
『若い人はPythonで計算しているつもりになる。もちろん、それでよい。だが、その奥で誰が行列を掛けているのか、少しは気にしたほうがよい。画面の上ではPythonでも、地下室では昔の数値計算職人がまだ働いていることがある』
地下室。
このシリーズでは、何度もその場所を訪ねてきました。
ファジー制御は、家電の台所の奥にありました。
アセンブラは、レジスタと番地の奥にありました。
COBOLは、銀行と行政の帳票の奥にありました。
TRONは、社会の機関室にありました。
FAXは、紙と責任の通路にありました。
FORTRANは、数式の地下室にあります。
AI時代のきらびやかな画面の奥で、行列が掛けられ、固有値が求められ、微分方程式が解かれています。
『AIもな、最後は計算じゃ。ベクトル、行列、最適化、誤差、収束。名前は変わっても、計算は残る。言葉がどれほど流暢になっても、数値の世界では、最後に残るのは誤差じゃ』
最後に残るのは誤差。
南部さんの言葉は、老人の昔話ではありません。
AI時代への警告です。
生成AIは、言葉の世界では説得力を持ちます。
それらしい説明。
整った文章。
もっともらしいコード。
美しいグラフ。
自信に満ちた回答。
しかし、数値計算の世界では、雰囲気は通用しません。
答えは、桁で問われます。
単位で問われます。
収束で問われます。
再現性で問われます。
検証で問われます。
実験で問われます。
現実で問われます。
南部さんは、古い計算結果を見つめながら言いました。
『人間はな、きれいな図を見ると安心する。AIの出したグラフなら、なおさら信用したくなる。だが、その図の裏で何を計算したのか。どの式を使ったのか。どの境界条件を置いたのか。そこを見なければ、ただの絵じゃ』
ただの絵。
この言葉は、現代のプレゼン資料にも刺さります。
AIが作ったきれいな図。
自動生成されたレポート。
それらしいシミュレーション。
もっともらしい成長予測。
流麗な可視化。
そこに数式があるように見える。
しかし、式が現実とつながっているかどうかは、別の問題です。
南部さんは続けました。
『昔も、計算結果だけを持ってくる者はおった。だが、わしらはまず聞いた。メッシュはどうした。境界条件は何だ。収束判定はどうした。実験値と比べたか。単位は合っているか。これを聞くと、たいてい黙る』
ここで少し、武智倫太郎的な脱線を許していただきたい。
最近は、AIだ、ASIだ、全知全能だ、人類の叡智が一万倍だ、といった話が飛び交っています。
ソドムバンクの孫田正義という架空の人物は、巨大データセンターとAI神話を掲げ、未来の知能がすべてを解決すると説いているようです。
南部さんは、そういう話を聞くと、苦い顔をします。
『知能が一万倍になるのは結構じゃ。だが、単位は何じゃ。境界条件は何じゃ。誤差評価はどうした。収束判定は誰が見た。数式の世界では、そういうことを聞くんじゃ』
これは、冗談のようで冗談ではありません。
AI神話の多くは、数量を語ります。
何倍賢くなる。
何兆パラメータになる。
何ギガワット使う。
何兆円投資する。
何年でASIに至る。
しかし、数量があることと、検証されていることは違います。
南部さんは、古いFORTRANのリストを閉じました。
『数字が大きいことと、計算が正しいことは違う。スパコンを使ったから正しいわけでもない。AIが言ったから正しいわけでもない。大事なのは、その計算が現実に耐えたかどうかじゃ』
現実に耐えたかどうか。
FORTRANが長く残った理由は、そこにあります。
古いから残ったのではありません。
現実に耐えてきたから残ったのです。
もちろん、FORTRANにも問題はあります。
古い書式。
固定形式。
GOTO。
COMMONブロック。
暗黙の型宣言。
読みにくい古いコード。
担当者不在。
ドキュメント不足。
長すぎるサブルーチン。
コンパイラ依存の挙動。
移植時の微妙な違い。
若い人が嫌がる理由は、よく分かります。
南部さんも、それを否定しません。
『古いFORTRANのコードは、確かに読みにくい。書いた本人でさえ、二十年後には首をかしげることがある。だがな、読みにくいことと、価値がないことは違う。そこには、何十年分の検証が積まれておる』
何十年分の検証。
それは、現代の新しいコードがまだ持っていないものです。
新しい言語で美しく書き直すことはできます。
しかし、書き直した瞬間、検証の歴史は失われることがあります。
同じ結果が出るのか。
極端な条件でも壊れないのか。
昔の実験値と合うのか。
過去の論文結果を再現できるのか。
産業上の安全率に影響しないのか。
置き換えは、単なる翻訳ではありません。
検証済みの現実を、もう一度引き受ける作業です。
『若い人は、書き直せばきれいになると言う。たしかに、きれいにはなる。だが、計算というものは、きれいなだけでは足りん。汚い古いコードが、何十年も実験値とつき合わせられてきたなら、その汚さの中にも意味がある』
FORTRANは、古い言語です。
しかし、古いという言葉には、二つの意味があります。
時代遅れという意味。
もう一つは、長く使われ、試され、壊れずに残ってきたという意味。
FORTRANは、その後者でもあります。
南部さんは、机の引き出しから一枚の古いパンチカードを取り出しました。
小さな穴が規則的に並んでいます。
『昔はな、このカード一枚にも緊張があった。穴を一つ間違えれば、計算は壊れる。今は画面でいくらでも直せる。便利になった。だが、便利になると、間違いも軽く見える。そこが怖い』
パンチカード。
磁気テープ。
大型計算機。
ベクトル計算機。
スーパーコンピュータ。
クラスタ。
GPU。
クラウド。
AI。
計算環境は変わりました。
しかし、問いは変わりません。
その式は正しいのか。
その近似は妥当か。
その誤差は許されるのか。
その計算は再現できるのか。
その結果は現実に耐えるのか。
FORTRANは、その問いを抱え続けた言語でした。
南部さんは、最後に一冊の古いファイルを閉じました。
表紙には、手書きでこう書かれていました。
『検算済』
その三文字には、AI時代の私たちが忘れかけている重みがありました。
生成された。
出力された。
可視化された。
要約された。
最適化された。
それらは、まだ『検算済』ではありません。
南部さんは言いました。
『まず、計算結果を見せてもらおう。そこに、その式が現実に耐えたかどうかが残っておる』
第六話、FORTRAN。
それは、死んだと言われながら、いまも科学技術計算の奥底で走り続ける数式の言語の物語です。
FORTRANは、古い言語ではありません。
現実に耐えた数式を、機械の中に残してきた言語なのです。
次回は、ワープロ専用機。
文豪、OASYS、書院、親指シフト、縦書き、罫線、年賀状、そしてポメラへ。日本語を書くという行為が、まだ機械の中で特別な仕事だった時代を訪ねます。
文・武智倫太郎
