子供にプログラミングを教えた時の感想

この記事はU-Tokyo mech (東京大学機械系) Advent Calendar 2018の22日目の記事として書かれたものです。

はじめに

 東京大学では毎年五月祭という学園祭が開かれており、模擬店や舞台のパフォーマンスだけでなく学術展示も広く行われています。我々機械系はTechno Factoryという学生有志による企画展示を行っており、僕はプログラミング教室の企画担当をしました。実際に子供にプログラミングを教えてみた時の感想を書きます。

 プログラミング教室の教材製作についての詳細はこちらに書いてあります。

やったこと

 Arduino搭載車をビジュアル言語を用いて動かし、迷路をクリアしてもらうのを目標にしました。子供にif文やwhile文を理解してもらうために、以下の手順で教えました。

  1. 車を前進させる
  2. 車を前進させ、前に壁があると止まる
  3. 右手法の実装

 車には前と右に超音波センサがついており、センサ値を条件分岐させることで前進・右折・左折などの動作を組み合わせます。手順3の右手法というのは迷路の解法の1つで、右手で常に壁に触れながら進むやり方です。

 五月祭当日は、10人まとめて1時間半教える、というのを1日3回行いました。前のスライドで説明し、シフトの人にはこどもに個別に付いてもらいました。年齢制限はしていませんでしたが、大半は小学校高学年の子供+親、という感じで来ていただきました。

気づいたこと

意外と経験者が多い

 機械系と電気系が同じ建物の中で企画展示を行っていることもあり、そういう内容に興味がある子供が来るor意識の高い親が子供を連れてくるパターンが割とありました。数ある企画の中でも長時間拘束されるプログラミング教室を選んでくれる人達なので、プログラミング経験者が多いのは当然といえば当然だったのかもしれません。ラズパイを使ったことがある小学生もいて衝撃を受けました。

ハードの扱いが難しい

 ハードを使うと子供に説明する内容が増えます。車が動く際のセンサやモーターの役割や、Arduino周辺のお話(ピン指定とかPWMとか)を何となくでいいので理解してもらう必要があります。五月祭では「0~255の値の大きさを変えると、左右のタイヤが回るスピードも変わるね!」みたいなクッソ雑な説明をした記憶があります。ゲーム内のキャラクターを動かすのとは違って、車には個体差がありパラメータ調整が必要になってくるので子供には少し難しいところだと思います。

 低予算で済ませるためにタミヤの工作キットを使い教材の車を作ったのですが、下の写真のように、どうぞ壊れてくださいみたいなフォルムをしています。はんだ付けや配線がぐちゃぐちゃですぐにワイヤが取れ、子供に待ってもらい修理することが数回ありました。ハードを作るとメンテナンスが必要になってくるので、教える人とは別に人員を割いておくべきでした。めっちゃLEGOマインドストーム使いたかった

f:id:ymtkds:20181123151533p:plain

 また、Arduinoやったことある人ならあるあるかもしれないのですが、パソコンに接続するときにポートが選べないとかドライバを更新しなきゃいけないとかで手こずった時には自分の情弱ぶりをひしひしと感じました。

親に任せる

 ArduBlockというビジュアルプログラミングツールの操作方法や、実装したいアルゴリズムなどについては何度も説明しなきゃいけないところだと思っていたのですが、1回説明すると後は親御さんが子供と一緒にやってくれたので意外とスムーズに進みました。また、単純にパソコンを使ったことがない子供に対しても親御さんがキーボードやマウス操作を手伝ってくれたので何とか良い感じに進めることができました。ビジュアルプログラミングを使うなら子供がマウス操作だけすればいいものを作るべきでした。プログラミングや電子工作のプロみたいな親御さんの子供には何も教えることがなくて楽でした笑。

変数や関数の説明がわからん

 小学生の算数では変数や関数などの概念がないはず?なので説明するべきところなのですが、結局どう教えたらいいのか分からないまま終わってしまいました。「〇〇(変数名)というところに〇〇(数字)が入りまーす!」くらいにしか説明していなかったんですが、どうすれば良かったんですかね...

子供は「楽しい」が第一

 子供は車を動かすのに夢中で、あまりアルゴリズムとかの方には興味を持っていないイメージでした。最終的にはほとんどの人が数値を少しイジって車の挙動を観察し、迷路をクリアすればやったー!みたいな感じになっていたと思います。時間が1時間半と制限されていたので、プログラミング教室というより実質ラジコン体験コーナーになっていましたが、子供が楽しめるという点ではこのほうが良かったのかもしれません。

最後に

 僕自身企画を持つのが初めてで、ものづくりが不得手だったこともあり企画に関わってくれた皆さんには大変迷惑をかけてしまいましたが何とか五月祭を終えることができました。ありがとうございました。

初心者がプログラミング教室を開くまで

はじめに

 東京大学では毎年5月に五月祭という学園祭が開かれており、我々機械系はTechno Factoryという学生有志による企画展示を行っています。僕はプログラミング教室の企画担当をしていたのですが、僕自身ものづくり系の企画を持つのが初めてでかなり苦労しました。その体験談を長々と書かせてください。

