比較プログラム言語論

比較プログラム言語論
平成17年6月8日
森田 彦
レポート(6/1)総括
< テーマ >
初めて学習するプログラミング言語としては、文法が厳密でミスを未然に防
ぐタイプのものが良いですか、それとも、記述の自由度が高く融通が利くタイ
プの方が良いと思いますか?DelphiとJavaの比較を基に(考えを発展させ)、
いずれがよいかを答え、そう思う理由も記述して下さい。
<回答結果>
厳密文法派
34.9%
自由文法派
65.1%
1/3が厳密文法派
2/3が自由文法派
厳密文法派Ⅰ-① 文法エラーが細かく出
た方が初学者向き
A.ミスを未然に防ぐ方がスムーズに学習可能

私は、初めて学習するプログラミング言語は、文法が厳
密なDelphiが良いと思います。Delphiは割算の場合、
商と割算の2つの演算子を使い記述も多く、難しいと思
うかも知れないが、(その分)ミスが少なく(なり)、(いっ
たん)覚えれば他のプログラミング言語を学ぶ時でも、
スムーズに覚えていくことが出来る。一方、Delphiよりも
文法規制がゆるく、記述が簡単なJAVAの方は、初心者
には学びやすいかもしれないが、その反面、割算の場
合、整数/整数の場合ミスが生じやすいなどの問題も
ある。そして、記述や文法の規制がゆるいと、初心者に、
きちんとした文法を覚える意欲を失わせることになると
思う。
厳密文法派Ⅰ-② 文法エラーが細かく出
た方が初学者向き
B.エラーの(可能性のある)個所が分かった方が理解
しやすい。

自由度のきくJavaの方がきっと初心者にはわかりやす
いと思うのですが、プログラミング作成中にエラーが発
生したときにすぐに対処できるのはDelphiのほうだと思
います。 Javaが自由度が高い反面エラーが発生したと
きに、除算の例をとってもわかるように初心者にはいっ
たいどこが間違っているのかわかりにくいと思います。
だから、エラーの発生源がどこなのかわからず先に進
めなくなる(プログラミングがわからなくなる)ということに
なりかねません。 それに比べDelphiは記述が面倒でも
演算の区別がわかりやすいので仮にエラーが発生して
もどこが間違っているのかすぐに気がつけるはずです。
厳密文法派Ⅰ-③ 文法エラーが細かく出
た方が初学者向き
C.エラーが出ないと原因が分からず、つまずくのでは?

初めて勉強するプログラミング言語としては、文
法が厳密でミスを事前に防ぐタイプのものが良
いと思います。(中略) 除算演算子ではJava
(の場合)は一応できているのに実行したらうまく
いかない、プログラムを見てもエラーがない、こう
なったら初心者にはどこが間違っているのかな
かなかわからないと思う。その点Delphiはどこ
で間違ったのかわかりやすいので、初心者向き
だと思います。
厳密文法派Ⅱ 最初に基礎をきちんと身
に付けた方が良い


その1
構文規則の厳密なものからはじめるべきだと思います。これ
はプログラミング言語だけでなくほかのことでも、初めてやる
ものはまず基礎を徹底的に教えられて(自分で学んで)、そ
の後に自分の型にあった方法を探していくものだと思うから
です。 ただ、構文が厳密なものを徹底しておこなっていると、
それに縛られて柔軟な発想を妨げる可能性も出てくると思う
ので、それがすべてだと思って学習をするということのないよ
うにする必要があると思います。
私がDelphiを支持する理由は、何事にも最初は厳しくした方
がためになると思うからです。Delphiは記述が面倒・約束事
が多いので、初学者は覚える気が無くなる人が多く出てしま
うかもしれませんが、そんな基礎を面倒くさがって嫌になる時
点でもうダメなのでは?
厳密文法派Ⅱ 最初に基礎をきちんと身
に付けた方が良い


