講義スライド

Download Report

Transcript 講義スライド

比較プログラム言語論
平成17年5月25日
森田 彦
レポート(5/18)総括
< テーマ >

本日の講義で、あなたはどの様な点に最も興味を持ちましたか?そし
てその理由は?それらをできる限り具体的に、200字~400字程度で
記述して下さい。
<興味を持った点>



チューリング機械
オートマトン理論
コンパイラ発展の流れ(背景)
チューリング機械①


今回は、チューリングマシンについて興味を持ちました。
計算をする機械ではなく可能かどうかを知る機械を作る
とはなかなかやるなと思いました。さらに計算可能とは
どういうことかを調べ、アルゴリズムのようなことをして、
昔から今のプログラムの基礎ができていたことを実感し
ました。昔は高度な技術はなくとも高度な知能はあった
んだと思います。
本日の講義で最も興味を持った事は、チューリングの考
えです。普通だったら、普段何気何の疑問も持たずに何
気なくしている計算の事を、改めて再確認しようとは思
わない。また、チューリング機械に関しても、たった4つ
の動作だけで計算が出来てしまう事も凄いと思うが、コ
ンピュータが開発される以前にこのような事を思いつい
たと言うのはとても凄い事だと思います。
チューリングの考え



解ける、解けない、つまり計算できる、できない、
とはどのように定式化できるのだろう?
計算できるとはどういうことか?
計算過程をどのように表現できるか?→どこま
で単純化して(しかもエッセンスを失わずに)表
せるか?→ モデル化
最終的にたどりつい
たのが、チューリン
グ機械
テープ
ヘッド
制御部
思考上の機械
計算(思考)過程を簡単な機械で表現したところがポイント!
チューリング機械②


実際の機械ではない!?
私が今日の講義で最も興味を持った点は、チューリング
機械とオートマトンです。理由は、チューリング機械は開
発された当時はどんな人がどんな用途で使っていたの
か知りたいと思ったからです。チューリング機械の説明
を聞いていたのですが、テープ、ヘッド、制御部などがあ
るということはわかりましたが、いまいちどんな機械なの
かイメージできませんでした。
磁気テープを用いていたと聞いた記憶があるのだが
(ちょっと記憶が曖昧)、個人的視点だと磁気テープに
データを保存するというのはちょっと考えれない。 CD-R
を音楽CDにするかデータCD-ROMにするかと言ったよ
うな感覚に近かったのだろうか。
チューリング機械は計算(思考)をモデル化した仮想
上の機械。
オートマトン


オートマトンの考えの中で、人間が頭の中、もしくは紙の
上での計算過程(思考)を状態とし、それを記号で表現す
る、というこの発想そのものがすごいと思いました。 さら
にすごいと感心したのが、その計算過程(思考)・数値を
記号で表現できるのなら、言語・文字も思考の一部だと
関連付けたことがすごいことだと感じました。だから、
オートマトンの考えの中で計算だけでなく、文字・文章で
ある英語の翻訳などにもこれらに応用がきくと考え付い
たところに驚きました。
今回の講義で一番興味を持ったのはオートマトンという
ものについてです。人間の思考の過程を状態の変化と
とらえ、その状態というものを記号に置き換えれば、人
間の思考を数学的に表すことができるという考えが面白
いと思います。
コンパイラ発展の流れ

前回興味を持ったのはコンパイラだったが、コン
パイラ開発以前に、形式文法理論、チューリング
機械→オートマトン理論→形式文法理論とオー
トマトン理論の融合などがあり、そこからコンパイ
ラが開発されたんだということに興味を持った。
これから、プログラミング言語理論の基礎が開
発され、プログラミング方法への研究へと発展し
ていった。つまり、コンパイラが開発され利用さ
れるようになったのは、オートマトン(理論)が鍵
を握っていたということになる。考えた以上に根
元が深く、こういう理論の流れになっているという
のにも関心を持てる。
質問

1995年にフェルマーの最終定理が証明されるま
でに、コンピュータで証明しようという人は現れな
かったのだろうか。コンピュータで証明しようとし
た人がいたとして、証明できなかったのだろうか。
現在、証明されてはいないが計算可能である定
理などがあったとしたら、コンピュータで証明して
みたい。「ある問題が計算可能かどうかをコン
ピュータでの処理が可能かどうか」というプログ
ラムを作ることはできるのだろうか。
四色問題はコンピュータで証明! Appel
& Haken 1976年
テーマ2

あなたはコンパイルの過程を理解してからプログラミン
グを行った方が良いと思いますか?YesかNoを答えた
上で、その理由(あなたの考え)を記述して下さい。
No
33%
Yes
67%
論点Ⅰ 理解していなければプログラミングも
理解できない。 Yes派


