比較プログラム言語論
平成17年6月1日
森田 彦
レポート(5/25)総括
< テーマ >
3つの論争のいずれかについてあなたがどちらの
主張を支持するか、を答えて下さい。その際、そう
支持する理由も記述して下さい。
25%
論争1
42%
論争3
論争2
33%
<回答結果>
論争の割合
レポート総括 論争1ー回答結果
<論点1>
理解していなければプログラミングも理解できない。
No派 プログラミングの理解には関係ない。
Yes派
57%
No派
Yes派
43%
論争1
Yes派を支持
No派を支持
たしかにプログラミング
をする上で、理解しき
れていなくてもかまわ
ないかもしれません。し
かし、それは本当にプ
ログラミングをしている
といえるのだろうかとい
う考えが浮かんできま
した。
コンパイルの過程を理解していなく
ても、プログラミングは問題なくでき
るだろうと私は思った。そう思ったの
は、プログラミング自体はそのプログ
ラミング言語にあった記述の仕方を
知ることで理解し、習得することで出
来るからである。・・・(中略)余裕が
あればコンパイルについて知ってお
いた方がいいかもしれないが、これ
が直接プログラミング技術の向上に
は結びつかないだろうと思う。
深い理解の追求!?
論争1 Yes派は深い理解を追求!?
5/18 Yes派の(最も強い)意見
コンパイルの過程は理解をしたほうがいいと思います。インタプ
リタとの違いやデバッグの遅さの理由など、実行されるまでの
違いを知るべきだと思う。むしろもっと細かいところまで知りたい、
知らなければ使う資格がない。
「意欲は分かるが、言い過ぎでは?」という意見が殺到!
5/25 当人の再コメント
少し言い過ぎたと思います。でも、パソコンに限らず表面上だ
け理解してやるのは本当に使いこなせたといえないので、な
ぜ動くのか中身まで理解していくべきだと思います。
より深い理解の追求!
論争1 Yes派支持の他の意見

私が思うことはプログラミングを学習するにあたって
コンパイルの過程を理解をしていなくてもたしかにプ
ログラミングの学習はできると思いますがコンパイ
ルの過程を少しでも理解していればプログラミング
について奥深くまで分かることができると思ったから
です。

重要な知識なので知った上で学習していくと知ら
ない人よりはしっかりと理解できると思うからで
す。
No派からのアドバイス 文法の理解とは区
別すべき!
5/18のYes派の意見
私はコンパイルの過程を理解してからプログラミングを行ったほ
うが良いと思います。なぜそう思うかというと、昨年プログラミン
グ演習をやったとき、たまに理解できないところがあったからで
す。できる人にとっては簡単にできますが、できない人もいるの
です。
5/25のNo派の反論
僕は反対です。なぜならプログラミング演習でおこなった課題
が理解出来ないのはコンパイルとは直接の関わりがないと考
えるからです。コンパイルを学ぶことによって逆にわからなくな
るかもしれません。演習で扱った課題を理解したいのならコン
パイル過程を理解するのではなく、プログラミングの作成過程
から理解すべきだと思いました。
論争1 論点の整理
基礎的なプログラミングはコンパイル過程の知
識がなくてもできる。→両者ほぼ合意
No派の主張するように・・・
 その場合は、プログラミング言語の文法の理解
で十分!
 言語の文法の理解→コンパイル過程とは(直接
は)関係ない。
 それでは、Yes派が求めている、より深い(プログ
ラミングの)理解とは・・・?
論争2へ

レポート総括 論争2ー回答結果
<論点2>
プログラミングの理解が深まり、上達も早くなる。
No派 知らなくてもプログラミングは(問題なく)できる。
Yes派
46%
No派 Yes派
54%
論争2 Yes派支持の意見