その2
初めて学習するプログラミング言語として僕は文法が厳
密なものが良いと思いました。DelphiとJavaを比較する
ならDelphiに賛成します。なぜならはじめに言語の書き
方を厳しく自分に身につけた方が後でさまざまな言語を
取り扱うような時に可能性が広がり、逆に自由度が増す
と僕は考えたからです。
最初に記述が厳しい言語を学んでいれば、しっかりとし
たプログラミングの知識、基礎を自然と固めていくことが
できると思うし、それができた上でJava言語のような自
由度が高く融通の利くタイプを学んでいけば、プログラミ
ングをしっかりと理解できると思う。
自由文法派Ⅱ 最初はプログラミングに
慣れることが大切


その1
文法チェックが緩い言語が良いと思います。 プログラミ
ングを学ぶ第一歩として、プログラミングに慣れるという
ことが大事だと考えます。 なぜなら、自分がプログラミン
グを学んだとき、「できた、なんとなくでもわかった」とい
う喜びが進歩として実感できたからです。 Delphiのよう
な敷居が高い言語は、プログラミングは難しい、つまら
ないというイメージをつけられるのでは、と考えられるか
らです。
すごく悩んだが、『初めて学習するプログラミング言語』
は記述の自由度が高く融通が利くタイプだと思う。 ただ、
このタイプだと教える側がいるなら、教える側が多少意
地悪する必要があるのかもしれない。さりげなく失敗に
仕向ける為に。
自由文法派Ⅱ 最初はプログラミングに
慣れることが大切


その2
私は、初心者ならJava言語の方を始めにやったほうが
良いと思います。なぜなら、初心者の人はプログラミン
グとはどうゆう物か知るために学習するので、そこでい
きなり厳格で融通の利かないものだとだんだんと面倒く
さくなってしまってプログラミングが嫌になってしまうと思
うので、多少落とし穴があっても簡単で面倒でないほう
がすんなりと学習に入っていけると思うし、その後で
Delphiを学習したほうがプログラミング言語というもの
が理解しやすいと思うからです。
(最初に自由度の高い言語で学び)まずは、全体的なプ
ログラミング言語の流れを踏まえた上で、Delphiのよう
な文法的に厳しい言語を学んでいけばいいと思います。
厳密文法派Ⅲ 最初に自由度の高い文法で
学習すると誤った理解のまま進行するのでは


確かに、Javaは自由度が高く融通が利くので入り込み
やすいでしょう。しかし、初めに自由の利くものを利用す
ると、自分のミスに気づかず間違ったまま理解をしてし
まう危険性があるのではないでしょうか。
(文法が厳密な言語は)多少記述が面倒であったり難し
かったりしてもミスもなくきちんと覚えることができる。逆
に(自由度の高い言語は)いくら楽で簡単でも、基礎にミ
スがあったら後々大きな問題となってくると思う。土台と
なる基礎は大切なものでその基礎がしっかりとしていれ
ば上にどんどんと新しい技術を積み重ねていける。土台
が不安定だと新しい技術をうまく積み重ねることができ
ずに結果的にまた最初からやり直しという風なことにも
なりかねない。
自由文法派Ⅲ あまり厳密だと(規則が多い
と)やる気がなくなるのでは?


確かに初めのうちに基礎をしっかりと作ることは大切な
のですがDelphiのように記述、文法、などの決まりごと
が多いと面倒とか面白くないというようなプログラミング
に対してのイメージがよいものではなくなるのではない
だろうか。JAVAは間違えやすいところもあるのだが、そ
のミスのしやすい所をしっかり学んでいけばよいと思い
ます。初学者は扱いやすいJAVAのほうをすすめたいと
思う。
私はDelphiを使い始めて学習することに賛成ではあり
ません。ただでさえ、パソコンというものに対して抵抗が
ある人が世の中に多くいるのに、少しの間違いによって
受け付けてくれないとなるとあまりにも厳格すぎるから
です。
厳密文法派Ⅳ 記述(の意味)が明瞭な
方が理解しやすい


