情報機械研究所

コンピューターの、スゴイところとオモシロイところ。

社会を支える!はたらくコンピューター図鑑

この記事のオリジナル版はこちら→

http://kanagawaglobal.com/2019/02/14/illustrated-book-hardworking-computers/

 

コンピューターがなければ高層ビルも作れないし、飛行機も飛びません。それくらい社会の隅々で活躍しているのに、あまり知られていないコンピューターたち。

そんな「はたらくコンピューター」たちのことを、みんなに知ってほしい!そんな思いで生まれたのがこの企画です。書籍化に向けたアイデアを、途中段階でも公開してしまおうと思います。今回の内容は現時点の構想。これからも具体化するたびに新しく記事にしていきますので、お楽しみに!

f:id:kanagawaglobal:20190219220123j:plain

「はたらくコンピューター図鑑」の企画です!

企画の背景

  • 機械や技術に関する図鑑は世の中にあるが、それらを実際に活用するために不可欠なコンピューターシステムについては、一般向けの書籍がない。
  • プログラミングへの関心が高まっているが、プログラムによって動くコンピューターシステムそのものについては一般向けの書籍がない

日本はかつて、米国と並ぶコンピューター大国であった。国産の大型コンピューターや、自前のOSが幾つもあった。WindowsIntelプロセッサーが世界を席巻し、今や日本のコンピューター産業は見る影もない。しかし、今はコンピューター技術が大きく変わる節目である。「ムーアの法則」の終焉が見えており、汎用プロセッサーの時代も終わりがきている。再び、コンピューター技術のカンブリア紀が訪れようとしている。多様なアイデアを試行錯誤したものが次代のコンピューターを生み出すことができる。

わたしはコンピューターが好きである。日本には、これからもコンピューターを作りだす国であってほしい。

そのためには、コンピューター好きを増やしたい。コンピューターの面白さを多くの人にしってもらいたい。

そんな思いから、世の中のいろんなところで活躍する、実際のコンピューターたちに光をあてたい。それらを作ったひとたちがいて、それらを使う人たちがいる。そしてそれは、案外読者の近所の人たちかもしれない。

コンピューター技術を身近に感じてもらいたい。

 

どんな本にするか

  • 子ども向けの図鑑形式とするが、大人でも読み応えのあるものにする
  • 実際のコンピューターハードウェアの写真を中心に、その機能や特徴を説明する
  • 各分野のコンピューターの説明の章のあとでは、コンピューターサイエンスの概要を解説する章も設ける

 

はたらくコンピューターたち

この本でカバーしたいコンピューターたちは以下のとおり。

日本が誇るスーパーコンピューター

 

科学分野

 

暮らしのサービス

 

電気と水とガス

交通分野

 

建設

 

買い物

 

以上につきまして、「こういう面白いシステムがある!」などの情報がありましたらご指摘お願いいたします。

それでは、もっと具体化しましたらまた記事化して公開しようと思いますので、お楽しみに!

(かながわグローバルIT研究所 森岡剛)

感動的!「バイナリートランプ」に秘められた2進数の歴史

(この記事は、筆者が運営するかながわグローバルIT研究所のWebサイトからの転載です。)

 

マニアックすぎ?ジョーカーデザインの秘密

2進数(バイナリーナンバー)でできたトランプの「バイナリートランプ」。その特徴の一つは、ジョーカーにあります。実はこのジョーカーのデザインには、2進数の歴史に関する、「バイナリートランプ」制作者の感動が込められているのです。ちょっとマニアックですが、ジョーカーデザインに秘められた意図を解説します!

 


「バイナリートランプ」の4枚のジョーカー。18世紀の欧州で実際にデザインされたメダリオン(大型メダル)の意匠に着想を得ています。

 

「バイナリートランプ」では、ジョーカーは♠・・♣・の各スートマークそれぞれに1枚、合計4枚が含まれています。

このデザイン、実は、欧州の数学史における2進数の歴史にちなんでいるのです。

 

数学者ライプニッツと2進数

欧州で、2進数について最初に詳しい研究成果を広めたのは、ゴットフリート・ライプニッツ微分積分の発見で有名な、あの数学者です。

微積分の発見の独自性について、あのニュートンから激しく攻撃されたことでも有名ですね。)


微分積分の発明で有名な、数学者ライプニッツ(1646-1716)
(Christoph Bernhard Francke [Public domain], via Wikimedia Commons)

 

わたしたちが学校で習う微積分の表記法は、ライプニッツが発明したものに沿っています。そう考えると、思ったより身近に感じられませんか?
ライプニッツはただの数学者ではなく、哲学や工学など幅広い分野で多くの業績を残した多才の人でした。膨大な手書きノートが残されているのですが、まだその全貌は明らかになっていないといわれています。

幸い、そのライプニッツの手書きノートのうち、2進数に関する部分の画像がありますのでご覧ください。


ライプニッツの手書きノートのうち、2進数研究に関する部分。
(Christoph Bernhard Francke [Public domain], via Wikimedia Commons)

 

