比較プログラム言語論

比較プログラム言語論
平成16年6月9日
森田 彦
レポート(6/2)総括
< テーマ >
「初めて学習するプログラミング言語としては、文法が厳密でエラーを未然に
防ぐタイプのものが良いですか、それとも、記述の自由度が高く融通が利くタ
イプの方が良いと思いますか?」に関する5/26の厳密文法派と自由度・融
通派の意見について
あなたはどちらの説を支持しますか?その回答と、そう支持する理由を、で
きる限りHPに掲載している意見を参照(引用)する形で説明して下さい。
<回答結果>
厳密文法派を支持
50%
自由度・融通派を支持
50%
ちょうど半数に意見が
割れた!
<感想>
文法厳密派、自由度・融通派ともに言っている意見は一理あるのに、その理
由となっていることが同じようなことなのが面白いと思いました。
厳密文法派を支持Ⅰ
Ⅰ.最初にプログラミング言語の特殊性を意識させるべき

『プログラミング言語というのは今まで触れてきた日本
語・英語などといった言語よりも厳密な規則が多々あり、
違う性質・理論を持つ』という話にとても納得出来ました。
確かに、特に日本語はそういった意味では曖昧な点が
多いように感じます。規則がきちんとしているからこそ、
その規則をきちんと把握して理解しさえすれば記述もし
やすく、わかりやすくなるのではと思いました。先にその
ような言語を学んでいた方が、後から自分で違う言語を
学ぼうと思った時にも厳密な書き方が出来るようになり
入って行きやすいのではないかと思います。
自由度・融通派からの反論
厳密文法派を支持Ⅱ
Ⅱ.最初にきちんとした書き方を身につけるべき


先週は自由度・融通派がきくほうがよいと考えていたが、
今週の解説や他の意見をよく聞くと厳密文法派のほう
がよいと感じた。なぜなら、エラーを未然に防いでくれる
ほうが、変な癖や間違った書き方を覚えないで、しっか
りとした文法が身につくと言う意見に賛成できるからで
す。
厳密文法派を支持します。(中略)実際に自分も「自由
度が高く融通が利くタイプでプログラムを学習してしまう
と、変なくせがついてしまう。」ということは前回の講義レ
ポートにも書きましたし、「正しい位置で打つタイピング
練習も、変なくせがついている人たちはとても大変そう
でした」という点で自分もWORDの資格検定の講座でと
ても苦労しているからです。
自由度・融通派からの反論
厳密文法派を支持Ⅲ①
Ⅲ.エラー表示が厳しい方が親切で理解も深まる

エラー表示が厳密な程“間違えた原因”を特定し
やすいとの意見に賛成です。プログラムの地点
ではエラーが確認されず、動作した地点でエ
ラーが発覚することがありますが、初心者にとっ
てエラーは未知のもので、どこが間違えている
のか理解出来ずに混乱するという経験が私にも
ありました。JAVAの開発チームもエラーに苦し
んでC++からJAVAを開発したと伺いました。エ
ラー表示は厳密で詳細な程よいことの立証にな
ると思います。
厳密文法派を支持Ⅲ②
Ⅲ.エラー表示が厳しい方が親切で理解も深まる

HPにも載っていたようにいくら熟練した人でも必
ずエラーは出るので初心者であるならばそのエ
ラー数は格段に多くなる。何事も基礎が肝心だ
と思うのでハードルを低くしてある自由な言語よ
り、わざと難しくしてエラーを極力出さない方法を
学ぶべきである。だが、ある程度の実力がつい
てきたら自由度の高いほうが、幅が広がるので
使いやすいのではないかと思う。結論として歩行
器の役目は厳密文法派でそれ以降は自由に歩
かせるほうがよい。
自由度・融通派からの反論
自由度・融通派を支持Ⅰ
Ⅰ.最初のハードルを低くしてまず慣れることが先決