Delphiは文法的に規則が厳しいとありましたが、Delphi
はその文法規則を覚えてしまえば、演算の区別が明瞭
でミスが少なくてすむという利点を活かせると思いまし
た。Javaと比べると、記述が面倒ではありますが、演算
の区別が明瞭であるという点が初学者には飲み込みや
すいのではないかと思いました。また、ある程度の規則
に乗っ取って学習を進めていった方が学習しやすいの
ではないかと思いました。
初めて学習するプログラミング言語は、文法が厳密でミ
スを未然に防げるようなものがいいと思う。なぜなら、記
述の自由度が高く融通が利くタイプのものだと、答えが
何通りもあり、どれを使っていいか混乱してしまうし覚え
にくいと思うからである。
自由文法派Ⅳ 記述が簡潔な方が理解
しやすい



確かに、文法が厳密でミスを未然に防ぐということも大
切なことだとは思います。ですが、初めから記述が難し
いと考え方以前にそこでミスを犯してしまうこともあるで
しょうし、また、ミスをすることで考え、学ぶことも多々あ
るかと思います。比較的記述が簡単な方が、初心者とし
ては入り込みやすいのではないでしょうか。
記述が楽なほうが、初心者にはプログラミング言語に触
れやすいと思います。
Java言語をすすめたいです。Delphiと比べてミスが多く
なってしまうけど、初学者には記述が簡単な方から学ん
だほうがいいと思ったからです。
厳密文法派Ⅴ 最初は厳密に、慣れた
ら自由度の高いものへ


始めに使用するのは、Delphiのように入力は面倒では
あるが、ミスが少なくなるもののほうがよいと思います。
そこである程度プログラミングというものを理解してから、
Javaのように記述が容易で自由度が高いものを使用す
るべきだと思います。
上級者は自由度の高い融通の利くタイプの方が良く、
初心者にとっては、厳密でミスを事前に防ぐものの方が
いいと思います。初心者が自由度の高いプログラムを
使ってしまうと、思いもしないプログラムが作られてしま
うことがあるからです。
自由文法派Ⅴ 最初は自由度の高い言
語で、慣れたら厳密なものへ


初心者がしっかり基礎や文法を覚えるためには厳密で
ミスを未然に防ぐタイプのDelphiのようなものが本来は
適していると思います。しかし自分もあまり得意ではなし、
難しいと学ぶ意欲がなくなってしまうので初心者には自
由度が高く、比較的理解しやすいJavaのほうがいいと
思います。そしてある程度理解できるようになってから
高度な言語を勉強し、理解を深めて行くほうがいいと思
います。
初学者は記述が簡単なJava言語から学び始める方が
よいと思います。Delphiは(中略)、記述が面倒な上、
文法的に厳しすぎてエラーが発生しやすいので、ある程
度プログラミングに慣れて他の言語のプログラミングも
学びたいという中級者・上級者向きの言語だと思います。
厳密文法派 vs 自由文法派 論点整理1
厳密文法派
自由文法派
Ⅰ.文法エラーが細かく出た
方が初学者向き
1. ミスを未然に防ぐ方が、
スムーズに学習が進む
2. エラーの(可能性のあ
る)個所が分かった方が
理解しやすい
3. エラーが出ないと原因が
分からず、つまずくので
は?
Ⅰ.文法エラーはあまり出な
い方が初学者向き
1. とにかく実行できる方が
やる気が出る
2. 文法エラーが出るとやる
気をなくしてしまうので
は?
3. ミスの原因を自分で考え
る方が理解が深まる
厳密文法派 vs 自由文法派 論点整理2
厳密文法派
自由文法派
Ⅱ.最初に基礎をきちんと
身に付けた方が良い
Ⅱ.最初はプログラミングに
慣れることが大切
Ⅲ.自由度の高い文法で学 Ⅲ.あまり厳密だとやる気が
なくなるのでは?
習すると誤った理解のま
ま進行するのでは?
Ⅳ.記述(の意味)が明瞭な Ⅳ.記述が簡潔な方が理解
方が理解しやすい
しやすい
Ⅴ.厳密文法→自由文法へ Ⅴ.自由文法→厳密文法へ
<参考資料>
Delphi vs Java
記述の自由度が、実際のプログラミング言語でどの程度異
なるのか、を上の両言語の比較で見てみる。
<内容>




