比較プログラム言語論

比較プログラム言語論
平成17年6月22日
森田 彦
レポート(6/15)総括
< テーマ >
テーマ1
あなたの友人で、「これからプログラミングを学習してみたい」と
いう人がいたとします。あなたは、その友人にDelphiとBASIC
のいずれを勧めますか?これまでの議論を踏まえて、いずれを
勧めるかを回答し、その理由(あなたの考え)を記述して下さい。
テーマ2
(プログラミングに関する)理解度と楽しさの相関について、あな
たは「楽しいから理解度が上がる」と思いますか?それとも「理
解できたから楽しくなる」と考えますか?回答と共にそう思う理
由を、あなたのプログラミング演習での体験に基づいて答えて
下さい。
テーマ1 回答結果
テーマ1
4%
その他
Delphi
48%
BASIC
48%
Delphi派と
BASIC派がちょ
うど半々!
テーマ1 勧める理由の整理
Delphi派
BASIC派
1. 最初に基礎を身につけるこ 1.最初のハードルを低くし抵抗
とが重要だから
感なく学習してもらいたいか
ら
2. ミスの原因が分かりやすい
方が良いから
2.まずはプログラミングの楽し
さを知ることが大切だから
3. その後の発展性を考えると
Delphiの方が良いから
3.とにかく実行できることが(初
学者には)大切だから
4. BASICでは欠点が多す
ぎるのでは・・・
4.プログラミングの大まかな
概念をつかみやすいから
5. Delphiを勧めるが、学習者
の意欲や性格によっては
BASICも・・・
5.自主的に自分の考えで学習
するようになるから
論争を振り返って・・・





プログラミング言語を特徴づける視点として、文法の厳密さ
を採り上げた。
厳密文法と自由文法それぞれの長所と短所を考察した。
それぞれの代表例として、最終的にDelphiおよびBASICを
採り上げ、初学者にどちらを勧めるかを考察してもらった結
果・・・、回答結果は、ちょうど半々だった。
これは、どちらの長所を重視するか(あるいはどちらの短所
を憂慮するか)、という点で意見が分かれる、ということを意
味している。
しかし、単なる意見対立ではなく、お互いの長所と短所を理
解した上での意見交換が大半を占めている点が重要。
今後、(皆が)プログラミング経験者として意見を求め
られた時に、ここでの意見交換を参考にしてください。
補足 BASICのメリットをもっと進めると・・・?






最初はプログラミングを「学ぶ」というより「遊ぶ」という感
覚でやってみたらよいと思いました。(Delphi派)
BASICは・・・十分プログラミングの楽しさを伝えられると
思います。(Delphi派)
文法上の制約が少なく初心者にも抵抗が少ないという
点が大事・・・(BASIC派 以下同じ)
意外とプログラミングというものは簡単なものであるとい
うことを教えてあげたい・・・
始めは基本概念うんぬんよりもまず自分の思いどおり
にやってみて、実行できるのが一番だと思います。
ポイントはやらされるのではなく、自分で考えて失敗して
理解していくというところにあります。
これらのメリットを追求した言語としてLOGOがある。
参考 児童教育用言語LOGO
-制約の少ない言語で創造性を高める教育を行う例ー



1967年 MIT(マサチューセッツ工科大学)の
シーモア・パパート教授グループによって開発
児童教育用ツールとして開発
特徴:コンピュータとの対話形式でプログラミング
できる。 例:タートルグラフィックス
<正方形を描くプログラムの例>
REPEAT 4 [FORWARD 100 RIGHT 90]
(100歩進んで90度右に曲がることを4回繰り返す)
LOGOの効用




