比較プログラム言語論 平成17年6月15日 森田 彦
レポート(6/8)総括① Ⅴ 各論争への賛成(反対)意見の詳細はHP参照 Ⅰ Ⅳ Ⅲ Ⅱ < テーマ > <選択した論争の分布> < テーマ > 講義で解説した、厳密文法派と自由文法派の論争Ⅰ~論争Ⅴの内、最も関心のあるものを一つ採り上げそのどちらを支持するかを答え、さらに、そう支持する理由を説明して下さい。 <選択した論争の分布> Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ 各論争への賛成(反対)意見の詳細はHP参照
レポート(6/8)総括② 論争別結果 厳密 自由 基礎か慣れか? 誤った理解?やる気喪失? 文法エラー 厳密、自由どちらが先? レポート(6/8)総括② 論争別結果 基礎か慣れか? 誤った理解?やる気喪失? 文法エラー 厳密 自由 厳密、自由どちらが先? 明瞭さ?簡潔さ?
レポート(6/8)総括③ 総合結果 厳密文法派 vs 自由文法派 (35%) 厳密文法 自由文法 (65%) ( )内は前回の値
自由文法派→厳密文法派へ 今までは自由文法派でしたが、厳密文法の方が初心者にはいいかもしれないと思ってきました。というのも、文法エラーが細かく出た方が初心者にはわかりやすいと思えたからです。私はJAVAでなれてきたので、自由文法でもエラーをどうにか見つけ、直すことができるようになりました。しかし、JAVAを使ったことのない友人は、エラーが出るたびにどこが間違っているか理解できず、やる気をなくしている状況でした。なので、エラーを指摘してくれる方が、初心者には使いやすいと思えてきました。 → 自分の経験から
論争Ⅱ 厳密文法派への意見① <厳密文法派Ⅱ-1(6/1)の意見> 論争Ⅱ 厳密文法派への意見① <厳密文法派Ⅱ-1(6/1)の意見> ・・・私がDelphiを支持する理由は、何事にも最初は厳しくした方がためになると思うからです。Delphiは記述が面倒・約束事が多いので、初学者は覚える気が無くなる人が多く出てしまうかもしれませんが、そんな基礎を面倒くさがって嫌になる時点でもうダメなのでは?結局Delphiから学ぶにしても、Javaから学ぶにしても、興味を持てない人が出てくると思うので、そこで興味を持てない人は何の言語から始めても無駄だと思います。そこはこの分野に向いていなかったということであきらめるとか…。すこし冷たい考え方だと思いますが、仕方ないのではないでしょうか。
論争Ⅱ 厳密文法派Ⅱ-1への意見 <賛成意見> <反対意見> 論争Ⅱ 厳密文法派Ⅱ-1への意見 <賛成意見> まさに同意で、大学生、ましてや二十歳を超えた人間が文法が厳しいからやる気が出ない、とはちょっとどうかと思います。 「興味を持てない人は何の言語から始めても無駄だと思います。」とありますが、これにもまた同意です。厳しいことを言うかもしれませんが、プログラミングに興味のない人はそもそも履修しなければ良いと思います。 <反対意見> そう簡単に見捨ててしまうのはどうだろう?まずは触れることからはじめ、徐々に使えるようになっていくかもしれない。いきなりそう可能性をつぶす考えはどうかと思う。
論争Ⅱ 厳密文法派への意見② <厳密文法派Ⅱ-2(6/1)の意見> 論争Ⅱ 厳密文法派への意見② <厳密文法派Ⅱ-2(6/1)の意見> 初心者にとって構文規則が厳密なものと比較的自由で融通の利くもののどちらがいいかということですが、構文規則の厳密なものからはじめるべきだと思います。これはプログラミング言語だけでなくほかのことでも、初めてやるものはまず基礎を徹底的に教えられて(自分で学んで)、その後に自分の型にあった方法を探していくものだと思うからです。 ただ、構文が厳密なものを徹底しておこなっていると、それに縛られて柔軟な発想を妨げる可能性も出てくると思うので、それがすべてだと思って学習をするということのないようにする必要があると思います。
厳密文法派Ⅱ-2への意見 <賛成意見> この人の意見を聞いてさらに視野が広がりました。なぜ私が厳密文法派にしたのかというと「自分のミスに気づかず間違ったまま理解をしてしまう危険性がある。」また「基礎の土台をしっかり確立させておけば、今後発展させたプログラムを組むことができる」と思ったからです。ただ、その私の意見は厳密文法だけに囚われた狭い意見だなということに気づきました。 この人は、自由文法派のことも考慮しています。「それに縛られて柔軟な発想を妨げる可能性も出てくる」や「それがすべてだと思って学習をするということのないようにする必要がある」という意見を聞いてなるほどなと納得しました。いろんな可能性を考えるなら、何かに囚われすぎないという大切なことに気づきました。
論争Ⅱ 厳密文法派への意見③ <厳密文法派Ⅱ-4(6/1)の意見> 論争Ⅱ 厳密文法派への意見③ <厳密文法派Ⅱ-4(6/1)の意見> 私は最初に学習するプログラミング言語として、Delphiのような文法が厳密でミスを未然に防ぐタイプの方がいいのではないかと思う。 理由は、最初にしっかりとした正しい記述を覚えるためにも、記述が厳しい言語から学習していったほうがいいと思うからである。最初に記述が厳しい言語を学んでいれば、しっかりとしたプログラミングの知識、基礎を自然と固めていくことができると思うし、それができた上でJava言語のような自由度が高く融通の利くタイプを学んでいけば、プログラミングをしっかりと理解できると思う。
厳密文法派Ⅱ-4への意見 <賛成意見> やはり、何事にも土台が必要だろう。その土台を初歩段階にやることによって、覚えるスピードも変わって行くだろう。自由度の高い融通の利くタイプのJava言語を学ぶのは、それからでも遅くはないだろう。 全くその通りだと思います。基礎をしっかり覚えないと「その場しのぎ」に終わってしまうし簡単な問題が解けても「ひねり」の問題が出てきたときに全く対応できないと思います。基礎をしっかり覚えておけば応用も考えて解くことができると思います。
自由文法派からの問いかけ-最初に身につけるべき基礎とは? 最初に基礎を学ぶという意見ですが、その基礎というのは具体的にはどのようなことなのか私にはよくわかりません。文法を厳しくする事が基礎なのか、又は、プログラミングの流れを学ぶ事が基礎なのか。私は、後者の方が基礎なのではないかと思います。 後で具体的に考察する。
論争Ⅱ 自由文法派への意見 <自由文法派Ⅱ-3(6/1)の意見> 文法チェックが緩い言語が良いと思います。 プログラミングを学ぶ第一歩として、プログラミングに慣れるということが大事だと考えます。 なぜなら、自分がプログラミングを学んだとき、「できた、なんとなくでもわかった」という喜びが進歩として実感できたからです。 Delphiのような敷居が高い言語は、プログラミングは難しい、つまらないというイメージをつけられるのでは、と考えられるからです。
自由文法派Ⅱ-3への意見① <賛成意見> 「プログラミングになれることが大事」、「なんとなくでもわかった、という喜びが進歩として実感できた」という意見に賛同できます。身につけるのに時間がかかってしまうかもしれないけど、そういうやり方のほうがモチベーションは保ってできると思います。 プログラムを初めて習う初心者は、プログラムの文法を覚えるよりも、まず実際にプログラムを動かしてみたいと思っているはずです。文法がわからなくても、とりあえずプログラムを実行して、「なんとなくできた。」という『実感』を得ることで、次のステップに進む意欲が出てくるのだと思います。最初から厳密な文法を習って基礎を固めることは、たしかに大切なことだと思いますが、その基礎を固めようとする『やる気』を持つことが、一番大切なことだと思います。
自由文法派Ⅱ-3への意見② <賛成意見> 賛同します。理由は、『「できた、なんとなく出もわかった」という喜び』というところです。私が思っていることは、プログラミングに限らず、上手になりたいのなら、まずはそれを好きになり、そしてそれをすることで、喜びを感じることができたのなら進歩する速さは普通にするときよりも格段に早いと思います。
自由文法派の類似意見 テーマとして考察 楽しさ・興味→意欲→理解へ!? まずは、本当にプログラミングの楽しさを知ることが一番に大切だと思います。・・・実行したときに、できてたときの快感がまたたまらないです。 少しでも早くプログラミングの面白さを知ってもらいたい・・・ まず興味をもつことが一番大事であると思いました。 まずはプログラムの記述が簡単な言語で、プログラミングを好きになる事が大切だと思うからです。そうする事によって、プログラミングをもっと理解できるようになろうという意欲がわいてくると思います。 テーマとして考察 楽しさ・興味→意欲→理解へ!?
厳密文法派からの反論 論争Ⅱ自由文法派の意見に反論します。確かに、Ⅱ-2にある「初心者はプログラミングがどういうものかを知るために学習するので厳密すぎると嫌になる」という意見はその通りだと思いますが、案外簡単に進むほど基礎部分の理解ができていないということもあると思います。ただ漠然とプログラミングに触れて慣れていくのではなく、どこがどうなって、どういう結果が得られるかをしっかりと理解するためにも、最初は厳密な文法のほうがいいのではないでしょうか。
ある自由文法派の意見(示唆) BASICを使って議論を深めてみよう・・・ 私は、自由文法でプログラミングになれるという意見に賛成です。なぜなら、最初に厳しいもので学ぶとつまらないものだと思ってしまうと思うからです。例えば、BASICという言語があります。今は、VBという形で多くの人が利用していると聞きました。このBASICは、初心者向けに作られた言語で、かなり自由度が高いと思います。最初に、BASICを作った人もこれからはじめる人は、最初は文法に融通が効くものの方がよいと思ったのでこの言語を作ったのではないかと思います。受け取り方は人それぞれだと思いますが、私は自由な方が理解しやすく、自分からステップアップしていけると思います。 BASICを使って議論を深めてみよう・・・
BASIC言語プログラム例 2 + 3.5 = 5.5 制約が少ない!→初心者向き? 10: A=2 20: B=3.5 30: C=A+B 文番号が必要 2 + 3.5 = 5.5 <実行結果> 10: A=2 20: B=3.5 30: C=A+B 40: print A,”+”,B,”=“,C 制約が少ない!→初心者向き? 変数宣言なし! 実数型、整数型の区別もなし! 思いつくままに書いてprintで答を出力すれば良い!
スパゲッティ・プログラム 思いつくままに、GOTO文を使ってプログラムを拡張。→ 迷路のようなプログラムに。 10: INPUT A 20: IF A>0 THEN 50 30: PRINT “正ではない” 40: GOTO 60 50: PRINT “正の数” 60: END 10: INPUT A 20: IF A>0 THEN 50 25: IF A=0 THEN 45 30: PRINT “負の数” 40: GOTO 60 45: PRINT “0である” 46: GOTO 60 50: PRINT “正の数” 60: END 思いつくままに、GOTO文を使ってプログラムを拡張。→ 迷路のようなプログラムに。
BASICの長所・短所 長所 短所 皆はBASICをどう評価しますか? 文法上の制約が少ない→初心者にも抵抗が少ない。 インタプリタなので、とにかく実行できる。 思いつくままに記述できる。 変数型の概念など、プログラミング上の基本概念が身に付きにくい。 誤った結果を得た場合の原因の解析が困難。 迷路のような見通しの悪いプログラムになりやすい。 皆はBASICをどう評価しますか?
プログラミングを教える側の配慮の必要性の指摘 自由文法言語の場合 プログラミングを教える側の配慮の必要性の指摘 自由文法言語の場合 (自由文法派6/1の意見) ・・・『初めて学習するプログラミング言語』は記述の自由度が高く融通が利くタイプだと思う。 ただ、このタイプだと教える側がいるなら、教える側が多少意地悪する必要があるのかもしれない。さりげなく失敗に仕向ける為に。 (厳密文法派6/8の意見) ・・・全体的には、厳密文法派の方に支持を置くが、自分が教える側に立ったとき、(効果的に)教えるためには間違いの機会を与え、間違いを自分で発見してもらい、その前向きの力をバネに頑張ってもらうというのも理想な形なのかもしれない。こういった意味では、自由文法派の考えも否めないだろう。
プログラミングを教える側の配慮の必要性の指摘 厳密文法言語の場合 プログラミングを教える側の配慮の必要性の指摘 厳密文法言語の場合 (厳密文法派6/1の意見) ・・・構文規則の厳密なものからはじめるべきだと思います。・・・ ただ、構文が厳密なものを徹底しておこなっていると、それに縛られて柔軟な発想を妨げる可能性も出てくると思うので、それがすべてだと思って学習をするということのないようにする必要があると思います。 (自由文法派6/8の意見) ・・・初心者には、簡単な言語と難しい言語があるということを伝えてから学習するべきだと思います。
テーマ1 あなたの友人で、「これからプログラミングを学習してみたい」という人がいたとします。あなたは、その友人にDelphiとBASICのいずれを勧めますか?これまでの議論を踏まえて、いずれを勧めるかを回答し、その理由(あなたの考え)を記述して下さい。 ※ どういう点(要素)をあなたが最優先とするか、という点がポイントになるはずです。
プログラミングの上達には?自由文法派の考え まずはそれを好きになり、そしてそれをすることで、喜びを感じることができたのなら進歩する速さは普通にするときよりも格段に早くなる・・・ まずは、本当にプログラミングの楽しさを知ることが一番に大切だと思います。・・・実行したときに、できてたときの快感がまたたまらないです。 少しでも早くプログラミングの面白さを知ってもらいたい・・・ まず興味をもつことが一番大事であると思いました。 まずはプログラムの記述が簡単な言語で、プログラミングを好きになる事が大切だと思うからです。そうする事によって、プログラミングをもっと理解できるようになろうという意欲がわいてくると思います。 楽しさ・興味→意欲→理解へ!?
テーマ2 理解が先?楽しさが先? <疑問> 皆の場合はどちらでしたか? テーマ2 理解が先?楽しさが先? <疑問> プログラミング演習の楽しさと理解度の相関をみると、楽しいと感ずる人ほど、理解度は高くなっています。 楽しいから理解できるようになったのか、あるいは理解できるから楽しくなったのか、どっちなのでしょうか? 皆の場合はどちらでしたか?
第9回目レポートテーマ テーマ1 あなたの友人で、「これからプログラミングを学習してみたい」という人がいたとします。あなたは、その友人にDelphiとBASICのいずれを勧めますか?これまでの議論を踏まえて、いずれを勧めるかを回答し、その理由(あなたの考え)を記述して下さい。 テーマ2 理解度と楽しさの相関について、あなたは「楽しいから理解度が上がる」と思いますか?それとも「理解できたから楽しくなる」と考えますか?回答と共にそう思う理由を、あなたのプログラミング演習での体験に基づいて答えて下さい。
第9回目レポート 上の2つのテーマについていつもと同じ要領でレポート提出して下さい。 なお、上の記述を行った上で、他のレポートへの意見等を付加しても結構です。 提出先:hiko@edu.sgu.ac.jp 件名:「学籍番号(半角)+半角空白+氏名」を記入して下さい。 例) s03xxxx 学院太郎
厳密文法派 自由文法派 Ⅰ.文法エラーが細かく出た方が初学者向き Ⅰ.文法エラーはあまり出ない方が初学者向き Ⅱ.最初に基礎をきちんと身に付けた方が良い Ⅱ.最初はプログラミングに慣れることが大切 Ⅲ.自由度の高い文法で学習すると誤った理解のまま進行するのでは? Ⅲ.あまり厳密だとやる気がなくなるのでは? Ⅳ.記述(の意味)が明瞭な方が理解しやすい Ⅳ.記述が簡潔な方が理解しやすい Ⅴ.厳密文法→自由文法へ Ⅴ.自由文法→厳密文法へ