【米国留学】コンピューターサイエンスって何を学ぶの?
今回は、南カリフォルニア大学院(USC)のC S修士課程でどんな勉強をしているのか、について紹介したいと思います。現在、留学を検討されている方や、コンピューターサイエンスの勉強内容に興味がある方にとって、参考になれば幸いです。
プログラム構成
USCでは、Department of Computer Scienceという学部名のもと、さまざまな修士課程プログラムが用意されています。(以下は、Computer Scienceの各種プログラムのトップページリンクです)
受験者は、志願先のプログラムを選んで、書類選考をし、合格オファーがもらえたら、そのプログラムで入学する権利を得ます。2022年8月現在、Department of Computer Scienceでは、下記のプログラムがあります。
・Master of Science in Computer Science(General)
→ General コースと書いてある通り、もっとも一般的なプログラムです。USCのCSの中では、必修科目の縛りも少ないコースのため人気です。
・General コースに加えて、下記の通り、一部の領域に特化した修士課程プログラムもあります。
/Artificial Intelligence/ Data Science / Game Development / Computer Security / Computer Networks / Software Engineering / Intelligent Robotics / Multimedia and Creative Technologies / High Performance Computing and Simulation
これらは、特化した領域の関連科目を多く勉強するコースです。
・上記に加えて、私が学んでいるのが、Scientists and Engineersコースです。
Generalコースと、一部特化コースは、出願の段階で、学部レベルのコンピューターサイエンスを修了していることが求められます。Scientists and Engineersコースは、その他の理系学部を卒業した人向けのコースとなっています。
こうして見ると、プログラムが細分化して見えますが、実際入学すると、異なるプログラムの学生が同じ授業を受けることも非常に多いです。また、一部特化コースで入学し、学期途中でGeneralコースに変更する学生もいるので、実際はかなり柔軟です。しかし、私が所属しているScientists and Engineersコースだけは、他コースへの変更が不可で、取得単位数と必修科目数が比較的多いプログラムです。(backgroundがない分、多く勉強しろということなのでしょう)
どんな授業を受けるのか(必修科目編)
今回の記事では、私のScientists and Engineersコースの場合という前提で、どんな勉強をするのかご紹介します。実際、私のコースは、必修科目と取得単位数が多いので、その他のプログラムよりも、CS全般を基礎から体系的に学べるコースです。コンピューターサイエンスでどんな勉強をするのか、という観点では、参考になると思います。
まずは、必修科目(Requirements)を紹介します。
<プログラミング必修(Preparatory Programming Requirements>
授業名:Introduction to Programming Systems and Design
→C Sバックグラウンドがない人向けに、修士課程レベルまでに必要なプログラミングスキルを教える授業。使用する言語は、Javaと C++。条件分岐や繰り返しといった初期レベルのアルゴリズムから、Binary tree algorithmやsortなどデータ構造のアルゴリズム、C++を使ってポインタの概念を学ぶなど、多岐にわたる。毎週プログラミング課題が出される上、学期中に5回のプログラミングプロジェクトの提出課題に取り組み、中間&期末テストもある。
<基礎必修科目Foundational Requirements>
授業名1:Introduction to Computer Networks (or Computer Networks Organization)
→この授業は、電気工学科(Electrical Engineering)で提供されている科目だが、私のコースでは必修となっている。ネットワーク技術(TCP/IPなどのプロトコルやデータパケットの処理速度計算など)、インターネットの仕組みを広く学び、ソケットプログラミングというサーバー&クライアント間でデータのやり取りをするプログラミング課題に取り組む。
授業名2:Operation System
→この授業は、私がこれから取り組む科目なので、詳細の説明は省きますが、P Cなどのハードウェアと各アプリケーションの橋渡しをするオペレーションシステム(OS)の仕組みを学び、カーネルプログラミングという、OS機能を作るためのプログラミングを学びます。Cを使用言語とし、プログラミング課題の量が多いので、USCのCSの中でも最もハードな科目の1つと言われています。
<その他必修科目 Core Requirements>
授業名:Analysis of Algorithm
→この授業は、他のC Sプログラムでも唯一の必修科目となっています。様々なコンピューターサイエンスの分野で用いられるアルゴリズム(プログラムの構造のようなもの)を理論ベースで習得していきます。私が履修した先生は、プログラミング環境を用いず、紙とペンで学ぶ形式であり、個人的にはとても学びが深いものでした。
どんな授業を受けるのか(選択科目編)
選択科目については、個人の興味のある科目を自由に選択します。2022年秋学期のクラスは、下記U R Lにリストが記載しています。
大まかにこれらを分類すると、下記の6つくらいに分けられると思います。
→数理解析やアルゴリズム解析、確率論、数値シミュレーション、様々なアルゴリズムを利用したプログラミング技法などを学びます。微分積分や確率統計など、様々な数学の理論を用います。
<2:ネットワーク、セキュリティ系>
→コンピューターセキュリティに用いられているアルゴリズムや暗号化技術、システム構造などを学びます。
<3:AI, データサイエンス系>
→データベースの様々な仕組み、機械学習理論や、自然言語処理、ゲームアプリへの応用実装などを学びます。最も流行りの分野です。
<4:Web系>
WEBシステムで使われている様々なプログラミング言語(HTML, JavaScriptなど)を用いて、クライアント側とサーバー側のアプリケーションを構築したりします。また、webの検索エンジンに使われている技法を学んだりもします。
<5:ハードウェア系>
VRやホログラムなどの3Dグラフィックスのアプリケーション作りや、ゲーム作りのプロジェクトを行う授業もあります。
<6:研究プロジェクト系>
様々なC S分野の最新リサーチを紹介する講義や、自身で課題設定して行うDirected Research,そして、修士論文も選択できます。
以上が、カリキュラム概要になります。私は、1の理論数学系と、3のデータサイエンス系を多めに履修しています。従って、微分積分やベクトル・行列などの線形代数や確率統計論など、数学の知識を多く求められ、四苦八苦しながら日々を過ごしています・・・。肌感覚としては、データサイエンス系とWEB系の授業は、人気が高く、大人数の授業になることが多いです。一方で、理論数学系の授業は、敬遠する人が多いのか、少人数授業が多いので、私はあえて履修しています。教授と近い距離感で相談できるのも魅力の1つです。
いかがでしたでしょうか。やはり全体的にコンピューターサイエンスの勉強内容は、数学とプログラミングに尽きると思います。もしCS分野で留学検討されているならば、大学数学の復習を少しやっておくとスムーズかもしれませんね。
それでは!