やはり最初はプログラミングの文法や言語の厳密性を理解するので
はなく、プログラミングという事に触れてそれがどんなものか、どういう
ことができるのかなどプログラミングということについてなんとなくでも
いいので知る事が大切だと思うからです。これはプログラム言語だけ
に限った事ではないとおもいます。
重要なのは、どちらの説を採るにしても、まず"慣れる"ということで、そ
の中でも特にキーボードを使うことに慣れるということは、最優先して
もいいのではないでしょうか。その次として、どんなものでもいいから、
"とりあえず走らせてみる(run,実行する)"ということだと思います。そ
の結果から、"どの部分をいじってどうなった"など考えていけば、あと
は個人の力量に応じてステップアップする。そういうプロセスの方が
重要ではないかと考え、プログラム学習の初めにふさわしいのは、"
自由度が高く、融通が利くもの"という説を支持します。
厳密文法派からの反論
自由度・融通派を支持Ⅱ
Ⅱ.エラーを出すより、動作させる楽しさを知ることが大切


私は、今回の講義を聞いて意見が変わり、初めて使うプログラム言語
は自由度の高いものが良いと思いました、それはエラーを出すより動
く楽しさを体験するという意見に賛成するからです、去年プログラムを
習いエラーが出るとやる気が無くなるのを思い出したので、やはりや
る気を出させるためにもプログラムを動かしているという自信をもた
せるためにも自由度の高い言語が良いと思いました。
私は、自由度・融通派を支持します。なぜなら、「はじめから文法的に
厳しくしてしまうと、プログラミングの楽しさを知る前に嫌いになり挫折
してしまう」ということが一番大事だと思ったからです。何を学ぶにして
も、スポーツをするにしても、一度苦手意識を持ってしまうと、そこから
スキルアップをするには大変なことだと思います。プログラミングは難
しいことですが、自分のやる気と努力次第で無限大にまで広がる知
識だと私は思っています。こういったことを考えると、まずプログラムを
作る楽しさ、完成した作品を実行したときの達成感を知り、次はもっと
大きなプログラムにチャレンジしよう、といったチャレンジ精神を掻き
立てることが大事だと思いました。
厳密文法派からの反論
自由度・融通派を支持Ⅲ①
Ⅲ.エラーを体験する方が理解が深まる

厳密文法が適すると回答した人の中で、何も知らな
いうちから厳密なプログラムを書くほうが、後々役に
立つと回答しているけど、最初から厳密なプログラ
ムを経験するよりは、ある程度エラーや間違いを経
験してからでも遅くないと思いました。なぜなら、エ
ラーというものを経験しないまま学習するのは、そ
れこそ後々役に立たなくなってしまうような気がする
からです。間違いをしながら学習することは自分の
ためにもなるし、間違いを正すというのも勉強になる
からです。
自由度・融通派を支持Ⅲ②
Ⅲ.エラーを体験する方が理解が深まる

自由度が高く融通が利くタイプのほうがエラーを起
こした部分を理解するためにプログラム上で認識す
るよりも実際に動かしてみて、そのエラーが起こった
原因を追究し判断、修正を行うほうが知識として身
に付くと思うという意見がありましたが、私もそのと
おりだと思います。やはりエラーがなぜ起きたのか
を自分で考えることによって、これからそれが起こっ
たときにでも対処が出来るようになると思います。
厳密文法派からの反論
整理-厳密文法派の説

言語の特殊性を意識させるべき
PASCAL言語
支持: そう意識することで後の学習がスムーズになる。
反論: 始めにつまずいて挫折する危険性がある。
苦手意識

最初にきちんとした書き方を身につけるべき
支持: 変なくせがつかず、後に応用が利くようになる。
反論: その言語特有の書式が身に付き、応用が利かなくなるのでは?

エラー表示が厳しい方が親切で理解も深まる
支持: エラーの箇所や原因を特定しやすいので理解も深まる。
反論: エラーが頻出することでやる気を失う恐れがある。
整理-自由度・融通派の説

ハードルを低くして慣れることが先決
BASIC
支持: 初学者の場合、まず慣れることが肝心。それには余計な制約は
ない方が良い。
反論: 基礎を理解せずに我流で慣れると後で発展性がなくなる。

