授業資料/01 の変更点


#contents

* Why? : 授業の目的:コンピュータとプログラミング [#o4226c97]

まずは「なぜ」を示そう. 授業の目的である.

プログラミングの概要を説明するために,まずはわれわれが使っているコンピュータの本質はなにかを示そう.
大ざっぱに言って,コンピュータの行っている作業は「データの入力,処理,出力」の3つからなる.

&br;&br;
CENTER:&ref(./computation.png);
CENTER:コンピューティングの本質. データの入出力と,データ処理からなる.
&br;&br;

そして,プログラミングとは,この 3つの段階の作業を ''コンピュータに「事前に」指示する'' 行為である.

&br;&br;
CENTER:&ref(./programing.png,30%);
CENTER:プログラミングとは
&br;&br;

では,なぜ事前に指示するのか?
それにはコンピュータの長所と短所を知るとよくわかる.

&br;
&ref(/materials/OK.png); ''コンピュータの長所''

+ 計算が高速
+ 大量に同じことをさせても飽きたり疲れたりしない
+ 指示したとおりに行動する
+ 記憶力は抜群(覚え間違いがない)

&br;
&ref(/materials/NG.png); ''コンピュータの短所''

+ あいまいな指示は理解できない
+ 指示したとおりに「しか」行動できない(臨機応変な行動はできない)
+ ごく単純な指示しか理解できない.
+ 知能的な「判断」はできない (現時点では).
&br;

これらから想像できるように,コンピュータは「あいまいな指示」ではなにもできないが,「完全に具体的な指示」を与えれば高速かついくらでも長時間作業できるのである.
人間はその逆で,「あいまいな指示」も理解できるが,作業はゆっくりで,かつ,長時間の作業には向かない.

これらの特性を考えると,コンピュータへの指示はその場で随時行うよりも事前に与えておいた方がよい.

なぜなら,その場で随時指示するということは,以下のような欠点をもつからである.
&br;
&br;&br;
&ref(/materials/NG.png); ''コンピュータのそばに人間がついて随時指示をする場合の問題点''

+ 作業は人間のペースにあわせてゆっくりになる. コンピュータの計算の高速性が生かしきれない.
+ コンピュータの計算などの作業時間中は人間は作業ができない. 時間の無駄が発生する.
+ 長時間作業になり,人間がツライ. 
+ 指示はコンピュータに分かるように具体的に与えねばならないため,事前指示と比べて特に指示が楽になるわけではない.
+ 人間のその場での臨機応変な指示には,「ミス」が入り込む可能性が高い.
&br;

もちろん,「なによりも臨機応変性が重要」というような作業ではこの欠点を抱えてでも人間がコンピュータに張りついて作業をしなければならないが,逆に言えば,そうした特殊性のない普通の作業では「なるべくプログラミングをした方が作業効率がよい」可能性が高いということになる.
もちろん,「なによりも臨機応変性が重要」というような作業ではこの欠点を抱えてでも人間がコンピュータに張りついて作業をしなければならないが,
逆に言えば,そうした特殊性のない普通の作業では「なるべくプログラミングをした方が作業効率がよい」可能性が高いということになる.
つまり,

&br;&br;
CENTER:&size(24){''コンピュータを効率良く使うには,プログラミングは必須''};
&br;&br;

ということになる.
&br;

そこで,本授業の目的は,各学生の学習,研究能力を高めるツールとしてコンピュータを効率良く使えるようになるために,''プログラミングをどう行えば良いのか一通り知り,かつ,実際にプログラミングができるようになる'' こととなる.

* What? : プログラミングの3つの要素 [#g2bded27]

プログラミングを学ぶおおよその目的は分かったとしよう.
では,そのプログラミングについて,どのようなものなのかもう少し示そう.

プログラミングには,おおよそ三つの要素がある.

&br;&br;
CENTER:&ref(./programing-3elements.png,40%);
CENTER:プログラミングの3つの要素.
&br;&br;

基礎的な方から少し解説しよう.

** アルゴリズム [#u5811fb2]

何かやりたいことがあるとき,「どうやるのか」. 
おおざっぱにはその方法論,手順の理屈をアルゴリズムという.

&br;&br;
CENTER:&ref(./algorithm-sample.png,50%);
CENTER:アルゴリズムの違い
&br;&br;

この簡単な例からもわかるように,アルゴリズムの違いが計算速度やメモリ利用量などのコンピュータの「実行効率」に与える影響は非常に大きい.
もちろん,プログラムのしやすさなどにも大きく影響がある.
そのため,アルゴリズムはコンピューティングにとって非常に重要である.

ただし,本授業では「まだプログラミングが満足にできない」,即ち「実行効率等を気にする以前のレベルにある」という学生を対象としているため,本授業ではアルゴリズムについては深く踏み込まないスタンスをとる.

アルゴリズムについて,少し詳しく知りたいという学生は,例えば

| 書名 | 詳細 | 備考 |h
| アルゴリズム入門 | サラ バーズ 著, Peason Education Japan, 2002. | アルゴリズム全般の入門書. 比較的とっつきやすいか. |

などを参考にするとよいだろう.

** プログラミング流派,プログラミング言語 [#c26bbee4]

プログラミングのスタイルは,用いるプログラミング言語によって大きく異なる(大ざっぱには手続き型言語,関数型言語 などの大きなくくりで考えておけばよいだろう).
問題に対して向き不向きもあるので,実用場面では様々な条件を考慮してどの言語を用いるか決定すべきであるが,本授業ではプログラミングの入門的な目的に対して前半は

&br;&br;
CENTER:&size(24){''Processing''}; ([[&ref(/materials/JNorth_arrow-right-sm.png); 公式 web:http://processing.org/]])
&br;&br;

をプログラミング言語を主に,後半は

&br;&br;
CENTER:&size(24){''Ruby''}; ([[&ref(/materials/JNorth_arrow-right-sm.png); 公式 web:http://www.ruby-lang.org/ja/]])
&br;&br;

とよばれるプログラミング言語を主に用いるものとして採用する.
この言語は他の言語とそうそう大きくは異ならないため,これを学んでおけば(少なくとも C言語に似た言語は)他の言語を学ぶときにも大いに役に立つだろう.

** スキル,テクニック,プログラミング言語の文法,ライブラリ等々 [#ybdc8d75]

上記2つについて「定められた」としても初学者がプログラミングを実際にするにあたり具体的にどうしたらよいか悩む部分,それがこうしたスキル,テクニック,言語文法等になる.
ある意味細かな話であるが,こうした点に一定レベルで習熟しないとアルゴリズムもプログラミングスタイルも「机上の空論」でしかない.

プログラミングができない初学者への入門講座として本授業は,ある程度こうした部分に時間を割いていく予定である.

Ruby の言語文法については web 等でも知ることができるがどうしても断片的になりがちなので(将来的にも役に立つであろうことも考えて), 

&br;&br;
CENTER:&size(24){'' Processing と Ruby の適切な解説書をそれぞれ一冊購入しておくことを強く勧める''};

- どちらか一冊だけというのであれば,そうだなあ,Ruby の方が解説書が必要性が高いように思われる.

* How? : どのように学ぶのか [#u5c13ccb]

基本的には,「講義による座学」+ 「自分で実際にプログラミングしてみる実習」の組み合わせで行う.
実習の際に自分で様々なことに気づくだろうから,そうした点について記録しておくことを勧める.

また,授業の大まかな流れであるが,シラバスにあるおおよその構成を示そう.

+ コンピュータの仕組みとプログラム
+ データ構造(1),式,演算子
+ 入出力, Unix I/O
+ プログラムの流れの制御
+ 関数とプログラム構造
+ データ構造(2)
+ ライブラリ

基本的には以上の順序を意識して授業を進める予定である.
ただし,学生の理解度などから鑑みて,随時変更することがある. 

* レポート,成績づけについて [#h625bb7d]

基本的に ''授業で毎回レポート(報告書的なもの)を課す''. 
基本的に ''授業で毎回レポート(報告書的なもの)を課す''.
成績は提出されたレポートをもとにつける.

* 授業資料,自習のための準備について [#d0cb06bc]

授業資料は(今既に諸氏がみているように) web にて公開する. 
よって,自宅からでもどこからでも参照して学習できる.

また,授業で用いる Processing, Ruby を自宅の PC でも使えるようにしておくとより良いだろう.

&br;&br;
&ref(/materials/notes.png); 自宅の PC などで Processing と Ruby が使えるようにしておこう.
&br;&br;

具体的な方法については,上の Processing および Ruby 公式 web にインストールガイドなどがあるので,そちらを参考にするとよいだろう.
&ref(/materials/warning.png); 上の Ruby 公式 web では時々,「編集画面」になってしまうページがあり,その場合は読みにくいことこの上ない. そういう場合は,画面左下側に ''プレビュー'' というボタンがあるだろうから,それを押してみよう. 本来の表示画面として読むことができるはずである.
&br;
&ref(/materials/warning.png); 上の Ruby 公式 web では時々,「編集画面」になってしまうページがあり,その場合は読みにくいことこの上ない. 
そういう場合は,画面左下側に ''プレビュー'' というボタンがあるだろうから,それを押してみよう. 本来の表示画面として読むことができるはずである.

* レポート [#la25b9b1]

以下の課題について,あたうかぎり賢明な調査と考察と実行をし,

&size(18){''ExpMath1-Report-01''};

という題名をつけて e-mail にて教官にレポートとして提出せよ.なお,各自の

+ 所属(学部,学科)
+ 学籍番号
+ 学年
+ 氏名

を書くのを忘れないように.

** レポート課題 [#lf16c6ea]

+ 本日受けた講義および行った実習について,簡単にまとめよ.
+ 自宅 PC に Processing, Ruby をインストールし,その顛末についてまとめよ.

* about Icons, ClipArts [#v2726f78]

For details, see [[&ref(/materials/JNorth_arrow-right-sm.png); this>materials]].

// ━┃┏┓┛┗┣┳┫┻╋

// コマンドライン入力は「行頭をブランクで始める」.
// コマンドライン出力は「行頭を > で始める」.

// 実習アイコン
// &ref(/materials/notes.png); 

// 注意アイコン
// &ref(/materials/warning.png);

// Link アイコン
// &ref(/materials/JNorth_arrow-right-sm.png);