情報科学科で学びコンピュータサイエンスを極める

平木 敬(情報理工学系研究科コンピュータ科学専攻・理学部情報科学科兼務 教授)

図1

情報科学科の実験風景

図2

情報科学科のカリキュラム

拡大画像

理学部情報科学科では知と計算とは何かということを出発点にして,今日社会基盤となり将来の社会・自然科学の展開に不可欠な情報科学について教育・研究を行っている。 情報技術は広く科学技術の根幹を成す技術であり,情報と名のつく学科や情報に関連する教育を行っている学科は数多く存在するが,そのほとんどは計算機を道具として利用するだけのものである。 理学部情報科学科では,情報処理の根本原理の究明・まったく新しい動作原理の計算機の設計・計算機の新しい使い方の提案というように,計算機・情報そのものを教育・研究対象としている点を特徴としている。

カリキュラム概要

情報科学科では,情報科学の最先端の研究を行うために必要な素養を習得することを目的に,計算機科学の基礎科目を中心としたカリキュラムが組まれている。 特に,駒場の4学期から3年の夏冬学期において,情報科学のための数学や論理学,各種アルゴリズムの基礎,計算システム(ソフトウェアおよびハードウェア)の構成法,人工知能などに関する講義と演習・実験など非常に重要性をもつ科目を学習する。 特に,実験・演習ではコンパイラなどのソフトウェアを開発するプログラミング実験,プロセッサを作成するハードウェア実験を通して情報システムの基本を身に付けるとともに,大学院での研究や就職後における研究開発の基盤となる実践力を体得する。

情報科学科カリキュラムの特徴は,数少ない講義で基礎項目の実力練成を狙っていることである。 そのため,駒場の4学期から3年の夏冬学期における講義はすべて必修講義になっている。 また,3年の夏冬学期は原則として講義が午前中2限に1科目開講されるだけで,午後はすべて実験・演習に充てられる。

2年生4学期

駒場4学期は,情報科学の基礎中の基礎を必修6科目で学ぶ。 情報数学では情報を扱う数学的基礎である集合・関係・束,情報理論,代数とその情報科学的応用(符号,暗号,乱数など)を扱う。 形式言語理論では正則言語,有限オートマトン,文脈自由言語,チューリング機械とその停止性問題に関して扱う。 計算機システムでは逐次計算機の構成,動作原理として,機械語,数の表現法,番地指定の方式,オペレーティングシステムの基本原理を講義する。 ハードウェア構成法ではASICの論理回路設計に必要な回路設計,ステートマシンによる同期, 順序制御,排他制御,演算回路を教授する。 アルゴリズムとデータ構造では計算機の成立,計算機による問題解決とプログラミング,データ構造,リストとリスト処理,集合の表現と探索,文字列の照合などを扱う。 情報科学基礎実験ではアセンブリ言語によるプログラミング,C++,Schemeによる「アルゴリズムとデータ構造」に関するプログラミングを行う。

3年夏冬学期

3年生夏冬学期には,情報科学の基礎を必修10科目と実験・演習で固める。図に科目間の学習内容関係を示す。

オペレーティングシステムではオペレーティングシステムの機能および構造,すなわちプロセス,プロセス間の同期・通信,スケジューリング,メモリ管理,ファイルと入出力,トランザクション処理,セキュリティなどを学ぶ。 離散数学ではグラフ理論や線形計画法をはじめとして,有限離散の組合せ構造の諸性質を解析し,組合せ最適化を効率よく行うアルゴリズムを講究する。 情報論理では計算機科学の基礎となる記号論理に関して講義を行う。 命題論理のコンパクト性,一階述語論理の構文と意味,エルブランの定理,一階述語論理の完全性,チューリング機械,原始帰納的関数,一階の算術,ゲーデルの不完全性定理を扱う。 言語処理系論では高級プログラミング言語で記述されたソースプログラムをオブジェクトプログラムへ翻訳するコンパイラを中心とした言語処理系について学ぶ。 計算機構成法では冬学期に実施するプロセッサ・コンパイラ実験でプロセッサを設計する際に必要なアーキテクチャの基礎と,プロセッサ高速化技法を学ぶ。

冬学期科目である知能システム論では人工知能の基本的な技法である探索手法と問題解決,知識表現と推論,学習,分散人工知能および言語理解を扱う。 言語モデル論ではプログラミング言語に現れる基本概念と理論基盤を学び,プログラミング言語を高い立場から理解することを目指す。 実際のプログラミング言語への橋渡しとしてOCamlのほかにScalaやPrologを取り上げる。 計算量理論では問題をコンピュータで計算によって解くときの本質的な計算量について講究する。 決定性/非決定性Turing機械,クラスP/NP/PSPACE,単項式時間還元, Cook-Levin定理,NP完全性などを扱う。 連続系アルゴリズムではディジタルな機械である計算機で,連続な量の表現や演算と数値計算アルゴリズムについて講義する。 コンピュータネットワークではEthernetやBridge,Spanning Treeについて述べ,Layer-3/-4に関してTCP/IPを中心に経路制御やIPv6,TCPのアルゴリズムを扱う。

4年夏学期

4年夏学期は必修科目としてコンピュータグラフィクスを学ぶとともに,各研究室における研究の最先端に触れる選択科目を3科目以上履修する。 コンピュータグラフィクス論では3次元コンピュータグラフィクスの基本技術,図形の描画と座標変換,3次元幾何モデル,曲面の表現形式およびその表示,隠面消去アルゴリズム,陰影表示技法について講義する。 選択科目については字数の都合により割愛する。 情報科学科ホームページを参照されたい。

4年生冬学期

4年生冬学期は,情報科学科における教育の総仕上げとして学科内研究室に配属され卒業論文に取り組む。 同時に,卒業論文を英語で作成するための基礎を必修科目である論文構成法で習得する。

特徴のある実験

情報科学科における学習の中心のひとつが系統だった実験である。 3年夏学期には,ハードウェア実験で論理回路構成法,最適化方法を書き換え可能なLSI(FPGA)を用いて学習し,システムプログラミング実験ではコンピュータをコンピュータらしく動かす根源であるオペレーティングシステムを使い,またその部分を作り上げることで理解を深める。 論理・関数型プログラミング実験では理論的裏付けがしっかりし,生産性の高い言語であるProlog(Lilfes)言語とML(Ocaml)言語を用いたプログラミングを行う。 論理・関数型言語が自由に使えるようになることは,将来のプログラミングへの深さと幅を加えるものである。

3年冬学期に実施するプロセッサ・コンパイラ実験は情報科学科における学習の華である。 学生が自ら設計した命令セット,アーキテクチャを大規模FPGAを用いてプロセッサとして実現し,そのプロセッサに対するコンパイラを作成することにより,情報システムをゼロから作り上げる経験,コンパイラを完成させる経験を得る。 実験の最後に,作り上げたシステムの速度を競う競技会を行い,ソフトウェアとハードウェアが協調した高速化技法を競う。

おわりに

情報科学科における教育は,世界のトップレベルのコンピュータサイエンスの基礎力と展開能力を学生全員が身に付けることを目的とし,全教員が一丸となって目的達成のために努力している。 情報科学科で2年半学ぶ内容の密度,レベルは学部教育だからこそ実現できるものであり,大学院や就職してから同じことを学ぶことは非常に困難である。 将来の職業として情報を考えるならば,ぜひ情報科学科で真の実力を身に付けましょう。

参考:
情報科学科のカリキュラム紹介ページ