Web 鼎談:コンピュータ・サイエンスは21世紀の基礎科学になるか?

総集編 No.2

5月の鼎談

鼎談の表紙へ, 鼎談のあらすじへ, キーフレーズから見た鼎談へ,


2.1.カリキュラムから見たCS

4月の鼎談から
根上: 私も「リテラシー」の次にくる「通常のカリキュラム」というのが見てみたいな. もしそれがあるのなら.ねえ,渡辺さん.

[0015] 渡辺 一般教養としてCSを教える! それはリテラシーでもプログラミングでもない.

実は,私の所属する東工大では,今年度から, 全学の1年生を対象に「基礎科学としてのコンピュータサイエンス(CS)」を教える授業, コンピュータサイエンス入門を始めました.

これは,いわゆるリテラシーではありません. リテラシーは前期で教えます. コンピュータサイエンス入門は,その後にに続く講義です.

では,どんなことを教えているの?ということになりますね. 大きな方針として 「理工系のどんな分野に進む人にも重要と思われる, コンピュータサイエンスの基礎を教えよう」 と担当教官の間では合意しています. コンピュータの使い方を教えるのではない(これはリテラシでやる), プログラミングを教えるのではない (これは2年次に各学科に分かれた時点で,その学科の特徴に合わせて教える) というわけです.

[0017] 根上 リテラシーでもプログラミングでもない.では,何を教えるの?

「うーん,なるほど」と言いたいところですが, リテラシーでもプログラミングでもない「基礎」って何なのですか? そこのところを具体的に知りたいですね.

[0018] 渡辺 それはCSの心を教えるのです :-)

そうくると思っていました. この質問は,まさに「CSとは何か?」と聞いているのに等しいようなものです. つまり,リテラシー(単なる使い方)でも, プログラミング(単なる作り方)でもない,そんなCSとは何か?ということですよね.

とりあえず, コンピュータサイエンス入門で, 私が教えたかった(伝えたかった)ことを並べあげてみます. (ちなみに,実際に取り上げることのできたのは,この一部です.)


  1. 「計算」とは何かの体験
    計算は,非常に単純な操作(たとえば,+1など)の組み合わせでできる,ということ. 実は,これは Unix の shell のコマンド群の設計思想にも通じる考え方である. (また,これが計算不可能性や精度誤差の原因でもある.)
  2. アルゴリズムの重要性の認識
    単純な操作を組み合わせるだけの計算. でも,その組み合わせ方(手順,アルゴリズム)で,とても素晴らしいことが可能になる. また,その組み合わせ方をいいかげんに考えると, どんなスパコンも無用の長物になってしまう,という点.
  3. 形式的な記述の重要性
    コンピュータの上に仕事をのせるには,形式化が重要である. 今までは(とくに高校までは), たとえ数学でも,記述や議論に曖昧な点があった. いろいろなことを,純粋に記号を使って表すことができる, という点の認識. そして,形式化することの意義,効用.

まあ,こんなところでしょうか. (注:なお,これはあくまで私の担当した授業に関しての話です.)

CS入門の内容についての私の考え方は, 以後, 鼎談の議論を通じて大分洗練されていきます. ==> ?月の鼎談

[0020] 根上 CSの中心は「計算」ですね.

なるほど.こういうことを考えていたわけですか.

確かに,渡辺さんが示してくれた3つの内容は, コンピュータ・サイエンスにおいて重要なことだと思います. そこで,そこに共通するキーワードはと考えると, やはり「計算」ということになるみたいですね.

ということは,コンピュータ・サイエンスから生まれるだろうところの基礎科学とは, 「計算」を対象とする基礎科学ということになるんでしょうか?

[0022] 渡辺 そうです.そしてすべては「計算」なのです!

はい,そうです.

数セミの読者の中には, 「計算」というと,数値計算を思い浮かべる方がいるかもしれません. しかし,ここでいう「計算」とは,非常に広いものです. ワープロで仮名漢字変換をするのも, こうやって Web のページを表示するのも, みんな「計算」です. さらには,生体の機構や,粒子の動き,あるいは天体の動きなどまで, モデル化できれば,すべて「計算」として扱えます.