とにかく動作させる楽しさを知ることが大切
支持: 細かいエラーを出すより動作させることで、楽しさを実感すれば自
ずと自信とやる気が出てくるはず。
反論: きちんとした書き方でプログラムを作成し、正しく動作できなけれ
ば楽しさも実感できないのでは。

エラーを体験する方が理解が深まる
支持: エラーを体験的に克服することで理解が深まる。
反論: 初心者には、自力でのエラー克服は無理。
第8回目レポート




6/2のレポート抜粋に掲載されているレポート(意見)の
いずれかについて、あなたのコメントを記述して下さい。
その際、(その意見に)同意なのか、反論なのか、を述
べた上で、なぜそう思うのかを、できる限り明確に記述し
て下さい。
なお、上の記述を行った上で、(いつも通り)講義の感想
や質問等を付加しても結構です。
提出先:[email protected]
件名:「学籍番号(半角)+半角空白+氏名」を記入し
て下さい。
例) s02xxx 学院太郎
自由度・融通派からの反論Ⅰ

『プログラミング言語というのは今まで触れてき
た日本語・英語などといった言語よりも厳密な規
則が多々あり・・・(中略)最初から文法が厳密な
ものであり、理論が異なるものであるという認識
を持ってもらえば、今までの言語を習う姿勢とは、
また違った姿勢で入っていけるのだと思いま
す。』とありましたが、それはパソコンに強く、初
めから好きな人の意見だと思います。確かに、
初めに厳しい規則で覚えてしまったほうが後々
楽だとは思います。ですが、初めにつまずいて
嫌になってしまっては、後々はないのですから。
自由度・融通派からの反論Ⅱ


「自由度が高く融通が利くタイプでプログラムを学習して
しまうと、変なくせがついてしまい、無駄や粗が多い間
違った書き方が身についてしまう」と載っていますが、私
は逆ではないとかと思います、文法が厳密なプログラミ
ング言語を使うことで、その言語特有の書き方が染み付
いてしまい、自由に書けなくなると思います。
最初にきちんとした書き方を身に付けさせるべきという
意見がありましたが、例え変な癖がついたとしてもなに
かの拍子に間違いに気付けば直すように努力すればい
いことであってたいした問題にはならないと思いますが、
最初から拘束されていたらどこか作業的で、プログラミ
ングをして全然楽しくないと思います。
自由度・融通派からの反論Ⅲ

厳密文法派の方の意見に、エラー表示が厳しい
方が親切で理解も深まるとありましたが、そう思
える人はともかくとして、そうでない人にとっては
拘束以外のなにものでもないと思います。比較
的融通が利くJavaでさえたまにエラーがうっとう
しいと思う時があるので、やはり初心者にはそう
いうのは抜きにしてプログラミングの楽しさを教
えさせたほうがいいと思います。
厳密文法派からの反論Ⅰ

プログラムに「慣れるために」自由文法のプログラムを習うほうが良い
というのは、若干間違っていると思います。確かに厳密文法は記述が
面倒ですが、今日出てきた中でだけ判断するなら、言語の特徴は変
数や演算子、制御構造の仕様に集中しているように見えます。ならば
それぞれを厳密に細かく考えて、頭を整理してくれるほうが初学者に
は優しいように思います。更に、『変なくせ』をつけてもらっては後々他
の言語に移るときに困るということもあります。厳密なのは正確さを求
めるが故なので、正確さ=プログラムの基礎知識を身につけてもらえ
ればそっちのほうがいいです。『厳密だと大変』と書かれる人もいます
が文法が厳密になると、そんなに大変でしょうか? 純粋に「慣れる
ため」のプログラムなら、大して難しいものでもありません。せいぜい
数十行です。「慣れる」とは「段階を経て学習していく」ことでしょうから、
あまり関係あることだとは思えません。
厳密文法派からの反論Ⅱ