確かに、意味を理解していなくてもプログラミングは問題なく
実行できるかもしれません。・・・(中略)しかし、コンパイルの
過程について知ることによって、プログラミングがより面白く
なるのではないかと思います。
コンパイル過程を少しでも理解しておけば、よりプログラミン
グの理解が深まり、もっと興味もわいてくるのではないかと
思います。そして興味がわけば、それは上達へと繋がるので
はないでしょうか。
具体的にプログラムが、どのような過程で処理して行われて
いるのかを知ってから学習する方が、イメージがしやすく、プ
ログラミングがより深く理解できるはず・・・
コンパイル過程の知識 → 処理のイメージがしやすい
→ 興味がわく → 上達する(深い理解に到達)
論争2 No派支持の意見①


自分自身、コンパイル過程というものをまったく
知らずにプログラミングを始めましたが、支障を
きたすようなことはなかったです。そして、プログ
ラミングをしている過程でコンパイルというものを
知りましたが、知ったことによってプログラミング
の理解が深まったというようなことはありません。
今以上に詳しくプログラミングについて勉強する
なら知っておかなければいけないと思うが、2年
生のプログラミングの授業程度ならコンパイルの
過程は知らなくても十分だと思います。
論争2 No派支持の意見②

2年のときに受講したプログラミングでコンパイ
ルの過程なんていうものはぜんぜん理解どころ
か存在すらも知らなく、教科書どおりに基礎課題
を行っていけばプログラミング自体はそれなりに
できたからです。ただしプログラミング自体はそ
れなりにできるということであって、やはりコンパ
イルを知っていれば知っているに越したことはな
いでしょう。そういう高度な知識があればこそ、よ
り本当にプログラミングを理解し、応用的な利用
にもつながっていくのだと思います。
応用的、発展的なプログラミングには有益!?
論争2 論点の整理


Yes派の求めるプログラミングのより深い理解
→No派の指摘する応用的・発展的なプログラミ
ング!?
応用的・発展的なプログラミングに、コンパイル
過程の知識は有益 → 両者ほぼ合意!?
コンパイルの知識を応用したプログラム
例)プログラムの起動を制御したプログラム
◆ プログラムの実行
◆ ソースファイルの編集・翻訳・実行
※ HP上では上のプログラムにリンクを張ってい
ません。
 その他、数値計算の場合、最適化の知識が必
要になる。

レポート総括 論争3ー回答結果
<論点3>
プログラミング学習(開始)時に戸惑わずスムーズに
学習に入って行ける。
No派 最初にコンパイルの過程を学ぶと混乱する。プログラミ
ングをやった後の方が良い。
Yes派
23%
Yes派
No派
77%
論争3 No派支持の意見


私は最初、コンパイルの過程について学んでおけばプログラ
ミングの理解も深まり、上達も早くなるのではないかという風
に考えていました。しかし、私がプログラミングの授業を受け
ていたときにコンパイルの過程について説明を受けていたこ
とを想定すると、自分も混乱していたのではないかと思いま
した。ですから、・・・プログラミングに慣れてから、学んだ方
がいいと思いました。
私ははじめにプログラミングの理解が深まり、上達も早くなる
という意見でしたが、「論点3」(に述べられたように)最初に
コンパイルの過程を学ぶと混乱すると思いました。今、私は
プログラミングの授業をとっていて理解しながら受けていま
すが、はじめのわからないときにコンパイルの過程を(学習し
たら)混乱していたのは間違いないと思います。
実体験を思い起こして、No派に転じた人が相当数
存在。
論争3 Yes派支持の意見