コンパイルの過程は理解をしたほうがいいと思
います。インタプリタとの違いやデバッグの遅さ
の理由など、実行されるまでの違いを知るべき
だと思う。むしろもっと細かいところまで知りたい、
知らなければ使う資格がない。
コンパイルとインタプリタの違いやチューリング
機械、有限状態制御部の規則、有限オートマン
の例のようなことをある程度理解しなければプロ
グラミングは出来ないのではないかと思う。
論点Ⅰ プログラミングの理解には関係ない。
No派


昨年からのプログラミングの講義の過程でもコン
パイルを知らなくてもプログラミングはできるとい
う体験から、プログラミングのみを行うのであれ
ば、コンパイルの過程を理解する必要はないと
思いました。
私たちがコンピューターに直接命令することでは
なく自動的に処理してくれるので(理解する)必
要はなく、どのコードを打ち込めばプログラムが
作動するのかだけを理解すればいいと思います。
論点Ⅱ プログラミングの理解が深まり、上達
も早くなる。 Yes派


これまでただ何となく文字を入力、実行と流れ作業のよ
うに行ってきました。しかし、やはりどれだけの過程を経
て実行までに至っているのか、また、具体的にはどのよ
うな処理が行われているかを知ったうえで行ったほうが、
プログラミングへの理解もより深まるのではないかと思
います。
理解していた方がいいと思う。なぜなら、ただプログラム
の文法に沿ったプログラミングをするよりも、頭の中でプ
ログラムがコンピュータの中でどのように処理されていく
のかをイメージしながらプログラミングをした方が、より
深いプログラミングの理解につながると思うからだ。
論点Ⅱ 知らなくてもプログラミングは(問題な
く)できる。 No派

僕の考えとしては、プログラミングを学習する上で、コン
パイルの過程を理解していようとしていまいとほとんど
影響は無いと思います。現に去年プログラミングの授業
を受けていた人は、コンパイルの知識が無かったにもか
かわらず、理解して単位を取得していました。僕は今年、
プログラミングの授業を受けていますが授業でもらった
教科書を読み、基礎課題をひとつずつやっていればプ
ログラムの書き込みから実行まで理解することが出来
ます。 でも、コンパイルについて学んでコンピューター
の中でどのような作業が行われているかを知ることで、
プログラミングについて・コンピューターについて興味が
湧き、より意欲が出るかもしれません。なので、全く関係
がないというわけではないかもしれません。
知っておけばより深い理解(高度なレベル)に・・・!?
論点Ⅲ プログラミング学習(開始)時に戸惑
わずスムーズに学習に入って行ける。 Yes派

私はコンパイルの過程を理解してからプログラミングを学ん
だほうがいいと思います。 やはり、2年生のときにプログラミ
ングをいきなりやり始めるのは、最初は戸惑いもたくさんあり
ました。ただ言われたとおりにテキストにそってプログラミン
グを入力していく中で、実行ボタンを押してその実行結果が
表示されるまでの間にコンピュータの中ではコンパイル…最
適化の作業がおこなわれているのだなんて最初はまったく知
りませんでした。
そしてなぜこのように入力してあっという
間にこのような結果が表示されたのか、その過程も曖昧で気
になっていました。
プログラミングを学習し始める前の基
本的な知識としてコンパイルの過程を理解してからの方が戸
惑うことなくプログラミング実習の方に入り込んでいけると思
います。
論点Ⅲ 最初にコンパイルの過程を学ぶと混
乱する。 No派


私はコンパイルの過程を理解してからプログラミングを行った
ほうがいいとは思いません。確かに過程を本当に理解をした
ならばプログラミングをするにあたって有益でしょう。私は、コ
ンパイルの過程を理解することは重要なことだと思います。し
かし、プログラミングを一度もやったことがない人にとってはそ
の情報はあまりにも難解すぎると思います。
理解するに越したことはないですが、最初からコンパイルにつ
いてとプログラミングをやってしまうと、ごっちゃになると思う。
今、コンパイルの過程を理解してからやったほうがいいと思う
のは、きっとプログラミングについてある程度の知識があるか
ら、説明されたとき「あそこは、こうなっていたのか」とわかるわ
けで、最初から言われてもよくわからないと思う。
一通りプログラミングを学習してから理解することは有益!
論点Ⅳ ある程度プログラミングに慣れてから
コンパイルの過程を学習した方が良い。No派


私は、理解していなくてもいいと思います。なぜなら、実際に
やってみないことには、どのようなものなのかわからない部
分が多いと思うからです。現に百聞は一見にしかずなどとい
う言葉があるように、実際にやってみてから学習をしたほうが、
「あぁ、あの時は、こういうことだったんだ」と納得できるし、何
もわからずにただ理解しようとしても、難しく感じるだけで理
解しにくいと思います。ですから、まずやってみることが大事
だと思います。
コンパイルの過程を理解してからでなくても良いのではない
かと私は思う。なぜなら、今までコンパイルというものを理解
していなくても、プログラミングの方法を知っていれば十分
やっていけたと思うからです。かえって、プログラミング方法
をある程度知っておいてからの方が、コンパイルの過程を理
解しやすい。
論点Ⅳ 理解した方が良いがある程度プログ
ラミングをやった後でも良い。 Yes派の中にも
同意見!?

