仙石浩明の日記

2006年6月20日

コンピュータ科学における体系的な知識 hatena_b

断片的な知識と体系的な知識」にトラックバックを頂きました。 長久さま曰く:

体系的な知識を学ぶことはある程度可能です。 但し、その分野が十分に研究されていて、体系化されているならば、 という条件が付きます。体系化は、学問化と言っても良いでしょう。 この場合、本当に良くできた教科書を読むことで、 体系的な知識を学ぶことができます。
しかし、多くの分野では、体系化まで行ってません。 コンピュータ科学においても、体系化まで進んでいる分野は、一握りです。

「体系」を辞書で引くと、 「一定の原理で組織された知識の統一的全体」(広辞苑) とあります。 私は「統一的全体」として、 かなり広範囲の学問分野を想定していたのですが、 長久さまは「コンピュータ科学においても、体系化まで進んでいる分野は、 一握りです」と 表現されていることから、 もっと狭い個々の技術分野について考えられているのでしょう。 技術分野がどんどん細分化されていく昨今、 長久さまのように、 個々の技術分野の「体系」をイメージされるかたのほうが 多数派なのかも知れませんね。

私がイメージする「体系的知識」とは、 コンピュータ科学でいえば、 例えば「オートマトン理論」のような学問体系のことです。 現在のコンピュータは全てオートマトンですから、 コンピュータ科学全体が一つの体系と言ってしまってもいいかも知れません。 この意味でコンピュータ科学は、かなり体系化されています。 コンピュータ科学という「体系」の視点から見れば、 その中の個々の技術分野の「体系」は、 他の技術分野と相互に関連づけられていない限り 「断片的知識」と言いきってしまえるかも知れません。

「コンピュータ科学 体系」で Google 検索してみると、次の本が見つかりました:

図解雑学 コンピュータ科学の基礎 河村 一樹 (著)

内容
ほとんどの情報処理試験に出題され、 もっとも難しいジャンルとされる「コンピュータ科学基礎」について 図版を豊富に使って丁寧に解説。 コンピュータ科学がいかに体系化され、 いかに研究が進んでいるかを実感できる本。

目次
1 コンピュータサイエンスと符号化理論の基礎
2 論理学の基礎
3 集合論の基礎
4 形式言語理論の基礎
5 オートマトン理論の基礎
6 グラフ理論の基礎
7 プログラミング論の基礎

検索で見つけただけの本なので内容がどうなってるのか分かりませんが(^^;)、
この目次は、コンピュータ科学の体系を俯瞰するのに丁度いいと感じました。

オートマトン理論の中には、 チューリングマシンや計算量の理論などが含まれてくるでしょう。 非決定性チューリングマシンが多項式時間で解くことができる問題のクラス NPや、 オラクル付チューリングマシンが解くことができる問題のクラス階層は、 コンピュータ科学の体系の中でも最も重要な概念の一つと言っても いいかもしれません。

# オラクルといっても DBMS でもなければ、マトリックスの母でもありません ;-p

また、グラフ理論に関連する分野として、組み合わせ理論や探索などがあります。 遺伝的アルゴリズム(GA)は、確率的探索の中の一分野に過ぎません。 GA を単に、交叉・突然変異・自然淘汰からなる探索アルゴリズムとして 理解してしまうと、 本質を見失ってしまうのではないでしょうか。

プログラミング論には、 近年急速に発展しつつあるソフトウェア工学全体が含まれてきます。 秒進分歩といってもいいくらい新しい概念が次々と提案される分野ですが、 本質さえきちんと押えておけば、 数年で廃れる流行に振り回されずに済むのもまた事実です。

同ページで長久さま曰く:

「これ読めば、探索を体系的に学べます」というオチがきたら良かったと思います。 この終わり方だと、生殺しっぽいので。 でも、探索を体系的に記した本って、タブンないと思うんですよね。 捉えるレベルがメタ過ぎて、抽象的になっちゃうと思うので。