2進数の位取りの考え方が書かれていますね!
ちなみに、ライプニッツは中国事情についてもいろいろ調査していたのですが、中国の古典「易経」にある64卦が2進数の考え方に基づいていることを知り、大喜びしました。

ライプニッツ易経についての話もとても面白いのですが、これは別の機会に紹介しようと思います。

 

2進数メダリオンジョーカーデザイン

ライプニッツは2進数を発見して大感激しました。敬虔なキリスト教徒だった彼にとって、「全ての数、つまり万物が0と1から創造できる」ということは、彼にとってはキリスト教的造物主の真理が垣間見えたことだったのです。

「万物が0と1から創造できる」というのは言いすぎでは?!と思う読者もおられるかもしれません。

でも、考えてみてください。コンピュータが社会の隅々まで普及している現代社会では、

  • あなたの住所や氏名
  • 銀行口座の取引履歴
  • SNSの写真やメッセージ、友人関係、学歴
  • 交通系ICカードの利用履歴
  • 旅行サイトでどのホテルを閲覧したか
  • ECサイトで何を買ったのか

など、あなたに関する様々な情報がどこかのコンピュータに格納されていますが、それは具体的には全て2進数で表現されています。まさに、0と1が全てを表現している、0と1で全てが創られているのです。

参考記事:「小鳥の数と2進数」、かながわグローバルIT研究所、2016年5月20日

 ライプニッツは2進数の発見を、ブラウンシュヴァイク公爵ルドルフ・アウグストへの手紙で報告します。その中で彼は、記念コインや記念メダリオン(大型メダル)を発行することでこの発見を記念することを提案しました。

しかし2進数の発見は公爵の心にそんなに響かなかったようで、結局、コインもメダリオンも発行されませんでした。残念!

しかし、ライプニッツが考案したメダリオンのデザインは、その後出版された数学冊子の表紙を飾りました。そのデザインは2つあります。ご覧ください。

まずは、1718年のJohan Bernard Wiedeburgの冊子の表紙に掲載されたバージョンです。


「万物を生み出す力を持った2進数」を表現したメダリオンのデザイン。1718年にJohan Bernard Wiedeburgが出版した冊子の表紙に掲載されました。

 

メダル上部に「OMNIBUS EX NIHILO DUCENDIS SUFFICIT UNUM」と書かれているのにお気づきでしょうか。

そう、「バイナリートランプ」のジョーカーに書かれている不思議な言葉は、ここから来ているのです。

その意味は大雑把に言うと「0と1からすべてが生まれる」。ライプニッツの感動を伝える言葉です。

より詳しく訳すと、「すべては0からうまれる、そのために必要なのはただ1のみ」となります。

 

また、メダリオンの中央には2進数と10進数を対応させた表が描かれています。そして全体デザインは天と地とその間の万物を表すもの。まさに、2進数から世界が生まれる様を表したものです。

2進数の不思議さと楽しさに直に触ってもらうために制作した「バイナリートランプ」。そのジョーカーのデザインは、ライプニッツ発案の18世紀のメダリオンから来ているのでした。

 

メダリオンには2種類あると上で書きました。もう1つのデザインはこちらです。


同じく、「万物を生み出す力を持った2進数」を表現したメダリオンのデザイン。1734年にRudolf August Nolteが出版した冊子の表紙に掲載されました。

ラテン語文がWiedeburg版と違っていますね。全体デザインはまさに天と地を表す感じで、「バイナリートランプ」のデザインにも大きな影響を与えてくれました。

 ちなみに、Nolteの1734年の冊子の表紙はこれです。この冊子には、ライプニッツが2進数の発見をブラウンシュヴァイク公爵に報告した1697年の手紙の全文など、2進数に関するライプニッツの成果が掲載されています。


Rudolf August Nolteの1734年の冊子の表紙。左の図柄はブラウンシュヴァイク公爵ルドルフ・アウグスト、右は2進数メダリオンです。

歴史と数学が好きなわたしとしては、2進数がこんなに大きく取り上げられているだけでもうシビれる感じです!

 

ライプニッツと2進数に関する参考文献:

History of Binary and Other Nondecimal Notation」、Anton Glaser, Tomash Publishers (1971)
ライプニッツ」、酒井潔、清水書院

 

ジョーカーに使われているのは数字?記号?

ところで、ジョーカーのカード左上と右下にある記号にもお気づきでしょうか。

 通常のカードだと、そのカードの2進数が書かれていますが、ジョーカーではこういう記号になっています。


「からっぽ」を意味する数学記号。「空集合」と呼ばれます。ギリシャ文字のΦ(ファイ)とは別物です!

これは「空集合」、つまり「からっぽ」を表す数学記号です。ギリシャ文字のΦ(ファイ)とは別物なのでご注意ください。

2進数はいろんな使い方ができるとても便利なツールなのですが、高等数学の基礎となる「集合論」では、集合を2進数で表すこともできるのです。そういうとき、「空集合」は2進数の0に該当します。

