見出し画像

初のコンパイラ言語を誕生させた女性軍人:グレース・ホッパー

※この記事は2022年3月9日にstand.fmで放送して内容を文字に起こしたものだ。


今日も数学史の解説していこう。
理論とか定理がよく分からなくても、どんな経緯でそれらが発見、完成されていったのか、その歴史だけでも知ると、数学への理解はもちろん、他の科学とのつながりもよく理解できる。実際、数学史は、科学の発展と密接な関係にある。
その世界観を少しでも知ってもらうためにも、この解説が役にたれば嬉しい。

今回紹介するのは、20世紀に活躍したアメリカの数学者グレース・ホッパーについてだ。
第二次世界大戦時にアメリカ海軍管轄の計算機研究室という所に所属していた女性軍人でありながら、現代のプログラミング技術を基礎を作り上げた人物だ。プログラミング用語としてよく使われる「バグ」や「デバッグ」という言葉を聞いたことがあるかと思うが、あれはホッパーが名付け親だ。
当時所属していた研究室で完成したばかりの自動計算機「マークⅡ」という機械が稼働中になぜか停止してしまい、ホッパーが原因を調べていた。すると内部の部品に蛾が引っかかっているのを見つけて、それを日誌に貼り付けると、機械の「デバッグ」つまり、虫取りをしたと記入した。そこから、計算機の不具合や、プログラム上の文法の誤りを修正する作業のことを「バグ」や「デバッグ」と呼ぶようになったのだ。
もし、今後「デバッグ」という言葉を聞くことがあったら、「グレース・ホッパーが名付け親で、虫取りという意味があるんだな」と思っておいてくれればいいだろう。

そんな言葉を残したホッパーだが、彼女の功績を一言で言うなら、「ソフトフェアの改革」だ。
例えば、今では当たり前に使われているプログラミング言語。種類は用途に応じていくつも存在するが、どの言語にも共通しているのは、「英語が使われている」ことだ。これは機械に与える命令を、人間の言葉で一度記述する方が効率的だからそういう仕様になっている。この、英語を使って機械に命令を与えるという今のプログラミングの原型を作り上げたのが、まさにホッパーという人物なのだ。
じゃあどうやってそれが作られていったのか?まずは彼女の生い立ちからざっくり説明していこう。

グレースホッパーは1906年、アメリカのニューヨーク州で生まれる。保険の代理店をしていた父と土木技術者の娘との間に生まれた彼女は、幼い頃から探究心が強くて、金属製の組み立て道具で機械仕掛けの玩具を作るのが好きだった。あるときには、目覚まし時計をタイプの仕組みを調べようと7個の時計を分解したこともある。

母が数学好きであったことと、父が体に障害を抱えながらも独力で一人前にやっていく気性だった事も影響してか、ホッパーも数学と科学に興味持って勉強し、18歳になったホッパーはニューヨーク州の女子大に入り、数学と物理学を専攻するようになった。22歳になる頃には、数学と物理学で学士号を取得して女子大を卒業し、奨学金を得てコネチカット州にあったイェール大学の大学院に進学する。

1931年、ホッパーは大学院で研究を続けながら、卒業した女子大の数学講師の職についた。年俸は決して高くなかったのだが、数学を勉強したい女学生のために熱心に教えていたようだ。

1941年になると、アメリカが第二次世界大戦に参戦するようになるのだが、その時ホッパーは、アメリカ海軍への入隊を希望する。最初は年齢や体格、数学教授が戦争の遂行には重要だから危険が伴う戦場には連れて行けないなどの理由で不合格にされていたのだが、持ち前の気性の強さを活かして海軍の募集係を説得し、1943年、アメリカ海軍予備役の女性部門である「WAVES」というところに自分を入れさせることに成功した。

そんなホッパーが残した最大の功績、それが「コンパイラ言語の開発」だ。

