WORKSHOP TITLE

先生をプログラミングして
お菓子をゲットしよう

TEACHER

寺田直和 先生

ソフトウェアエンジニア

REPORT

“プログラミング的な考え方”を学ぶために

この授業は主にWebサイトやアプリケーション開発をされている、ソフトウェアエンジニアの寺田先生による授業です。

“プログラミング”と聞くと、パソコンに向かって作業をしているシーンを想像しますよね。何をしているかというと、機械がわたしたちの思い通りに動いてくれるよう、指示を書いています。その指示は言葉でできていて、プログラミング専用の文法で書かれた文章です。つまりプログラミングをするということは「コンピュータのための指示を文章として書き起こす」ということなのです。

今回の授業では、パソコンなどデジタルデバイスを使わない方法で、“プログラミング的な考え方”の実践と楽しさを学びました。

ロボットにプログラミングをしよう

まず、マス目上に区切られたステージが用意され、そのマス目の上で「ロボット」を動かす、というプログラミングにチャレンジしました。
※ロボット役はスタッフが担当。ロボットには意思はなくプログラムの指示通りにしか動けない、ということを徹底しました(人間だから本当は自由に動けますが…)。

「すすむ」「右向け右」など、カードの種類がいくつか予め用意されていて、そのカードを並べてロボットにプログラミングをしていきます。例えば、1マス前に進んだ位置で、右に曲がりたかったら、「すすむ」「右向け右」「すすむ」と並べるのです。
ステージ上には、お菓子やジュースなどに見立てた紙コップや紙皿があったり、入ることのできないマスはダンボールの板を敷くなど、アイテムや障害物が用意されていました。

障害物を避けながら、お菓子やジュースのアイテムを全て取れるよう、ロボットに進む順番をプログラミングします。

ロボットを動かしてみよう

プログラムができたら、ロボットを動かします。並べたカードを読み上げ、ロボットを動かします。すすむ、すすむ、右向け右…ロボットは指示通りに動き、コースを進んでいきます。プログラミングがうまくいったチームは、すべてアイテムを獲得しゴール。

プログラムをひとつでも間違えると、その後からすべての手順がずれてしまって、ロボットは思った方向に進んでくれません!

複数の指示をひとつの指示でできる!
カスタムカードを使ってみよう

プログラミングに慣れてきたところで、追加ルール「カスタムカード」について説明がありました。カスタムカードは、複数の指示をひとつにまとめることができるというものです。今回、用意された移動するための指示のカードは「すすむ」「右向け右」だけだったので「左向け左」をするためには「右向け右」を3回指示する必要がありました。そんな時に便利なのがこのカスタムカード。プログラムとは別のエリアでカスタムカードの指示をつくります。

カスタムカード指示エリアに

左向け左 {
右向け右
右向け右
右向け右
}

と作っておくと、

プログラムに「左向け左」という指示(名前は他にも自由にきめられるよう追加カードに手書きで書き込んでもらいました)を一つ入れるだけで、ロボットは右向け右を三回してくれるようになるのです(結果、左向け左をしたときと同じ方向にロボットが向きますよね)。

このカスタムカードを上手に活用することで、プログラムがすっきり見やすくなります。
左向け左の指示を出すのに右向け右を3回指示するのも、もちろん間違いではないのですが、ちょっと手間ですよね。このカスタムカードを使うことで、指示を少なくすることもできますし、また右向け右の数を間違えてしまうなど、単純なミスを減らすこともできます。このように面倒なことやミスの起こりやすいことをどんどん効率化することも、プログラミングにおいては重要なことなのです。「プログラムは放っておくと段々複雑になっていくので、できるだけカードの数が少なくてすむように考えながらやってみてください」と先生もおっしゃっていました。

また、今回はお菓子とジュースをゲットするときの指示カードもあり、もし〇〇なら〜するという条件でプログラミングしました。もし「お菓子がある」なら「食べる」といった指示です。

学んだことを全て使って挑む、
ファイナルステージ

先生が用意したコースをいくつか解きコツを掴んだところで、ファイナルステージに挑みました。ファイナルステージの内容は、チームで協力して一つのステージを作り、隣のチームがそれを解く、というもの。これまで解いてきた問題と同じように、マス目の上に、ダンボールの障害物とアイテムを置いて問題を構成します。

さらに嬉しい追加ルールがあり、ゲットしたアイテムは本物のお菓子(駄菓子)に交換できるということでした。アイテムを取れればその分のお菓子がもらえます。そして取れなかった分は、問題を作ったチームの取り分となります。

間違えず完璧にステージを解き、いかに解きにくいステージをつくって相手にアイテムを取られないかが、お菓子の取り分を増やすポイント!ロボットを動かしながら、こういう動きは難しいのではないかと、思考錯誤しながらコースを検討していきます。お菓子がかかっていますから、みんな真剣です。

制限時間内に問題を解いてみよう

全チームステージが完成したところで、チームごとに隣のステージへ移動。制限時間内で与えられたステージを解くためのプログラムを作ります。積極的にカードを並べたり、アイデアを出したり、冷静に指摘をしたり…とそれぞれ自発的に役割を果たしながら、チームワークで問題を解いていきます。

制限時間がおわり、いよいよ完成したプログラムを使ってロボットを動かします。

一組ずつ順番で、ロボット役の先生を介してプログラムを実行しました。全員でドキドキしながら見守ります。解答側のグループはロボットへ思ったとおりに指示できているよう、出題側のグループはひとつでも多くお菓子を相手に取られないよう、どのグループもひとつひとつの動きを緊張しながら見つめ、とても盛り上がりました。

プログラミングの正解は一つではない

今回のプログラミングの体験を通して「正解は一つではない」ということを感じることができたと思います。いろいろな道のりを考え、意見を交わし、よりよい方法を導き出していくことが大切です。他の人の解答を聞いて「そういう方法もあるのか!」と気がつき、次の問で応用するなど、柔軟に問題を解く姿も見られました。互いの考えを尊重しながら刺激を受け、レベルアップしていくことのできる授業となりました。

この授業の内容は、寺田先生がブログに詳しく記載しています。
あわせてご覧ください。
https://tech.karappo.net/1129

Text: Mamiko Saito

写真

寺田直和 さんのプロフィール

千葉大学でデザインを学び、その後デザイナー/エンジニアとして活動。最近は、もっぱらプログラミングばかりしています。趣味もプログラミングです。
https://karappo.net

ななめな学校2の授業 REPORT