「バイナリートランプ」では、ジョーカーが0を表しているのですが、単なる数字ではなく、空集合でもあることを、このデザインに盛り込んでいるのでした。

 

それでは、どうぞ「バイナリートランプ」と2進数の世界をお楽しみください!

(かながわグローバルIT研究所 森岡剛)

 

「コンピューテーショナル思考」の定義を理解する

(この記事はかながわグローバルIT研究所Webサイトからの転載です。)

プログラミング教育の目的として文部科学省が提唱する「プログラミング的思考」。諸外国が「コンピューテーショナル思考(computational thinking; コンピューテーショナル・シンキング)」を目的に据える中での独自路線です。

今回は、プログラミング的思考とコンピューテーショナル思考の違いを説明します。前者は後者の一部にすぎないので、前者を推進する日本の状況には強い違和感を覚えています。

ラズベリーパイ(Raspberry pi)の写真

「プログラミング的思考」は、プログラムを実行する情報機械を対象としないため、「コンピューテーショナル思考」よりも極めて限定的な思考法です。

「コンピューテーショナル思考」の定義を理解する

今回の内容は、2017年8月10日と11日の2日間にわたって開催された、第10回全国高等学校情報教育研究会においてポスター発表したものです。

「コンピューテーショナル思考の定義を理解する」の発表ポスターの画像

ポスター画像

ポスターのPDFはこちらからダウンロードできます:http://kanagawaglobal.com/wp-content/uploads/2017/08/20170810-computational-thinking.pdf

 

プログラミング教育の目指すもの

世界的にプログラミング教育への関心が高まっています。米国など欧米諸国の取り組みの大きな特徴の一つは、「プログラミングはコンピュータサイエンスへの入り口」と位置付けて、その教育を推進しているところです。

例えば米国では「Computer Science for All」イニシアチブの一環としてプログラミング教育の普及が進められています。

また、日本でも有名なCode.orgも、その名のイメージとは違い、コーディングそのものを広めるのが目的ではなく、コーディング体験を通してコンピュータサイエンスを学ぶ子供たちを増やそうというのが創業者の意図です。

参考文献:

 

しかし、日本ではプログラミング教育の議論ではコンピュータサイエンスへの言及はなく、プログラミング教育の目的はプログラミングそのものであることが一般的です。

例えば文部科学省。「小学校段階におけるプログラミング教育の在り方について」と題した報告書において「プログラミング的思考」をその目的として位置付けました。プログラミング的思考の定義を抜粋すると以下のようになります:

自分が意図する一連の活動を実現するために、どのような動きの組み合わせが必要であり、一つ一つの動きに対応した記号を、どのように組み合わせたらいいのか、記号の組み合わせをどのように改善していけば、より意図した活動に近づくのか、といったことを論理的に考えていく力

プログラミング言語などが提供する各種コマンドをどのように組み合わせるのか、という思考法ということになります。

参考文献:

 

「プログラミング的思考」への違和感

プログラミングばかりが取り上げられている現在の日本ですが、プログラミングはコンピュータサイエンスのごく一部に過ぎません。プログラミングのみに注目し、目前に広がるコンピュータサイエンスの世界から目を背けることには、強い違和感を覚えます。

 

コンピューテーショナル思考

ここで、コンピューテーショナル思考について紹介します。これはコンピュータ活用が広がり始め、学問としてのコンピュータサイエンスが生まれたころである1960年代からある概念です。コンピュータ分野に特徴的な思考法であるとして、その新規性と有効性への指摘が相次いでいました。

例えばAlan Perlis、Donald Knuth、Edsger Dijkstra、Seymour Papertといった著名なコンピュータサイエンティストたちによる指摘が有名です。詳しくは以下の文献で確認できます。

 

このように昔からあるコンピューテーショナル思考ですが、最近のブームのきっかけとなったのは2006年のJannette M. Wingによる「Computational thinking」と題した寄稿です。

多くの国において、コンピューテーショナル思考の育成が、コンピュータサイエンス教育やプログラミング教育の目的と位置づけられるに至っています。

ただ、日本においては状況が異なっており、コンピューテーショナル思考が正面から論じられることはほとんどありません。それに代わって登場したのが、文部科学省の「プログラミング的思考」です。

それでは、コンピューテーショナル思考とは何でしょうか?実はその定義には様々な議論があり、中には誤解に基づくものも多くあります。

しかしここで重要なのは、コンピューテーショナル思考についてのWingによる以下の指摘です:

  • コンピュータサイエンティストの思考法である
  • 問題解決、システムデザイン、人間行動の理解に、コンピュータサイエンスの概念を援用する思考法である
  • コンピュータサイエンスはプログラミングと同じではない
  • 「コンピュータサイエンティストのように思考すること」はプログラミングよりも高度である

つまり、コンピューテーショナル思考はプログラマーの思考法ではなく、コンピュータサイエンティストの思考法であることが明確です。ここですでに「プログラミング的思考」との違いも明確になります。

それでは「コンピュータサイエンティストの思考法」とはどのようなものでしょうか。

参考文献:

 

