大学の情報科学科ではどのようなことを学ぶのか

laptop

東京大学や京都大学など国立の情報科学科では四年間でどのような科目を学ぶのかについてまとめました。

コンピュータサイエンス学科や情報科学科と聞くとプログラミングなどをイメージする方もいるかもしれませんが、実はそれだけではありません。プログラミングはコンピューターの「使い方」に該当するわけですが、情報科学科でコンピュータの「作り方」やそのための基礎理論を学びます。あくまでプログラミングは情報科学科で学ぶことのうちの表層的な一部分に過ぎません。ではいったいどのようなことを学ぶのでしょうか。

一般教養

まず学部の一年生二年生では一般教養学びます。ここでは線形代数や微分積分といった数学の基礎から、英語、第二外国語、世界史や地理と言った人文科学まで幅広く学びます。この部分は他の学科と共通なので詳しく書きませんが、線形代数や微分積分、確率論、統計といった数学の基本的な科目については情報科学科の後の講義に大きく影響を与えることになります

専門科目

ここから情報科学科で学ぶ専門科目についてまとめます。

コンピュータアーキテクチャ

コンピュータアーキテクチャとはコンピューターを作るための設計書のようなものです。この科目では、どのように計算機を作るかというところを学びます。コンピューターにはCPUやメモリなどの構成要素があり、CPUにはキャッシュや演算装置などの構成要素があります。この科目ではそれらの構成要素がどのように成り立ちどのように結びついているかを学び、それらを自ら設計することを学びます。

アルゴリズムとデータ構造

アルゴリズムとはプログラムを記述する際の手続きを抽象的に表したものです。この科目では、効率的なアルゴリズムを設計する技法を学びます。また、アルゴリズムの効率性を数学的に評価するためのオーダー記法と呼ばれる概念も学びます。具体的にはソートや最短経路問題といった情報科学の様々な分野で登場する基礎的な問題を解くアルゴリズムの効率的な設計の仕方を学び、そのオーダーを導出する方法を学びます。

形式言語理論

形式言語とは数学的に定義された言語のことです。日本語や英語など人間が自然に生み出した自然言語が形式言語の対義語です。コンピュータに命令を下すには命令を形式言語で記述する必要があります。後述のプログラミング言語論とは異なり、ここでは言語をどのように数学的に記述するかということに注力して学びます。

プログラミング言語論

コンピュータへの命令はコンピューター独自のプログラミング言語で記述します。そのプログラミング言語がどのように設計され動いているかを学ぶのがプログラミング言語論です。プログラミング言語を使うにはインタプリタコンパイラと言ったツールが必要になります。この科目ではそれらのツールをどのようにして作るかも学びます。プログラミング言語は形式言語の一例なので、この科目は形式言語理論の発展的科目と言えます。

データベース

コンピューターにデータを格納する際、大きなデータはデータベースと呼ばれるツールによって管理されます。この科目ではデータベースがどのように設計されているか、そしてそれをどのように使うかを学びます。特に、どのようにすれば巨大なデータを高速に処理できるかがカギになります。その意味で、この科目はアルゴリズムとデータ構造の発展的科目といえます。

機械学習

コンピューターに格納された膨大なデータから法則を導き出し活用する技術が機械学習です。現在AIやディープラーニングといった技術が話題になっていますが、それらの基礎となる統計的な処理や基礎理論をこの科目で学びます。

最適化

コンピュータはときに製品の最適な構造や効率的な計画を導きだすツールとして用いられます。またコンピュータ・サイエンスの中でもコンピュータの中にどのように素子を置くかや、機械学習において良いモデルを選択するなど、様々な最適化問題が登場します。この科目ではそれらの最適化問題を抽象化し、微積分の理論を応用して数学的にそれらの問題を解く技術を学びます。

まとめ

大学の情報科学科で学ぶことはプログラミングの技術だけではありません。コンピューターの設計方法や論理学のような基礎的な内容から、機械学習など実際の業務に使われるような技術まで学びます。このブログではこれらの科目をひとつひとつ丁寧に解説していきます。