コンピュータサイエンスって何だろう
「プログラミング教育」への関心が高まっている日本。社会におけるコンピュータ活用の重要性が増していることを反映した動きと言えますが、コンピュータ活用全般を扱う学問分野である「コンピュータサイエンス」への関心は高くないようです。プログラミングは、コンピュータを動かすための手段であって、コンピュータサイエンスを構成するスキルの一つ。例えていうならば、「自動車の重要性が高まっているので、自動車を作る工具の使い方の教育を始めようとしているが、そもそも自動車を動かすのに利用している自然法則や、内燃機関などの自動車の構成要素についての教育については論じない」というようにわたしには見えています。
「コンピュータサイエンスの楽しさを知ってもらおう!」が目的のこのブログ。まずは一般にはあまり知られていないコンピュータサイエンスが何なのか、を今回は解説してみようと思います。
関連記事:
- 「
」、かながわグローバルIT研究所、2016年3月16日
「コンピュータサイエンス」の誕生は1962年
米国で最初のコンピュータサイエンス学科が出来たのはPurdue大学で、それは1962年のことでした。それ以降、「コンピュータサイエンス」は主に米国やカナダなどの北アメリカの大学でよく使われる言葉となりました。同じ分野を、欧州では「インフォマティクス(infomatics)」と呼ぶことが多いようです。
関連情報:
- 「
」、John R. Rice and Saul Rosen
コンピュータサイエンスは「サイエンス」か?
「サイエンス」と言えば科学、なので「コンピュータサイエンス」は理学系の分野かといえばそうとも言えません。理学というのは自然法則を発見することを主目的にしています。確かに、コンピュータサイエンスは情報に関する自然法則を解き明かしている面もありますが、それだけではありません。便利なものを創り出す、という工学の側面もありますし、実験ではなく論理によって法則を導き出す数学の面も持っています。実はコンピュータサイエンスはこのように、理学・工学・数学の3つの大分野にまたがる学問領域であって、たんなる「サイエンス」とも言えない広がりを持っているのです。
コンピュータサイエンスが解決する課題
コンピュータサイエンスは、その名に反して「コンピュータを学ぶ分野」ではありません。
そもそもコンピュータとは何でしょうか?それは、「情報を動かし、情報によって動く」という特徴を持った機械、つまり「情報機械」です。そしてコンピュータが社会やわたしたちの日常生活の隅々にまで普及し、いまやコンピュータ無しの企業やコンピュータを一切使わない学術研究はあり得ないという状況です。
- 新型の飛行機や自動車を実際に作る前に、コンピュータでシミュレーションを行ってその設計の妥当性を確かめる
- インターネット上での安全な通信を実現する
- SNSで、遠く離れた友人・知人と近況を共有する
- チェスや囲碁、将棋で人間に勝るプログラムを開発する
- ICカードをタッチするだけで、適正な運賃を払ってバスや電車を利用できる
- センサーや無線通信を組み合わせて、動物の生態を調査する(関連ブログ記事は )
- 遠く離れたブラックホールの衝突で発生した重力波の痕跡を、膨大なデータの中から検知する
一見すると何の関連も無いようなこれらの活動ですが、共通しているのは「情報を動かし、情報によって動く」というコンピュータの特性を利用して実現されているということ。つまり、これらは全てコンピュータサイエンスの成果を用いて実現されているのです。
このように、わたしたちの社会を大きく変えてきたコンピュータサイエンス。それは、
- 社会や自然界の事象を「情報の動き」として表現し、その特徴を探る
- 実現したい事象を、「実現すべき情報の動き」として表現し、それを実際に実現する仕組みを作る
という大きく2つの活動から構成されていると言えるでしょう。
そしてコンピュータサイエンスの研究者や実践者が頻繁に直面する共通的な課題も2つあります。それは
- 社会の大多数の人が使う大規模なサービス、膨大なデータを使う大規模なデータ処理、のような大規模システムをどのように実現するのか?
- 実現したい事象は、本当に「実現すべき情報の動き」として表現できるのか?どのように表現すれば、効率的な大規模システム構築に貢献できるか?
ということ。身近な例でいえば、GoogleやFacebook、Twitterも上記の2つの課題に対する独特な解決法を持っていますし、 や 、 や などにおいても、上記2つの課題への独特な解決法が実際に用いられているのです。
コンピュータサイエンスの中の専門分野には何がある?
このように、幅広い活動をカバーしているコンピュータサイエンス。その中には、確立された専門分野がいくつも存在しています。例えば以下です。
- 科学技術計算(scientific computing):
- 人工知能(artificial intelligence):
- 経験や蓄積データから学習することのできるコンピュータシステムをどう作るか?
- 計算言語学と自然言語処理(computational linguistics and natural language processing):
- コンピュータグラフィクス(computer graphics):
- コンピュータを使って画像を作るにはどうするか?
- 単に絵を描くのではなく、コンピュータの中の世界に物体や光源、カメラを配置して画像を「撮影」するなど、シミュレーション的な要素を多分に含んでいます
- コンピュータビジョン(computer vision):
- 「見る」ことで周囲の環境を理解するコンピュータシステムをどう作るか?
- コンピュータシステム(computer systems):
- コンピュータシステムを構成するハードウェアとソフトウェアをどう作るか?
- ネットワーク、データベース、オペレーティングシステムなどのソフトウェアと、プロセッサなどハードウェアがあります
- ソフトウェア工学(software engineering):
- 「人類が生み出した最も複雑な工芸品(artefact)」と言われるソフトウェア、それをどのように正確かつ効率的に作るか?
- 最近のソフトウェアはプログラミング言語で数百万から数千万行という大規模なものが数多くあり、それをうまく作るのは至難の業です(関連記事は )
- プログラミング言語(programming languages and methodology):
- HCI(human-computer interaction):
- 人間にとって、心地よく便利なコンピュータシステムは、どのようなものか?
- ゲームデザイン(game design):
- コンピュータグラフィクス、人工知能、HCI(後述)、経済学、心理学、クリエイティブデザインなどの要素を組み合わせて、人が楽しめるゲームをどのように作るか?
- 離散数学とアルゴリズム(discrete mathematics and algorithms):
- 計算の理論(theory of computation):
- どのような問題はコンピュータによって効率的に解決できるか?どのようなアルゴリズムがあるか?
- どのような問題はコンピュータによって効率的に解決できないか?
- ウェブとインターネット技術(Web and Internet technology):
- 超大規模なウェブとインターネットをどう実現するか?
- 検索、ソーシャルネットワークなどウェブとインターネットを活用したサービスをどう実現するか?
ちなみに、筆者の大学院時代の専門は「計算の理論(theory of computation)」でした。
コンピュータサイエンスの説明と専門分野のリストは、カナダ・トロント大学コンピュータサイエンス学科のシラバスを参考にしました。
- 「
」、University of Toronto, Faculty of Arts and Science、2015年7月8日
※コンピュータサイエンス学科は90頁から
コンピュータサイエンスとの学際分野
コンピュータサイエンスは単独で存在するのではなく、社会の様々な領域で活用されています。特に頻繁に活用が起こる分野については、それが独立した学際分野として発展してきています。例えば以下です:
- バイオインフォマティクス(bioinfomatics):
- 生物のはたらきを、遺伝子の情報からのたんぱく質の合成など、情報の視点からとらえる分野
- computational economics:
- 経済モデリングなど、経済学とコンピュータサイエンス
- digital humanities:
- 考古学、歴史学など人文分野(humanities)とコンピュータサイエンス
プログラミングとコンピュータサイエンス
冒頭でも述べた通り、プログラミング教育への関心が高まっています。プログラミングはまさに、「コンピュータを動かす情報」を作りだす活動で、コンピュータサイエンスの必須スキル、とても大事なスキルです。
プログラミング教育の重視は、米国など諸外国でもトレンド。日本がプログラミング教育を義務教育において必修化しようという動きも、とてもよいことだと思います。ただ異なるのは、米国はプログラミングではなく「コンピュータサイエンス教育」を推進していて、プログラミングはその入口という位置づけが明確であること。
日本も、プログラミングだけで終わってしまうのはもったいないです。プログラミングを通して「情報機械」たるコンピュータを身近に感じ、それを入口として、コンピュータサイエンスの楽しさを体感してくれる子どもが増えていけばなおよいと思います。そのためにも、日本において「コンピュータサイエンスの楽しさ」を伝える活動を、今後も続けていこうと思います。
参考情報:
(この記事はかながわグローバルIT研究所Webサイトからの転載です。)