発端

 もともとプログラミング教室という企画は毎年電気系など他の学科で開かれていたのですが、我々機械系にはありませんでした。僕は昨年度のTechno Factoryで「キカイ×アート」という企画に参加していたのですが、執行代になった今年は企画参加者が少なく開催できるか微妙でした。企画を廃止するか人手が少なくてもできそうな企画を新設するかという話になったとき、責任者の「代わりにプログラミング教室やってよ、君プログラミング得意でしょ?」という鶴の一声によってほぼ強制的にプログラミング教室の企画担当になってしまいました。

立案

 企画担当に任命された訳ですが、僕自身かなり情弱で何をやればいいのかさっぱりでした。Scratchというビジュアルプログラミングが子供の教育でよく用いられていることもこの時初めて知りました。ここ数年はPC内で完結するゲームをやっている電気系に対抗?して、ビジュアルプログラミングで実際にモノを動かせたら電気系との差別化もできるし、何より機械系ぽくていいよねという話になりました。

 こうして方向性は決まったのですが、具体的な内容は決められませんでした(これが去年の11月末)。12月は学科の演習課題で、1月は期末試験の勉強で忙殺されたことを言い訳にして五月祭のことを考える余裕はなく、責任者の「春休みに入りましたが準備は順調ですか?」という怒りの進捗確認が来るまで2ヶ月間何もしていませんでした。ごめんなさい。

 2月になりようやく具体案を考え始めました。Arduinoで作る!ライントレースロボットというブログ記事を見つけ、LチカしかやったことないけどArduinoなら触ったことあるし車を動かすのが楽しそうだと思い即採用。ただ、ライントレースはTechno Factoryの企画として別にあったので、プログラミングで車を動かして迷路をクリアしよう!みたいな内容でやっていくことにしました。

製作

ハード

 割としんどいところでした。電子工作はLチカくらいしかやったことないし、機械系なのにモーターもろくに触ったことがなかったので必要な部品を全て揃えるのまでに何回も秋葉原に通うハメになってしまいました。

f:id:ymtkds:20181123135235p:plain:w250

 TAMIYAの楽しい工作シリーズのギヤボックスやキャスター、タイヤなどを用いて車体をせこせこ作りました。説明書通りに作るだけなのに、グリス塗りやネジ締めなど繊細な部分も多く初心者には気が滅入る作業でした。

f:id:ymtkds:20181123144410p:plainf:id:ymtkds:20181123144934p:plain

 車に迷路をクリアさせたいので、超音波センサを2つ前と右につけることで条件分岐で前進・右折・左折が切り替えられるようにしていきます。いわゆる「右手法」という奴です。ArduinoでPWMを使えるピンは限られていることに注意しながら回路設計しました。

f:id:ymtkds:20181123151533p:plain:w250

 汚い配線とはんだづけを頑張り、ようやく車が1台完成しました。ものづくり初心者だと、ブレッドボードではなくユニバーサル基板を使うだけでかなりしんどみが深くなってしまうのですが、何とか形にはなりました。初心者にしては上出来だったんじゃないでしょうか(苦笑)。

ソフト

 どうやらArduinoはScratchでは動かせない?ということに気づき調べたところ、S4A・ArduBlock・BlocklyDuinoなどのツールを用いるとScratchのようにブロックをつなげるだけでArduinoを動かせることを知りました。子供でも読めるよう日本語化されている・必要なセンサがちゃんと使える・ArduinoとPCが接続されていなくても動く等の観点から最終的にArduBlockを用いることにしました。

f:id:ymtkds:20181123154937p:plainf:id:ymtkds:20181127122411p:plain:w250

 ArduBlock 日本語でArduinoをブロックプログラミングという記事を参考にして環境構築(圧縮ファイルをダウンロードするだけ)を行いました。上のようにブロックを組み合わせるだけで簡単にif文やwhile文が作れます。すんごい。ArduBlockの操作が楽だったおかげで、上のような右手法のアルゴリズムもパラメータ調整は糞面倒でしたが何とかそれっぽい形に実装できました。  

直前準備

 子供を10人ずつまとめて教えるという風に決め自分の首を絞めていたので車が10台必要でしたが、友人の協力もあって4月末までに何とか10台完成させることができました。5月になってからは当日用のスライドや、シフト用のマニュアル、宣伝用のパネル作成、当日使用する迷路の作成(ティッシュ箱を連結させただけw)などの作業に追われました。また、学科PCを借りるために先生や学生と連絡を取ったり、シフトに入ってくれる学生を集めて当日の説明をしたりと、色々な人とコミュニケーションを取る必要がありました。コミュ障にはつらい仕事だった。

五月祭当日

 当日のお話、感想については後日改めて書きます。

反省

 コミュニケーションを取ってもっと多くの人に企画に参加してもらうべきでした。人数不足が根本的な課題として残っていたのに最後の最後までずっと放置して、ぜーんぶ一人で抱え込もうとしてたんですね。それでも、何もしていない僕を見るに見兼ねたのか直前期になると色んな人が手伝ってくれました。仲間ってほんと大事。ありがとうございました。

ブログ始めます

 ツイッター歴がちょうど8年になる本日12月6日にブログを始めます。息抜き程度に書こうと思っていますが、明日から卒論そっちのけでスマブラspを始めるのでしばらくはブログを書けそうにありません。ちなみに文章力がないので140字以上の長文を書くことができません。よろしくお願いします。