「プログラミング的思考」とは何か

2020年度から小学校でプログラミングが必修化される。その中に「プログラミング的思考」という言葉が出てくる。 文部科学省の「小学校プログラミング教育の手引」(第二版)によると、小学校でプログラミング教育を実施する目的として以下の3つが挙げられている。

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

このうち2については、世の中にコンピュータが溢れていて自然と使っているが、その機能が「ブラックボックス化」しがちなので、その中身に目を向けさせようという意味である。

1の「プログラミング的思考」が本稿の主題である。同資料によれば、プログラミング的思考は以下のような定義である。

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

文部科学省「小学校プログラミング教育の手引」p. 13

「物事を説明するための筋道を立てて考える力」を意味する論理的思考力との違いは、意図した動きをコンピュータに実行させるために、要素に分解してロジックを考えていく力に重きが置かれているようだ。

計算機科学的には Computational Thinking(計算論的思考)の意味に近いとされる。 「アルゴリズムを組み立てる力」と言い換えても良いだろう。

それをコンピュータに即して考えると、以下のような手順がまとめられている。

  1. コンピュータにどのような動きをさせたいのかという自らの意図を明確にする
  2. コンピュータにどのような動きをどのような順序でさせればよいのかを考える
  3. 一つ一つの動きを対応する命令(記号)に置き換える
  4. これらの命令(記号)をどのように組み合わせれば自分が考える動作を 実現できるかを考える
  5. その命令(記号)の組合せをどのように改善すれば自分が考える動作 により近づいていくのかを試行錯誤しながら考える

これを具体的に実践させるのが、冒頭の目的3「各教科等の内容を指導する中で実施する場合には、教科等での学びをより確実なものとする」であり、例えば算数においては「正三角形を書く」という問題が提示されている。

小学校のプログラミング教育ではScratchとViscuitというビジュアルプログラミング言語が利用される。前者のScratchは特に有名で、MITが開発した教育用プログラミングアプリケーションである。

各命令が「ブロック」として定義されており、それを組み合わせることで猫などのオブジェクト(Scratchでは「スプライト」と呼ばれる)を動かしていくのが特徴だ。

オフライン用のアプリケーションも公開されているが、以下のようにブラウザでも作成でき、また作品を公開できるプラットフォームも存在する。

参考:「 Scratchオンラインエディター」https://scratch.mit.edu/projects/editor/

参考:「Scratch公開作品一覧」 https://scratch.mit.edu/explore/projects/all/

通常、プログラミング言語で動きがあるものを作るのは厄介であるケースが多いが、Scratchは当たり判定などが最初から定義されているので、簡単なゲームなども慣れればすぐに作ることができる。

「正三角形を書く」の話に戻れば、「ペンを下ろす」「一定距離進む」「曲がる」という操作の組み合わせを考え、それを繰り返していくことで解答に至る。単純に手続きを3回並べてもできる(a)が、プログラミング的に考えれば同じことを繰り返す場合はループを使うのが普通なので、(b)のようにすれば正三角形を書ける。

「正三角形を書く」プログラムの例
出典: 文部科学省「小学校プログラミング教育の手引」p. 15

「プログラミング的思考」というのは、この(a)から(b)に至るまでを「試行錯誤しながら継続的に改善する」プロセスを養うというのが教育における本質的な目的であり、図としては以下のようにまとめられている。

プログラミング的思考の概念図
出典:同上

「小学校プログラミング教育に関する研修教材」では「ねこから逃げるプログラムを作る」などのカリキュラムも提示されており、当たり判定や条件分岐の利用などを利用した学習を行うようだ。

一通り「アルゴリズムの類型」(順次・選択・反復)を網羅するわけで、最終的にどの程度まで学習し、どれくらいの時間取り組む事になるかは確認できていないが、「意外に悪くない」というのが筆者の印象である。

現実的にあまり使わないフローチャートを学習するよりかはよほど面白く、できることも多い。これは「カリキュラムとして」悪くないというよりかは、やはり「Scratchがツールとして優れている」というのが率直な感想である。

問題は現場の教員や派遣されるICT指導員のスキルや指導力など運用の問題であるが、ここではその点については触れないでおこう。

参考文献

文部科学省「小学校プログラミング教育の手引」

文部科学省「小学校プログラミング教育に関する資料」

文部科学省「小学校プログラミング教育に関する研修教材」

この記事の著者 HAL について

金融・マーケティング分野の機械学習システム開発や導入支援が専門。SlofiAでは主に海外情勢に関する記事、金融工学や機械学習に関する記事を担当。

HAL の記事一覧