<第1回>計算論的思考という考え方

そもそも「プログラミング」とは、プログラムを作る作業のことを言います。このプログラムは、映画や演劇、コンサートのプログラムのように、必要な工程や手順を書いた「指示書」のようなものです。

一方、「プログラミング的思考」は、コンピューターやプログラムの概念に基づいた、課題を解決するための思考のことを言います。


このプログラミング的思考を身に着けることが「プログラミング教育」であり、「プログラミング」の教育と「プログラミング教育」では少し意味合いが異なってきます。


コーディングなど技術的な意味を指す「プログラミング」と、考え方自体を身に着ける「プログラミング教育」、私はどちらか一方ではなく、この二つの力はどちらも重要だと考えています。

その中で、文部科学省が提唱する「プログラミング的思考」の一部にもなった「計算論的思考(コンピュテーショナル・シンキング)」について今回触れたいと思います。


計算論的思考力が注目されたのは、Jeannette M. Wing氏の「Computational Thinking」という論文がきっかけです。

この論文では、コンピューテーショナル・シンキングを「コンピューターサイエンティスト(コンピューター科学者)の思考法である」と定義しており、具体的には「課題が何であるかを理解し、課題を適切に解決する方法を考える」と説明しています。

コンピューター科学者の思考である計算論的思考ですが、実生活やほかの学問など、さまざまな場面で必要となる基礎的な考え方といえます。


また、計算論的思考には、次の四つの要素があります。

  • 要素分解:複雑な問題を解決可能なレベルまで分解すること
  • 抽象化:重要な要素だけを抜き出すこと
  • パターン認識:規則性を見つけること
  • アルゴリズム:問題解決の手順を明らかにすること

プログラミング的思考は、この中の「アルゴリズム」にあたるのですが、私はほかの三つの要素も重要だと考えています。


実際に、運営する「コードアドベンチャー」においても、この計算論的思考を基に「プログラミング6つのスキル」として子どもたちに伝えています。

  1. 要素分解(最初の問題を細かい問題に分ける、原因を分析)
  2. パターンの発見(特定のパターン、共通ルールを見つける)
  3. 抽象化(効率よく、簡単に問題をとけないかを考える)
  4. アルゴリズム化(手順を意識するだけでなく条件分岐を考える)
  5. 試行錯誤(エラーを繰り返し最高の成果をめざす)
  6. コーディング(1~5を身につけテキストプログラミングを行う)


また、時代によって求められる能力が違ってきます。

例えば、狩猟社会ではアドレナリンや体力が求められ、産業社会では単純労働・単純作業が求められてきました。


では、これからのAIの時代には何が求められるでしょうか?


私は「情報を処理して問題を解決する力」だと考えています。


計算論的思考とは別に、論理的思考力(ロジカルシンキング)という考え方があります。これは、物事を体系的に捉え、筋道を立てて考える力のことです。この論理的思考力と比べたら、計算論的思考はコンピューター(≒情報処理能力)を使い、より問題解決に着目した考え方と言えます。


この情報を処理して問題を解決する力こそが計算論的思考であり、これからのAIの時代には何が求められるでしょう。


プログラミング教育が注目されている今、「プログラミング」という言葉だけを切り出して考えるのではなく、この計算論的思考という考え方も一緒に伝えていきたいです。