初心者にとっては自由度を高くさせて楽しいと思わせて
からプログラミングを習わせたほうがいいから「自由度
が高く融通の利くタイプ」の方がいいとも思えるのですが、
最初にきちんとした書き方を身につけないと楽しむもの
も楽しめなくなるのではないかと思います。楽しんでプロ
グラミングをするというのはまず文法をきちんと覚えてか
らだと思います。
実行してみて、プログラムが動く楽しさを知るという意見
があった。確かに、プログラムをとりあえず動かすことが
できるのがJavaだが、正しく動かすことができなければ
楽しくないと思うし、学習するという点からは課題を的確
に解いて自信をつけることが大切だと感じます。
厳密文法派からの反論Ⅲ


(自由度・融通派の意見に対して)しかし、「記述の自由
度が高い」場合、どこにエラーが発生しているのかなぜ
エラーが発生しているのかがわからないといったことが
起きると思います。そうなってしまうと、解消法を考える
という前に行き詰ってしまい、投げ出したくなると思いま
す。
エラーを体験する方が、理解が深まるというのも当然の
ことですが初心者にそんなことができるとも思えません。
体験する前にエラー表示を見てエラーを回避していき、
なぜそのようなエラーがでてくるのかを発見していくとい
う方が初めて学ぶ場合にはいいと思います。
補足 PASCAL言語のめざしたもの
1971年 Wirth(ヴィルト)により発表
 ALGOL60の後継言語
言語仕様の範囲を広げ過ぎない→言語処理系の効率化
→ALGOL68の反省
 特徴:構造化プログラミングの実現、適切なデータ構造
系統的なプログラミング教育に最適
→ 既存の言語とは異なる視点で開発(プログラミング
教育用言語)
 欧米では情報科学専攻の学生はまずPASCALでプログ
ラミングを学んだ。→その後、必要に応じてC言語や
FORTRANに移行した。
一定の効果を上げた。

日本では、そういった教育は徹底しなかった。
補足 PASCAL言語その後




大型計算機全盛の時代は、欧米ではプログラミ
ング教育用言語として普及。
ダウンサイジング(汎用大型計算機→ワークス
テーション→PC)により、80年代後半からあまり
使用されなくなった。
PASCALのPC版がTurbo PASCALとして登場
(Borland社)→一部のファンに普及
その後’90年代後半に、C言語並みの能力を備
えてDelphiとして登場。→ 熱烈なファンはいる
ものの、ユーザ人口はそう多くはない。
参考 苦手意識がもたらすもの
‘91年度情報処理 BASICプログラミング理解度
3節は数学的例題を使用
'91年度BASIC理解度(学習態度良好グループ)
苦手意識が文系Gの理解
度を下げた。
90
理
解
で
き
(た
%
学
)生
の
割
合
80
70
4節はグラフィックス課題
60
50
理系
文系
40
30
20
10
0
1
2
3
4
5
テキスト節番号
数学的例題
グラフィックス
数学的な知識は不要
ただし手間はかかる。→ア
ルゴリズム的には複雑
にもかかわらず文系Gの
理解度は上昇。
グラフィックスを描く楽しさ
が理解度を上げた。
参考 楽しさと理解度の相関
「楽しさ」度とテスト成績との相関
2003年度プログラミング
80
楽しいと感ずる人ほ
ど、理解度は高い!
70
テスト平均点
60
50
40
30
20
10
0
1
2
3
4
苦痛←楽しさ度→楽しい
5
参考 BASICの功罪
初心者を意識して開発→とっつきやすい!
 変数の型がない。とにかく作って動作させてみる、
というプログラミングスタイル。
 初心者には好評!多くのユーザの心をつかむ。
反面・・・・
 一度身に付いた我流のプログラミングスタイル
はなかなか直らない。
 BASICのくせがついたら、なかなか上達しない、
とかつてよく言われた。

BASICプログラム例
10: A=2
20: B=3.5
30: C=A+B
40: print A,”+”,B,”=“,C
 変数宣言なし!
 実数型、整数型の区別もなし!
 思いつくままに書いてprintで答を出力すれば良い!