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