わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

プログラミングは家づくり

前期科目の成績評価も終わっていない状態ですが,10月からの授業で話せそうなことが,頭の中にわいてきたので,文字にしてみました….
前期の科目で,テキストエディタや図形の描画,Word/Excel/PowerPointなどを使う演習をしてきたと思いますが,この後期から,本格的なプログラミングをすることになります.
私の授業は,何回かの例外を除いて,この講義室で行います.C言語を用いたプログラミングに必要な考え方や技法を,スクリーンに映し出して解説します.そして,プログラムの実例…サンプルコードというのですが…これを動かしたり,また行単位で何を書いているのか説明したりします.
みなさんは,そういったサンプルコードを「復元する」ことで,プログラミングを理解していってください.
復元の仕方は,2通りあります.一つは,紙の資料となっているこのプログラムを,演習室でも自宅でもいいので打ち込んでみることです.
ソースコードは,英文ではありません.加減乗除やイコールも使用しますが,数式とも違います.カッコ類をはじめ,記号がふんだんに使われています.丸カッコの中に丸カッコというのも,しょっちゅう出てきます.
そういうのに注意しながら,プログラムを打ち込み,コンパイルして,ときにはタイプミスのためエラーが出るかもしれませんがそれを取り除いて,期待通り動くことを確認するのです.
動いたら,授業で実演した入力と違う入力を与えて,あるいはプログラムをほんの少し変更したり書き加えたりして,そうすると出力がどのように変わるかを見てみると,いいでしょう.
復元のもう一つの方法は,プログラムの暗記です.
何をするプログラムなのか,そう「目的」ですね,を十分に頭の中に入れておいた上で,サンプルコードのない状態で,プログラムを自分なりに作ってみるのです.
もし不安なら,サンプルコードを印刷しておいて,裏向けておくと,いいかもしれません.あの処理の仕方を忘れたとなったら,見るわけです.
一つ目の方法と違い,サンプルコードと完全に一致していなくてかまいません.
理想としては,「何をするプログラムか」の情報だけで,頭の中でそのプログラムの主要部が思い浮かぶようになることです.
さてなぜプログラミングの仕方を学ぶのかですが,我々が情報の学科にいるから,というのは満足な答えとは言えないでしょう.
私なりに表現するなら,「コンピュータを使って,モノづくりや問題解決をするための足がかりとするため」です.
プログラミングは,家づくりに例えることができます.とはいえ,基礎やら鉄筋やらの段階から作ろうと思えば作れるのですが,そこから始めると時間も手間もかかって大変なので,さしあたり,建物はできていて,その内装をすることにしましょう.
プログラミングで言うと,実行環境というのがある状態で,その上で動くプログラムを作り,コンパイルして,実際に動かしてみようということです.プログラムは,内装済みのおうちで,そこに出入りする人が,OSで言うところのプロセスとなります*1.内装の仕方次第で,快適に寝食ができる環境を作るのも,ばりばり仕事をするための事務所*2を作るのも,自由です.
そんな「家のサンプル」というのが,世の中たくさんあるわけですし,この授業でも毎回2〜3個,紹介する予定です*3
みなさんには,その家のサンプルをですね,ときには自習で,あるいはレポート課題として,自分で打ち込んで動かしてみて,内装の,あるいはプログラムコードのどこの部分が効いていて,意図通りに動くのかというのを学び取ってほしいわけです.目に見えている部分だけでなく,配列とポインタの違いのような,直接目に見えていないことが,大きく関与していることだってあり得ます.
そして学年が上がれば,自分で「何をするか」を設定し,そのもとで,家を作ることになります.C言語とは異なる言語で書くかもしれません.そのものずばりのプログラムコードはありませんので,それまでの経験から,使えそうなものを思い出し,組み合わせて,実用的な「住まい」を創り上げるわけです.
努力して作った「おうち」のプログラムは,授業で先生が取り上げるかもしれませんし,学外で公開したら,みんながコピーして,使ってくれるかもしれませんね.
昔書いた妄想:

*1:基本的なモデルでは,一つの家にはたかだか一人だけとなります.1年後期のCプログラミングの内容を超えますが,一つの家に二人以上いてうまく動く状態は,マルチスレッドです.プロセス間通信は,(異なる)家同士のおつきあいになります.

*2:コードを生成するコード,なんてのもありますね.

*3:コンパイル時の構文エラーは「このおうちには構造上の欠陥があって,人を呼ぶことができませんよ」というメッセージに,リンクエラーは,電気や水道がつながっていない状態に相当します.実行時エラーは,人が入ったのはいいけど床が抜けてしまった,みたいな.