コンテンツにスキップ

演習ガイド

情報工学/情報科学とは

情報システム工学は,実際の世界での問題(やりたいこと,調べたいこと)を,

  • モデル化し,
  • 計算手順を考え,
  • プログラム化し,

計算機を用いて表現したり, 解を求めるための学問です.

次のような観点で,問題を見直してみることが重要です.

  • モデル化を行うために,もともとの問題から,「本質的なことだけ」を取り出す
  • コンピュータとプログラムによる「実現しやすさ」や「適切性」を考える

家の設計とソフトウェアの設計

家の設計

コンピュータ・ソフトウェアから離れて,家を建てるという問題で考えると

  • これこれこういう家を建てたい,(要求/問題 by お客)
    • お客からの要求
    • 工務店側の外部仕様(外観図,間取り図)
  • 設計図を描き,実現性を検討する.(by お客 and 工務店)
    • この設計図がお客と工務店の合意,約束
  • 設計図にしたがって,
    • 工程を考え,
    • 下請(土台屋さん,大工さん,家具屋さん)をきめる
  • 下請屋さんごとに設計図,工程を作成する.各下請屋さんとの打合わせ(by 工務店)
  • 下請屋さんごとに材料を用意し,部品を完成させていく
    • 下請屋さんはそれぞれ独立に作業できることがポイント
  • もとの設計図に基づいて部品を組み合わせる
    • 設計を守って作業してあれば組み立ては容易
  • 家ができあがる.

ソフトウェアの設計

一方,ソフトウェアの世界では

  • 実際の世界や頭の中にある問題をいかに計算機で実現するか?

  • モデルを考えるのは人間の頭であり,頭の中で考えたことを問題やモデルとして詳細化し,プログラム化していく.

  • 代表的な方法としては以下のものがある.
    • トップダウン設計
      • 実現へ向けて大きな問題を,分割設計していく.
    • オブジェクト指向設計
      • 問題の中の部品(モジュール)を独立設計していく.
    • 問題によって適切な設計方法がある.
  • 問題の構造を理解し,より小さな問題へ分割し,
    • 家の問題だと,土台,家,室内装飾,など・・・
  • 処理の流れを考え(土台造り,家の建築,室内装飾の順に行う)
  • 設計案,実現案,モジュール毎のインタフェースなどを決める
    • 分割された仕事(モジュール)間の取り決め(インタフェース)を行う
    • 例えば,土台と家のインタフェースだと
    • 家の大きさ,重さ,柱の位置,などなど
      • この約束さえ守れば,土台屋さんと大工さんは別々に仕事ができる
    • 例えば,家と室内装飾のインタフェースだと
      • 間取り,床壁の材質,などなど
  • 仕事量の見積と実現可能性を検討し, 再設計.

プログラミングによる実現

プログラムは実現のための手段.

  • 与えられた計算機環境で,「手順(アルゴリズム)」と「表現方法(データ構造)」を具体的に考える.
  • プログラミングと設計の見直し,部品毎のデバッグ,改良.
  • 部品を結合し,全体を完成させる.

いわゆるプログラミングだけでなく,下記についてもよく考える.

  • 開発言語
  • 開発環境
  • ライブラリやツールキット
  • バージョン管理
  • 実行環境

演習

演習の目的

ソフトウェアの開発プロセスを経験する!

  • 自分たちが興味を持てて,実現可能な問題の設定を行う.
  • ソフトウェアの設計を行う(どうやって実現するか? できそうか?)
  • 仕様,インタフェースと部品(モジュール)分けの大切さを学ぶ.
  • 設計したものを実際に作る(プログラム化).
  • グループでの作業に慣れる.

ソフトウェア開発ってどんなことなのかを体験する(プログラミングはソフトウェア開発のごく一部でしかない).

演習の方針

  • 学生がやりたいこと(半年程度でできること)を決め,先生の承認を得ること.
    • 簡単すぎるものはNGです!
  • グループでのソフトウェア設計および製作(班長,副班長を決めて)
  • テーマ,やり方等,班の中で合意を得て取り組んで下さい.
  • スケジュールは概ね演習スケジュールにしたがってください.
  • 100%完成しなくてもいいから,自分達なりに考え,体験してください.
  • 失敗して,反省して,成長することが本講義の目的です.

講義する(予定の)こと

  • 演習時間中は,プログラム開発の方法や,そのために必要な知識,プログラミングについて講義します.
    • HTML(CSS),JavaScriptなどの基本プログラミング
    • 画像やスプライトなどの表示,アニメーション
    • 時間やイベントを扱うプログラム
    • デバッガ
    • network programming(socket.io)
  • 時間は圧倒的に足りないので,プログラム作りは授業以外の空いている時間を利用しましょう!

プログラミングに関して

  • モジュール化とインタフェースを積極的に使うこと.
  • 言語,ライブラリ,システムコールについて理解すること.
  • Ubuntu の 作業環境をよくすること
  • プログラミングのための道具を積極的に理解・活用すること.
  • 期待通りに動いているかどうか,デバッグやテストの方法を考え,慣れること.
  • 「より良くする」ことを厭わないこと.プログラミングの経験から計画変更できるように.
  • HTML と JavaScript に慣れること.

提出物

  1. 簡易企画書
    • テーマ(タイトル,キャッチコピー)
    • 概要
    • 対象者
    • 画面イメージなど
  2. 要求仕様書
  3. 外部仕様書(使う側から見た,概観)
    • 外部仕様に含まれる「もの」と「操作」
  4. 部品(モジュール)分けと処理の流れ
  5. モジュール毎の仕様(使い方,インタフェース)
    • モジュール内部の仕様も(モジュールの実現方法)
  6. 班のWikiページ
  7. 作成したプログラム,ドキュメント,WEBページ

こころがけ

  • 記録班Wikiを積極的に使いましょう!)
    • プログラミング(スタイル)は変化し続けます.
    • コンピュータの環境,教える側の技量,聞く側の知識や能力など,変化していくものはさまざまです.
    • その変化に伴って,教えたいこと,教えるべきことも日々変化します.
    • つまり,いつまで経っても「教科書」を完成させることができません.→ 教科書のない世界を突き進むために自分で調べる必要があります.
    • 毎年ノウハウをため,変化させながら,より良いものに更新したいと思っています.
    • どんどんWikiに書き溜めてください.
      • 分からないエラーが出たとき
      • 使えそうな情報を見つけたとき
      • 内容の間違いに気づいたとき
  • 自分で調べる <- 重要!
  • 班員とは積極的にコミュニケーションを取りましょう.独りで抱えてはダメです.
  • 演習以外の時間にもプログラミングしましょう.見合う何かが得られます.
  • 自身にとって長く生き残る知識や方法を身につけましょう.