子どもたちは、LOGOを用いて様々な概念を獲
得。→遊びの要素(楽しみながらやる要素)が重
要
発想や想像力を発展させるツール(道具)として
有効。
コンピュータを(自分の考えで)動作させるので、
コンピュータに対する抵抗がなくなる。→やらさ
れるものではなく、自分が動作させるものだとい
う(能動的)意識が自然に身に付く。
日本でも小中学校で導入の実績あり→パソコン
に関する導入教育の可能性を広げる!?
テーマ2 回答結果
テーマ2
5%
30%
「理解が先」が2/3
を占める。
楽しさが先
理解が先
65%
テーマ2 論点の整理
詳細はHP参照
「理解が先」派
「楽しさが先」派
1. 経験上、理解度が高まる
につれて楽しくなってきた
2. 自分の考えで動作させた
時の達成感が楽しさにつ
ながる
3. 理解できると意欲がわき楽
しくなる
4. 「理解する→楽しくなる→さ
らに理解度が上がる」と循
環しているのでは?
5. 始めから楽しいと言うこと
は(そもそも)ないのでは?
1. 経験上、プログラミングを楽
しめることが理解度向上に
つながった
2. プログラムが動作する楽し
さが理解度向上につながる
3. 楽しいと興味・意欲が湧い
て理解度向上につながる
4. 「楽しい→理解度が上がる
→さらに楽しくなる」と循環し
ているのでは?
5. まずは楽しまないと理解す
る気にもならないのでは?
<本日の講義テーマ>
FORTRANにみる言語構成要素の発展
<内容>




FORTRANの起源および発展の概観
分岐処理の記述の発展
繰り返し処理の記述の発展
FORTRAN発展の方向性と現状
FORTRANの起源




1954年、IBM社バッカス(Backus)らにより開発
開始
1957年 IBM704に実装 → 使用開始
当初はIBM Mathematical FORmula
TRANslating System と命名 →FORTRAN
その性能や設計内容が高く評価される。
ALGOL60プロジェクト以前!
FORTRANは進化し続けている。
FORTRANの発展①
原型 ー 型宣言のない世界
<プログラム例>
1234567890
プログラムは7~72列の間に記述する。
----------------------------------------<実行結果>
A=3.5
12345678901
B=1.5
-------------------------J=(A+B)/2
3. 5 1. 5 2
WRITE(6,100) A,B,J
100 FORMAT(2F4.1,I3)
I,J,K,・・・,Nで始まる変数:整数型
STOP
それ以外
:実数型
END
きわめて簡単な文法規則! 数式を書く様にプログラムを
書ける!
FORTRANの発展②
副プログラムの導入

1958年FORTRANⅡ発表→副プログラム(サブ
ルーチン)の導入
1234567890
----------------------------------------------
A=3.5
B=1.5
CALL HEIKIN(A,B,C)
WRITE(6,100) A,B,C
100 FORMAT(2F4.1,F5.2)
STOP
END
SUBROUTINE HEIKIN(A,B,C)
C=(A+B)/2
RETURN
END
<実行結果>
1234567890123
-------------------------3. 5 1. 5
2. 5
プログラムの見通しが良くなる。
FORTRANの発展③
型宣言の導入

1962年、FORTRANⅣ発表→型宣言を導入
1234567890
--------------------------------------------
REAL A,B
INTEGER J
A=3.5
B=1.5
J=(A+B)/2
WRITE(6,100) A,B,J
100 FORMAT(2F4.1,I3)
STOP
END
ALGOL60プロジェクトの影響
1234567890
------------------------------------------
A=3.5
これもOK
B=1.5
J=(A+B)/2
WRITE(6,100) A,B,J
100 FORMAT(2F4.1,I3)
STOP
END
<暗黙の型宣言>
I,J,K,・・・,Nで始まる変数:整数型
それ以外
:実数型
FORTRANの発展④
文字列型の導入

