Author: mt_caret

情報(工学)科の授業は教養ですらないという話 – 慶應義塾大学編

この記事はKCS Advent Calendar 25日目の記事です。

こんにちは、mt_caretです。最終日です。1お疲れ様でした。

情報科の授業は教養に過ぎないという話 – 東京工業大学附属科学技術高校編 — yosida95

自分がまだ高校生の時にこのブログ記事が大変話題になり、この記事や派生記事が大変印象に残りました。自分もついに学部3年になり、研究室も決まったので、そろそろ自分の大学や情報(工学)科に関する所感を述べます。不満だけ述べても生産的でないので、どうすれば良くなると思うかについても少し言及します。

TL;DR

  • カリキュラムが合わなかった(特に専門講義はかなり期待はずれだった)
  • 体系的な、幅広い範囲の情報科学教育(i.e. 教養)を期待しないほうがよい
  • 独学できる人ならSFCは悪くないのではないか

=> 進学先を間違えた

自分について

まずは軽く自己紹介をしようと思います。慶應義塾大学理工学部情報工学科に所属しています。

中学・高校ではロボコンや情報セキュリティに取り組んでおり、 CombGigを始めとする、CombConfと同じテーマの勉強会を開いたりしていました。その過程で、自分がやっていることはものづくりを趣味でやる範囲を出ていないことを痛感し、興味のない科目を学ぶことを強制されることなく、体系的に情報科学の様々な分野を学びたいと思い、大学に大変期待をしていました。

入学まで

興味のない分野の勉強に上手く打ち込むことができず入試に落ち、慶應義塾大学に進むことに。経済学部・環境情報学部・理工学部の3つに受かったため、情報科学を一番学べそうな理工学部に入ることにしました。

学門制 | 慶應義塾大学理工学部

ようこそ、学びの庭への 入口 [学門]へ! – 慶應義塾大学理工学部

慶應義塾大学には学門という概念があり、理工学部の入試の時点で学門1~5のどれかに入り、学部2年に進むタイミングで成績ベースで学科振り分けがされます。自分は情報工学科の定員が最も多い学門5を選びました。

B1

この学門制度にはいくつな不思議な点があります。

例えば、学門関係なく理工学部生は全員「基礎教育科目」という名目で数学・物理・化学や自然科学実験という物理と化学に関する実験を行う科目を履修することが強いられています。成績が悪いと希望しない学科に配属される可能性があるため、必死に取り組む必要があります。これが自分にとって予想以上に苦痛で、何故やる必要があるのか理解できないまま、情報科学を学ぶ権利を得るために、高校の時と同じように情報科学と一切関係のない分野の勉強や課題に取り組んでいました。

また、学門に関するサイトに

入学後、自分の興味や関心に応じて徐々に学びたい分野を絞っていき、2年進級時に所属する学科を決定します。

とありますが、自分の入学後、自分の興味や関心に応じて徐々に学びたい分野を絞っていった結果進みたい学科の枠が自分の学門に無い場合、「学門越え」が必要になりますが、理工学部全体で1学年1000人居る中許可されのは数人程度なので非常に難しいです

余談ですが、情報科学を学んだりプログラミング言語を学んだりする講義は理工学部の 1年の時は普通の選択科目としては用意されていません。例えば経済学部にはあるようだという話は聞いています。

B2

なんとか情報工学科に配属され、おお喜びです。これでやっと情報科学が学べるぞ!と思いきや、薄々感じていた違和感がより強く現れます。情報技術の話が通じる人が周りにいません。講義でもプログラミングはおろかパソコンを触ったことのない人を想定して進み、いくつかの講義を除き全て紙に鉛筆で進みます。

2年の時はC言語を学びます。2同期の多くはプログラミングをしたことがないため初めて学ぶプログラミング言語となりますが、3 純粋に文法と簡単な演習問題をやるだけなので、例えばポインタを理解していなくてもなんとかなりそうな感じでした。

コンピュータグラフィックスを専門とされている先生がアルゴリズムの講義を教え、4 ところどころテクニカルタームを誤用なさったり、最も実の有る講義と感じたラムダ計算とアルゴリズムのための離散数学の講義はそれぞれ文学部と数理科学科の先生によるものだったりと全体的に教員不足を感じました。アルゴリズムと言語処理系が専門の情報工学科の先生が欲しかったです。

また、講義を受けるための必修科目(prerequisites)、という概念がなくどの講義も事前知識を仮定されてないためか、例えばフーリエ変換やOSI参照モデルを別々の講義で複数回やり、カリキュラムの構成に違和感がありました。

B3

Cを1年かけて学んだ(?)次はJavaを学びます。5

3年の前期の後半は香港の企業でのインターンシップをやっていたため、限られた数の講義しか受けることができていませんが、3年になると4年の講義を履修することができることもあり、履修した範囲では流石に2年の講義と比べてもう少し深い内容になっている気がします。

