情報機械研究所

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

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

(この記事はかながわグローバル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研究所 森岡剛)