JAIST科目履修生を終えて

9月から履修していたJAISTのソフトウェア設計論が終了しました。

sasa5740.hatenablog.com

単位とれたの

100点で優でした( ・´ー・`)どや f:id:sasa5740:20210201205443j:plain

実際は105/120なので全然パーフェクトじゃないんですが。 9月から新年まで毎週課題の嵐で正直大変でした...。難易度自体は仕事等である程度Java使っていれば優とれると思います。僕は使ったことないんですけどね。

どんな内容だったの

ソフトウェア設計論というと意味が広そうですが、主に2つの観点から講義が行われました。

  1. Javaを用いたOODM。
  2. 並列処理とモデル検査

Javaを用いたOODM

講義前半では、Object-oriented design methodologiesの略としてOODMという言葉が用いたソフトウェアの設計のお話でした。OODのことだと思います。UMLを使ってユースケース図、シーケンス図、関連データモデルをバリバリ書いてました。最終的にVMorコンパイルで動く簡易プログラミング言語を作成するのですが、VMとかコンパイルの原理とOODどちらも学べてお得感がありました。
講義の中でJavaコンパイル時のメソッドシグネチャーの決定と実行時のメソッド探索の話がありました。静的型付け言語のメソッド探索を調べたことはなかったのでいい知見が得れました。

並列処理とモデル検査

講義後半ではサンプルコードにJavaを使った非同期処理のお話でした。レースコンディションやデッドロック、ライブロックの話から始まり、生産者/消費者問題と食事する哲学者問題を実際のコードを使ってなぜうまくいかないのか?を順を追って説明してくれました。解決策も課題で提出することになるのでかなり勉強になりました。
並列処理と合わせてモデル検査の話もありました。ソフトウェアの観点からいうとモデル検査とは、プログラム実行時の組み合わせを網羅的に探索して人間が自動テストを書くのでは気づけないパターンの問題(並列処理のデッドロックとか)を検知できるというものです。Javaのモデル検査ツールであるJava Path Finderを使って先の生産者/消費者問題と食事する哲学者のコードを検査してデッドロックするスケジューリングを発見、解消するという行為が楽しめました。

まとめ

全体として満足度高い講義でした!
ソフトウェア設計というテーマの中に知識がたくさん詰め込まれた講義が毎週きけて、質問もできて、毎回の課題を採点してくれて、いたれりつくせりでした。
学校で興味あることを学ぶって楽しいですね。JAISTに入学を考えている方は一度科目履修生として講義を体験してみるのはどうでしょうか。自信を持ってオススメできます。