コンピュータサイエンティストの思考法

まず重要なことは、コンピュータサイエンティストが考えるコンピュータとは「電子計算機」だけではないということです。

コンピュータサイエンティストにとって、コンピュータとは

  1. 情報を作り、
  2. 情報(プログラム)によって動く

という特徴を持つ「情報機械」のことです。わたしたちの身の回りにあるシリコン半導体ベースの電子計算機は確かに情報機械ですが、それ以外にも様々な情報機械が考えられます。

ポスターには様々な情報機械の画像を例示しています。

  • 電気を使わず、蒸気機関で動く情報機械
    • 19世紀に設計されたが、完成することはなかったCharles Babbageの解析機関がその例です
  • ゼロとイチだけでなく、2,3,4,5,6,7,8,9も使う情報機械
    • ENIACがその例です
  • 人間コンピュータ
    • 計算することが職業の人を指します
    • 17世紀から存在し、20世紀後半になっても活躍していました
    • 日本では「計算手」と呼ばれていました
  • インターネット以前のパソコン
  • ICカードに搭載されたプロセッサ―
  • データセンタ
  • 手のひらサイズのRaspberry Pi

コンピュータサイエンスは、そのような「情報機械」の原理、仕組み、実現方法、活用方法などあらゆる側面を包含する学問分野です。

より具体的には、コンピュータサイエンスは「情報を作り、情報で動く」という情報機械と、情報機械への作業指示情報であるプログラムの、両方を対象としている学問です。コンピュータサイエンティストの思考法とは、与えられた問題に対して、どのような情報機械とどのようなプログラムの組み合わせが適しているかを考える思考法と言えます。

図1 コンピュータサイエンスが対象とする情報機械モデルとプログラム

 

つまり、コンピューテーショナル思考とは、情報機械モデルとプログラムの両方をデザインする思考法となります。

情報機械モデルの例:機械語命令セット、Java仮想マシン、クライアントサーバーモデル、Webアーキテクチャクラウド、定型業務の担当者、業務部門、企業間連携

それに対して、プログラミングは、所与の情報機械モデルに対する作業指示を作る作業に過ぎません。

プログラミング的思考は、本来のコンピューテーショナル思考よりも極めて限定的なものであることがおわかりでしょうか。

諸外国がコンピューテーショナル思考の育成を目指して動いている現在。文部科学省は、コンピューテーショナル思考の一部でしかないプログラミング的思考にフォーカスしています。小学校段階での入り口としてはプログラミング的思考もよいでしょう。しかし最終ゴールを低く設定してはいけません。目的は常に、コンピューテーショナル思考の育成であるべきなのです。

情報機械モデルをデザインするスキルは、一見するとITに関係のないところでも重宝されます。例えば企業間連携における役割分担の定義、新たなサービス提供に必要な業務体制の整備、といった作業の本質はインターフェース定義であり、情報機械モデルの設計スキルが役立ちます。そのようにして作られた体制における作業マニュアル執筆がプログラミングに該当します。

このことからも、コンピューテーショナル思考のほうが、プログラミング思考よりも高付加価値スキルにつながるということがおわかりになるでしょうか。

この点については、引き続き本ブログでも論じていきたいと思います。

(かながわグローバルIT研究所 森岡剛)

プログラミングは論理的思考力と本当に関係しているのか?

小学1年生くらいの児童が、ひらがなのカードを並べて「りんご」という単語を作っている写真

プログラミング教育必修化の目的の一つに、「課題解決に向けて順序立てて考える思考力の育成」があります。でも、本当にプログラミングと論理的思考力は関係しているのでしょうか?関連する研究成果を紹介します。

プログラミング教育の小学校・中学校での必修化が議論されている日本。その主目的は「プログラミングスキルの取得」ではなく、「プログラミングを通して、21世紀の社会に生きる人間としてのスキルを身に付けること」にあります。文部科学省有識者会議ではこれに関連し、「課題解決に向けて順序立てて考える思考力」、つまり論理的思考力の育成をプログラミング教育の目的の一つに位置づけました。有識者会議での議論内容には違和感を覚える点もあったとはいえ、全体的な方向性は正しいものと言えるでしょう。

参考情報:

論理的思考とプログラミング

さて、先日のかなグロブログ記事「どんな子どもがプログラミングに向いている?」ではこのように書きました:

わたしは「言葉に敏感な子」はプログラミングに向いていると考えています。曖昧昧な言い回しや複数の解釈の存在に気づく、そんな子たちのことです。それではなぜ、「言葉に敏感」という性質がプログラミングに役立つのでしょうか?それは、コンピュータは本当に物わかりの悪い機械だからです。

物わかりの悪いコンピュータにもわかるように指示を出す、そのためには必要事項を適切な順序で導入することが必要、という考えです。

このように、プログラミングスキルは論理的思考と関係があるとたびたび指摘されてきました。もしそれが本当ならば、片方を育成することでもう片方も同時に育成させることができるかもしれません。(むろん、それが可能かどうかは「関係」の性質によりますが。)

