← StudyX Devlog

プログラミング的思考とは:パズルで育つもの

OBARA HirokiOBARA Hiroki · DeveloperMath Gates使い方
プログラミング的思考とは:パズルで育つもの

小学校では、2020年度から全面実施された学習指導要領で、プログラミング教育が始まりました。学校からのお便りや授業参観で「プログラミング的思考」という言葉を見て、具体的に何のことなのか気になった方も多いと思います。プログラミングの言語を覚えることなのか、パソコンが得意になることなのか。

結論から書くと、どちらでもありません。この記事では、文部科学省の手引に書かれている定義を読み、その元になった考え方にも触れたうえで、パズルで育つものと育たないものを分けて考えてみます。

文部科学省の定義

文部科学省の「小学校プログラミング教育の手引(第三版)」(2020年2月)は、有識者会議の「議論の取りまとめ」を引いて、プログラミング的思考を次のように説明しています。

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

長い一文ですが、分けて読むと4つのことが書かれています。

  1. 何をしたいのか、自分の意図がある
  2. それを、一つ一つの動きの組み合わせとして考える
  3. 一つ一つの動きを、記号(命令)に置き換えて組み合わせる
  4. うまくいかなければ、組み合わせを改善して意図に近づける

手引はこれを正三角形をかく例で説明しています。「正三角形をかく」という命令は普通は用意されていないので、「長さ100進む」「左に120度曲がる」を組み合わせる。それを3回くり返せばよい。曲がる角度を変えれば正六角形もかける、という流れです。

言語を覚えることではない

手引は、プログラミング教育のねらいについて、こどもがプログラミング言語を覚えたり技能を身につけたりすることはあり得るが、「それ自体をねらいとしているのではない」とはっきり書いています。

もうひとつ大事だと思うのは、試行錯誤についての一文です。手引は、思い付きや当てずっぽうで命令の組み合わせを変えるのではなく、うまくいかなかったときにはどこが間違っていたのかを考え、直して、確かめることが大切だとしています。

私はここに、プログラミング的思考のいちばん大事な所があると考えています。動かしてみて、だめなら適当に変えてまた動かす。これは一見よく似ていますが、別のものです。予想を立て、結果と比べ、ずれの原因を探す。この往復が「論理的に考えていく力」の中身だと思います。

その元にある考え方

この考え方の背景には、計算機科学者の Jeannette Wing が2006年に書いた短い論説「Computational Thinking」(Communications of the ACM, Vol. 49, No. 3)があります。Wing は computational thinking を、計算機科学者だけでなく「誰にとっても基本的な技能」と呼び、読み・書き・計算と並べて、すべてのこどもの分析力に加えるべきだと書きました(原文 PDF)。

その中で Wing は、computational thinking の特徴として「Conceptualizing, not programming」、つまりプログラムを書くことではなく概念として考えることだと述べています。大きく複雑な問題を分けて考えること(分解)や、問題の要らない所を捨てて必要な所だけを取り出すこと(抽象化)も挙げています。そして、これはコンピュータのように考えることではなく、人が問題を解くやり方だとも書いています。

日本の「プログラミング的思考」は、この computational thinking と同じものではありません。小学校で扱える範囲に絞り、順序立てる、組み合わせる、直す、という部分に重心を置いた言葉だと私は理解しています。

パズルで育つもの

では、パズルでプログラミング的思考は育つのでしょうか。私は、育つ部分と育たない部分がはっきり分かれると考えています。

育つのは、まず順序の感覚です。「2をたしてから3倍」と「3倍してから2をたす」は答えが違います。動きの組み合わせは、何を使うかだけでなく、どの順番で使うかで結果が変わる。手引の定義の2番目と3番目にあたる所です。

次に、動かす前に結果を予想する習慣です。よくできたパズルは、当てずっぽうでは解けないように作られています。読んでから動かすほうが速いので、自然と予想を立てるようになります。

