こんにちは、本多です。
このブログでは、プログラミングや教育のことについて書いていきます。
変数とは
さて今回は、変数理解の困難性について書いていきます。
早速ですが、変数とは何でしょうか。
例えば以下のような変数を使ったプログラムが考えられます。

「int」という名前の変数を5にする、と書いてあるので、変数intは5なのでしょう。
また、その下のプログラムでは、前に「int」ブロック移動させると書いてあるので、なんだか5ブロック移動しそうな感じがします。
このように、「数字(などのデータ)を紐づけることで、それを使う場面で代用できる機能」が変数です。(今回の話の本質ではないため、変数のより厳密な定義などは省きます。)
一見すると、「なんだ簡単じゃないか。」と思う人もいるかもしれません。
たしかに変数という機能は、大人向けのプログラミング本などでは一番最初に書かれることもあるほど基本的なものとなっています。
視覚的顕在化から考える変数理解の困難性
しかし、これを子どもが学ぶにあたっては、いくつかの問題が存在しているのです。
この問題について考えるにあたって、岡本ら(2013)の提唱した視覚的顕在化の概念を紹介したいと思います。
視覚的顕在化とは、プログラミング教材の開発や改善する際の指針として考慮すべき4項目のことです。
それぞれ「可視化」「識別容易化」「予測可能化」「分離化」であり、抜粋して引用します。
「可視化」 …大きさ、速さなどにおいて視認可能な動作であること
「識別容易化」 …周囲の視覚的要素と区別して認識できること
「予測可能化」 …視認の主体が予測(中略)できる場所で予測する動作が実行される
「分離化」 …他の命令に基づく動作と区別、分離して視認できること
これらはプログラミング教材を作る上で考慮すべきものであり、これらがないものは理解する上で困難性が上がると考えられます。
では、そもそも教材を作る以前に、変数というものはどうなのでしょうか。
まず大前提として、変数単体は動作ではありません。
数字がそれ単体で動作ではないのと同じように、その代用である変数も動作にはなりません。このことから、変数そのものを動作として認識することはできず、「可視化」しづらいものであると考えられます。
よって、変数が可視化されるためには、他の動作と組み合わせる必要があります。つまり、変数単体として認識することができず、他と組み合わせることが前提となるということです。この時点で「分離化」「識別容易化」が難しい状態にあります。
また、変数の値はそのプログラム内の動きによって変化します。
そのため、それ単体でどのように動作するのかは分からず、そこまでのプログラムの流れを見て値を理解する必要があります。このことから、「予測可能化」についても難易度が高いと考えます。
これら4項目がないということは、初学者にとってそもそも変数というものは分かりにくいということに他なりません。ある調査では、プログラミング学習の挫折率は8割を超えるという結果もあるほどで、変数の理解はその一端を担っていると考えています。
さらに、子どもが学ぶという上では、さらに2つの壁が存在します。
それが「①ワーキングメモリ」と「②変数の多義性」です。
ワーキングメモリとは
ワーキングメモリとは、一時的に情報を記憶し何らかの処理を行う能力のことです。詳細は省きますが、程度の差こそあれ、どんな教科でもこの能力を活用して問題を解いています。例えば、聞いた数字を頭の中で足し算するような処理がこれにあたります。
この能力は個人差があるものの、年齢の上昇と共に発達するとされています。具体的には、20-30歳で最大となります。
よって、子どもはこの能力が発達途中です。大人になれば5個覚えられることも、現状は3個しか覚えられないと考えてください。
しかし、変数が絡むプログラミングは、このワーキングメモリを酷使する活動となります。
次のプログラムを見てみましょう。

