空間思考が「プログラミング的思考」の基礎を創る

空間的能力とプログラミング学習

Sue Jones and Gary Burnett, “Spatial Ability and Learning to Program”, in Human Technology 4 (1): 2008, pp. 47-61.

以前のコラム「目的から考える「プログラミング教育」」の中では、2020年度より小学校で導入・開始されているプログラミング教育の目的は「プログラミング的思考」の習得にある、ということをご紹介しました。これこそが我が国の学習指導要領が掲げる「思考力・判断力・表現力」の新しい形であると。しかし、こんな風に感じた方もおられたかと思います。

「プログラミング的思考」を身に付けるにはどうすればいいのか?

確かに「プログラミング的思考」の内容を考えるばかりで、肝心の習得についてはほとんど触れることができませんでした。今回は続編として、「プログラミング的思考」を身に付ける方法についてお話しようと思います。

今回は少々長い話になってしまいそうですので、先に結論を述べておきます。

結論:「プログラミング的思考」の獲得には
   「メンタル・ローテーション」の能力が深く関わっている。

詳細については、是非以下をご確認下さい。

復習:「コンピュテーショナル・シンキング Computational Thinking」

まずは少しおさらいです。提唱されている「プログラミング的思考」と呼ばれているものは、イングランド発の「コンピュテーショナル・シンキング」という概念に基づいている、ということは以前にご紹介した通りです。その時の図をもう一度見ておきましょう。

整理は藤野による。

簡単にリスト化すると、「コンピュテーショナル・シンキング」とはこのようなものです。

  1.  問題解決に無関係な要素を取り除く。【モデル化】
  2.  問題を構成要素に分ける。【分解】
  3.  類似性やパターンを特定する。【一般化】
  4.  順序や規則に基づく手続きとして解法を考える。【アルゴリズム思考】
  5.  考えた解法を改善していく。【評価】

これらは単にプログラミングに役立つというだけではなく、日常生活の様々な場面に応用できる思考法です。また「プログラミング的思考」として習得が掲げられているものもプログラミング技術ではなくこうした思考様式に他なりません。これが以前のコラムの要点になっていました。

プログラミングと「メンタル・モデル Mental Model」

さて、ここで注目したいことがあります。「プログラミング的思考」や「コンピュテーショナル・シンキング」は確かにプログラミングのためだけに役立つものではないのですが、プログラミングと無関係ということは勿論ありません。むしろ、プログラミングが上手な人はこれらの思考に習熟していると言うべきでしょう。
だとすれば、次のようにも言えるはずです。プログラミングの習得が速い人はプログラミング的思考か、あるいはその基礎となる能力が既に身についている。プログラミングが速く身についた人たちの特徴を探れば、プログラミング的思考の習得法も見えてくるのではないでしょうか。

実際にこれを試みたのが本文冒頭にご紹介している”Spatial Ability and Learning to Program”であり、この研究は、特に「メンタル・モデル Mental model」という要素に注目して行われました。「メンタル・モデル」とは何かと言うと「プログラムの予測的表象化ないし抽象化」、簡単には「予め心の中で作られるプログラムのイメージ」ということです。

「コンピュテーショナル・シンキング」との関係を見ると、「メンタル・モデル」の重要性は分かり易くなるでしょう。「モデル化し、分解し、一般化する」という操作の上で心の中で組み立てられた予想図。それがメンタル・モデルなのです「完成図がイメージできるものは作ることができる」。メンタル・モデルとはまさにそのイメージなのだと言うことができます。

「メンタル・ローテーション Mental Rotation」

さてしかし、慎重な人ならばこう思うでしょう。「メンタル・モデルが大事なのは分かった。それで、どうやったらメンタル・モデルを上手く作れるようになるのか?」

研究の積み重ねとは素晴らしいもので、これには答があります。「メンタル・ローテーション Mental Rotation」と呼ばれる能力が、メンタル・モデルの構築には深く関わっていることが明らかになっているのです。
この「メンタル・ローテーション」は「2次元・3次元のオブジェクトを心の中で回転させる」という操作に関わるものですが、メンタル・ローテーションには一連のコラムで取り上げている「空間思考能力」のエッセンスが詰まっています
実は以前の記事で「空間思考のトレーニング」として紹介したものも、より細かく言えばこのメンタル・ローテーションを扱ったものでした(空間思考は、数学だけでなくプログラミングの基礎にもなるということです!)。このことはいずれ改めてご紹介したいと思います。

メンタル・モデルの構築能力とメンタル・ローテーションの能力には繋がりがあることが分かっている。ならば、メンタル・ローテーションの能力は、プログラミング的思考の獲得に関係があるのではないか? よし、確かめてみよう……実験結果は、その仮説を支持しています。

「メンタル・ローテーション」のスコアとプログラミング学習の成果に相関が認められた

行われた実験は、次のようなものでした。

 1.対象は大学院生49人。
 2.内28人はInformation Technology(IT)専修、21人はManagement of Information Technology
  (MIT)専修。前者の方がより本格的なプログラミングを学ぶ。
 3.49人全員が大学院で実施されているプログラミング入門モジュール(ICP)を受講。
  (ITでは必修のもの)
 4.同時にメンタル・ローテーションのテスト(MRT)を受け、結果を分析。

結果はシンプルに、ICPとMRTの成績に相関が確認された、というもの。つまりメンタル・ローテーション」が巧みな学生ほど「プログラミング」の成績がよいということです。このことは学生の専修に関係がなく、他に実施されたテスト(人間工学)の成績との間には相関が見られませんでした(MITの学生のみ実施)。また更に、より高度なプログラミングのテストでは、より強い相関があることも分かりました(ITの学生のみ実施)。

勿論、学生たちのプログラミング経験には差があり、より多くの経験を有する学生はよい成績を収めました。そのため、厳密にはメンタル・ローテーションが巧みだからプログラミングが上達したのか、逆にプログラミングが上達したからメンタル・ローテーションが巧みになったのかはこの実験だけからは分かりません。
とはいえメンタル・ローテーションはプログラミングを介さなくとも鍛えられる能力ですし、仮にプログラミングが上達した結果としてメンタル・ローテーションが巧みになったのだとしても、プログラミングのためにメンタル・ローテーションの能力が必要だということには変わりがありません。

空間思考能力が知性の基礎を創る

少し長い道のりになりましたが、これで次のことが確認できたことになります。

 1.「プログラミング的思考」の巧みさはプログラミングの巧みさに反映される。
 2.メンタル・モデルの構築能力は「プログラミング的思考」の内実と一致する。
 3.メンタル・ローテーションの能力はメンタル・モデルの構築能力に反映される。
 4.メンタル・ローテーションの能力とプログラミングの学習成果が相関する。

故に、メンタル・ローテーション能力の向上が「プログラミング的思考」の獲得に繋がることはほぼ間違いないと言えるでしょう。

ここで改めて強調しておきたいことは、「プログラミング的思考」は単にプログラミングのみに関わるものではない、ということです。これは「思考力・判断力・表現力」を新しく表現したものだった。このことは、メンタル・ローテーションを始めとする空間思考能力が、「思考力・判断力・表現力」というより大きな文脈でも基底的な能力として位置付けられることを示唆しています。

空間思考能力の重要性を繰り返し強調している本コラムですが、様々な研究や学説に照らし合わせることで、引き続きその意義をご紹介していきたいと考えております。よりよい教育の実現のため、思考力という観点からのアプローチとしてご参照戴ければ幸いです。

コメント