まずはコンピュータ科学全体を俯瞰し、 「論理学」「形式言語理論」「オートマトン理論」 「グラフ理論」「組み合わせ理論」「符号化理論」などの コンピュータ科学を支える重要理論を大ざっぱに把握した上で、 特に興味がある分野(例えば探索)をより突っ込んで勉強する、という方法が いいのではないかと思っています。 重要なのは、最初のうちは枝葉末節にあまり捕らわれないようにすることでしょう。 木を一本一本見ていて森が理解できるようになるほど、 コンピュータ科学という森は小さくありません。 まずは森全体の地図を見て体系を理解しておくことが重要でしょうね。

「検索で見つけただけ」ではアレなので、買ってみました。

わずかに 200ページ足らずの本なので、 さすがに各解説はかなりはしょったものになっていて、 理解が難しい概念 (例えば情報源符号化や TMの停止性問題とか)は キーワードの羅列になってしまっているのが残念といえば残念ですが、 考える(あるいは知っている人に聞く) きっかけにはなりますね。

ページ数だけで見れば 1時間もあれば読めてしまうと思うので、 コンピュータ科学をざっと概観して、 自分が特に何を知らないか確認する、という目的には ちょうどいいかも知れません。

Filed under: 元CTO の日記,技術者の成長 — hiroaki_sengoku @ 06:37

3 Comments »

  1. 自分なりに体系化するセンス

    仙石浩明氏にトラバのお返事を書いてもらって、何か返さなきゃと、はや1週間。何かモヤモヤと、考えがまとまりませんでした。コンピュータ科学における体系的な知識引用:私がイメージする「体系的知識」とは、コンピュータ科学でいえば、例えば「オートマトン理論」のような…

    Comment by blog-mnagaku's BLOG-IGDA Japan chapter — 2006年6月28日 @ 23:00

  2. 始めまして。

    上記の「コンピュータ科学の基礎」の執筆者である河村です。たまたあ,FacebookのTLを閲覧していたら,望月 陽一郎さんのリアクションによりこちらの記事を見させて頂きました。

    この著書ですが,ナツメ出版社から依頼されて執筆しました。もともとナツメ出版は実用書を中心としており,その中のシリーズ「図解雑学」として書いてくれと言われまして…しかも,見開きで右頁に図解を,左頁にその解説をするようにと指示されました。

    コンピュータ科学の中身を図解で表現することが大変で,ほとほと困った覚えがあります。しかも,字数も制限されており…

    それで,私自身ですが,情報処理学会の情報処理教育委員会などで,長くコンピュータ関連のカリキュラム策定などに関わってきました。

    それと,経産省(以前は,通産省)の国家試験である情報処理技術者試験なども…旧試験ですが,第一種情報処理技術試験(当時の主査は,故江村潤朗氏)の策定にも関わっています。その際に,「コンピュータ科学の基礎」を入れようと主張したのは私です。当時,大手のメーカーの部長さん達が委員として列席されており,その方々に対して,コンピュータ科学の必要性を訴えていた覚えがあります。

    こんなことから,ナツメ出版から,コンピュータ科学という分野をできるだけ一般の人でもわかるように解説してほしいと言われまして。

    てなわけです。これを機会に,何かコミュニケーションが取れればなと思っています。

    Comment by 河村一樹 — 2017年8月26日 @ 11:44

  3. 先ほど,コメントしたですが,反映されていないようだったので…

    望月さんのFacebookでこのblogを知りました。「図解雑学コンピュータ科学の基礎」の著者です。

    もともとナツメ出版は実用書が主でして,図解雑学というシリーズで,何か本を書いてくれと頼まれまして。しかも,図解雑学ということで,見開き右頁に図を,左頁に解説文をという制約がありまして…コンピュータ科学のような概念的抽象的な内容を如何に図式化するかで,大いに悩まされました。しかも,解説文の字数にも制限がり,かつ,一般の方にもわかるように書けと言われまして。

    ということで,原稿を脱稿するまで大変でした( ˘ω˘ )

    Comment by 河村一樹 — 2017年8月26日 @ 13:56

RSS feed for comments on this post.

Leave a comment