1978年、FORTRAN77発表→文字列型の導入
1234567890
--------------------------------------------
REAL A,B
INTEGER J
CHARACTER MOJI*7
MOJI=‘Result:’
A=3.5
B=1.5
J=(A+B)/2
WRITE(6,100) MOJI,A,B,J
100 FORMAT(A,2F4.1,I3)
STOP
END
<実行結果>
1234567890123456789
-------------------------------Result : 3. 5 1. 5
2
分岐処理の記述の発展①
分岐処理の表現(初期)
テストの得点を入力し、50点以上な
ら「合格」、50点未満なら「不合格」と
表示するプログラム
始め
Tenの入力
Ten≧50
No
Yes
‘合格’と表示
終り
‘不合格’と表示
IF と GO TO の世界
INTEGER TEN
READ(5,*) TEN
IF(TEN.GE.50) GO TO 10
WRITE(6,*) ‘不合格’
GO TO 20
10 WRITE(6,*) ‘合格’
20 STOP
END
プログラムの見通しが良くない!
分岐処理の記述の発展②
分岐処理の表現(改良)
テストの得点を入力し、50点以上な
ら「合格」、50点未満なら「不合格」と
表示するプログラム
始め
Tenの入力
Ten≧50
No
Yes
‘合格’と表示
終り
‘不合格’と表示
IF THEN~ ELSE~ END IF 文
の導入
INTEGER TEN
READ(5,*) TEN
IF(TEN.GE.50) THEN
WRITE(6,*) ‘合格’
ELSE
WRITE(6,*) ‘不合格’
END IF
STOP
END
無駄な文番号を排除→ GO TO文を排除
繰り返し処理の記述の発展①
繰り返し処理の表現(初期)
1~Nまでの和を求める。
始め
Nの入力
SUM←0
I←1
I≦N
Yes
SUM←SUM+i
i ← i+1
No
終り
IF と GO TO の世界
INTEGER N,SUM,I
READ(5,*) N
SUM=0
I=1
10 CONTINUE
IF(I.GT.N) GO TO 20
SUM=SUM+I
I=I+1
GO TO 10
20 CONTINUE
STOP
END
プログラムの見通しが良くない
繰り返し処理の記述の発展②
繰り返し処理の表現(改良)
1~Nまでの和を求める。
DO文 の導入
INTEGER N,SUM,I
READ(5,*) N
SUM=0
DO 10 I=1,N
SUM=SUM+I
10 CONTINUE
STOP
END
始め
Nの入力
SUM←0
I←1
I≦N
Yes
SUM←SUM+i
i ← i+1
No
終り
さらに・・・
INTEGER N,SUM,I
READ(5,*) N
SUM=0
DO I=1,N
SUM=SUM+I
END DO
STOP
END
DO文の導入→GO TO文の排除
プログラムの見通しが良くなる
FORTRAN発展の方向性とは?
型宣言の導入→ALGOL60プロジェクトの影響!?
 IF THEN~ELSE~END IF文 および DO文
の導入 → 構造化プログラミング(運動)の影
響
FORTRANの(現在の)普及度は・・・
 ユーザは、科学技術計算を行う、研究者および
技術者に限定されている。→ソフトウェア資産が
多いため、今後もしばらく存続・発展する。

第10回目レポート




本日の講義で、あなたが最も興味を持った点はどのよう
な点ですか?講義の全体的な感想と共に、できる限り
具体的に、200字~400字程度で記述して下さい。
なお、上の記述を行った上で、HP上の前回のレポートを
読んでそれに対するコメント(意見や感想)を付加しても
結構です。
提出先:[email protected]
件名:「学籍番号(半角)+半角空白+氏名」を記入し
て下さい。
例)
s03xxxx 学院太郎
Delphi派 Ⅰ.最初に基礎を身につけること
が重要だから


Delphiを勧めた方が全体的なプログラミングの知識を
得られるのではないかと思いました。・・・(中略)流れを
覚える・形式を覚える場合において、始めから幅を広げ
すぎると基準が設定されず、初心者には「もっと正確に
できないものか、自分で記述を複雑にしているのではな
いか?」というような疑問が浮かんでしまうのではない
か(と)不安になった。
最初にある程度厳しく教えて、その後に自由なプログラ
ミングの世界に解き放ってあげた方が様々なプログラム
言語にとっつきやすくなるのではないか。
Delphi派 Ⅱ.ミスの原因が分かりやすい方
が良いから

どちらかを薦めるならDelphiです。BASICは文
法の制約が少なかったり、思いつくまま記述がで
きるのですが、間違ったときに原因がわかりずら
ければ学んでいくうえで身につきにくいのではな
いかと思う。間違いをある程度、自分で見つけら
れそれを修復していく作業がなければ成長しな
いと思うからです。面白さを感じにくいかもしれな
いけど自分で進めていけるようになれば楽しさ
は後からついてくるものだと思う。やはり基本を
しっかりと学べる方がよいのではないかと思う。
Delphi派 Ⅲ.その後の発展性を考えると
Delphiの方が良いから

その1
僕は厳密文法を支持してきました。どんなことで
も基礎が重要だと思うからです。初心者に勧め
るのであればDelphiです。Delphiは厳密で事前
に設計しなくてはいけないという弱点があります。
BASICであれば思いつくままに記述できます。し
かしこの事前の設計こそがあとあと理解するの
に役に立てることができるでしょう。
見通しを持ってプログラムを組む事が、プログラミ
ング上達の最重要ポイント!
Delphi派 Ⅲ.その後の発展性を考えると
Delphiの方が良いから その2(BASIC経験者より)

