計算機科学(けいさんきかがく、英: computer science、コンピューター・サイエンス)またはコンピュータ科学、CSとは、情報と計算の理論的基礎、およびそのコンピュータ上への実装と応用に関する研究分野である。コンピュータサイエンス(computer science)は「情報科学」や「情報工学」とも和訳される。コンピュータ科学には様々な分野がある。コンピュータグラフィックスのように応用に力点がある領域もあれば、理論計算機科学と呼ばれる分野のように数学的な性格が強い分野もある。計算科学は科学技術計算という「計算需要」に応えるための分野であり、それを実現する手段の研究は高性能計算である。また、一見わかりやすい分類として、計算機工学など「ハードウェア」とプログラミングなど「ソフトウェア」という分類があるが、再構成可能コンピューティングのようにその両方にまたがる分野があるなど、単純に分類することができない。

## 歴史

そろばんや、一種のアナログ計算機といえるような機械といった、計算を手助けするものは古代から存在していた。「計算機械」と今日呼ばれるような機械としては、最初の機械式計算機がヴィルヘルム・シッカートによって1623年に作られた。チャールズ・バベッジはヴィクトリア朝時代にプログラム可能な解析機関を設計した。1890年にはハーマン・ホレリスの発明したパンチカードシステムが米国勢調査に初めて使用されている。

1920年代以前、「computer」という言葉は「仕事として計算を行う人(計算手)」を指していた。しかしこの時代に、現代に通じる計算理論と計算模型が考案されている。クルト・ゲーデル、アロンゾ・チャーチ、アラン・チューリングなど、後に計算機科学と呼ばれるようになる分野の先駆者は、計算可能性、すなわち(特別な前提知識や技能なしに)「紙と鉛筆と命令書だけでどのようなものが計算できるか」に興味を抱いた。この研究は、一部には人間に付き物の間違いをすることなく自動的に計算を行う「計算する機械」を開発したいという欲求に基づくものであった。この重要な洞察は、あらゆる計算作業を(理論上)全て実行可能な汎用の計算システムを構築することを意味し、それまでの専用機械を汎用計算機の概念に一般化した。汎用計算機という概念の創造が現代の計算機科学を生み出したのである。

1940年代に入り、より新しくかつ強力な計算機が開発されるにつれて、「computer」という言葉は人間ではなく、そういった機械そのものを指す言葉となった。1940年代から1950年代にかけて、次々と電子式コンピュータが建造され、1950年代末には現代にまで引き継がれている仕組み(いわゆるプログラム内蔵方式など)が完成していた。前述の、米国の国勢調査においてパンチカードシステムが役立った事例などを受けて、科学技術などにおける数の計算(いわゆる数値解析的な計算)だけでなく、一般の事務処理などのデータ処理にもこれらの機械が有用であると明らかになってきていたが、そうした「狭義の計算」より広い意味を指す語として、1960年ごろには、主に学術方面でInformation Processing(情報処理)という熟語が使われるようになり、機械翻訳やパターン認識のような、数値計算ではない応用の研究が始まった。また、主に産業方面でData Processing(データ処理)という熟語もあり、EDPという3文字語などもあった。コンピューティングという語の意味はそれらを含む広い意味とされるようになり、計算機科学はそれらを扱う科学ということになった。1960年代には計算機科学は独立した学問分野として確立され、大学などで計算機科学科の設立と学位認定が行われるようになった。実用的なコンピュータが利用可能になると、その応用が下位領域を幅広く形成していった。2000年前後には「IT」という語が流行した。

## 教育

一部の大学には、コンピュータ科学を専攻とする部門がある。近年、コンピュータ科学と計算装置(コンピュータ)が普及させているものとして、すべての人にとって基本的な技術としての「計算論的思考」(Computational Thinking)が考えられており、後述する国際学会が取りまとめているカリキュラムでも重視されている。各論的カリキュラムとしては、離散構造、プログラミング、計算理論、アルゴリズム解析、形式手法、並行性理論、データベース、コンピュータグラフィックス、システム解析などがある。

