授業資料/01 の変更点


#contents

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

基本的に ''授業で毎回レポート(報告書的なもの)を課す''. 
レポートは報告書的な形式で,作業負担はほとんどないものとする予定である.

成績は提出されたレポートをもとにつける.

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

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

また,授業で用いる Ruby を自宅の PC でも使えるようにしておくとより良いだろう.
&ref(./notes.png); 自宅の PC などで Ruby が使えるようにしておこう.

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


* about Icons, ClipArts [#j6bd526c]
Some icons in this page are downloadable at [[ICONFINDER:http://www.iconfinder.net/]].

The "note" icon &ref(./notes.png); designed by [[Marco Martin:http://www.notmart.org/]] is distributed with the LGPL licence,
the "warning" icon &ref(./warning.png); designed by [[Alexandre Moore:http://nuovext.pwsp.net/]] with the GPL licence
and the "triangle" icon &ref(JNorth_arrow-right-sm.png); designed by [[Joseph North:http://sweetie.sublink.ca/]] is distributed with the [[Creative Commons (Attribution-Noncommercial-Share Alike 3.0 Unported):http://creativecommons.org/licenses/by-nc-sa/3.0/]] licence.

Some clip arts used in this page are downloadable at [[Open Clip Art Library:http://www.openclipart.org/]].
We deeply appreciate their superb works. With licence, they describe that "the actual clipart content on open clipart library is Public domain" in the web.

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

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

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

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

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