この授業では、プログラムを完成させることに加え、計算機システムの機能を分析した上で、適切なステップを踏みつつ段階的にプログラムを完成させる過程を重視します。システムの分析し、その性質を記述し、技術的な問題点を明らかにしつつ、適切な実装手段を選択する能力を培います。
【到達目標】 自動ビルドシステム、コンパイラ、テストツール、ソフトウェアリポジトリなどを用いた現代的なプログラミング環境を効果的に利用できること、システムの状態という概念を理解し、状態を扱うプログラミングの設計・開発ができる能力を身につけること、ある程度の規模の実用性のあるソフトウェアの開発の能力を身につけることを目標とする。
【テーマ】 関数型プログラミングの初初歩を学んだ学生を対象として、状態を扱ったプログラミングの基礎を学ぶ。
プログラミング、ソフトウェア開発、関数型プログラミング、Scala
✔ 専門力 | 教養力 | コミュニケーション力 | ✔ 展開力(探究力又は設定力) | ✔ 展開力(実践力又は解決力) |
講義と演習は相互に連携する。演習では個人的な課題のほか、グループワークに取り組む。
授業計画 | 課題 | |
---|---|---|
第1回 | Scala プログラミングの復習 | Scala の文法と意味論について再確認する |
第2回 | Scala のプログラムと Scala の開発 | Scala 言語と開発環境について学ぶ |
第3回 | 状態 | 状態とその表現について学ぶ |
第4回 | イベント処理 | イベント処理、および付随する副作用と例外処理について学ぶ |
第5回 | 高階関数 | 高階関数の利用方法を学ぶ |
第6回 | 状態表現の拡張 | 既存の状態表現を拡張する技術について学ぶ |
第7回 | グラフ構造の表現 | グラフ構造の表現方法を学ぶ |
第8回 | グラフアルゴリズム | グラフを分析するいくつかの代表的なアルゴリズムを学ぶ |
第9回 | オブジェクトとクラス | データ構造を抽象化した概念としてオブジェクトとクラスについて学ぶ |
第10回 | ゲーム戦略と枝刈り (1) | ゲーム戦略と枝刈りについて学ぶ |
第11回 | ゲーム戦略と枝刈り (2) | ゲーム戦略と枝刈りについて学ぶ(続き) |
第12回 | 並行計算と並列実行(データ並列) | 並行計算と並列実行の例として構造的なデータ並列の手法を学ぶ |
第13回 | 並行計算と並列実行(タスク並列) | 並行計算と並列実行の例として Actor 計算に基づくマルチスレッドプログラミングの手法を学ぶ |
第14回 | 超並列計算 (GPGPU) | 並行計算と並列実行の例として汎用 GPU 計算の手法を学ぶ |
第15回 | 最終発表会 (トーナメント) | 演習の最終成果発表会を行う |
学修効果を上げるため,配布資料等の該当箇所を参照し,「毎授業」授業内容に関する予習と復習(課題含む)をそれぞれ本学の学修規程で定められた時間を目安に行う。
なし
講義スライド、演習用資料、参考ビデオなどは Slack を介して提供する。サンプルコード、演習用のプログラムはGitHubを介して提供する。
基本的な開発ツールを利用した開発ができること、小規模なプログラム開発にあたって要求分析、設計、実装する能力を有すること。講義中の小テストの達成度 (約30%)、講義、およびプログラミング課題の達成度 (約70%) で評価する。
MCS.T204 (計算機科学概論)を履修すること.