また、スタンフォードにおいてはComputer Science Department(CS)であるが、バークレイやMITなどにおいてはElectrical Engineering and Computer Science(EECS)というように、コンピュータ科学分野に長けた大学のいくつかでは電気電子工学(日本語では使い分けられるが、英語ではElectrical Engineeringにまとめられていることも多い)を部門名としている。

コンピュータ科学専攻のためのカリキュラム案としては、国際学会ACMがとりまとめているものがあり、1968年の Curriculum 68 以来、定期的に情勢に合わせて見直されている。2015年現在の最新版は CS 2013(Computer Science 2013: Curriculum Guidelines for Undergraduate Programs in Computer Science)である。日本の情報処理学会もこれに準じて「カリキュラム標準」を発表しており、2015年現在の最新版はJ07である。

他のコンピュータ科学以外の専攻においてもプログラミングが教えられているが、それらはもっぱら、コンピュータ科学の一部としてよりも、物理や化学、あるいは計算言語学といった分野において、コンピュータを道具として使うために教えられている。

なお、「コンピュータ科学」という用語について、情報処理学会のカリキュラムJ97(『大学の理工系学部情報系学科のためのコンピュータサイエンス教育カリキュラム J97』)では、「コンピュータサイエンス」を「情報工学、情報科学、計算機科学、計算機工学などの総称」としているが、それぞれの語に定義を与えていないため、語がてんでに使われる実態を反映したものと思われる。

メタ分析によれば、コンピュータサイエンスの一部は他の分野と同様、研究者のバイアスによってある程度歪められており、研究を行う際には、学界に存在するバイアスを意識することが望ましいとされる。

## 主な成果

学問としての歴史は浅いが、計算機科学は科学と社会への数々の根源的貢献をしてきた。

- 情報化時代やインターネットに代表される、いわゆる情報革命を実現した。
- 計算と計算可能性の定義と、それによる計算不能な問題の存在の証明。
- プログラミング言語の概念と様々な抽象化レベルでの手続き的情報を明確に表現するツール。
- エニグマ暗号の解読は、第二次世界大戦での連合国の勝利に貢献した。
- 計算科学は心に関する問題を解明しつつある。
- ヒトゲノム計画はヒトのゲノムの解読を可能にした。
- Folding@Homeなどの分散コンピューティングプロジェクトは、タンパク質の折り畳み構造の解明に貢献している。
- アルゴリズム取引は、人工知能や機械学習、統計学、数値解析などの手法を取り入れることにより、金融市場の効率性と流動性を向上させた。

## 他の分野との関係

計算機科学と関係の深い学問分野として、経済学、数学、物理学、言語学などを挙げることができる。一部の人々は、計算機科学は数学と関連が深いとみなしている。初期の計算機科学はクルト・ゲーデルやアラン・チューリングなどの数学での業績に強い影響を受けており、数理論理学、圏論、領域理論、代数学といった領域は計算機科学と数学の間でアイデアをやり取りする領域となっている。

計算機科学とソフトウェア工学の関係は論争の的である。「ソフトウェア工学」という言葉が表すものが何か、計算機科学の範囲をどう定めるかは長年の議論の対象となっている。一部の人々はソフトウェア工学が計算機科学の一部であると信じている。他の人々は、計算機科学が計算全般を扱う学問であるのに対して、ソフトウェア工学は実用的な目的でコンピュータ処理を設計するものであり、異なる学問分野であると考えている。この見方の例としてデイビッド・パーナスがいる。他の人々はソフトウェアは全く工学的に扱うことはできていないと考えている。

## 基礎

- 数論
- 組合せ数学
- グラフ理論
- 数理論理学
- 情報理論
- 理論計算機科学
  - 計算理論
  - チューリングマシン
  - ラムダ計算
  - アルゴリズム解析
- データ構造
- 形式言語
- プログラム意味論
  - 領域理論
- 計算科学

## 実装

- プログラミング言語
  - コンパイラ
- 分散コンピューティング
- 並列コンピューティング
  - 並列処理
- ソフトウェア工学
  - プログラミング
- コンピュータ・アーキテクチャ
  - オペレーティングシステム
- 通信
  - コンピュータネットワーク
  - 暗号理論
- データベース
- 人工知能
  - ロボット工学
- コンピュータグラフィックス
- データサイエンス