今年の6月から8月にかけてUC Berkeleyでコンピュータアーキテクチャの授業と"English as second language"というカテゴリーの授業を受けて来ました。

コンピュータアーキテクチャの授業は正確にはCS61CというコードでタイトルがThe great ideas in computer architectureというものです。内容的には

  • Bit
  • C language
  • MIPS Assembly
  • Cache
  • Datapath
  • Pipeline
  • Virtual Memory
  • Performance Programming
  • Map Reduce
  • RAID

という感じです。1時間半の講義が全30回以上と講義の後に交互にディスカッションとラボラトリが入ってきます。教科書はパタヘネでした。

ディスカッションは少人数クラスで授業内容についての問題が渡されて近くにいる人と一緒に解いて、みんなで理解について確認する感じです。ラボラトリは実際にコンピュータを使って問題をとく演習でした。

日本の授業との違い

日本の授業と扱っている内容に大きな差があるとは思いませんでした。しかし、講師のプレゼンの質が日本人と比較にならないほど高く、講義中に飽きることはまずないです。日本の1時間半の授業は拷問に感じられることがありますが、授業の構成もうまく考えられており、1時間半が一瞬ですぎました。

また、ディスカッションという形の授業も日本にはないです。講義中にも隣の人とクイズの回答を相談する時間があるのですが、一貫してみんなで理解を深めようという流れがあります。オンライン上でもみんなで質問を投稿できたり、他の生徒の質問に対して回答することができるサービスもありました。

今回はサマーセッションというものに参加したので普段よりフルタイムのバークレー生は少なかったので生徒の比較はしません。

感心したこと

日本だと座学で終わりそうなものがプロジェクトという宿題とはまた違うものとして課されてアウトプットする機会がありました。プロジェクトは複数回あり、

  • C言語の課題
  • アセンブリを作る
  • リンカーを作る
  • MIPS CPUを作る
  • 与えられたアルゴリズムを授業で扱った内容を使って最適化する

という感じでした。日本ではCPUについての学部の授業では座学で終わるものが、実際に自分でLogisimというものを使って組み立てました。これのおかげでかなり深くCPUについて理解することができ、全プロジェクトを終えると自分で書いたアセンブリを自分で書いたアセンブラでマシン語に直して、自分で作ったリンカーで実行ファイルにして、最終的に自分で作ったCPUで実行することができます。

実際、この授業は僕の大学の授業4つ分くらいの内容を含んでいます。日本ではほとんどが週一コマの授業をたくさん取る感じですが、アメリカでは4倍くらいの重さの授業を4つか5つほどしかとりません。こうすることで僕の受けた授業のように、大きな流れを通して理解を深めるということができます。是非日本の大学もこのスタイルにしてほしいです。

アメリカの大学は卒業するのが難しい説

扱っている内容に大きな差があるとは思えず、真面目にやれば普通にAは取れると思います(英語で少し苦労しますが)。おそらくアメリカの大学入試では学力と同じくらいボランティアなど他の要素が関わってくるので、学力に大きなばらつきがあるのだと思います。なので確かに真面目にやらないと間違いなく留年しますが真面目な日本人であればむしろ楽しく学生生活を送れると思いました。

すぐに役に立ちそうなテスト問題

キャッシュの単元では、C言語が与えられて、キャッシュのヒットレートを求める問題が出題されました。以下に若干の変更を加えたものを紹介します。

We are using a 20-bit byte addressed machine.
Cache is 4-way set associative.
It has a capacity of 16 KiB and 16 B blocks. 

For the code given below,
calculate the hit rate for Cache assuming that it starts cold. 

#define ARRAY_SIZE 8192
int int_arr[ARRAY_SIZE]; // &int_arr = 0x80000
for (int i = 0; i < ARRAY_SIZE / 2; i++) {
    int_arr[i] *= int_arr[i + ARRAY_SIZE / 2];
} 

難易度としてはラッキー問題くらいと言ってもいいくらいの問題です。ですが、このような問題を通して実際のプログラミングのときにもキャッシュの存在を意識するようになりました。ちなみに答えは5/6です。

まとめ

UC Berkeleyはコンピューターサイエンスの聖地とも言える場所で歴史もあります。様々な最新技術が生まれてきた場所で、講義はとても洗練しています。間違いなく日本でコンピューターサイエンスを学ぶよりUC Berkeleyで学ぶ方が楽しくより深く身につくと思います。そう断言できるようになっただけでも言ってきた価値があると思います。