Scratchでプログラミングを教えた話 

Bullet Group Advent Calendar 2020 7日目の記事です。

皆様こんにちは バレットグループ内定者のヒガシです。 f:id:hgsktr:20201112185006p:plain

今回はプログラミング学習ツール「Scratch」(スクラッチ)を使用して、プログラミング初心者にプログラミングの基本を教えた話をしようと思います。
協力してくれた方を以下「Aさん」と呼ぶことにします。

Scratchとは

Scratchとは、MIT(MITメディアラボ:米国マサチューセッツ工科大学(MIT)の建築・計画スクールに設置された研究所)によって開発されました。先行のオブジェクト指向プログラミング言語「Squeak Etoys(スクイーク)」をベースとし、より使いやすさを重視したプログラミング学習用ソフトです。

難しいプログラミング言語・正しい構文の書き方を覚えていなくても、コーディングがブロックの組み合わせでできるようになっており、簡単にプログラムを開発できるという特徴を持っています。

f:id:nisayama:20201206191153p:plain

このような手軽さから、小学生のプログラミング教育などにもよく利用されています。

どのように教えたか

今回、手順を2つに分けて教えました。

  1. 簡単なゲーム(プログラム)を作る

  2. 作成したゲームに、簡単な機能を追加、変更する

この方法は、エンジニアが普段行なっている工程と同じです。
新しい言語を学ぶ時、Web上にあるサンプルコードをコピペして、そのコードを編集したり追加したりすることで、どこがどのように動いているのかを理解していきますよね?

現役のエンジニアが行なっていることを初心者にも同じように教えることが、もっとも効率よく教えるコツです!

1. 簡単なゲーム(プログラム)を作る

まず、用意した単純でブロック量の少ないゲームを作成します。
今回作ってもらったゲームは、「鬼ごっこ」です。

プログラムの内容

  • 「鬼」: 画面内をランダムで駆け回る
  • 「主人公」: マウスで操作する

というシンプルなもの
Scratch内のブロックの内容は以下のようになります。

(旗が押された時)  // スタートを意味する
  (大きさを〇%にする)
  (〇度に向ける)
  (ずっと) {
    (〇歩動かす)
    (もし端についたら、跳ね返る)
    (主人公へ向ける)
}

主人公

(旗が押された時)  // スタートを意味する
  (大きさを〇%にする)
  (ずっと) {
    (マウスポインターへ行く)
    (もし(主人公に触れた)なら) {
      (すべてを止める)
    }
  }

ここまででAさんにはScratchの操作やブロックの種類を知ってもらい、機能の追加でブロック(コード)の組み立て方を理解してもらいます。

2. 簡単な機能を追加・変更

ベースとなるゲームを作成した後は、機能の追加、変更をします。

追加する機能

  1. 「時間制限」
  2. 「鬼の数を増やす」

変更する機能

  1. 「矢印操作」
  2. 「対戦型」

今回はこの中の一つ「時間制限」を追加を紹介します。

制限時間の機能を追加する上で、Aさんには必須要素とヒントを教えながら進めていきました。

必要なものを整理する

  • カウントするブロック
  • それを表示するブロック

※下画像のようにScratchは標準機能として、変数の値をプレビュー画面に表示するというものがあるので、プログラムする必要はありません。

f:id:nisayama:20201206204402p:plain

よって今回作成するのはカウントするブロックです。

Aさんには「指定した秒数から1秒ずつ減らすブロック」というヒントから、プログラムがどのような流れで作られるのかを箇条書きで出してもらいました。

  1. スタートする
  2. 時間設定する
  3. カウントを減らす

この流れに沿ってブロックを組み立てたものが以下です。
(時間制限には変数(time)を使用します。)

(旗が押された時)
  (変数(time)を〇にする)
  (ずっと) {
    (1秒待つ)
    (変数timeを-1ずつ変える)
  }

うまくカウントされているように見えますが、
上記の出力結果ではカウントが-1, -2, -3...と0で止まることができませんでした。

0で止まるブロックが必要だったのです。

  (もし(変数time)=0なら) {
  (すべてを止める)
  }

完成したコード

ステージ

(旗が押された時)
  (変数(time)を〇にする)
  (ずっと) {
    (1秒待つ)
    (変数timeを-1ずつ変える)
    (もし(変数time)=0なら) {
      (すべてを止める)
    }
  }

Aさんが学んだこと

  • プログラム(開発)におけるトライアンドエラー
  • 想像を形にする方法(プログラミング、フローチャート)
  • プログラミングは楽しい!

最後に

Scratchでプログラミングを教えた話いかがだったでしょうか?
今回はScratchのみでしたが、ゆくゆくはScratchをしたらコードでのプログラミングはスムーズにできるのか?などを実験してみようと密かに考えています。

皆様も気分転換にScratchいじってみてはいかがでしょうか?

僕がバレットに入社を決めた理由などはこちら blog.bltinc.co.jp

前回の記事はこちら blog.bltinc.co.jp