演習ガイド
情報工学/情報科学とは
情報システム工学は,実際の世界での問題(やりたいこと,調べたいこと)を,
- モデル化し,
- 計算手順を考え,
- プログラム化し,
計算機を用いて表現したり, 解を求めるための学問です.
次のような観点で,問題を見直してみることが重要です.
- モデル化を行うために,もともとの問題から,「本質的なことだけ」を取り出す
- コンピュータとプログラムによる「実現しやすさ」や「適切性」を考える
家の設計とソフトウェアの設計
家の設計
コンピュータ・ソフトウェアから離れて,家を建てるという問題で考えると
- これこれこういう家を建てたい,(要求/問題 by お客)
- お客からの要求
- 工務店側の外部仕様(外観図,間取り図)
- 設計図を描き,実現性を検討する.(by お客 and 工務店)
- この設計図がお客と工務店の合意,約束
- 設計図にしたがって,
- 工程を考え,
- 下請(土台屋さん,大工さん,家具屋さん)をきめる
- 下請屋さんごとに設計図,工程を作成する.各下請屋さんとの打合わせ(by 工務店)
- 下請屋さんごとに材料を用意し,部品を完成させていく
- 下請屋さんはそれぞれ独立に作業できることがポイント
- もとの設計図に基づいて部品を組み合わせる
- 設計を守って作業してあれば組み立ては容易
- 家ができあがる.
ソフトウェアの設計
一方,ソフトウェアの世界では
-
実際の世界や頭の中にある問題をいかに計算機で実現するか?
-
モデルを考えるのは人間の頭であり,頭の中で考えたことを問題やモデルとして詳細化し,プログラム化していく.
- 代表的な方法としては以下のものがある.
- トップダウン設計
- 実現へ向けて大きな問題を,分割設計していく.
- オブジェクト指向設計
- 問題の中の部品(モジュール)を独立設計していく.
- 問題によって適切な設計方法がある.
- トップダウン設計
- 問題の構造を理解し,より小さな問題へ分割し,
- 家の問題だと,土台,家,室内装飾,など・・・
- 処理の流れを考え(土台造り,家の建築,室内装飾の順に行う)
- 設計案,実現案,モジュール毎のインタフェースなどを決める
- 分割された仕事(モジュール)間の取り決め(インタフェース)を行う
- 例えば,土台と家のインタフェースだと
- 家の大きさ,重さ,柱の位置,などなど
- この約束さえ守れば,土台屋さんと大工さんは別々に仕事ができる!
- 例えば,家と室内装飾のインタフェースだと
- 間取り,床壁の材質,などなど
- 仕事量の見積と実現可能性を検討し, 再設計.
プログラミングによる実現
プログラムは実現のための手段.
- 与えられた計算機環境で,「手順(アルゴリズム)」と「表現方法(データ構造)」を具体的に考える.
- プログラミングと設計の見直し,部品毎のデバッグ,改良.
- 部品を結合し,全体を完成させる.
いわゆるプログラミングだけでなく,下記についてもよく考える.
- 開発言語
- 開発環境
- ライブラリやツールキット
- バージョン管理
- 実行環境
演習
演習の目的
ソフトウェアの開発プロセスを経験する!
- 自分たちが興味を持てて,実現可能な問題の設定を行う.
- ソフトウェアの設計を行う(どうやって実現するか? できそうか?)
- 仕様,インタフェースと部品(モジュール)分けの大切さを学ぶ.
- 設計したものを実際に作る(プログラム化).
- グループでの作業に慣れる.
ソフトウェア開発ってどんなことなのかを体験する(プログラミングはソフトウェア開発のごく一部でしかない).
演習の方針
- 学生がやりたいこと(半年程度でできること)を決め,先生の承認を得ること.
簡単すぎるものはNG
です!
- グループでのソフトウェア設計および製作(班長,副班長を決めて)
- テーマ,やり方等,班の中で合意を得て取り組んで下さい.
- スケジュールは概ね演習スケジュール19にしたがってください.
- 100%完成しなくてもいいから,自分達なりに考え,体験してください.
- 失敗して,反省して,成長することが本講義の目的です.
講義する(予定の)こと
- 演習時間中は,プログラム開発の方法や,そのために必要な知識,プログラミングについて講義します.
- HTML(CSS),JavaScriptなどの基本プログラミング
- 画像やスプライトなどの表示,アニメーション
- 時間やイベントを扱うプログラム
- atomエディタ, makeツール, デバッガ
- network programming(socket.io)
- 時間は圧倒的に足りないので,プログラム作りは授業以外の空いている時間を利用しましょう!
プログラミングに関して
- モジュール化とインタフェースを積極的に使うこと.
- 言語,ライブラリ,システムコールについて理解すること.
- Ubuntu の 作業環境をよくすること
- プログラミングのための道具を積極的に理解・活用すること.
- 期待通りに動いているかどうか,デバッグの方法を考え,慣れること.
- 「より良くする」ことを厭わないこと.プログラミングの経験から計画変更できるように.
- HTML と JavaScript に慣れること.
提出物
- 簡易企画書
- テーマ(タイトル,キャッチコピー)
- 概要
- 対象者
- 画面イメージなど
- 要求仕様書
- 外部仕様書(使う側から見た,概観)
- 外部仕様に含まれる「もの」と「操作」
- 部品(モジュール)分けと処理の流れ
- モジュール毎の仕様(使い方,インタフェース)
- モジュール内部の仕様も(モジュールの実現方法)
- 班のWikiページ
- 作成したプログラム,ドキュメント,WEBページ
こころがけ
- 記録(班Wikiを積極的に使いましょう!)
- プログラミング(スタイル)は変化し続けます.
- コンピュータの環境,教える側の技量,聞く側の知識や能力など,変化していくものはさまざまです.
- その変化に伴って,教えたいこと,教えるべきことも日々変化します.
- つまり,いつまで経っても「教科書」を完成させることができません.→ 教科書のない世界を突き進むために自分で調べる必要があります.
- 毎年ノウハウをため,変化させながら,より良いものに更新したいと思っています.
- どんどんWikiに書き溜めてください.
- 分からないエラーが出たとき
- 使えそうな情報を見つけたとき
- 内容の間違いに気づいたとき
- 自分で調べる <- 重要!
- 班員とは積極的にコミュニケーションを取りましょう.独りで抱えてはダメです.
- 演習以外の時間にもプログラミングしましょう.見合う何かが得られます.
- 自身にとって長く生き残る知識や方法を身につけましょう.