この問題に取り組む国内研究者もいて、「プログラミングスキルと論理的思考の間には一定の相関がある」という興味深い結果が報告されています。今回はその概要を紹介しようと思います。

今回紹介するのは以下の研究報告です。

この研究の動機は、論理的思考力のうちの「論理的な文章作成力」とプログラミングスキルとの相関の有無を調べること。ここで、「論理的な文章作成力」は以下のように定義されています。

  • 相手が正しく理解できる
  • 曖昧性がない
  • 事実と意見が分かれている
  • 論理の組み立てが適切である
  • 読み手の設定が適切である

この研究では、「論理的な文章作成力」とプログラミングスキルの相関関係の有無を調べるため、以下のような実験を行いました。

  1. 大学1年次でプログラミング教科を受講した大学2年生86人を対象とする(おそらく、筆頭著者の所属している公立はこだて未来大学の学生でしょう)
  2. 対象者の1年次のプログラミング教科の成績と、2年次のレポート課題の成績の相関関係を分析する

レポートは、自分の強みと弱みをの分析を踏まえて、「自分が向いている職業」への自己アピールを書く、というもの。このレポートを論理的文章作成の観点から採点して、その得点とプログラミング教科の得点が相関しているかを調べました。

論理的な文章作成とプログラミングの間の相関

結果は以下のようなものでした:

  • プログラミング教科で80点以上を取った学生のグループと60点未満だった学生のグループでは、論理的な文章作成力にも有意な差があった
  • すなわち、
    • プログラミング教科で高得点を取った学生グループは論理的な文章作成でも高得点を取る傾向にあり、
    • プログラミング教科で低得点だった学生グループは論理的な文章作成でも低得点を取る傾向にある

ということがわかったとのことです。

ここで、「有意な差」というのは統計的に意味のある差が存在しているという意味です。この結果は「たまたま」では説明し難い、ということですね。

この実験では、プログラミングスキルと論理的な文章作成は相関していることを示唆する結果が得られました。

ただし、これが全ての決着をつけるものではありません。今回の実験は論理的思考力の一部でしかないスキルを評価したものです。また、相関関係は成績上位グループと下位グループの間でのみ検知されていて、中位グループを入れると相関関係は検知できていません。

また、今回検知したのは相関関係であって因果関係ではありません。プログラミング力を伸ばすと論理的文章作成力も伸びるとはまだ言えないですし、その逆もそうです。単に、この二つのスキルは一緒に現れる傾向にある、ということがわかったのです。

著者たちも述べているとおり、「プログラミング力と論理的文章作成力との全体的な傾向は掴めた」という結果といえるでしょう。さらに詳細な結果が待ち遠しいですね。

プログラミング教育は人生に役立つ?

関心が高まっているプログラミング教育。プログラミングができれば大金持ちになれるかのような奇妙な題名の書籍も出版されるなど、ちょっと過熱気味な傾向にもあります。ここで求められるのは、データに基づいた議論。今回紹介したような研究がさらに続々と出てくることを期待します。

なお、この研究報告への苦言としては、参考文献が全て国内の研究であることへの不満があります。プログラミングスキルと、論理的思考のような汎用スキルの間の相関については、海外でも研究成果があるのですが、著者たちはそれらも汲み取った研究とはしていないようです。プログラミングとコンピュータサイエンスの教育はグローバルでの動きですので、海外で既に得られた知見は国内でも活かさなければ無駄が生じるでしょう。

例えば、一つ存在する海外の関連研究には、幼児から小学校低学年程度におけるプログラミング教育と「sequencing能力」の関係。ここで、sequencingというのは、物事の順序を把握する能力で、強いて日本語訳するならば「段取り力」とでも言えるでしょうか。物語を理解するための読解力や、行動を計画する能力の基本になる汎用スキルです。この幼少期においても、プログラミングスキルと「段取り力」の間には相関関係が存在しており、さらにプログラミング学習は段取り力も同時に育成することを示唆する結果も得られています。(詳細は別の記事で紹介する予定です。)

このように、プログラミング教育に関する海外知見を無視するかたちで進んでいるかのような国内のプログラミング教育の議論。コンピュータサイエンスの欠如とあわせ、このような「ガラパゴス化」にも危機感を抱いています。

(この記事はかながわグローバルIT研究所Webサイトからの転載です。)

コンピュータサイエンスって何だろう

両手の上に、データを象徴する青い複数の小さな立方体が浮かんでいる写真

北米など海外では数十年の歴史がありながら、日本ではあまり聞かない学問分野であるコンピュータサイエンス。「コンピュータに関する学問」ではなく、「森羅万象を、情報の動きとして表現することで、自然法則を発見したり便利なモノを創り出す」ことを目的とした学問分野です。

