小学生にプログラミングへ興味を持ってもらうためのコツ

この記事は、[Scratch Advent Calendar](https://qiita.com/advent-calendar/2018/scratch)の23日目の記事です。

# はじめに
現在、僕は工学部電気電子工学科に所属する学部2回生で、とあるパソコン教室で毎週行われるプログラミング教室の講師をしています。
プログラミング教室の立ち上げ時から在籍し、約1年が経とうとしていますので、そこから得られた気づきなどをまとめていきます。

なお、プログラミング教室の概況をざっとまとめると下のような感じになります。

-  **Scratchのみ**を指導
-  小学校1年〜6年が対象で、見た感じ2~4年生くらいが多い
-  初級、中級、上級の3クラスに分けて開講
-  1回の人数は、毎回変動はあるものの、初級約15名、中級約10名、上級5名以下
-  授業は**1回50分で、必ず1回完結**

なお、教科書等は使わず、**教える内容はその日の講師に一任**されていますので、大学生のアルバイトではありますが、毎回教える内容や何を作るかについては一から考えています。

# 小学生にプログラミングさせるということ
さて、実際に小学生にプログラミングを教えるとなると、我々大人が考えてもみなかった困難が待ち受けています。その中からいくつか紹介していきます。

## マウスの扱いに慣れていない子がいる
Scratchを使う分には、後述する文字打ちできないことは大きな問題ではないのですが、その分命令ブロックのドラッグ&ドロップや右クリックなどが頻繁に発生します。
中級以上ではほぼ見られないものの、初級では一定数がマウスの扱いに慣れておらず、そうなると**狙ったところにカーソルを持っていき、そこで動かさずにクリックすることがまず大変**です。

こればっかりは慣れも大きいので、

- 正しい持ち方で講師が上から手を被せて一緒に操作する
- 苦労する子がいても、置いて先に進めず、尚且つ「他のみんなは待っている」感が出ないようにする
- うまく操作できたときはオーバーに褒める

などの点を気をつけています。

## 文字が打てない(子の方が多い)
基本マウス操作のScratchでも、下のようなキャラクターに喋らせたり、変数名を決めて変数を作成したりことがままあります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/51163/2bd1964e-6ff8-100f-bbbd-c566f3e5e12a.png)

しかし、このようなちょっとした入力でも、文字を全く打てない子の方が多いので、打たせようとすると結局講師が打って回ったり、ローマ字を教えたり一苦労となります。ここに時間をかけると、やはり本筋から外れてしまうので、教室では基本以下のように予め変数やブロック（スプライトを多く使う講座についてはスプライトも）を用意したファイルを最初に読み込ませて対処しています。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/51163/013b6e1b-dda1-b892-3446-b438aefee5c1.png)

## 習ってないことが意外とある
プログラミングを教えてるとつい忘れがちですが、小学生というとまだ算数を習いかけみたいな状態なわけです。
当然ながら「マイナスという概念」や「正負の値で座標を表現・操作する」ことも、Scratchでよく使うものの知らないので、初級では**「マイナスって何？」**というところから、実際に動かしてもらいながら丁寧に教えるようにしています。

あと、地味にキーボード上で「マイナスキー」や「矢印キー」が見つけられない子も多いため、前に貼ってあるキーボード図を指しながら、マイナスキーだったら「右上のひらがなの《ほ》が書いてあるキー」などと説明したりします。

# 教える側になる愉しみ
これまで散々教える上での困難を述べてきましたが、それを乗り越えてでも教える楽しみは感じています。

## 素直にウケてくれる
特に低学年であれば、キャラがやたら大きくなったりピカピカ光ったり、音がわちゃわちゃなるとそれだけで喜んでくれます。
x,y座標での動かし方などを説明しつつ、合間に音や背景の設定をしていくと、楽しい気持ちを持続させつつ中身がある授業にできます。

## キラリと光る子がいる
上級クラスともなると、中には自分で一から大作を作って講師に見せてくれる子も出てきます。
こないだなんかは、Scratchで「にゃんこ大戦争」のパロディ（それも結構完成度高い）を見せられておったまげました。
そういう子たちが上級には来てくれるので、講師側も気合を入れて「リバーシ」や「神経衰弱」、「迷路自動生成」などの本格的なゲームを作る授業を用意して毎回楽しくやっています。

ちなみに、最近リバーシのAI論文を実装したプログラムもScratchコミュニティで公開されていて驚きました。
[Reversi ver1.8.5 [100%PEN] Scratchで作成](https://scratch.mit.edu/projects/169793287/)

ただ、それだけプログラミングができる子は**是非Scratch以外の言語にも足を伸ばして、もっと成長してほしい**とも感じてしまいます。
その次のステップへの架け橋となることを我々講師ができたらいいのですが、生徒たちと話していて、**文字をたくさん打つことや別の言語を一からやる手間を乗り越えてでも、やりたくなるきっかけを作るのはなかなか難しい**ように思います。

# 保護者さんの期待と実情
ここまでの文章を読んで、「それならマウスの操作や文字打ちから教えてあげればいいじゃないか」と思うかもしれません。実際僕も本当はそう考えています。
しかし、大抵の保護者の方は「プログラミングを習わせたい」との想いから連れてきてくださっているでしょうから、それらに重きを置くとその想いに応えられないのかなとも思います。
また、もし自分が経営側だったとしても、やはり基礎的なパソコン操作を教える場ではなく、プログラミングを教える場にした方が人を集められるだろうと思うので、なかなか難しいところです。

# 教育義務化に向けて思うこと
(学生とはいえ)バリバリコードを書いている人間が教えるとしても、かなり苦労をしているのに、プログラミング経験者の方が恐らく少ないであろう小学校教員に負担を強いるのは相当無理があるというのが僕の感想です。
また、小学校での必修化が話題ですが、どうやら中学校での教育もさらに高度なものが要求されるようになるそうです。

[「ネットワーク」に「双方向」!?　倍増するプログラミングの学習内容に中学校の現場はどう対応するのか――相模原市立相原中学校 技術科公開授業レポート - Watch Headline](https://www.watch.impress.co.jp/kodomo_it/news/1159054.html)

現在のWeb版Scratchには「ネットワークを利用した双方向性のあるコンテンツのプログラミングによる問題の解決」ができる機能はありませんし、この公開授業のような充実した内容ができる方が少数派でないでしょうか。
散々批判はしてきましたが、将来的にエンジニアにならなかったとしても、「プログラミング的思考」を身につける意味はあると僕も思っているので、うまい教育の形をこれからも自分の環境で模索していけたらなと思います。