1949年、ホッパーはエッカート=モーチリー計算機社、通称EMCCという企業の研究員の職に就く。この会社は後にレミントン・ランド社というところに買収されるのだが、その会社が1951年にUNIVACという商用計算機を開発する。ホッパーはこのUNIVAC用のプログラム技法を研究していたのだが、その時考案したのが「コンパイラ」という概念だ。

これは何かというと、計算機がプログラムを小さなコード群から組み立てられるようにするプログラムのことで、それを表すためにホッパーが導入した言葉だ。
例えばpythonやjavascriptといったプログラミング言語には、定型作業がまとめられたライブラリというのがあって、コンピュータはそこから小さな命令を選んで並べることでプログラムを組み立てることができる。この、小さな命令を並べるプログラムというのが「コンパイラ」だ。今の説明でいう、「プログラミング言語を機械語に翻訳する作業」というのもこのことだ。

ホッパーはコンパイラを作るにあたり、計算機のメモリに「サブルーチン」といって、計算機に計算をさせて何かの結果を返すことを指示するコードのまとまりを貯蔵して、それぞれのサブルーチンに三文字からなる暗記用の符号を割り当てた。「A-0」と呼ばれる、提供されたコード化済みの命令を使って、指示されたサブルーチンを自動的に構築し整序するためのプログラムである最初のコンパイラをホッパーは生み出したのだ。

その後1956年になると、UNIVACはホッパーの新しいコンパイラである「MATH-MAGIC」というのを導入する。これは、当時のIBMによる数式翻訳FORTRANというコンパイラに張り合うべく設計されたもので、プログラマーが英語の動詞と数学記号を含む命令を使って科学計算用にプログラムを書けるようにした。

当時のプログラムは、0と1による機械語で符号を書いていたため、プログラムをするときは今とは違って機械本体の動きも理解する必要があったので、この考え方はすごく新しかったのだ。
さらにホッパーは、科学用途で使うコンパイラとは別に、商業用のコンパイラも生み出す。最初に開発の案を出したときは上司にボツにされていたが、ホッパーはそれに関係なく研究を続け、1955年、「input」「compare」「rewind」などのような命令を使って在庫の価格に関する情報をファイル処理するための試作コンパイラについて実証実験を行なった。この実験がうまくいったことで、会社は製品化に向けて一気に動き出し、ついに1956年末、20の英語の語句をコマンドとして識別できるようにする「FLOW-MATIC」というコンパイラが完成された。これは鉄鋼業、電力業、航空機業各社、それにアメリカ海軍などに採用され、主に給与計算や伝票処理、在庫管理の用途で利用された。

1957年になると、ホッパーらのコンパイラ業界の指導者たちは、どこの会社が製造した機械でも実行できる計算機言語を開発する必要があることを認めて、国防総省の会議で打ち出された統一されたデータ処理言語の開発に協同することになる。ホッパーはこの巨大なプロジェクトメンバーの一人として開発に携わり、1960年、一般商業目的言語、通称COBOLのバージョン1を完成させた。COBOL言語の普及によって、機械が違っても英語のコマンドを使ったプログラミングができようになり、後にいくつも登場するプログラミング言語の原型となっていった。これが彼女の大きな功績として今でも知られている。

ホッパーは自分の活動を振り返ったときに「許可をもらうより謝る方が易しい」という考えを繰り返し勧めていた。
これは、いいアイデアを追求するためには、あらかじめ許可を得て進めるより、やってしまってから後で謝る方がいいということだ。
ホッパーが初めてFLOW-MATICを作ろうとした時も、最初は上司にボツにされていたが、それでもお構い無しに研究を続け、結果、誰もが認めるコンパイラを開発することができた。
できない理由を並べるより手を動かす方がよっぽどいい結果につながるということを学ばされる貴重な言葉だと思う。

数学にもこうした歴史があると分かると、今まで見てきた理論や定理、数学での考え方にも親しんでもらえると思う。
ホッパーの生涯についてはまだまだ面白いことがあるので、興味があったら是非調べてみてほしい。

数学を現代化した予言者たち―数と論理からコンピュータへ (数学を切りひらいた人びと)

この記事が気に入ったらサポートをしてみませんか?