基本ルール
型宣言について
演算子
不等号記号
1.基本ルール
1.大文字と小文字の区別
Delphi:区別しない。
Java:区別する。
<理由>
言語開発者の”思想”ではなく、歴
史的経緯から・・・
区別すると、変数等の表現が豊富になる。→ Testとtestは異なる変数
一方、うっかりミスも多くなる。
2.文の開始と終了
<理由>
Delphi: begin~end → できる限り意味明瞭に記述する。
Java: { ~ }
→ 記述の手間をできる限り減らす。
2.型宣言について
<Delphi>
var
<Java>
int a;
//整数型
a:Integer; //整数型
double b; //実数型
b:Real;
//実数型
String c;
c:String;
//文字列型
変数宣言部を明示的に示すた
めにvarを明記し、文頭に置く。
使用する変数を、文頭で一望できる。
記述が面倒。
//文字列型
変数宣言は、プログラム中の
どこで行っても良い。
思いついた時点で変数を宣言できる。
変数リストが把握しにくくなる。
変数の初期化も同時に行える。
int a=0;
便利
3.演算子①
3-1.四則演算子 - (除算を除いて)同じ
<Delphi>
3-2.代入演算子
Delphi
Java
演算子
:=
=
例
a:=5;
a=5;
代入と同等(比較)の違いが明瞭に
記述が少し面倒
<Java>
C++から引き継
ぐ特殊な代入演算子あり
演算子 使用例
+=
a += b
式の意味
a=a+b
-=
a -= b
a=a-b
*=
a *= b
a=a*b
プログラムが読みにくくなる。
/=
a /= b
a=a/b
初心者には不向き
慣れると便利→記述が簡潔に
3.演算子②
3-3.増減演算子
<Java>
演算子
++
使用例
a++あるいは++a
式の意味
a=a+1
--
a--あるいは--a
a=a-1
頻繁に使用される。
繰り返し処理の記述に便利
順序で値が異なる場合あり
<Delphi>
演算子
Inc()
使用例
Inc(a)
式の意味
a=a+1
Dec()
Dec(a)
a=a-1
それほど多用されない。
3.演算子③
3-4.除算演算子
<Delphi>
商を求める演算子「div」と除算演算子「/」を区別。
演算の区別が明瞭 → ミスが少ない。
記述が面倒。
<Java>
除算演算子「/」のみ
記述が容易。
整数/整数のとき、ミスが生じやすい。
3.演算子④
3-4.論理演算子
<Delphi>
演算
演算記号
論理否定 not
<Java>
例
演算
演算記号
not A
論理否定 !
例
! A
論理積
and
A and B
論理積
&&
A && B
論理和
or
A or B
論理和
||
A || B
※ A、Bは論理式(trueかfalseかの値をとる式)
意味が分かりやすい。
記述が簡潔。
記述量は若干増える。
意味は分かりにくい。
4.不等号記号
=と≠の表記が異なる。他は同じ。
数学記
号
意味
Delphi
a>b
表記
aはbより大きい a>b
a≧b
aはb以上
a>=b
a=b
aはbに等しい
a=b
a≦b
aはb以下
a<=b
a<b
aはbより小さい a<b
a≠b
aはbに等しくな a<>b
い
数学記
号
意味
a>b
a≧b
aはbより大き
い
aはb以上
a=b
aはbに等しい
a==b
a≦b
aはb以下
a<=b
a<b
aはbより小さい a<b
a≠b
aはbに等しくな a!=b
い
Java
表記
a>b
a>=b
テーマ
講義で解説した、厳密文法派と自由文法派の
論争Ⅰ~論争Ⅴの内、最も関心のあるものを
一つ採り上げそのどちらを支持するかを答え、
さらに、そう支持する理由を説明して下さい。理
由は、次のいずれか(あるいは双方)の形で記
述して下さい。
HPにある6/1のレポート抜粋1「厳密文法か自由文
法か?」から、支持する根拠となった意見を挙げ、そ
れに対する賛同意見を述べる。
自分が支持するものと対立する側の意見を挙げ、そ
れへの反論を述べる。
第8回目レポート



