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

2018年11月6日に「小学校プログラミング教育の手引(第二版)」が公開されました。

学生向けの教員採用試験対策講座の担当が回ってきたこともあり,せっかくの機会なので小学校学習指導要領に記載されたプログラミング体験に関して,最新の「手引」を解説するかたちで知ってもらうことにしました。

小学校におけるプログラミング教育のねらい

①「プログラミング的思考」を育むこと
②プログラムの働きやよさ、情報社会がコンピュータ等の情報技術によって支えられていることなどに気付くことができるようにするとともに、コンピュータ等を上手に活用して身近な問題を解決したり、よりよい社会を築いたりしようとする態度を育むこと
③各教科等の内容を指導する中で実施する場合には、各教科等での学びをより確実なものとすること

これら「手引」に書かれたことをベースに,資質・能力の三つの柱について触れたり,「小学校段階のプログラミングに関する学習活動の分類」など,採用試験でも出てきそうな部分を概説しました。

学生たちには情報処理の時間でScratchに触れてもらったこともあったので,久し振りにScratchの画面を見せて,正三角形を描くプログラムを即興で組んで見せ,私の身体アクションも交えてグラフィカルな環境によるブロックプログラミングを思い出してもらったりもしました。

また,当ブログでは,いつもなら『「プログラミング的思考」なるもの』と距離を置いて批判的に扱っている「プログラミング的思考」という言葉も,さすがに採用試験対策の文脈では批判的に扱い過ぎても何らメリットがないので,程よい距離感で紹介しました。

さて,「プログラミング的思考」とは何か。

「学習指導要領」を初めてみる人には不思議に思えるかも知れませんが,「プログラミング的思考」という言葉は小学校学習指導要領そのものには記載されていません。

代わりに,「学習指導要領 解説」(総則編)の50-51頁(印刷版)にある情報活用能力の解説箇所で「プログラミング的思考」が初登場します。

それを解説する文章は85頁まで進むと出てきます。長いですが丸ごと引いてみます。

また,子供たちが将来どのような職業に就くとしても時代を越えて普遍的に求められる「プログラミング的思考」(自分が意図する一連の活動を実現するために,どのような動きの組合せが必要であり,一つ一つの動きに対応した記号を,どのように組み合わせたらいいのか,記号の組合せをどのように改善していけば,より意図した活動に近づくのか,といったことを論理的に考えていく力)を育むため,小学校においては,児童がプログラミングを体験しながら,コンピュータに意図した処理を行わせるために必要な論理的思考力を身に付けるための学習活動を計画的に実施することとしている。その際,小学校段階において学習活動としてプログラミングに取り組むねらいは,プログラミング言語を覚えたり,プログラミングの技能を習得したりといったことではなく,論理的思考力を育むとともに,プログラムの働きやよさ,情報社会がコンピュータをはじめとする情報技術によって支えられていることなどに気付き,身近な問題の解決に主体的に取り組む態度やコンピュータ等を上手に活用してよりよい社会を築いていこうとする態度などを育むこと,さらに,教科等で学ぶ知識及び技能等をより確実に身に付けさせることにある。したがって,教科等における学習上の必要性や学習内容と関連付けながら計画的かつ無理なく確実に実施されるものであることに留意する必要があることを踏まえ,小学校においては,教育課程全体を見渡し,プログラミングを実施する単元を位置付けていく学年や教科等を決定する必要がある。なお,小学校学習指導要領では,算数科,理科,総合的な学習の時間において,児童がプログラミングを体験しながら,論理的思考力を身に付けるための学習活動を取り上げる内容やその取扱いについて例示しているが(第2章第3節算数 第3の2(2)及び同第4節理科 第3の2(2),第5章総合的な学習の時間 第3の2(2)),例示以外の内容や教科等においても,プログラミングを学習活動として実施することが可能であり,プログラミングに取り組むねらいを踏まえつつ,学校の教育目標や児童の実情等に応じて工夫して取り入れていくことが求められる。
また,こうした学習活動を実施するに当たっては,地域や民間等と連携し,それらの教育資源を効果的に活用していくことも重要である。

めまいがしそうな文章ですが,この解説文を解説するのが「小学校プログラミング教育の手引」ということになります。

その手引によれば「プログラミング的思考」とは,コンピュータに意図した処理を行なわせるために必要な「論理的思考力」と概説され,学習の基盤となる資質・能力のひとつ「情報活用能力」に含まれるものだとも書かれています。

プログラミング的思考とは,情報活用能力に含まれるプログラミングに関わる論理的思考力である。

これが圧縮した定義となりそうです。

面接試験時に「プログラミング的思考が論理的思考力であるなら,ただの論理的思考と何が違うのでしょうか?」と問われたら,なんと答えればよいでしょう?

第一の相違点は,論理的思考が対象を限定していないとすれば,プログラミング的思考はコンピュータに関わる領域に対象を限定している点です。

ただし,この指摘に賛同しない立場もあります。プログラミング的思考は汎用性のある思考法であると主張する人もいます。ちなみにComputational ThinkingについてWing氏の論稿で「すべての人にとっての基本的な技能」と紹介しているので,これをプログラミング的思考と混同しようとする流れもあるようです。

第二の相違点は,「思考過程」と「結論/結果」(意図する一連の活動)の位置付けです。

論理的思考が根拠等の要素の関係を注意深く結びつけることによって結論を導き出すもの(思考過程が静的で結論が動的)であるのに対し,プログラミング的思考は精緻に設定された結果を達成するために必要な要素を選択して結びつけるもの(思考過程が動的で結果が静的)と位置づけることが出来ます。

ただし,論理的思考は,意図した結論に適合する思考過程を生成することも包含し得ます。一方,プログラミング的思考は,意図した結果の方を変える場面もあり得ますが,今回の「解説」や「手引」の範囲では意図の変更までは想定していないようです。

ここでは以上の2点をプログラミング的思考と論理的思考の違いとして述べるに留めたいと思います。

ただ,プログラミング的思考が「意図した一連の活動」そのものを考え直す契機を含んだものとして語られていないというのは,非常に興味深い論点になると思います。

そもそも「論理的思考」に関して,学習指導要領上で「算数,数学科」の数量的思考の中で触れられてきた流れや,「国語科」での論理的思考力を養う話題・教材の選定や論理的理解に配慮した表現力,論理的な見方・考え方をする態度育成という記載の流転を鑑みても,それが何なのかをはっきり明示できているとはいえません。

おそらく戦後の学習指導要領の大テーマである「問題解決学習」と併せて考えなければならないのだろうとは思います。

問題解決に際して,帰納的思考を展開するのか,演繹的思考を展開するのか。そういう観点からプログラミング的思考と論理的思考を位置づけて論じることも出来るかも知れません。

またプログラミング的思考を,Computational Thinking(コンピュテーショナル思考)との違いで考えてみたり,クリティカル思考やシステム思考,デザイン思考といったものと比較検討することも面白いかも知れません。

これから教員採用試験を受験しようとする皆さんは,正解を追い求めるだけでなく,こうした曖昧とした用語同士の関係性を自分なりに描いてみる訓練も大事になると思います。