「プログラミング教育」への関心が高まっている日本。社会におけるコンピュータ活用の重要性が増していることを反映した動きと言えますが、コンピュータ活用全般を扱う学問分野である「コンピュータサイエンス」への関心は高くないようです。プログラミングは、コンピュータを動かすための手段であって、コンピュータサイエンスを構成するスキルの一つ。例えていうならば、「自動車の重要性が高まっているので、自動車を作る工具の使い方の教育を始めようとしているが、そもそも自動車を動かすのに利用している自然法則や、内燃機関などの自動車の構成要素についての教育については論じない」というようにわたしには見えています。

コンピュータサイエンスの楽しさを知ってもらおう!」が目的のこのブログ。まずは一般にはあまり知られていないコンピュータサイエンスが何なのか、を今回は解説してみようと思います。

関連記事:

コンピュータサイエンス」の誕生は1962年

米国で最初のコンピュータサイエンス学科が出来たのはPurdue大学で、それは1962年のことでした。それ以降、「コンピュータサイエンス」は主に米国やカナダなどの北アメリカの大学でよく使われる言葉となりました。同じ分野を、欧州では「インフォマティクス(infomatics)」と呼ぶことが多いようです。

関連情報:

コンピュータサイエンスは「サイエンス」か?

「サイエンス」と言えば科学、なので「コンピュータサイエンス」は理学系の分野かといえばそうとも言えません。理学というのは自然法則を発見することを主目的にしています。確かに、コンピュータサイエンスは情報に関する自然法則を解き明かしている面もありますが、それだけではありません。便利なものを創り出す、という工学の側面もありますし、実験ではなく論理によって法則を導き出す数学の面も持っています。実はコンピュータサイエンスはこのように、理学・工学・数学の3つの大分野にまたがる学問領域であって、たんなる「サイエンス」とも言えない広がりを持っているのです。

コンピュータサイエンスが解決する課題

コンピュータサイエンスは、その名に反して「コンピュータを学ぶ分野」ではありません。

そもそもコンピュータとは何でしょうか?それは、「情報を動かし、情報によって動く」という特徴を持った機械、つまり「情報機械」です。そしてコンピュータが社会やわたしたちの日常生活の隅々にまで普及し、いまやコンピュータ無しの企業やコンピュータを一切使わない学術研究はあり得ないという状況です。

  • 新型の飛行機や自動車を実際に作る前に、コンピュータでシミュレーションを行ってその設計の妥当性を確かめる
  • インターネット上での安全な通信を実現する
  • SNSで、遠く離れた友人・知人と近況を共有する
  • チェスや囲碁、将棋で人間に勝るプログラムを開発する
  • ICカードをタッチするだけで、適正な運賃を払ってバスや電車を利用できる
  • センサーや無線通信を組み合わせて、動物の生態を調査する(関連ブログ記事はこちら
  • 遠く離れたブラックホールの衝突で発生した重力波の痕跡を、膨大なデータの中から検知する

一見すると何の関連も無いようなこれらの活動ですが、共通しているのは「情報を動かし、情報によって動く」というコンピュータの特性を利用して実現されているということ。つまり、これらは全てコンピュータサイエンスの成果を用いて実現されているのです

このように、わたしたちの社会を大きく変えてきたコンピュータサイエンス。それは、

  • 社会や自然界の事象を「情報の動き」として表現し、その特徴を探る
  • 実現したい事象を、「実現すべき情報の動き」として表現し、それを実際に実現する仕組みを作る

という大きく2つの活動から構成されていると言えるでしょう。

そしてコンピュータサイエンスの研究者や実践者が頻繁に直面する共通的な課題も2つあります。それは

  1. 社会の大多数の人が使う大規模なサービス、膨大なデータを使う大規模なデータ処理、のような大規模システムをどのように実現するのか?
  2. 実現したい事象は、本当に「実現すべき情報の動き」として表現できるのか?どのように表現すれば、効率的な大規模システム構築に貢献できるか?

ということ。身近な例でいえば、GoogleFacebookTwitterも上記の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):
    • 人間の意図をコンピュータに伝えるためのプログラミング言語はどうあるべきか?
    • プログラミング言語で書かれた指示を、どのように0と1でできた機械語に変換するか?
    • 人間の意図を正確かつ効率的にプログラミングするにはどうすればよいか?
  • HCI(human-computer interaction):
    • 人間にとって、心地よく便利なコンピュータシステムは、どのようなものか?
  • ゲームデザイン(game design):
    • コンピュータグラフィクス、人工知能、HCI(後述)、経済学、心理学、クリエイティブデザインなどの要素を組み合わせて、人が楽しめるゲームをどのように作るか?
  • 離散数学アルゴリズム(discrete mathematics and algorithms):
  • 計算の理論(theory of computation):
    • どのような問題はコンピュータによって効率的に解決できるか?どのようなアルゴリズムがあるか?
    • どのような問題はコンピュータによって効率的に解決できないか?
  • ウェブとインターネット技術(Web and Internet technology):
    • 超大規模なウェブとインターネットをどう実現するか?
    • 検索、ソーシャルネットワークなどウェブとインターネットを活用したサービスをどう実現するか?

ちなみに、筆者の大学院時代の専門は「計算の理論(theory of computation)」でした。

