見出し画像

(第29回) Alan Turingが考えたコトを図解してみた(その1)

「プログラミングの技術論」はよくあるけど、「プログラミングという技術」を発明した人は誰なの?

上のギモンについて、前々から「おかしいなーおかしいなー」(©︎稲川淳二)と感じてたので、Charles Babbageさんに続いて、Alan Turingさんの本も読んでみました( ´ ▽ ` )ノ

もっとも、Turingさんは論文は発表したものの、「本」は書かなかったので、いわゆる解説本なんだけども。

で、今回読んだのがコレ。 B. Jack Copeland (ed.), Alan Turing’s Automatic Computing Engine, Oxford University Press, 2005.

画像1

Turingがその根本から発想したACEというイギリス製のコンピュータ。で、その開発拠点だったNPLに所属してた人や、関係各者が歴史的資料をドーンと持ち込んで、「コンピュータの歴史」をガッツリ扱ったもの。

ガッツリ扱っただけに、後半に収録されてるTuringの論文と、各種設計図は、門外漢にはチンプンカンプンな内容。それだけガチの専門書でした。

ところがその中で「あっ! これがTuringさんの考えたことなんじゃない?」というエッセンスが見つかったので、そこを自分なりに読み解いてみました。

「記憶する」だけで実行可能な「仕事」ってあるの?

上記の論文集では、”5 Turing and the computer” (by B. Jack Copeland and Diane Proudfoot)のでピーン!(©︎みうらじゅん)と来た形。

(1) どうやらTuringさんが想像したキカイは、ズラ〜ッとBlank MemoryがSquaresの形で並んだモノの由

画像2

(2) で、その1マス1マスをScanして、読み取るたびに1マスずつ右にズレていく形

画像3

(3) 「1マス右にズレる」以外に、ごくごく単純なOperaionを1マス上に実行することが可能。”O”を書くか”I”を書くかだけ

画像4

(4) 論文中にはそのOperationがTable化されており、これがいわゆる「プログラム」

画像5

(*論文内のtableを、わかりやすくするために色分けしてイラスト化、ibid., p. 108より)

(5) この実行内容を、自分のピコピコイラストで表示するとこんな風になる

画像6

(6) dからaに戻るため、Scan後にはズラ〜っと並んだMemoryはこんな風に延々と続いていく

画像7

Turingさんのアイディアは「想像上のモノ」だったけど、「実現できる」と気づいたそうな

Turingさんは、数学的にもバリバリの天才だったけど、実際には「エンジニア」としての能力も抜群に高かった由。子供の頃からキカイの修理も得意だったそうで。

で、上の論文を読むと、単純な「暗記」(by rote)だけで人間に実行できることにはリミットがあるよ、と言いたかったそうな。

[注意!]この辺、英語の構文がフクザツで、なかなか読み解くのがタイヘン。なのでこの解説も割り引いて読んでください

いくらTasksがよく定義されていても、人間には限度があるが、しかし、どんなキカイでも実行不可能かというと、そうではないんじゃないの、と。

論文発表の時点では想像でしかなかったものが、実現できる!と本人も気づき、同時期にイギリスの研究所の要請もあって、開発がスタートしたそうです。

ズラ〜っと並んでるのは、"Linear Algebra"を効率化するため?だった

論文をもとに図解してみたところ、arrayと同じく「ズラ〜っと横並び」。まあ、arrayというデータ形式自体が、この頃から変わってないんだなーとわかったけども。

じゃあなんでこういう「横並び一直線」にしたかというと、開発当時、Linear Algebraを効率化する必要性があったみたい。

多額の資金を投入してドデカイ機械を作った目的は、「人間では手間がかかってやりきれない」計算を効率化するため。

だからこそTuringさんは"Optimum Coding"という方式を唱え、ものすごいスピードで計算実行できるように工夫したそう。

で、理想のスピードを出すために、表にしたような一列になったものが逐次実行される形式を考えた由。

で、これをもっと広げていくと、そういう「一列になったもの」を重ねていけば、これは自然とMatricesになるという。

自分がMITのオーヨー数学の教科書やり始めたら、のっけから延々とMatricesの話。Fourier変換は数学者の友だ、とか、Gaussian Eliminationのやり方とか。

*数学は英語でしかベンキョーしてないので、日本語の訳語はご勘弁! というか、日本語で数学やってわかるんなら、ワザワザ英語Onlyでベンキョーはしないわな(^∇^)

それくらい、Matricesの計算は高等数学、応用数学には欠かせないものなんだよ、ということらしいんだけど、Turingさんの論考読んでると、上の用語がバシバシ出てくる。

"Gaussian Elimination"なんで聞くの何年ぶりだろう、と思ったけど、やっぱりアレ、数学を専門にやる人にとってもそうサクサクとは行かない手筈みたい。

ところがコンピュータで「一直線のデータ」を扱えるなら、3つ重ねればMatricesのできあがり! ってことはコンピュータでMatricesの計算ができるぞ!なんて。

そうした当時の時代の要請と、Matricesの計算のメンドクササと、電子機器の技術水準が相まって、Turingさんが開発したキカイに繋がったみたい。

言ってみれば、プログラミングでよく見るarrayは、「matricesの計算」をやるためのモノなんだなー。Googleも実際、検索のアルゴリズムにmatricesを使ってるそうだし。

なのでアレだ、あらためてMatricesのベンキョーをすると、かえってプログラミングの理屈がよくわかるかもしれない。だって「それをやるために」Turingさんは頑張ったわけだから( ´ ▽ ` )ノ

自分の乏しい数学の知識でも、やっぱり原典にあたると色んなことが分かるナーと興味深かったです。

Turingの本はもうひとつ読んでるとこなので、そのうち(その2)があるかもしれない。ないかもだけど(´∀`)

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