Check our Terms and Privacy Policy.

低学年児童のためのプログラム教育教材の作成とそのための実践:第一版 (2nd)

プログラミングという概念は、手続きを書くことと同義ではありません。 プログラムそのものの概念の把握から、プログラミングの考え方の多様性を理解できる教材を目指します。 主に小道具を使うアンプラグドな環境においてパズルやゲームを題材としたものを想定しています。

現在の支援総額

4,000

0%

目標金額は2,080,000円

支援者数

1

募集終了まで残り

終了

このプロジェクトは、2017/08/02に募集を開始し、 2017/08/30に募集を終了しました

このプロジェクトを見た人はこちらもチェックしています

低学年児童のためのプログラム教育教材の作成とそのための実践:第一版 (2nd)

現在の支援総額

4,000

0%達成

終了

目標金額2,080,000

支援者数1

このプロジェクトは、2017/08/02に募集を開始し、 2017/08/30に募集を終了しました

プログラミングという概念は、手続きを書くことと同義ではありません。 プログラムそのものの概念の把握から、プログラミングの考え方の多様性を理解できる教材を目指します。 主に小道具を使うアンプラグドな環境においてパズルやゲームを題材としたものを想定しています。

このプロジェクトを見た人はこちらもチェックしています

普通のバブルソートと普通ではないバブルソート」で使った、 “[5, 9, 2, 1, 3, 7, 6, 4, 8]” という配列でちょっと話をしてみます。

ソートのアルゴリズムはいくつもあるのですが、講習をやった際におそらく出てくるだろうアルゴリズムの一つにバブルソートがあるかと思います。もう一つおそらく出てくるだろうアルゴリズムとして、選択ソートがあると思います。選択ソートはwikipediaで読んでもらうとします。

ここでは、すこし変形した選択ソートを考えてみます。どう変形するかというと:
1. 配列1に元データが入っている
2. 空、あるいは特定の値で埋められた配列2を用意する
3. 配列1の中から一番小さい値を、配列2の1番目 or i番目の要素として入れる
4. 配列1のその要素を、無効ないし選択済みをしめす値に書き換える
5. 3. と4. を適当に繰り返す

こうすると、“[5, 9, 2, 1, 3, 7, 6, 4, 8]” はこのようになります (面倒なので “,” は書かないことにします):
配列1       配列2 
[5 9 2 1 3 7 6 4 8] → []
[5 9 2 X 3 7 6 4 8] → [1]
[5 9 X X 3 7 6 4 8] → [1 2]
[5 9 X X X 7 6 4 8] → [1 2 3]
[5 9 X X X 7 6 X 8] → [1 2 3 4]
[X 9 X X X 7 6 X 8] → [1 2 3 4 5]
[X 9 X X X 7 X X 8] → [1 2 3 4 5 6]
[X 9 X X X X X X 8] → [1 2 3 4 5 6 7]
[X 9 X X X X X X X] → [1 2 3 4 5 6 7 8]
[X X X X X X X X X] → [1 2 3 4 5 6 7 8 9]

このように、配列2にはソートされた結果が入ります。

さて、ではソートを課題とした場合、講習に参加した児童・生徒が、たとえばバブルソートを使った場合のみ正解とするべきでしょうか。あるいは逆の場合もあるでしょう。あるいは、もしかしたらマージソートを思いつく/知っている児童・生徒もいるかもしれません。そのような場合も誤りとするべきでしょうか。

このような場合、どれか一つのアルゴリズムのみを正解とするのはナンセンスでしょう。ですから、要求した結果が得られるなら、どのアルゴリズムを使ってもかまわないとします。同時に、どのようなデータ構造を使ってもかまわないとします。

結果がちゃんと得られればいい」という態度とも言えるかと思います。この態度はあまりに適当と思われるかもしれません。

ですが、講習に参加した他の児童・生徒のやりかたと比べるという過程も講習に入れたなら−−もちろん入れますが−−、他のデータ構造とアルゴリズムが存在するのだということを確認できるということにも繋がるでしょう。ですので、むしろ積極的に、この適当な方法を選択したいと考えています。

むろん、ソートならソートとして、きちんと動くことを児童・生徒自身が理解することも必要ですし、他の児童・生徒に説明できることも必要です。この部分については「なんとなく」は認めません。「なんとなくを認めない」ためには、特定の具体的なプログラミング言語を用い、書いたプログラムをPCやタブレットで実行し、確認するという方法もあるかと思います。ですが、経験がある人にはわかると思いますが、「動いたことで確認とする」というのは、実は極めて甘い基準です。また、本企画の場合、「今回はこの言語かこの言語でやってみよう」などと、私が言い出しかねません(笑。

問題は、「なぜきちんと動くと言えるのか」を説明できること、あるいは強く言うなら証明できることです。その際、データ構造の図示は必須でしょう。また、同時に自然言語を使ってこの部分を行なうことも可能です。より形式的にするために、複数のパラダイムに対応した、処理系が存在する言語の使用や擬似言語を用意する方向も検討する必要があるかとも思います。もっとも、本企画の場合、いろいろな言語の型の要素を含んでいなければならないので−−ここで特定のパラダイムを採用すると、本企画の主張と矛盾しますから−−、擬似言語の設計も難しいのですが。それは置いておくとして、実行する環境が存在しないという点をむしろ利点として活用するという方向もあるのではないかと思います。もっとも、まったく動かないというのもつまらないので、擬似言語を用意するとしても、いずれなんらかの形で実装するかもしれないという可能性は残しておきたいと思います。

 

 

シェアしてプロジェクトをもっと応援!