私は、コンパイルの過程を理解してからプログラミン
グを行った方がいいと思います。それは、一句一句
の意味を知ることで、全体が見えてくるからです。中
身がわかればわかるほど、そのプログラムの面白
味が増すと思います。ただ一つ言えることは、最初
から(コンパイル)過程を考えるよりは、ある程度プ
ログラムを勉強してからの方がより身につくというこ
とです。
(参考) 同じ体験から異なる意見!?
Yes派
私はコンパイルの過程を
理解してからプログラミン
グを行ったほうが良いと思
います。なぜそう思うかと
いうと、昨年プログラミング
演習をやったとき、たまに
理解できないところがあっ
たからです。できる人に
とっては簡単にできますが、
できない人もいるのです。
理解できなかったのはコ
ンパイル過程の知識がな
かったせい!?
No派
私はコンパイルの過程を理解して
からプログラミングを行ったほうが
良いという意見にはNoである。私
はプログラミングを始めた際はな
にがなんだか良くわからなかった。
コンパイルを初めに教えることで
わかりやすくなるかもしれないが、
プログラミングのいろはもわから
ない初心者に教えても余計わか
らなくなるだけだと思う。それなら
ばある程度理解していった段階
で教えるのがベストだと考えてい
るからである。
論点Ⅴ 学習者の立場による
Yes派
No(中立)派
もし自分がプログラムや
その方面の仕事に就い
ていれば答えはYESだ
が、そうでないならNO。
現在は学生でありこの
勉強をしている身である
からやはり答えはYES
です。
私はプログラミングを行う前にコン
パイルについて勉強するべきか否
かについては、その人にとってのプ
ログラミングの使用する頻度による
と考えています。毎日でも使うよう
な人はやはりプログラミングの舞台
裏とも言えるコンパイルをしっかり
と頭の中に入れておく必要がある
でしょう。しかし趣味程度の目的な
らばプログラミングの表面上をしっ
かりと押さえておけば問題はないと
思います。
共通の意見!
コンパイル過程を理解しておいた方が良いか?
論点の整理
<論点1>
理解していなければプログラミングも理解できない。
No派 プログラミングの理解には関係ない。
Yes派
<論点2>
プログラミングの理解が深まり、上達も早くなる。
No派 知らなくてもプログラミングは(問題なく)できる。
Yes派
<論点3>
プログラミング学習(開始)時に戸惑わずスムーズに
学習に入って行ける。
No派 最初にコンパイルの過程を学ぶと混乱する。プログラミ
ングをやった後の方が良い。
Yes派
本日のテーマ
次の2点について、皆の意見を述べてもらいます。
1. 3つの論争のいずれかについてあなたがどち
らの主張を支持するか、を答えて下さい。その
際、そう支持する理由も記述して下さい。
2. HPのレポート抜粋「意識調査:コンパイル過程
を理解してからプログラミングを行った方が良
いか?」には、ここで採り上げていない意見も
掲載しています。これらのレポートの意見の中
から一つを採り上げ、それに対する賛同意見
あるいは反論を記述して下さい。
第6回目レポート




前の2点のテーマについて、できる限り明確に記
述して下さい。いずれも200字程度。
なお、上の記述を行った上で,(いつも通り)講義
の感想や質問等を付加しても結構です。
提出先:[email protected]
件名:「学籍番号(半角)+半角空白+氏名」を
記入して下さい。
件名例)
s03xxxx 学院太郎
論点Ⅱ 知らなくてもプログラミングは(問題な
く)できる。 No派(補足)

コンパイルの過程を理解してからプログラミング
を行った方がよいかという問題について僕の考
えは「NO」です。なぜなら、現に僕が講義でプロ
グラミングを行った時に問題なく動作したからで
す。過程を知らなくてもプログラミングのルール
や、ちょっとした数学的思考があれば、ある程度
のプログラミングが可能だからです。しかし過程
を理解していた方が、より高度なプログラミング
をするためには大切なことかもしれません。
論点Ⅲ 最初にコンパイルの過程を学ぶと混
乱する。 No派(補足)


・・・ ある程度プログラミングの知識をつけたうえ
で、コンパイルの過程を学ぶ方法が良いと思いま
す。
・・・ 一通り学習してから、理解することは賛成で
ある。そのほうが、よりプログラムについて深く理
解できると思うからです。
チューリングの着想 -補足-






問題意識:(人が)計算をする、という作業はどういうもの
なのか?
それを考えるには人の心(頭)の中をモデル化しなけれ
ばならない
(論文の書き出し) 「計算している人はある機械にたと
えられる・・・」
ねらい:機械にたとえることで、計算(思考)という作業の
本質が(具体的に)見えてくるのでは?
計算(思考)の手順を忠実に再現する機械を追求する→
チューリング機械のアイデアに到達!
コンピュータ科学の誕生!?
25歳の時の研究!