はじめに: なぜこれを書こうと思ったのか
1つは、これから京都大学の工学部情報学科を目指す人の参考になるように。
そして、もう1つ。京都大学の情報学科は、いわゆるCS(コンピューターサイエンス)を勉強するところ(だと私は思っている)ですが、「ITエンジニアになるためにCSの知識は必要なのか?」というのはよく議論になります。
私は、CSの知識はあった方が良いと思っていますが、Webエンジニアとして開発する中でCSの知識が役に立っているという実感はありません。
この問いについて、ブログ記事を書く過程で私の頭の中を整理し、答えを出せないかなと思ったためです。
注意
私が京都大学の情報学科に入ったのは 2009年4月、その後大学を2013年3月に卒業し、京都大学大学院を2015年3月に修了しています。現役で京都大学工学部情報学科に合格し、ストレートで留年せずに卒業しました。
卒業から10年経っていますので、今とは違うところもあると思います。ご注意ください。
京都大学 情報学科の印象
最初に全体の印象を述べておきます。
一番思ったのは「プログラミングあんまり勉強しないんだ」です。
4年間でプログラミングの勉強をしっかりやって、卒業時にはゲームやWebアプリが作れるようになっているんだ!京都大学の情報学科入学前の僕のイメージは、そんな感じでした。
しかし、実際は毎日プログラミング漬けというわけではなく、(多少は勉強するのですが)基本的には理論と、電気回路など超低レイヤーなことをやります。ただ、最近の京都大学の教材が目に入ることがあるのですが、今よりはもうちょっとプログラミングが多い気はします。
これは、京都大学であるという点も大いに影響していると思っており、どちらかというと研究者を育てるためのカリキュラムなのかなと思います。
大学でプログラミングは教えてくれないのですが、普通にプログラムを書く必要性は出てきます。ググったり、大学で売ってる本とか読んだら書けるでしょ、くらいのノリです(先生に質問したら教えてくれるとは思います)。
当時、プログラマーという職業今ほどメジャーではなく、高校で情報の授業はあったものの、その中でプログラミングは1秒もやりませんでした。そのため、高校を卒業した人たちは基本的にはプログラムなんて1文字も書いたことない人たちです(今とはだいぶ事情が違うとは思いますが)。
しかし、さすがは京都大学。僕の印象だと、少なくとも半分以上は普通にプログラムが書ける人か、ちょっと勉強したらすぐ書けるようになる人たちでした。ただ、書けない人は非常にキツそうでした。
ちなみに僕は大学入るまでにかなりガッツリプログラミングしてた人だったので、この点は何も困りませんでした。
1回生(1年生)は何をやるのか
前提として、京都大学情報学科は2年生に上がる時にコース分けがあります。「数理工学コース」と「計算機科学コース」です。ちなみに、基本的にコンピューターのことは「計算機」と呼びます。電卓のことではありません。
「情報学科」と言われてみんなが想像するのは計算機科学コースの方で、大体計算機科学コースの方が人気になります。ただし、定員があり成績が優秀な人から希望のコースに割り振られるので、計算機科学コースに行きたいなら1年生の成績は超重要になります。
1年生は数学が大きなウェイトを占めます。次いで物理とコンピューターサイエンスの基礎です。また、「一般教養科目」という情報学科と全く関係ない授業も一定数履修する必要があります。一般教養科目は大量にある科目の中から好きなものを選択できます。
https://www.s-im.t.kyoto-u.ac.jp/ja/curriculum/youran/index.html で毎年カリキュラムが公開されているので、1年生の講義を見てみると
- 数学系
- 微分積分学
- 線形代数学
- 物理系
- 物理学基礎
- 物理学実験
- 力学
- 専門科目(コンピューターサイエンス)
- 計算機科学概論
- 数理工学概論
- アルゴリズムとデータ構造
- 最適化入門
- プログラミング入門
今でこそ「プログラミング入門」という講義がありますが、僕の時はなかった気がします。
僕はプログラミングは慣れていましたが、「アルゴリズムとデータ構造」のような理論を学んだことがなかったのでかなり苦労しました。
微分積分学などの数学科目も、物理系の科目も普通にめちゃめちゃ難しかった記憶があります。とにかく勉強して勉強してなんとか全部の単位を取りましたが、周りも普通に単位とってるのでビビります。
とりあえずなんとか単位を取り、なんとか計算機科学コースに配属されました。
大学4年間のうち、個人的には1年生が一番大変だった記憶があります。
アルゴリズムとデータ構造
コンピューターサイエンスを勉強している人なら絶対通るのが「アルゴリズムとデータ構造」です。ここで計算のオーダーなどの概念を学びます。
コンピューターって全てを一瞬で計算してしてくれるわけではないんだ、というのがここでの気づきでしたね。何万、何十万とあるようなデータを処理するとき、下手な実装をすると処理が終わるまでに数分、数時間、場合によっては数年かかることがあるので、ちゃんとアルゴリズムのオーダーを考えろ、ということです。
この考えを身につけたのは一つ、CSを勉強していて良かった点かもしれません。
2年生以降は次回
気が向いたら2年生以降の話を書きます。