3・4年次科目(春学期)振り返り
2024/04/03
はじめに
あと、当然ながら 1 ~ 2 年前の記憶を掘り起こして書いているため、情報が正しくない場合もあります。あくまで参考程度にしてください。
「単位を取るのは楽」「やや勉強量が多め」みたいなことは情報として書きますが、それをもって履修する/しないを勧めるものではありません。
興味があるなら必ず履修するべきで、「興味はそうでもないけど、卒業単位に必要だから」という場合にそういう情報を活用すべきだというのが持論です。
主専攻実験
Java による GUI の記述
こんな感じのお絵描きソフトを Java で制作し、最後にオリジナル機能を付け加えて発表する、という講義です。オブジェクト指向プログラミング、MVC モデルについて実践的に学習できる講義です。
学習した知識を駆使しつつソフトを作らないと、コードが膨大になっていったり、変更が大変になったりと保守性にモロ影響が出るという点でも大変実践的でした笑
お絵描きソフトの作り方については丁寧な講義資料が用意されており、その通りにやっていけば Java 未経験者でも問題なく作れると思います。友人と相談しながら作ることも可能で、TA さんも常駐しています。
自分は最後に「お絵描きアプリで国旗を描いて、何の国旗なのかアプリが予測する」という機能を付け加え、アプリを完成させました。
最終プレゼンでは良い発表者に投票をすることができ、10 数目いた履修者の中で 1 位を頂きました。ただの自慢です。
バイナリプログラムの解析
最初に言っておくと、バイナリ解析・マルウェアに興味がない人は取らない方が良いです。
ただこれは最初に断っておきたいんですが、先生自らレポートを熟読してレビューしてくださったり、講義資料はシンプルではあるものの必要な情報は網羅されていたりと、先生や講義そのものに問題があったわけではないです。
興味がある人にとってはとても面白い講義なんだと思います。履修者は自分含めて 6 名いましたが、観測する限りそのうち 2 名はウッキウキで受講していたように見えました。
自分は「バイナリを解析するってなんか面白そう!大学じゃないと一生やらなさそうだし履修してみよう!」という軽い気持ちで履修したのですが、講義内容に興味を持てない部分が多く、モチベーションという点でとても辛かったです。マルウェアが呼び出している Windows の API 関数とか、バイナリがどんなシステムコールをどれくらいの頻度で呼び出しているかとか、まったく興味を持てませんでした。
講義は 2 週間に 1 回、同時双方向で先生が 1 時間弱喋るだけです。それ以外の時間、受講生は 2 週間に 1 回のペースで出されるレポート課題と格闘することになります。
レポート課題は「基本課題」「発展課題」に別れており、バイナリやマルウェアについて事前知識がなかった自分だと基本課題+たまに発展課題をやるのがやっとでした。先生曰く、「 基本課題だけを提出期限内にやっていれば、C が降ってくることはない 」そうです。
そのレポートとは別に、最終課題にて「バイナリプログラムの解析に関連する何らかのツールを自作して発表せよ」というふわっとした課題が降ってきます。
攻撃側が使うツールでも、防御側が使うツールでも、とにかくバイナリやマルウェアに関連していればなんでもアリ、というわけです。
僕は最終課題でPython 難読化器を作ったのですが、先生へのウケは結構よかったです。
その他の受講生は 「Rust でタイムトラベルデバッガ」「速い ptrace」「実際に攻撃に使えるマルウェア」などを作っていました。
GB20,30,40 から始まる科目
ソフトウェア工学 (春 AB 月 34・2 単位)
オブジェクト指向プログラミングの理論を、手を動かしながら学ぶことができる科目です。使用言語は Python です。
課題はめちゃくちゃ簡単で、講義時間内に終わることがほとんどだったと記憶しています。最終レポートだけちょっと時間かかったかな?
学んだことはアルバイト先や他の講義のプログラミングですぐに活かすことができました。オススメ。
機械学習(春 AB 火 12・2 単位)
機械学習の仕組み・理論について体系的に学習することができます。必要な勉強・および課題の量は他の科目に比べやや多めですが、期待していた通りの授業で自分はとても満足しています。
ただ、期末試験は試験開始時に 「時間余ると思いますけど…」と言われたが時間が余るわけがない量だったのだけは記憶しています。騙されてゆっくり目に解いていたら大変な目に遭いました。
しかし結果的に A+が降ってきました。akmt 先生は講義内容はハードだけど採点甘めですからね
プログラム理論(春 C 水 56・1 単位)
初回は「論理と形式化」の復習みたいなもんなんですが、難解過ぎて 「ちゃんと勉強してるはずなのに理解できない」が大学生活の中で発生した唯一の科目です。一言で言うと「手続き型プログラムの正しさ」を検証するための理論みたいな感じのことを学びます。
ただし、みんな理解できていないので最終レポートの採点はかなり甘めなようです。
データベース概論 A(春 AB 木 12・2 単位)
データべースについて体系的に学ぶことができます。動画見て小テストやるだけなので、単位取るだけならかなり楽だとは思います。
ただ内容はそこそこあり、実際のプログラムと違ってデータベースを触ったことがないとイメージしづらい部分も多いので、すぐに理解できずに友達に相談したりされたりした記憶もあります。データベース概論 B はこの講義の知識がある程度前提になってきます。
ヒューマンインタフェース(春 AB 木 56・2 単位)
人間の認知能力・認知モデルや、それを考慮した UI 設計・評価手法などを学びます。レポート課題で適度に学んだことをアウトプットすることができます。
この科目のヤバいところなんですが、期末試験で 「過去問対策」対策がなされています。
言い換えると、過去問で出題されていない箇所を意図的に選んで出題してきます。ヤバいですね ☆ 友人はこれに引っかかり単位落としました。
情報セキュリティ(春 AB 金 12・2 単位)
暗号の数学的な理論から、ネットワークセキュリティ、ブロックチェーンまで幅広くセキュリティ分野の知識を得ることができます。
担当する先生が 3 名いて、それぞれまぁまぁの量があり、期末が 90%なので単位取得という面では結構怖い科目ではあります。
いくつかの公式はちゃんと覚えたうえで試験に行かないと小門 1 個丸々ぶっ飛ぶ、とかがあり得ます。とはいえちゃんと勉強していっても単位が取れない、というな理不尽な難易度では全然なかったです。
GB2,GB3,GB4 から始まる科目
システム数理 III (春 C 月 56・1 単位)
グラフに関連する様々なアルゴリズムを学ぶことができます。「アルゴリズムとデータ構造実験」のようなプログラミングの課題はなく、アルゴリズムを理解して紙の上で計算を行う形の小テストが出題されます。
プログラムは答え合わせ用に記述する、といった感じでしょうか。パッと理解できなくて苦しむ場面もありましたが、普通に楽しかったです。
プログラム言語論(春 C 火 34・1 単位)
僕の推しである kmym 先生から学ぶことができる貴重な科目です!!履修しましょう!!
関数型プログラミング言語 OCaml の入門講座みたいな感じです。また、型推論のロジックについて学ぶことができます。
毎週出題されるレポート課題の難易度も選べるので、単位は取りやすいと思います。
画像認識工学(春 AB 木 34・2 単位)
空いてるコマでテキトーに履修したんですが、めっちゃ面白かったです。
主に主成分分析・部分空間法を用いた画像認識について学び、課題でコードも書いて実際のデータセットに適用します。
画像認識といえば「どうせ大量にデータ突っ込んで深層学習させて終わりでしょ?」という浅はかな考えを持っていたんですが、講義で学ぶ方法は深層学習を用いず、「なぜ認識が上手くいくのか」という部分まで理論的に説明されており、「へぇ~、賢いこと考える人がいるなぁ」と感動した記憶があります。オススメです。
レポートと期末試験で評価されますが、どちらもそこまで難易度は高くなかった気がします。
自然言語処理(春 C 木 456・1 単位)
正直何をやったかはあんまり覚えてません。「自然言語をコンピュータで処理する際にどのようなことを行っているのか」について、言語特性の違いなども考慮しながらふんわり学んだ記憶があります。テストの難易度はそこまででもなかった気がします。
音声聴覚情報処理(春 C 金 34・1 単位)
これもほとんど何やったか覚えてません。片手間にオンデマンド講義を再生して、テキトーに課題やってたら単位がきていた…そんな感じです。
ただ 1 つだけ覚えている面白い課題があって、「ヒトが数字(ゼロ・イチなど)を発音した音の波形の図が与えられるので、それが何を発音したのか当てろ」みたいな課題がありました。図とにらめっこしながら、「この部分が『チ』っぽいか…?」みたいなことを考えながら取り組みました。