私自身は「発想の実現化」が高いことが重要だと思いま
す。BASICは確かに見てわかりますし、制約もほとんど
ありません。が、高度なものを作ろうと思えば思うほどわ
けがわからなくなり、正直作ってるときよくても後から
バージョンアップとか修正とかやる気も起きません。そこ
で、発想は終わりです。・・・(中略)ところが、Delphiなら
制約は多くなりますが「娯楽プログラム」から「高度なア
プリケーション」まで勉強さえすれば作れますし、・・・どこ
で何が起こせるのか明確に分かるので、バージョンアッ
プや修正も(BASICに比べれば)比較的容易です。そし
て、どんどん発想が拡張していっても、そんなに億劫に
ならずにプログラミングができ、発想が実現化しやすい
と思います。
再利用性は、いいプログラムのポイント!
Delphi派 Ⅳ.BASICでは欠点が多すぎるの
では・・・

私は初心者が学ぶには初心者向けに作られた言語で、
かなり自由度が高いBASIC勧めたいとは思いません。
たしかに文法に融通が効き初心者にはかなりとっつき
やすいものだと思いますが、欠点の方が大きいような気
がするからです。「誤った結果を得た場合の原因の解析
が困難」「プログラミング上の基本概念が身に付きにく
い」などこれからプログラミングを学習したい思ってる人
にはあまり有益なものになるとは思わないです。・・・(中
略)ですがたくさんの人が「最初に厳しいもので学ぶとつ
まらなくなる」「プログラミングを学ぶ第一歩として、プロ
グラミングに慣れるということが大事」「基礎を固めようと
する『やる気』を持つことが、一番大切なこと」という意見
を聞いて最初はプログラミングを「学ぶ」というより「遊
ぶ」という感覚でやってみたらよいと思いました。
Delphi派 Ⅴ.Delphiを勧めるが、学習者の
意欲や性格によってはBASICも・・・

もしその人が「プログラミングを学びたい」という本格的
な意欲があるなら、構文がしっかりしているDelphiを勧
めます。 そしてそれからもっとプログラミングを簡単に作
れる言語もあるとJavaを勧めると思います。 また、逆に
かるくプログラミングに興味があって、簡単なプログラミ
ングしか作らないとかあまり本格的に学ぶつもりがない
なら、BASICを勧めます。BASICはプログラム記述が進
むにつれ順序がバラバラになってみにくい言語ですが、
簡単なプログラミングしかつくらないのであれば初心者
向けに記述も簡単なのであの程度の言語で十分プログ
ラミングの楽しさを伝えられると思います。
BASIC派 Ⅰ.最初のハードルを低くし抵抗
感なく学習してもらいたいから


なぜ、BASICかというと、文法上の制約が少なく初心者
にも抵抗が少ないという点が大事だと思ったからで
す。・・・(中略)私はプログラミングの敷居を高くしたくあ
りません。どんな人にも触ってもらいたいし、・・・(中略)
プログラミングがどのようなものなのかを最初に知って
もらううえで初心者にも抵抗ないというBASICの長所を
推したいと思います。
私は間違いなくBASICを薦めると思います。やはり、初
めての取り組みに対してプログラミングの可能性という
ものを潰したくないからです。私は興味を持てる環境を
人に提供すると思います。それは意外とプログラミング
というものは簡単なものであるということを教えてあげた
いだけです。
BASIC派 Ⅱ.まずはプログラミングの楽しさ
を知ることが大切だから


この講義を受けている中で、「Delphiは難しく、理解しづ
らい」というイメージが私の中で出来上がってしまってい
ます。なので、友人のような初学者にはできるだけ理解
のしやすい言語から学んでもらい「プログラミングは楽し
い」ということを一番初めに知ってもらいたいです。
僕はBASICを勧めたいと思う。しかし、完全に独学なら
ばあまり勧めたくない。ある程度のところまで誰かが導く
ならばという条件付である。 なぜならば、完全な独学だ
とBASICの短所を思いっきり踏むと思うからだ。・・・(中
略)BASICは指導者がいればこそ学習に使える言語だ
と思う。 そして、指導者がいるならばこの言語はプログ
ラミング言語の楽しさを知るにはなかなかいい言語なの
ではないだろうか、と思う。
BASIC派 Ⅲ.とにかく実行できることが(初
学者には)大切だから その1