このプログラムは、変数を含む基本的な要素の組み合わせで作られたものです。
しかし、このプログラムを理解するにあたってワーキングメモリという観点から考えると、以下のような記憶処理を並列で動かしていることが分かります。
A.変数の値を覚えておき、値を変更したり変数を利用したりする。
B.エージェントの向きや位置を覚えておき、そこから移動させる。
C.くり返しの回数を覚えておき、回数が終わっていない場合、もう一度行う。
このように、変数という概念はこの記憶処理を単純に増やすことと同義です。実際、上記のプログラムを頭の中だけで考えるのは、少ししんどいと感じたのではないでしょうか。発達途中の子どもであるならばなおさらです。
また、変数は1つだけとは限りません。2つ以上の変数を使う際にはその分の記憶処理が必要となります。このことが、変数理解を阻害していると考えます。
変数の多義性とは
基本的に、教育において多義性は忌避されています。混乱の基となり理解を妨げるからです。多義性のある身近な例として、「+ー」という記号があります。これらは、小学校段階では演算記号として用いられていましたが、中学校では符号(正負のしるし)としても用いられます。このことは、実際に中学生にとって混乱の原因となっています。
変数の多義性とは、ざっくり言えば「変数の使われ方が多岐に渡る」ということです。その他多くのプログラムは、それ単体で行われることが決まっています。しかし、変数は動きを表しておらず、データの代用にすぎません。よって、その目的に合わせて変数の使い方を変化させていく必要があります。この使い方の変化は「+-」のような2種類どころではなく、無数に存在します。このような変数自体につかみどころがないということも、理解を妨げる要因となっています。
これらのことから、変数を理解し活用することは子どもにとって(または大人にとっても)難易度が高いことが分かります。
よって、教材を作る際には細心の注意を払って変数について取り扱っていく必要があります。
本校での工夫
本校では、メイクコードコース・スクラッチコース共に、中級(入塾から1年)以降に変数を学ぶように調整しています。上記のワーキングメモリの問題を解決するためには、まずそれ以外の要素をマスターする必要があるからです。中級に入る前の最初の1年間は基本的な数種類のプログラムにしぼり、それらを手足のように使えるようになることを目指して進め、その後に変数の学習に入るようにしています。
また、変数は他とのプログラムの組み合わせによって使われ方が変化します。よって、変数の学習だけで40段階以上に問題を分割し、様々なプログラムとの組み合わせの経験を経ながら進めていくカリキュラムを作成しました。多くのパターンの問題を経験することで、様々な使われ方を知ると共に、その中に共通する変数の意味や価値を認識させられるようにしました。こうすることで、変数の多義性を感覚的に理解できるようにしました。また、これらの問題は変数に集中して考えられるので、ワーキングメモリの問題を最小化させています。また、その中では「メッセージ」という、変数を視覚的に顕在化させる機能を導入し、上記の視覚的顕在化の問題を解決しました。
しかし、まだ変数の問題解決には至っていないと考えています。
プログラミング教育が盛んになってから日が浅く、この変数理解の問題はこれからより発展し研究されていくのではないかと考えています。そのような新しい研究と共に、カリキュラムも改善させていければと思います。
終わりに
この記事は以上となります。
今回は、変数理解の困難性について解説しました。
変数はプログラミングの根幹である一方、ちゃんと理解することが難しい概念です。
また、子どもにとってはさらに理解が困難なものとなっています。実際世の中には、変数の理解についてふんわりと終わらせたり、変数の意味を矮小化して進めているプログラミング学習も多くあります。そうした方が教える方は簡単ですし、子どもも達成感を感じることはできるでしょう。しかし、そこで子どもの成長は止まってしまいます。使いこなすことができれば変数はとても強力な武器となりますし、世の中にあるゲームやツールには当然変数が使われています。教員側が変数理解の困難性を認識した上で、子どもが理解し活用できることを目指しカリキュラムを作成していくことが重要であると考えます。
次回は、2025年度 大学入学共通テスト「情報」の傾向と分析について解説していきます。
ここまでお読みいただきありがとうございました。
(文責 本多)
引用文献
岡本雅子, 村上正行, 吉川直人, 喜多一(2013)『「視覚的顕在化」に着目したプログラミング学習教材の開発と評価』,日本教育工学会論文誌37巻1号p.35-45