前ページのテーマについて200~400字程度で
記述して下さい。
上の記述を行った上で、6/1のレポート抜粋に掲
載されている「レポート抜粋2」および「レポート
抜粋3」に述べられている意見に対するコメント
(賛同意見や反論など)を記述しても結構です。
提出先:[email protected]
件名:「学籍番号(半角)+半角空白+氏名」を
記入して下さい。
例) s03xxxx 学院太郎
自由文法派Ⅰ-① 文法エラーはあまり出
ない方が初学者向き
A.まず実行できる方がやる気が出る。

僕的には、Javaのほうがいいです。自由が利くし
少しの間違いでもエラーが出ない分、プログラム
ができて実行したときに自分の思ってた通りにで
きたときの、感動は何とも良いものです。その反
面プログラムができて実行しても全然思い通り
にならないときの苛立ちもまた、忘れられません。
だからこそ、(中略)興味もでてきますし、勉強す
る気持ちも段々大きくなってきます。
自由文法派Ⅰ-② 文法エラーはあまり出
ない方が初学者向き
B.文法エラーが出るとやる気をなくしてしまうのでは?


私はJavaのほうが使いやすいと思います。初心
者にとって文法エラーというのは、私は経験あり
ますが、やる気がなくなります。なので、文法的
に楽なJavaがいいと思いました。
私がプログラミング始めた時、プログラミングを
学習する上で一番嫌だったことはエラーが出る
ことだったから文法が厳密なタイプより自由度が
高く融通が利くタイプの方が良いと思いました。
自由文法派Ⅰ-③ 文法エラーはあまり出
ない方が初学者向き
B.ミスの原因を自分で考える方が理解が深まる。

確かに、文法が厳密でミスを未然に防ぐものを
学習した場合、ミスの少ないプログラミングが身
につくと思われます。しかし、ミスをしないことは
本当に良いことなのでしょうか? 私はそうは思
いません。なぜなら、学習している時点でのミス
は成長につながるからです。ミスを犯すことに
よってそこから学習し、臨機応変な対応が身に
つくと思います。もし、ミスを犯すことを知らずに
社会に出て、ミスを犯したときにうまく対応ができ
ないと私は思います。
Delphiのプログラム例
var
a:Integer;
b:Real;
変数宣言部
begin
a:=5;
b:=a / 2;
end;
プログラム本体
++あるいは--演算子使用上の注意
++aの場合
本来の記述
int a=1,b;
int a=1,b;
b=++a;
a=a+1;
b=a;
結果
aの値:2
bの値:2
処理の順序に注意!
a++の場合
本来の記述
int a=1,b;
int a=1,b;
b=a++;
b=a;
a=a+1;
結果
aの値:2
bの値:1
除算 Java
商を求める場合
int
a,b;
実数除算の場合
int a; double b;
a=5;
a=5;
b=a/2;
b=a / 2;
bの値:2
記述が容易。
bの値: 2
整数/整数の値は整数に
b=a/2.0 とする必要がある。
整数/整数のとき、ミスが生じやすい。 →落とし穴の一つ
除算 Delphi
商を求める演算子
var
除算演算子
var
a,b:Integer;
begin
a:Integer;
begin
a:=5;
a:=5;
b:=a div 2;
b:=a / 2;
end;
b:Real;
end;
bの値:2
bの値: 2.5
演算の区別が明瞭 → ミスが少ない
記述が面倒