一般情報理工学徒の時間割

卒業論文の単位以外は取り終えたはずなので、1年生から3年生までの履修科目を覚えている範囲で振り返ってみる。

1年春

この時期は某ウイルスが一番警戒されてて、その影響で大学の始業が3週間くらい遅れた気がする。
おかげで、15週分の授業が12週間に詰め込まれてた。

微分積分

1年生の授業の中だったら一番楽しかった (?) かもしれない。「微分積分学の試練」なる教科書を1年間じっくりと進めていく感じだった。本はもちろん、授業も個人的にはわかりやすかった。評価は難しめのレポートで行われて、クラス内の点数順位などが公開されるので、当時はそれがモチベーションになってた記憶がある。実数の連続性とかε-δ論法とかの勉強をしていたらしい。レポートではペンちゃんのイラストを描くと加点された(?)

1年秋

春学期の延長のような授業が多くて、あんまり新鮮さがなかった。
このときはまだフルリモートで、実家に戻って教習所に通ったりしていた。

2年春

学科に配属されてぼちぼち専門っぽい科目が増えてきた。
金曜日のデータ科学科目はオンデマンド科目なので実質全休。

プログラミングA

最初は競プロパート。 その後はJavaをメインに、最後にちょこっとPython

情報数学A

I先生のこと気難しい先生って思っていたけど、実はそうじゃないって最近知った。

2年秋

コンピュータアーキテクチャA

権威!

確率・統計と機械学習

A群科目。先生の体調が心配。

情報数学B

情報数学Aの方もそうだったけど、小テストとかレポートのフィードバックが一切ないのがちょっと...
先生がちょっと面倒くさがりなのかなって思う。

情報系の生命学

最後の制限時間アリのレポートで評価される。 あんまり真面目に受けてなかった...

フーリエ解析

最後のレポートで評価が決まった。 競プロのFFTをレポートに書いたらA+をもらえた。

アルゴリズムとデータ構造B

後半のグループワークで、なかなかチーム開発が上手くいってなかった印象。
実装できるひとが頑張る。
制作物の性能も重要だけど、それ以上にユニークなアイデアのほうが評価されてそう(?)

3年春

必修の英語科目がなくなってほぼほぼ専門科目になる。

システム開発プロジェクト基礎

この科目は3年の夏休み中に行われた夏季集中講義。 頑張ったつもりだったけど、評定がA+じゃなくてAで「あれっ」ってなった。

情報通信ネットワーク

M先生の授業動画がわかりやすい!

オペレーティングシステムA

N先生パートでは、配布されるスライドを見ただけでは何も理解できなかった。 謎の赤い丸がスライドに描かれてたりする。 教場試験だけど、持ち込みOKかつ、採点がやさしい(?)のでそこまで心配する必要がなかった。

IoTシステム設計

キーワード:FPGA
初回の週は教室が人で溢れかえっていたのに、気づいたらめっちゃ人が減っていた科目。 前半でFPGAについてさらっと学んで、後半でシステム開発のペアワークをした。 後半の開発パートでは、いきなり放り出されて「何やればいいの」感が強かった。 ペアに恵まれたおかげで無事生存できた。 発表は苦痛。(去年まではK先生単独だったけど、今年からなんか変わってそう?)

プログラミングB

キーワード:関数型言語Ocaml
関数型言語たのしい!

ソフトウェア工学A

astahとかいうツールを使ってポチポチしながらUMLを作る授業。

言語処理系

キーワード:コンパイラ
実習は面白い!試験は時間が間に合わない!でも評定はやさしい!

3年秋

データベース

データベースの基礎的な知識(ACID特性とか)やSQL関連の内容を勉強する。他にも、正規化、E-Rモデルなどなど。たしか、多値従属性のあたりが一番難しかった?あまり覚えていないので要復習。

授業は希望者のみが対面で授業を受ける形式だった。10回分のクイズが用意されていて、その評価だけで成績が決まる。秋学期始めから全部の授業とクイズが公開されてるので、人によっては2日3日頑張れば終わる。クイズの難易度は「こんなんで成績決まっちゃうの!?」ってなる程度のものだった。比率で成績を配分するらしいので、ケアレスミスは厳禁。

オペレーティングシステムB

主にソケット通信関連の内容を学んだ。それに加えて、共有メモリ、セマフォ、割込み、暗号化通信の話などなど。この授業では、ソケット通信を用いた何かを作成して、発表を行うことが求められ、自分はC++用のオンライン実行環境もどきを作った。ファイル転送の際に、ファイルサイズをまず送信してから本体を送信するところや、実行時間の長いプログラムをタイムアウトさせる部分でちょっと工夫したと思う。簡易的になhttpサーバーを実装したりするのでも面白かったかもなーと後々思った。

プログラミング言語

集合や関係といった基礎的な概念から、プログラムの正当性がどのように保証されているのかまでを、さらっと教えてくれた。truc先生パートではIMP(手続き型言語を抽象化したもの)を用いて、手続き型言語において、与えられた規則に従ってどのようなステップで計算が行われているのかを学んだ。(こういうのを操作的意味論って言うらしい。)他にも、契約プログラミングなどが登場して、部品(関数やif文など)に対する事前条件や事後条件という概念が出てきた。
ued先生パートでは主にラムダ計算について学んだ。ラムダ式は日常的にも馴染みのあるものなので、ちゃんと学ぶいい機会だったと思う。不動点結合子(Yコンビネータetc)を使って無名関数で再帰を実現できるというのを知ってほぇ~っとなった。あとは型推論の話など。厳密な証明は追ってない。

ソフトウェア工学B

✨ビジネス✨
これは工学?

人工知能B

キーワード:推論、Prolog、制約プログラミング、単一化
論理型言語むずかしい!

コンピュータアーキテクチャB

キーワード:アセンブリ、パイプライン、コード最適化
実習たのしい!

プロジェクト研究B

生命情報系の研究室でこの科目を履修して、一人でもくもくと「高速文字列解析の世界」を読み進めていた。内容としては、SuffixArrayの構築(SA-IS)、完備辞書(簡潔ビットベクトル)、ウェーブレット木、FM-indexあたりの勉強をやっていた。上記の本は行間が広かったり、誤植が多かったりするので、著者の記事や先人のブログも参考になった。大学図書館に「Compact Data Structure」なる本を買ってもらえたので、こっちも読み進めたい。(こっちは新しくて分厚さもあるので、もっとしっかりと勉強できそう)
あとは、先輩主催の勉強会でGCSA(Generalized Compressed Suffix Array) や de Bruijn グラフ(デブりんグラフ)の話をちょっと聞いたりした。あんまり理解してなかったけど、高速文字列解析の世界を読むモチベになってたと思う。

まとめ

雑なところはだいぶ雑に書いてしまった。(記憶にない授業は端折)
やっぱり、3年になってからの授業が面白かった印象がある。