コンピュータサイエンスの説明と専門分野のリストは、カナダ・トロント大学コンピュータサイエンス学科のシラバスを参考にしました。

 コンピュータサイエンスとの学際分野

コンピュータサイエンスは単独で存在するのではなく、社会の様々な領域で活用されています。特に頻繁に活用が起こる分野については、それが独立した学際分野として発展してきています。例えば以下です:

プログラミングとコンピュータサイエンス

冒頭でも述べた通り、プログラミング教育への関心が高まっています。プログラミングはまさに、「コンピュータを動かす情報」を作りだす活動で、コンピュータサイエンスの必須スキル、とても大事なスキルです。

プログラミング教育の重視は、米国など諸外国でもトレンド。日本がプログラミング教育を義務教育において必修化しようという動きも、とてもよいことだと思います。ただ異なるのは、米国はプログラミングではなく「コンピュータサイエンス教育」を推進していて、プログラミングはその入口という位置づけが明確であること。

日本も、プログラミングだけで終わってしまうのはもったいないです。プログラミングを通して「情報機械」たるコンピュータを身近に感じ、それを入口として、コンピュータサイエンスの楽しさを体感してくれる子どもが増えていけばなおよいと思います。そのためにも、日本において「コンピュータサイエンスの楽しさ」を伝える活動を、今後も続けていこうと思います。

参考情報:

 (この記事はかながわグローバルIT研究所Webサイトからの転載です。)

カードゲームで2進数!「バイナリートランプ」

コンピュータと2進数

わたしたちの身の回りにあるコンピュータたち。様々な情報を動かして、そして情報によって動く情報機械です。

コンピュータの中では、全ての情報が0と1という2種類の記号を使って表現されています。スマホで撮影した写真や動画、SNSへの書き込み、銀行アプリの口座残高、交通ICカードに格納されているデータ、これらすべてが2進数の仕組みを使って表現されているのです。考えてみると、不思議なことではありませんか?!

2進数で遊ぼう!

そんな身近な2進数、その考え方は実はとても簡単です。そして、コンピュータの仕組みや使い方全般をカバーしている学問分野「コンピュータサイエンス」では、2進数がとても便利に使われているのです。

単純ながらも奥が深い2進数。「そんな2進数に遊びながら親しめるように」という思いで独自開発したのが「バイナリートランプ」です。

既に開発が完了して販売を開始している「バイナリートランプ」。この記事ではその「きほん」を紹介しようと思います。

「バイナリートランプ」とは

  • 0と1だけを使った2進数(バイナリーナンバー)でできたトランプです。
  • 「バイナリートランプ」には2進数だけでなく10進数(普通の数)も書いてありますので、初級者にもわかりやすいです。
  • 「バイナリートランプ エキスパート」には10進数は書いてありません。上級者向けです。
  • 2進数は、0と1だけで全てのデータを表せるなど、便利な特長がたくさんあります。そのため、コンピュータでも使われています。
    (でも、2進数自体は、コンピュータが作られるよりも何百年も前に発見されていました。この話はまた別の機会に。)

「バイナリートランプ」を手に入れたら、まずは普通のトランプゲームで遊んでみましょう。「七並べ」や「ババ抜き」などがおすすめです。

慣れてきたら、2進数の特徴を使ったオリジナルゲームで遊んでみましょう。これについては、このWebサイトで順次情報を追加していく予定です。

「バイナリートランプ」は普通のトランプとどう違う?

「バイナリートランプ」と普通のトランプは、同じところと違うところがあります。

「バイナリートランプ」の特徴がわかって遊ぶと、もっと楽しいです。

まずはトランプマーク(正しくはスートマークと言います)を見てみましょう。

バイナリートランプのスペード、クラブ、ハート、ダイヤです。0と1で出来ているの、わかりますでしょうか?!

「バイナリートランプ」も、普通のトランプと同じく、スペード、クラブ、ハート、ダイヤの4つのトランプマークを使います。でも、そのデザインはちょっと不思議な感じです。よく見てください、「0」と「1」で出来ているのがわかりますか?

0と1で全てのデータを表せる2進数。それを使ったトランプですから、トランプマーク自体も0と1で出来ているのです!

次に、トランプカードとしての「バイナリートランプ」の特徴を表にまとめていますので、それを見てみましょう。

普通のトランプとバイナリートランプは、どこが同じでどこが違うのでしょうか。表にまとめてみました。

  • マークの種類
    • 上で述べたとおり、普通のトランプと同じです。
  • マークごとのカード枚数
    • 普通のトランプは13枚ですが、「バイナリートランプ」は16枚です。これは、4ケタの2進数で表せるのが0から15の16個の数だからです。
  • ジョーカー
    • 「バイナリートランプ」では「0」をジョーカーとしていますので、全部で4枚あります。
  • 合計枚数
    • 普通のトランプは54枚(うちジョーカー2枚)です。
    • 「バイナリートランプ」は、トランプマークごとに16枚あり、トランプマークは4つあるので、合計64枚です。
  • 絵札
    • 普通のトランプでは、JとQとKは絵札です。
    • 「バイナリートランプ」には絵札はありませんが、「0」のカード(ジョーカー)には絵が描いてあります。

