UC berkeley のコンピューターサイエンスカリキュラム
さて今回から実際にアメリカの大学のコンピューターサイエンスのカリキュラムを見ていきますね。それと、学部の3、4年になると細分化されてしまうのでまずは学部の1、2年レベルを扱います。最初は UC berkeleyから。
二つのCS
berkeley でコンピューターサイエンスを学ぼうとすると College of Engineering で BSCS (Bachelor of Science in Computer Science) を取るコース (EECS) と College of Letters & Science で BACS (Bachelor of Arts in Computer Science) を取るコース (CS)の2つがあるみたいです。それぞれコンピューターサイエンスに関するカリキュラムは違わないのですが、それ以外の取得単位が工学寄りか人文系寄りかという違いがあり、前者への入学のほうが難関なようです。ところで日本の大学の学部って卒業時にどの学士資格を取得できるのか書いていないところが結構ありますね。これには違和感を感じます。
卒業後の進路
EECS: https://career.berkeley.edu/Major/EECS.stm
CS: https://career.berkeley.edu/Major/CompSci.stm
EECS と CS では就職組が入った会社に特色が現れており、工学系なEECSからはハードウェアベンダー、CSからはソフトウェアベンダーに就職している率が高いのが見て取れます。 また、average salary の欄をみてわかるとおり初年度の年棒が7万ドル以上とさすがエンジニア天国。日本の法人がアメリカ支社を作ってはすぐポシャってしまうというのはこのあたりにも原因がありそう。
ほかの各学部の卒業後の進路は以下のリンクを参照してください。
https://career.berkeley.edu/Major/major.stm
CSカリキュラム
さて本題に移ります。
berkeley では CS を専攻するために必修科目として
- CS61A (Structure and Interpretation of Computer Programs)
- CS61B (Data Structures)
- CS61C (Machine Structures)
- Math1A (Calculus)
- Math1B (Calculus)
- Math54 (Linear Algebra and Differential Equations)
- CS70 (Discrete Mathematics and Probability Theory)
- EECS 42 (Digital Electronics)
という科目の単位をGPA 2.0 以上で取得する必要があります。
学部に進むと
- CS170 (Algorithms)
- CS162 (Systems)
の二つがまず必修で、さらに以下の中から二つ授業を選択する必要があります。
- CS 150 (Digital Systems)
- CS 152 (Compuer Architecture)
- CS 160 (User Interfaces)
- CS 161 (Computer Security)
- CS 164 (Languages and Compilers)
- CS 169 (Software Engineering)
- CS 184 (Computer Graphics)
- CS 186 (Databases)
- CS 188 (Artificial Intelligence)
以下はハンドブックに載っていた、履修サンプルです。
Year | Computer Science | |
---|---|---|
Fall | Spring | |
FRESHMAN | Math 1A (4 units) | Math 1B (4 units) |
Science (4 units) | Physics 7A (4 units) | |
CS 61A (4 units) | CS 61B (4 units) | |
Humanities (4 units) | Humanities (4 units) | |
SOPHOMORE | Math 53 (4 units) | Math 54 (4 units) |
Pysics 7B (4 units) | Math 55 or CS 70 (4 units) | |
CS 61C(4 units) | EE 20N (4 units) | |
Humanities (3 units) | Humanities (3 units) | |
JUNIOR | Physics 7C (4 units) | CS 164 (4 units) |
EE 40 (4 units) | CS 170 (4 units) | |
CS 162 (4 units) | Engineering (4 units) | |
E 190 (3 units) | Humanities(3 units) | |
SENIOR | CS 169 (4 units) | CS 150 (4 units) |
Engineering (4 units) | Engineering (4 units) | |
Humanities (3 units) | Humanities (3 units) | |
Elective (4 units) | Elective (3 units) |
では学部2年までのカリキュラムを少しだけ掘り下げてみていきます。
CS61A : Structure and Interpretation of Computer Programs
CS61Aのタイトルは「Structure and Interpretation of Computer Programs」そう、あの有名なSICP本と一緒の名前でもちろんテキストもSICP。
ありがたいことにサイトが公開されています。(2010春版)
http://inst.eecs.berkeley.edu/~cs61a/sp10/
といいつつ自分はSICP本、読んだことないです。というか読んでたらこのblogは書いていないかも。
で、Course Information Handout を開いてみると、corequisite に Math1A が指定されていますので、SICP本を読みながら微分積分もやるという、数学嫌いな人にはホント苦行のようなカリキュラムになってます(笑)
で、すごいことに berkeley の授業の一部は webcast/podcast で公開されています。以下のリンクは CS 61A Spring 2010 のもの。
http://webcast.berkeley.edu/course_details_new.php?seriesid=2010-B-26275&semesterid=2010-B
Math1A, Math1B : Calculus
微分積分をみっちりやるのは必須ということですが、いろんなところで微分積分の考えって必要になるので当然といえば当然かも。
こちらもサイトが公開されてます(2010春版)
http://math.berkeley.edu/~ogus/Math_1A/index.html
テキストは Single Variable Calculus, by Stewart, (Early Transcendentals for UC Berkeley). バークレー特注なので同じものは amazon じゃ買えないのですが、一般向けのものがあるのでそちらをリンクしておきます。Single Variable Calculus: Early Transcendentals
中身をちょっと見てみると図解がたくさん含まれていてわかりやすそうなテキストですが、お値段は怒涛の2万円です。Wiiより高い。 著者のウェブサイトが充実してるのでそちらをいろいろ見て回ると本の内容がつかめるかも。でも2万円て!
http://www.stewartcalculus.com/index.php
Math1A web/podcast (fall 2009):
http://webcast.berkeley.edu/course_details_new.php?seriesid=2009-D-53903&semesterid=2009-D
Math1B web/podcast (spring 2010):
http://webcast.berkeley.edu/course_details_new.php?seriesid=2010-B-53969&semesterid=2010-B
CS61B : Data Structures and Programming Methodology
prerequisite: CS61A grade B at least
こちらもサイトがあります。
http://inst.eecs.berkeley.edu/~cs61bl/sp10/
CS61BではなくCS61BLとなっていますが、最後の「L」はlabのことで実践的にやりますよってことです。
テキストは以下の3つ、scheme の次は Java です。
- Head First Java
- Pragmatic Unit Testing In Java With Junit (Pragmatic Programmers)
- Data Structures and Problem Solving Using Java (4th Edition)
web/podcast (Fall 2009):
http://webcast.berkeley.edu/course_details.php?seriesid=1906978501
CS61C : Machine Structures
http://inst.eecs.berkeley.edu/~cs61c/sp10/
- Computer Organization and Design, Fourth Edition, Fourth Edition: The Hardware/Software Interface (The Morgan Kaufmann Series in Computer Architecture and Design), P&H
- C Programming Language (2nd Edition) (Prentice Hall Software), K&R
内容的にはパタヘネ本に重点が置かれている感じですね。進むスピードが速く、K&Rのほうは2週間で終わってしまいます。で、パタヘネ本は現在第四版になっていて、三版との大きな違いとしてCPUのマルチコア化に伴う記述が章として新たに書き起こされています(9章がMultiprocessors and Clustersというタイトル)ほかに GPU、フラッシュメモリ、バーチャルマシンなどの記述も。
web/podcast (Spring 2010):
http://webcast.berkeley.edu/course_details_new.php?seriesid=2010-B-26353&semesterid=2010-B
CS70 : Discrete Mathematics and Probability Theory
prerequisites: CS 61A, Math 1A, Math1B
残念ながら最新のサイトは公開されていません。代わりに2008年春期のサイトをリンクしておきます。
http://www.eecs.berkeley.edu/~daw/teaching/cs70-s08/
参考テキストは Discrete Mathematics and Its Applications
Math54 : Linear Algebra & Differential Equations
prerequisites: Math1A, Math1B
サイトはこちら
http://www.math.berkeley.edu/~lott/math54syllabus.html
テキストは
- Linear Algebra and Its Applications: International Version の berkeley edition
- Fundamentals of Differential Equations with Boundary Value Problems の berkeley edition
EECS42 : Digital Electronics
なぜか EE100 のサイトにリダイレクトされてしまうのですが中身がほぼ一緒なのかな
http://rfic.eecs.berkeley.edu/ee100/
Prerequisites: Mathematics 1B
テキスト:
Electrical Engineering: Principles and Applications (4th Edition)
内容は電子部品の基本からキルヒホッフの法則、テブナンの定理、ノートンの定理、MOSFETやCMOSを用いたロジック回路、アンプや電源回路等々。
回路シミュレーターにSPICEは使わないよってかいてありますが、代わりにfalstadというのがいいかもって書かれています。
podcast(spring 2008):
http://webcast.berkeley.edu/course_details.php?seriesid=1906978507
CS3 : Introduction to Symbolic Programming
いきなりSICPをやる前に実はもうちょっと平易な scheme 入門のカリキュラムがあります。「CS61A取るほうがいいよ!」って注意書きがありますが。
サイトは
http://inst.eecs.berkeley.edu/~cs3/sp10/misc/geninfo.html
で、テキストは
Simply Scheme, by Brian Harvey and Matt Wright (second edition, MIT Press, 1999)
なのですが、オンラインで公開されており、そちらへのリンクが上記のサイト中にあります。
以上、berkeley での CS を調べてみました。(freshman, sophomoreレベルまで)
SICP, K&R, パタヘネを講義テキストで使うあたり、正統派コンピューターサイエンスのカリキュラムなのかなーという印象。あと微分積分の必須っぷりっていったらないです。できないとどこの学部にも拾ってもらえないんじゃないかってくらい進路の幅が狭まります。それとスケジュールをみるとわかりますが、ホントにとんでもない勢いで進んでいきます。
ちなみに学費は
http://registrar.berkeley.edu/Registration/feesched.html
に載っており、日本から行く場合学費だけで初年度に約 $18,000 と、小さい車ならポンと新車で買える程度はかかります。さらに渡航費や生活費を考えると日本円で400万くらいかかってしまいそうですね。
あといろいろ調べていた際にこんな資料を見つけました。
http://www.cs.berkeley.edu/~pattrsn/61CF00/lectures/lec27-finalreview.ppt
berkeley の CS は Stanford の CS にライバル心を燃やしているみたいです。