ですから,「計算」を対象とする基礎科学というのは, かなり広い領域になるでしょう.

2.2.本当にそれが基礎科学なの?

[0023] 根上 どこが基礎科学なの?根上氏の厳しい突っ込み始まる.

うーむ. 実は単に,言葉を拾って, 「計算」を対象とする基礎科学といってみただけだったのです. 渡辺さんが掲げている項目を見ているだけで, はたして,それが「基礎科学」なのかどうかが,まだよく見えてきません. 「基礎科学」とは何なのかという議論も必要だとは思いますが, 「計算」とは何なのか, それを研究していく学問分野が,どういう「科学」になっていくのかを理解したいですね.

そもそもコンピュータ・サイエンス入門についての説明は, 「基礎科学」というよりも「基礎教育」の内容なのだから, それはそれでよいとは思います. でも,なんだか,「計算」の効率を考える技術論,「計算」にまつわる精神論, って感じがしなくもないです. 前者は,プログラミングの指導といっしょにすればいいし, 後者は,文系の先生にお話をしてもらえばよいのでは,と考えられなくもないですね.

念のため,言っておきますが, これは,わざと悪口的に発想しているだけで,私の本心ではありませんよ.誤解のないように.

[0025] 渡辺 「計算」が森羅万象を理解する元になっているとしたら,どうですか?

う〜ん,なかなか厳しいですね.

いろいろな答え方があると思いますが, 先ほどの主張をさらに強調してみましょう. つまり, 「計算」が森羅万象を理解する元になっている,としたら,いかがです? その場合, 「計算」を扱ったり,理解したり,あるいは解析したりする技術は, 果たして,単なる「技術」でしょうか? また,「計算」の意味を考えるのは, 単なる「お話し」でしょうか?

[0026] 松井 基礎科学として成り立つには, CSの「精神」について共通した認識が必要なのでは.

「計算」という単語にこだわって話をすると議論が空転しそうですね. 「計算が森羅万象を理解する元になっている,としたら,いかがです?」 という話では, 議論が続かない気がします.

でも, 計算にまつわる「精神」論というのは議論されるべきだとは思います. CSは, 他の成熟した科学(規範科学 normal science と呼ばれるもの)とは, 出てきた背景が少し違うような気がします. CSには, 様々な分野において「計算をする」という, 応用の一分野として発生して来たという横断的な性格があるように思います. たとえば「計算物理」などという言葉もありますよね. そのため, 発生してきた母体を離れて,CSのみで基礎科学として立とうとすると, いろいろな学問の境界領域を頼りなく浮遊しているイメージがあるように思います.

CSが,いろいろな分野の「応用」の寄せ集めでなく, 「基礎科学」として成り立つには, CSの「精神」(認識母体 disciplinary matrix)が, 研究者達で「共有」される必要があるのだと思います. 多分,数学や物理といった学問では, そのような「精神」が改めて議論されることはめったに無いのでしょう.

CSは,共有すべき「精神」がまだ確立していないため, このような鼎談が必要なのでしょうね. それに, CSを基礎科学として捉える際は, 基礎科学のイメージ自体も従来のものから少し広がることを前提として話さないといけないのでしょうね.

[0032] 渡辺 だからこそ「計算」が核なのです!

確かにおっしゃる通りなのです. だから私は,あえて「計算」という核があると主張したいのです. この点が,いわゆる「応用数学」と違う点で, この核があるために基礎科学にまでなりうると思うわけです.

[0026-2] 松井 精神論より具体的な話から進めませんか?

そうはいっても「学問の精神」だけを取り出して議論するのは難しいですよね. 具体的な知識やカリキュラムについて議論することで, 「精神」が議論されたり共有されたりしてゆく方が健全ですよね. 具体的な話に戻りませんか?

たとえば, アルゴリズムの話は私の分野にも関係しますので関心があります.

==> 6月の鼎談へと続く


鼎談の表紙へ, 鼎談のあらすじへ, キーフレーズから見た鼎談へ,