しかし、米大などでは Captstone course6として位置付けられているコンパイラやOSの講義が後期週1コマに詰め込まれており、例えば計算理論の講義でDFAをゆっくり学ぶのと並列してコンパイラの講義でレキサ・パーサの文脈でDFAを軽く教わるといったような状況になり、やはりカリキュラムの構成が微妙だと感じました。

また、計算理論の講義ではAutomata Theory, Languages, and Computationをテキストとして進めますが、学生には難しいということでチューリングマシンの章まではやりません。なので、チューリングマシンを扱わず情報工学科の学位を得ることができます。余談ですが、同じ理工学部の数理科学科ではチューリングマシンまで含めて学ぶ計算理論の講義があるそうです。

こういったものを経て現在に至ります。研究室配属に関しても様々な話がありますが、話の本筋である情報科学教育から外れますので割愛します。

不満

  • 講義1つ1つが軽く、深いレベルの理解につながるような手を動かす課題を出す講義が非常に少ない
  • カリキュラム全体に統一感が無く、情報科学の中でも通信に偏っている
  • 同期に情報技術に取り組んできた人がとても少ない

良い点

  • G Suite・Google Drive無制限・Office 365あたりの福利厚生

結論

結論としては、

講義を通しては体系的な学習はできず、学部3年間は結構大きい機会損失だった

という風に考えています。カリキュラムについて良く調べ、事前に本質を見抜くべきでした。

申し送り

機会損失を減らす方向で、自分みたいな人に向けて書きます。

慶應義塾大学理工学部の受験を考えている人向け

  • 情報科学を学びたいなら、数理科学科がオススメです
  • 独学ができるなら、情報工学科と比べ必修科目が少なく自由時間が多い7 環境情報学部は悪くない選択肢だと思います

理工学部1年向け

  • 環境情報学部への転学部は比較的簡単らしい
  • KCSやロボット技術研究会といったサークルに入ったりし、探しに行くと大変優秀な人は一定数いる

情報工学科n年向け

  • ご愁傷さまです
  • n = 1くらいなら1年+αは埋没費用としてあきらめて大学の再受験は選択肢の1つだと思います
  • 過去n年は埋没費用として諦めて、残りのの4-n年の学費で学位を購入する気持ちで取り組みましょう。
    • ちゃんと取り組むと機会損失が増えるので講義・課題は最低限の手間を掛けて後は独学をがんばりましょう
  • 外の世界を見ましょう
    • 勉強会での発表は良い経験になります
    • インターンはよい経験になるだけではなく、職にも繋がります

免責

なお、このブログエントリを真に受けた事によって生じた利益や不利益について私はもちろんあなたの周囲の誰も責任を取りません。 自分の進路における決定はすべて自分の責任の下に行なわれるべきです。 しかし、無責任な周囲による無責任な意見を積極的に聞いて自分自身で咀嚼した方がお得です。 あなたは自身が想像している以上に視野狭窄です。 周囲の意見を聞くことで、自分だけでは考えつかなかった選択肢がいくつも出現して裏ステージへ進める可能性が高まります。
私自身がひどい視野狭窄に陥っている可能性が高いので、周囲の意見を聞こうという自戒です。 よろしければ、このエントリや私の考え方についてご意見や反論などをください。
(情報科の授業は教養に過ぎないという話 – 東京工業大学附属科学技術高校編 — yosida95より)

完全にこれです。是非意見・反論をください。

謝辞

事前に読み、フィードバックを送ってくれた皆さん、ありがとうございました。


  1. 遅刻しました。ごめんなさい。

  2. サンプルコードの文法が間違っているためそのままではコンパイルが通らないことが多々あったことが印象に残っています。また、課題の出力フォーマットが曖昧な上に手動で採点が行われているため、提出されたコードは目視で確認し採点する時がある、といったようなことをTAの方から聞いた記憶があります。既存のオンラインジャッジでもよいので、(可能であればオンラインの)自動的な採点システムが欲しかったです。

  3. C自体情報科学をやる上で必須だと思いますが、初めて学ぶ上でつまづきやすい、本質的でない部分が多いような気がしてなりません。SchemeやPythonあたりでSICPをやるぐらいが丁度よいかなと思いました。

  4. 線形探索に一時間半の講義を丸々掛けていたのが印象に残っています。

  5. E.W.Dijkstra Archive: To the Budget Council (concerning Haskell)
    余談ですが、環境情報学部ではプログラミングの講義として上級者向けにHaskellを学ぶ選択肢があるようです。

  6. こういった講義の存在は日本の大学では聞いたことがありません。東大のCPU実験あたりが該当するのでしょうか?

  7. 諸説あるようです。