チューリング賞から楽しむプログラミング 第一回
我が子には、プログラミングやコンピュータに興味をもってもらいたいな、、、と考えています。
なるべくわかりやすいプログラミング、コンピュータの説明をしよう、興味の出そうなことを伝えよう、と思っていたのですが、肝心なことを忘れていました。
偉人に学ぶ
家には、なぜかマリー・アントワネットやクレオパトラの歴史漫画、あとベートーベンの歴史漫画があるのですが、それらをみているように、自然に楽しくプログラミングやコンピュータに関する技術に親しめたら。。。
マンガ化されてないかな。。。
されてない、、、
いずれは出版されるかもしれませんが、この思いを吐き出さずにはいられない!
ということで、小学生の皆さんにもわかるように、プログラミング、コンピュータに関する偉人を紹介したいと思います。
プログラミング、という言葉は聞き慣れていると思いますが、もとは、計算機科学、と呼ばれる学問のなかで生まれた技術の一つになります。
計算機科学といえば「チューリング賞」という、コンピュータ界のノーベル賞と呼ばれる賞があり、その中の人々を紹介していきたいと思います。
まずは、、、
1966年受賞のアラン・パリス!
初回受賞者です。
この人の受賞理由は
プログラミング技法とコンパイラ構築の分野への貢献に対して
…さあ、なにがすごいのかよくわからないですね。
簡単に言うと、
プログラムをうまく作る方法を見つけてくれて、しかもみんなにその方法を教えてくれた
になります。
これを聞くだけだと「スゴイプログラマーだったのかー」になるのですが、そもそもコンピュータに対してプログラミングをどう作ればよいか、という問題を、学問の1分野として確立してくれた人です。
アランは、コンピュータにプログラムを作る過程で知っておいたほうが良いことが色々ある事に気づいたのですが、数学でもない、電気工学でもない内容を、どうやって学生に教えるか。そこで、計算機科学(英語ではコンピュータサイエンス、これからはこっちで説明しましょう)という、今のプログラミングやAIなどの基礎になった学問を作ってくれます。
では、アラン・パリスはどういった人だったのか、何をしてきたのかを交えながら凄さをお伝えしたいと思います。
アランは、大学では化学を専攻し優秀な成績でした。第二次世界大戦後に復学したとき、「、、、なんか違う」ということで、数学科に変更。
しかもマサチューセッツ工科大学!しかもここでも優秀。ここからして常人と違う。
その後、同大学での「つむじ風」というコンピュータを使ったプロジェクトに数学研究者として参加。つむじ風って、、、結構ネーミングセンスがあれですね、、、。
他にも当時の最先端のコンピュータについて、コンピュータ向けのコンパイラやアセンブラを作成してきました。
さあ、ここでコンパイラやアセンブラ、という言葉が出てきました。
現在、「プログラミング」を勉強すると、ScratchやJavascript Java Pythonなどのプログラミング言語がよく使われます。
これらは、人間の見た目に分かりやすいよう工夫されています。
例えば、ブロックを積み上げるようにつくれたり、英単語を使って文章を書くようにブログラムが作れます。
しかし!
昔は違いました。
そのコンピューター用に動くプログラムを作ることが大変だったんです。
今なら、上記で紹介したような「人が分かりやすい」プログラム言語で「ソースコード」を書けば、あとはどんなコンピュータでも実行できますが、昔は、人間には分かりづらいが「機械が分かりやすい」プログラム言語で書いて、でも本当に機械で動かすためにはさらに正しく翻訳する変換をしないといけなくて、書いた「ソースコード」を翻訳するためのプログラムも作らないといけません。
外国の人と話すシーンに例えると、今は翻訳ツールでなんとか日本語をベースに言いたいことが伝えられますが、昔はツールなし、しかも、本当の「外国語」は難しすぎるので、人と機械の間を取った言葉を作り、そこで文章をまず書きます。
その文章をもとに、主語はこれ、動詞はこれ、順番としてはこの順で読んでもらって、でもこの場合は更にこっちから読んで、、、と文法まできっちり決めてから、その文法にそって、本当の機械語にさらに翻訳して、やっと機械が理解できるようになります。
コンパイラ(プログラムコードをコンピュータがわかる形にまで変換するプログラム)をつくるのが大変なんです。まず以下の3つは必要です。
機械への命令単位に合わせて、人間がわかる略語で書いたプログラムコード
■パーサー
アセンブラのプログラムコードの文法をチェックして読み込んでコードジェネレーターにわたすプログラム
■コードジェネレーター
パーサーから受け取ったコードを機械語に翻訳していく
といったプログラムを作ります。(厳密な説明はとりあえず置いておいてイメージで、、)
そんな時代にアランはどうしたか。
あるコンピュータが発売されたとき、それに対応したプログラムを作るため、3人のスーパープログラマーを集め、三角形の頂点にそれぞれ作業机を配置しました。
ある一人はアセンブラ、もう一人はパーサー、最後の一人はコードジェネレーターの担当です。
アセンブラ担当が少しプログラムができると、パーサー担当がそれを見ながらどんな文法なのかを理解して作っていき、コードジェネレーター担当はパーサー担当がどうやってコードを渡そうとするか確認しながら、コンピュータの機械語としてなにを出せばよいかしらべます。それをグルグル回します。
3賢人が集まってプログラムが凄まじいスピードで出来ていく!
アランは、自分自身でももちろん一人でできましたが、優秀なプログラマーを使い、如何に早く、効率よくプログラムが作れるか、を考えられる人でした。3賢人を取りまとめる最高の頭脳!熱いですね。
また、1950年代は、他の分野との競争の問題もありました。物理学者では原子力エネルギー、生物学者は遺伝子工学。国からの予算が注ぎ込まれます。
「自分の分野は何をすべきなのか」
これまで1台何十億円というコンピュータが、いずれ家庭に何台も入る世界で何をすべきか。
アランは考えます。コンピュータサイエンスという分野をつくり、そこでみんなを学ばせることを。
そして、コンピューターサイエンスを、神経学者と心理学者を例に説明します。あまり最近の業界ではこのような比喩を使う人は見かけなかったので新鮮でした。
神経科学者は神経系の奥深くで非常に原始的なレベルでなにがどう動くのかに興味があります。 コンピュータサイエンティストがAND OR NOTゲートを見ることに時間をかける。
一方、心理学者は、人間を一つの実体として、全体として見ており、人間を何で動かせるのかを理解しようとしています。
心理学者の武器は、マクロなものの見方です。 どうすれば神経科学と心理学の間に架け橋を作ることができるのでしょうか? アランの結論は、「コンピュータサイエンスはこの橋を提供する学問であり、その橋はソフトウェアの研究からもたらされる」でした。考え方が深い!
もう書いていくとキリがない!
最後に、アランはプログラミングをする人々に、アドバイスというか苦言をいくつも残してくれています。
「10個の引数のある関数を作ったら、きっといくつか忘れるだろう。引数の数は少なくしなさい」
私は6つ位で覚えられなくなります、、、。
その中で、私が最も好きなのはこれ!
「進化とは変化であり最適化は変化を妨げる」
さあ、最適化というと、いいことだと思うのですが、同じように良いことと思われる「進化」できない、とあります。なぜか。最初はよくわかりませんでした。
でも、繁栄を極め大型化した恐竜も、隕石衝突による環境変化には耐えられなかったように、その時点で最高にして安心するのではなく、最新情報を入手し、常に自分自身をアップデートしないと生き残れない、と考えると腑に落ちました。
いやー。偉人を知るとワクワクします!もっとまとめていきたいと思います。
※参考サイト
https://www.ipsj.or.jp/magazine/9faeag000000rjhz-att/IPSJ-MGN580504.pdf
https://amturing.acm.org/lectures.cfm