そして、失敗から原因を探すことです。パズルの失敗は、たいてい理由がはっきりしています。どこで、なぜずれたのかを考えて直す。手引が大切だとしている、あの往復です。

もうひとつ、より短い解を探すことも挙げておきます。動くだけでなく、もっと少ない手順で同じことができないか。定義の最後の「改善」にあたる部分です。

パズルで育たないもの

一方で、パズルだけでは足りないものもあります。

ひとつは、自分の意図を持つことです。パズルでは、ゴールは問題の側が決めています。定義の最初にある「自分が意図する一連の活動」を、こども自身が考える場面はありません。何を作りたいかを自分で決めるのは、白紙から始める Scratch のような道具や、紙と鉛筆での工作のほうが向いています。

もうひとつは、実際のコンピュータを動かす体験です。手引は、コンピュータを使わずにプログラミング的思考を育てる指導もあり得るとしながら、プログラミング教育全体でこどもがコンピュータをほとんど使わないのは望ましくないとも書いています。パズルは、その代わりにはなりません。

さらに、正解のない問題や、人と協力して作ることも、パズルの外にあります。パズルは、ルールが決まった小さな世界の中で考える練習です。その練習が役に立つのは確かですが、それで全部がまかなえるわけではないと思います。

家庭でできること

特別な道具がなくても、手順を言葉にする遊びで十分に練習になります。

たとえば、こどもに「歯みがきの手順」を書いてもらい、大人がその通りにだけ動きます。「歯ブラシに歯みがき粉をつける」と書いてあっても、キャップを開ける手順がなければ開けられません。書いてあることしかしない相手に、意図を正しく伝えるには、動きを細かく分けて、順番を決める必要があります。

うまくいかなかったら、どこで止まったのかを一緒に見て、手順を書き直します。これは手引の5つの手順(意図を明確にする、動きと順序を考える、記号に置き換える、組み合わせる、改善する)を、そのまま台所や洗面所でやっていることになります。

Math Gates について

Math Gates は、私が作っている回路パズルのゲームです。盤の空きマスに、数を変える「門」と、進む向きを90度曲げる「鏡」を置き、「うごかす」を押すと、数を持った「ビット」がまっすぐ走ります。目的地の「ポート」は、条件を満たす値しか受け取りません。

ビットはまっすぐしか進まないので、どの門を先に通るかは、置いた場所と鏡の向きで決まります。手引の言葉でいえば、門と鏡が「記号」で、置き方が「組合せ」です。駒を置くと、走らせた結果がすぐ点線で盤に描かれるので、動かす前に予想と照らし合わせることができます。失敗したときは、壁にぶつかった、門を通れない値だった、ポートの条件に合わなかった、のように理由がわかる形で止まります。星は使った門の数で決まり、最少の門で解くと星3つです。最少の数は遊ぶ前には見せず、クリア後に「もっと少ない門で解ける」と伝えるだけなので、改善する理由がいつも残ります。

ただ、上に書いた「育たないもの」は Math Gates にも当てはまります。ゴールは問題の側にあり、こどもが自分の作りたいものを作るゲームではありません。順番に通す、組み合わせる、直す、の練習に向いている、と考えていただくのがよいと思います。

7ワールド140問で、たし算・ひき算から始まり、分数、二乗、真偽と論理まで進みます。対象は8歳からです。無料で遊べて、クリアの合間に広告が入ります。広告は買い切りの課金で消せます。

操作の順番で答えが変わる話は計算の順番で答えが変わる:遊びで教える関数の合成と逆算に、Scratch などほかの選択肢との違いはMath Gates と他の選択肢の比較に書きました。

プログラミング的思考は、コンピュータの前に座らないと育たないものではありません。ただ、パズルだけで全部が育つものでもありません。順序と改善はパズルで、意図と表現は白紙の上で。その両方があるとよいと私は考えています。

App Store でダウンロード