参考意見
私ならまずBASICを勧めます。 理由は、プログラムの
実行まで簡単に到達できるからです。どんなに簡単なプ
ログラムであろうと、実行さえできればプログラミングの
楽しさを味わうことができると思います。また、変数宣言
や型などの基本概念が身に付きにくいと思いますが、基
礎中の基礎である「変数への代入」という考え方は
BASICで十分理解できるはずです。ただ、BASICのま
まプログラミングを続けていくとBASICの欠点(スパゲッ
ティ等)の存在が大きくなっていくと思うので、ある程度
慣れたらDelphiなどの言語に移ればよいと思います。
始めは基本概念うんぬんよりもまず自分の思いどおり
にやってみて、実行できるのが一番だと思います。
BASIC派 Ⅲ.とにかく実行できることが(初
学者には)大切だから その2(BASIC経験者より)

これからプログラミングの学習をしたいという人には、は
じめの内はBASICを勧めると思います。私は初めてプロ
グラミングに触れた時に使った言語はBASICでしたが、
スムーズに意味が理解でき、ある程度の英語力があれ
ば初心者にも抵抗なく学習できる所がBASICの利点で
あって、これからプログラミングを学習する人にはまずプ
ログラムを実行できる喜びを一番に感じてもらいたいか
らです。ただBASICは、あまりにも記述が自由すぎるし
変数型の宣言がないなど、BASICで慣れてしまうと後々
のプログラミング学習に身に付きにくくなってしまうと思う
ので、BASICはせいぜい数週間程度の学習でいいと思
います。
BASIC派
Ⅳ.プログラミングの大まかな概念をつ
かみやすいから

DelphiとBASICのどちらかを勧めるとしたら、BASICだ
と思います。文法上の制約が少なく、思いつくままに記
述できるという長所から、プログラミングとはどういった
ものなのかという、雰囲気を掴みやすいと思ったからで
す。しかし、ある程度わかってくると、プログラミング上の
基本概念が身につきにくい・見直しをしようと思っても迷
路のようになっていて困難になるなど障害が出てくるか
と思います。その点Delphiは基本的な文法を覚えてし
まえば、あとはむしろBASICよりも学んで行き易いかも
知れません。ですから実際に勧める場合、私はBASIC
を勧めつつも、2つの言語の短所・長所を伝えて本人に
選んでもらうことになると思います。
BASIC派 Ⅴ.自主的に自分の考えで学習す
るようになるから

あくまでも初心者の人に勧めるのであれば、BASICです。
自分がプログラムを学んだ時に一番嫌になるのが、・・・
(中略)プログラムを教科書通りに打ち込んではいるが
何をしているのかわからないためにそのエラーの意味を
理解出来ない時。つまり、やらされているので内容も理
解出来ないので楽しくないと思います。BASICには制約
が少ないので初心者の人が自由に打ち込むことができ
る。自由ということは考えなければならなので、結果的
にぐちゃぐちゃになってしまっても、それは自分で考えた
プログラムなので内容は理解しているということが、今
後につながり興味をもつことができるのではないか。ポ
イントはやらされるのではなく、自分で考えて失敗して理
解していくというところにあります。
自分の考えでコンピュータが動作したという充実感が初学
者には重要との指摘→当を得た指摘!
タートルグラフィックス
FORWARD 100 RIGHT 90
FORWARD 100 RIGHT 90
FORWARD 100 RIGHT 90
FORWARD 100 RIGHT 90
正方形完成!
REPEAT 4 [FORWARD 100 RIGHT 90]
<一度に正方形を描ける>
対照的な意見(テーマ2のレポートより)
-「理解が先」派-

昨年の自身の経験からも、「わからないけど動
いたから楽しい」と思ったことはなく、「自分が
しっかり理解でき、正しく動作した」から楽しかっ
たと思います。また、現在SAをやっているのです
が、自分の受け持っている後輩たちは理解でき
てはいないけど楽しいということはほとんどない
ようです。逆に最初のうちは理解できなかったけ
ど、最近少しわかるようになって少しずつ楽しく
なってきたという学生もいました。