反対派のごちゃごちゃになるという考えもわからないわ
けではないが、そもそも混乱してしまうという点で、プロ
グラミングの実体を掴めていないのではないか?自分も
プログラミングを受講し単位取得はしたが、実際比較プ
ログラム言語論を受けていなければ、今のようにコンパ
イルの過程について理解できなかったし、正しい知識す
ら持てなかったと思う。・・・概要をまず理解したうえで実
行するのと、疑問点が残った状態で実行をしていくので
は、(後者は)いつか問題に行き当たると思います。・・・
知識がなくては、実体を掴めず実用性にも欠け、自分自
身で問題解決が困難になるということです。知らなくても
実行できるのであれば、知っていて周りと情報共有しな
がら理解を深めれば、将来的にも有益となり、理想的な
理解度を自分自身で得られるのではないでしょうか。
(コンパイル過程を)知ってからのスタートでより深い理解へ
論争3 論点:初心者に有益な教育とは?


確かに、コンパイルを学ぶことによってプログラムを
より理解することになるとは思いますが、プログラミ
ングに対してまっさらな状態の人がいきなりコンパイ
ルについて学ばされたら、やはり混乱すると思いま
す。(No派)
やはり理解した上で実行していくのが有益で、理想
的な形ではないか?未経験者には難解ではないか
ともあったが、何も知らない真っ白な状態(の時)ほ
ど、正しいことを身に付けるべきだと思います。
(Yes派)
これは教育全般に関わる大きな問題!
レポート総括 全体の回答結果
Yes派支持とNo派支持の(全体の)
割合は以下の通り
<先週>
No
32.9% Yes
Yes
No
67.1%
38%
62%
Yes派とNo派が逆転!
テーマ 初学者に適した言語は?
文法が厳密で、文法エラーのチェックが厳しい言語
*望ましいプログラミング記述法を身につけるのに適し
ている。→これから学習する人に適している!?
*一方で、文法が厳密→約束事が多い→初心者には敷
居が高い!?
*代表格はPASCAL言語(Delphi)
 皆が学習したJava言語はDelphiより相対的に文法規則
がゆるい。
 DelphiとJavaを比較して、どちらが初学者の学習に向
いているか、を考える。
 比較の一例として(まず)除算を考える。

除算 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
演算の区別が明瞭 → ミスが少ない
記述が面倒
Delphi VS Java
言語によって文法エラーのレベルが異なる。
<Delphi>
var
a,b,c: Integer;
begin
a:=2;
b:=4;
c:=a/b; ← エラー
end;
文法的に厳しい
<Java>
int a,b,c;
a=2;
b=4;
c=a/b; エラーなし!
皆は、どちらが初学者に向いていると思いますか?
テーマ
1.
2.
初めて学習するプログラミング言語としては、文法が
厳密でミスを未然に防ぐタイプのものが良いですか、
それとも、記述の自由度が高く融通が利くタイプの方
が良いと思いますか?DelphiとJavaの比較を基に(考
えを発展させ)、いずれがよいかを答え、そう思う理由
も記述して下さい。
HPのレポート抜粋1およびレポート抜粋2を読んで、
その中から興味のある意見を一つ採り上げ、それに対
する意見あるいは感想を記述して下さい(このテーマ
は任意。提出してくれた人には加点します)。
第7回目レポート




前ページに説明した2つのテーマ(テーマ2は任
意)について、できる限り明確に記述して下さい。
分量はいずれも200字程度。
なお、上の記述を行った上で,(いつも通り)講義
の感想や質問等を付加しても結構です。
提出先:[email protected]
件名:「学籍番号(半角)+半角空白+氏名」を
記入して下さい。
例) s03xxxx 学院太郎
コンパイル過程を理解しておいた方が良いか?
論点の整理
<論点1>
理解していなければプログラミングも理解できない。
No派 プログラミングの理解には関係ない。
Yes派
<論点2>
プログラミングの理解が深まり、上達も早くなる。
No派 知らなくてもプログラミングは(問題なく)できる。
Yes派
<論点3>
プログラミング学習(開始)時に戸惑わずスムーズに
学習に入って行ける。
No派 最初にコンパイルの過程を学ぶと混乱する。プログラミ
ングをやった後の方が良い。
Yes派
ダウンロード

講義スライド - SGU動画共有