「バイナリートランプ」のジョーカー

ジョーカーは4枚あります。スペードとハートのジョーカーをお見せしましょう。

バイナリートランプでは、ジョーカーのデザインもオリジナルです。

この不思議な感じのデザイン、いかがでしょうか。「世界の全てを表せる2進数」をイメージしています。

中央の丸い領域が世界、そして天と地には太陽と月が回っています。

中央の丸の上半分をよくみると、トランプマークの部品でできています。

そして中央の丸の下半分にはラテン語の文が。「OMNIBUS EX NIHILO DUCENDIS SUFFICIT UNUM」、これは「0と1さえあれば、全てを生み出すことができる」という意味で、17世紀のヨーロッパが2進数を発見したときに、メダリオンに実際に刻印された文章です。

ちなみに、17世紀のヨーロッパで2進数を発見したのは、微積分の発明者の一人である数学者ライプニッツ。彼は、はるか昔から伝わる中国の「易経」にも2進数が使われていることを発見して大喜びしたりと、いろいろ面白い話があるのですが、それはまたの機会に。。。

ところで、ジョーカーの左上と右下に描かれた記号を知っていますか?0に似ていますが実は違います。「集合論」という数学分野で「からっぽ」を意味する記号です。「からっぽ」でもあり「0(ゼロ)」でもあるのがジョーカーというわけです!

カードの見かた

次に、スペードの1001を例に、「バイナリートランプ」の数字カードの見かたを説明します。(2進数の1001は、10進数の「9」のことです。)

スペードの1001を例に、数字カードの見かたを説明します。2進数の1001は、10進数の「9」です。

  • 「バイナリートランプ」の数字カードには上下があります。(普通のトランプは、上下がないので、さかさまにしても遊べますね。)
  • 数字カードの左上と右下に、そのカードの数字(ランクといいます)が2進数で書かれています。上の例では1001です。
  • 1001は10進数の「9」なので、カードの右上と左下には(9)と書いてあります。
    • これは初心者にもわかりやすいようにするためなので、「バイナリートランプ」だけの特徴です。
    • 「バイナリートランプ エキスパート」には(9)はありません。
  • カード中央部分には、4つの領域があり、そこに合計9個のスペードが描いてあります。
    • それぞれの領域は「1の位」、「2の位」、「4の位」、「8の位」に対応しています。
    • その位が「1」ならば、その領域にスペードが描かれています。この例では1の位と8の位です。
    • これによって、2進数の1001と10進数の「9」が同じものだということを示しています。

カードのデザイン

スペードの16枚のカード全てを見てみましょう。

スペードの16枚のカードを全てお見せします。

 

さらに詳しくはこちらをご覧ください:

(この記事はかながわグローバルIT研究所Webサイトからの転載です。)

コンピュータサイエンスの楽しさを伝えます!

自分が大好きな、プログラミング・コンピューター・情報システムに関して、みんなが楽しく学べる機会を提供するという思いで、私は個人事業「かながわグローバルIT研究所」を創業しました。

コンピューターと情報システムが隅々にまで普及しているいまの社会。ネットショッピングやソーシャルネット、ATMや電子マネー、天気予報や電車の運行など、わたしたちの生活は情報システムが支えています。そしてすべての情報システムはプログラムどおりに動くコンピューターで構成されているのです。

わたしたちは情報システムに囲まれて生活していますが、それが目につくことはありません。学校で教わることもありません。企業が新サービスを始めるとき、そこには必ず情報システムがあるのですがそれが語られることもありません。リンゴが落ちる理由や、自分たちの体のしくみ、法律などの社会のルールは学ぶのに、同じくらい身近な存在である情報システムについては誰も教えてくれないのです。

プログラミングとコンピューターと情報システムの知識は、一部の「理工系の人」・「技術好き」・「技術オタク」だけのものではなくて、21世紀を生きるすべての人の一般教養です。「かながわグローバルIT研究所」では、電子機器を使わずに(または電子機器であることを見せずに)、遊びながらプログラミング・コンピューター・情報システムの基本的な仕組みについて学べるカードゲーム・ボードゲーム・ロボット・おもちゃを企画しています。また、コンピューターに自信のない大人も、これらのおもちゃやゲームを触ってみながらビジネスで必要な情報システムの仕組みを学べるような研修事業、そして文字媒体による情報発信を企画しています。

「かながわ」は、自分の住む神奈川県が好きで、まずは自分の周りで地道に活動したいとの思いから。
「グローバル」は、自分自身のグローバル経験を活かして貢献したい思いから。
「IT研究所」は、ただ教える塾のようなものではなくて、楽しみながらも効果的な「学び」の新しい方法を編み出していくとの思いから。

まずは情報発信から。読み物として楽しんでいただけるような内容を充実させていこうと思っています。よろしくお願いいたします!

(この記事はかながわグローバルIT研究所Webサイトからの転載です。)