探究型プログラミング学習(探プロ)

プログラミングの考え方を学んで、未来を創る力を手に入れる

プログラミングの考え方を学んで未来を創る力を手に入れる

【レポート】変身する公園をつくろう!抽象化とポリモフィズムを学ぶ 2019.06.02

今日は、これで通算何度目かの公園をつくろうワークショップでした。

f:id:dig_learning:20190602171341p:plain

探プロの数あるコンテンツの中でも、開催回数は恐らくNo1のはず。

作っては壊し、作っては壊し、、を繰り返しながら進めてきて、ようやく本質に辿り着けた気がします。

 

今回は小学1年生から4年生の9名が参加してくれました。

テーマは『抽象化』と『ポリモフィズム』です。

f:id:dig_learning:20190602151609p:plain

2つのチームに分かれて、最初にゲームをしました。

名付けて『お片付けゲーム』です。

 

実はこれ、3年前に2回ほどやってお蔵入りしていたのですが、今回久しぶりに復活させました。

f:id:dig_learning:20190602151900p:plain

ワンピースやネクタイ、シャツや浴衣、眼鏡などなど。

雑多なものの中からグループを作り、適切な名前をつける、というゲームです。

遊びながら、抽象化の概念を学ぶのが狙いです。

 

抽象化(集合、グループ化)

抽象化とは、モノゴトの似ているところを探してグループをつくり、名前をつけることです。

違うように見えて実は似ているものを探すというのは、モノゴトの本質を見つけることと同じです。

こうした考え方ができるようになると、似たような作業は1つにまとめてしまい、一気に片づける、といったように効率的に行動できるようになります。

「お片づけゲーム」の中では、遊びを通じてこの抽象化の考え方を学びます。

 

子どもたちには、配られたカードに描かれた衣類などを分類して名前をつけてもらいました。

2つのグループとも、最初のうちはなかなか苦戦している様子でした。

予想通り、仲間外れのグループができそうになったので、すかさず

「その他という名前のグループは作ってはいけません」

と伝えます。

そうしないと思考が止まってしまうので。

 

試行錯誤の結果、今回はこんなグループができました。

・洋服(着るもの)

・ズボン

・はくもの

・くびにまくもの

・身に着けるもの

・水着

・入れるもの(バッグなど)

 

ところで、このゲームをグループワーク形式にしているのには理由があります。

グループの作り方には正解がありません。

隣の子と自分の考え方が違ったり、思いもしない名前がつけられたりすることで、新たな発見もあると思います。

目的が違えばグループの分け方も変わるのだということに気づき、そこから子どもたちの視点が広がることを期待しています。

もう一度やりたい、という声もあり、意外と盛り上がったので安心しました。

ただ、ちょっと分かりづらい絵があったようなので・・そこは改善の余地ありですね。

 

続いて、公園の話に戻ります。

f:id:dig_learning:20190602162800p:plain

ベンチはあるものに変身するのです、といった話をきっかけに、公園には形を変えて別の用途になるものがあることを知ってもらいます。

かまどベンチ|防災ファニチャー|株式会社コトブキ

 

ここからは今回のワークショップの2つ目のテーマであるポリモフィズムの話に移ります。

ポリモフィズム(実体と役割)

「かまどベンチ」は、普段はベンチだけれど、災害時に公園が避難所として使われるときには、火を焚くカマドに変身する災害対策用のベンチです。

ただのベンチに見えて、時と場合に応じて役割を変えているのです。

 

そして、変身するのには理由があります。

めったに起きない(でほしい)災害時にそなえてカマドを公園に置くよりも、スペースを効率よく使えて良いですよね。

プログラミングの世界では、この考え方を使って”効率よく”プログラムを作ります。

似たようなプログラムをたくさん作るより、1つのプログラムが時と場合によって違う動きをするように作った方が無駄がなくて良いのです。

ポリモフィズムの考え方を実際のプログラミングで実現するのはちょっと難しいので、今回はブロックを使った工作でポリモフィズムの考え方を体験してもらいました。

 

今回のワークショップでは、子どもたちにたくさん質問を投げかけて、自分の頭で考えてもらっています。

以前は私が一方的に説明することがとても多かったのですが、いつも手伝ってくれるアシスタントの息子(6年生)より

「お母さんがしゃべりすぎてつまらない。もっと自分たちに考えさせてほしい」

と手厳しいフィードバックをもらったことで、やり方を見直すことにしたというわけです。

 

それ以来、なるべく対話を中心に、自分の頭で「なぜだろう?」と考え、答えを出していくスタイルに変えるように心がけています。

探究型という名前をつけているわけですしね。

今回のワークショップでは、参加した子どもたちからテンポの良い切り替えしがあったおかげで、非常にやりやすかったです。

 

子どもたちのつくる作品が、実際に役に立つかどうかや、現実的かどうかは重要ではありません。

公園にある遊具をよーく観察して、何かと似ていることに気づく(本質に気づく)ことが、効率化への第一歩となります。

あとは自由な発想で存分に楽しんでくれればOKです。

 

最後に、公園にあるものの中から1つ自分で選び、何かと似ているものを探して変身するものを作ってもらいました。

子どもたちは悩みながらも、短い時間の中でいろいろと考えを巡らせていました。

 

一部ですが、いくつか紹介させて頂きます。

こちらは、例として出したカマドベンチをそのものを作ってくれました。

f:id:dig_learning:20190602164256p:plain

上の台を外すと、梯子を横にした網が登場し、カマドとして使えるようになっています。

シンプルなのですが、ちゃんと変身する構造を理解して作っているところがさすがです。

 

続いてこちら。

なんだと思いますか?

f:id:dig_learning:20190602165148p:plain

水色の部分は、公園を流れる川です。

火事が発生すると中央にある消防車が出動し、川からポンプで水をくみ上げ、火を消す仕組みです。

いつもは皆を癒す川ですが、いざというときは消防の役に立つように作られているのですね。

そういえば以前、噴水の水を災害時には飲み水に変身させるというアイデアもありました。

公園にある水をいろんな用途に使うという発想は面白いですね。

 

次はこちら。

黄色のブロックが砂場になっています。

f:id:dig_learning:20190602165825p:plain

けが人が出ると、砂が風で吹き飛ばされてなくなり、枕(黄緑色のブロック)を使って休める場所に変身します。

なるほど、砂場は横になるのにちょうど良いサイズですからね。

 

最後にこちら。

f:id:dig_learning:20190602170009p:plain

これは変身後の姿です。

馬がいることから分かるように、馬車になって公園をぐるりと散歩できる仕組みです。

さて、何が変身したものでしょうか?

正解は、こちらも砂場でした!

遊んでいると、"突然"に馬車に変身して動き出すという発想が面白かったです(笑)

 

他にも、短い時間でたくさんの作品ができました。

写真を撮りきれなかったので全てを紹介できなくてすみません!

f:id:dig_learning:20190602170528p:plainf:id:dig_learning:20190602170720p:plain

 

似たものをまとめることが出来るようになると、モノゴトを効率よく片づけることができるようになります。

こうした考え方が使いこなせると、きっと将来、「仕事のできる人!」や「プログラミングのできる人!」になれるはずです。

 

ご家庭でも是非、似たものを見つけるゲームなどを通じて、お子さんと一緒に遊んでみてください。

 

さて、次回のワークショップはこちらです。

2019年6月9日(日)10:00-11:00

今回と同じようにレゴブロックを使って、今度は街をつくります。

テーマは「モジュール化」です。

難しい問題に立ち向かうときに使える考え方を、工作を通じて学びます。

 

また、7月にはlittleBitsを使った思考編を開催します。

■7月14日 お手伝いをしよう!(アルゴリズム編)

https://tanpro-lab-20190714.peatix.com/view

■7月21日 お弁当をつくろう!(マルチタスク編)

https://tanpro-lab-20190721.peatix.com/view

 

ご参加お待ちしています!

 

探プロでは隔週で情報を配信しています。

是非お友達とうろくしてください。

友だち追加

 

それではまた!

 

 

 

 

 

【コラム】抽象化の答えが1つではないことの意味

先のコラムでは、効率的にモノゴトを処理するには『抽象化』という考え方が重要になることと、プログラミングの世界でも抽象化の考え方が必要になることをお伝えしました。

 

 

子どもたちが学校で学ぶことにはたいてい、答えがあります。

問題に対して、答えが1つ、決まっています。

そうしないと、先生が採点しづらかったり、社会が混乱したりするからです。

もちろん、道徳の授業のように答えが1つでないことも学ぶのですが、点数の良し悪しで判断するしくみがある限り、問題に対して答えが1つ、という考え方は子供たちの成長過程で当たり前に植え付けられるもの、と思います。

 

そうなると、すぐに答えを求めるようになるのですよね。

私たち大人は、社会に出てしまえば答えが1つの問題なんてほとんど存在しないことを知っています。

でも、答えは1つが当たり前の中で育った子どもたちには、なかなか分かりません。

そして、答え探しをしても見つからないことに苦労する人たちが出てきます。

 

実際に、普段の仕事でもそうした人が多いことが気になります。

相手が答えをもっていることが当たり前、と思ってしまうのですね。

 

こうした背景に問題意識があるからこそ、最近の教育では、自分の頭で答えを"考える"ことの重要性を説かれていますし、そうした機会が増えているのだと思います。

 

私は、子どもたちが成長する過程では、答えが1つではない問題にたくさん向き合ってほしいと考えています。

そして、プログラミング学習がそうした学習の機会になればと思うのですが、何らか"採点する"必要が出てきた途端に、答えが必要になってしまうのは残念なことだと思っています。

プログラミング教育を指導する立場からすれば、課題に対して答えがないと、都合が悪いです。

そうなると子供たちは、せっかくプログラミングという新しいものを学ぶ機会があっても、やはり"問題を解く"というスタイルに落ち着いてしまうのではないか、と懸念しています。

学校の現場でプログラミングを学ぶ、というところにも、同じような問題が起きるのではないかな、とも思っています。

 

だからこそあえて、探プロでは、答えのないプログラミング学習を目指しています。

例えば抽象化という考え方の答えは、1つではありません。

前回のコラムでは、抽象化はグループをつくること、とお伝えしました。

このグループづくりが、人によって全く違うので面白いのです。

 

以前にやったワークを1つご紹介します。

名付けて

散らかった部屋をみてお母さんが怒っています!早く片付けよう!!

です。

 

子どもたちには、こんなイラストが描かれたカードを渡します。

そして早く片づけられるようにグループに分けて、と促します。

f:id:dig_learning:20190519234132p:plain

f:id:dig_learning:20190519235039p:plain

 

制限時間内にグループに分けて、そのグループに名前をつけてもらいます。

2人より3人、3人より4人と、人数が増えるほどに難しくなるワークです。

なぜなら、人によってグループの分け方が全く違うからです。

 

ある人は色だったり、ある人は形だったり、はたまた季節だったり。

分け方は十人十色ですから、会話しながらそういった違いを知るのもまた面白い発見になると思っています。

 

このワークをすると、もう1つ面白い発見があります。

うまくグループに括れないものたちをまとめて「その他」とする子が出てくるのです。

そうすると、グループ分けはあっという間に完成します。

だから、「その他」というグループを作り始めたら、それはNG、と伝えます。

 

じゃあどうするか?

子どもたちが必死に共通項を探し始めることでようやく、"考える"モードに入ります。

他愛のない仲間集めゲームに見えますが、このときの思考はそのまま、プログラミングの世界でも活用できますし、プログラミングだけでなく、私たち大人が仕事をする上でも役に立つことは説明するまでもないと思います。

 

似たものを集めて1つのグループにまとめる。

そして、まとめて処理する。

これがどう日常生活に役に立つのか?については以前、洗濯物を干す、というテーマで書いたものがあるのでそちらを参考にしてください。


抽象化は、モノゴトを効率よく処理するために必須の考え方です。

これが出来ないと、仕事でも家事でも、無駄がたくさん発生してしまうのです。

 

そして、グループに分ける方法は1つではないのです。

つまり、他の人と自分とでは、分け方が違う可能性があるのです。

当たり前だと思うことが、違ったりする。

そこで初めて、もっと効率よくするためのグループ分けができるのではないか?と考えたり、皆が納得するためのグループ分けはなんだろう?と考えたりできるようになります。

仲間と一緒に問題を解決していく上では、こうした思考のトレーニングこそが重要になると信じています。

 

【イベント告知&拡散希望
予測できない未来に生きる子供たちに必要なことは

プログラミングができる力

ではなく

・考える力

・仲間と協力できる力

・社会を知る力

・技術を使いこなす力

 

探究型プログラミング学習(探プロ)では、プログラミングそのものではなく、プログラミングの考え方を学ぶことで、これらの力を身につけることができます。

 

小学校低学年向けのワークショップはこちら。
6月7月に計4回、実施します。
1回からの参加でもOKです!

 

■6月2日 公園をつくろう!(ポリモフィズム編)
https://tanpro-lab-20190602.peatix.com/view

■6月9日 街をつくろう!(モジュール化編)
https://tanpro-lab-20190609.peatix.com/view

■7月14日 お手伝いをしよう!(アルゴリズム編)
https://tanpro-lab-20190714.peatix.com/view

■7月21日 お弁当をつくろう!(マルチタスク編)
https://tanpro-lab-20190721.peatix.com/view

 

 

探プロでは隔週で情報を配信します。

お友達とうろくをぜひ! 

 

友だち追加

 

 

【コラム】小学2年生が抽象化を学ぶ意味

長かったように思えた連休もまもなく終わりですね。

学校生活にも慣れて、勉強意欲が増してくるこの時期に、探究型プログラミングのワークショップはいかがでしょうか?

 

小学校低学年向けの連続ワークショップを実施中です!

電子ブロックのlittleBitsやレゴブロックを使い、日常生活の中で問題解決に活かせるプログラミングの考え方を学びます。
親子で一緒に参加することで、家庭や学校生活の中で役立つプログラミング学習を体験して頂けますよ。

計4回のコースですが、1回からお気軽にご参加頂けます。
お申し込みはこちらから。

★変身する公園をつくろう(ポリモフィズム編) 6/2(日)

★探プロ★変身する公園を作ろう(プログラミングの考え方を学ぶ、ポリモフィズム編)★お土産付き★20190602 | Peatix

★街をつくろう(モジュール化編) 6/9(日)

★探プロ★街を作ろう!(プログラミングの考え方を学ぶ、モジュール化編)★お土産付き★20190609 | Peatix

アルゴリズム編 7/14(日)

★探プロ★littleBitsでプログラミングの考え方を学ぼう(アルゴリズム編)★お土産付き★20190714 | Peatix

マルチタスク編 7/21(日)

★探プロ★littleBitsでプログラミングの考え方を学ぼう(マルチタスク編)★お土産付き★20190721 | Peatix

 

==

さて。

今回からしばらくは、プログラミングの考え方というものを少しずつ掘り下げてみようと思います。

最初のテーマは「抽象化」です。

ちなみに抽象化の話は、6/9の「街をつくろう!」というワークショップでも登場します。

 

数あるプログラミングの考え方の中で、今回この「抽象化」をとりあげようと思ったのには理由があります。

こちらです。

f:id:dig_learning:20190505233607j:plain

娘(小2)が1年生のときからやっているZ会では、今年度から「みらい思考力」という新しいワークが始まりました。

「みらい思考力」は6つの力に分かれています。

・論理的判断力(きちんとかんがえる力)

・情報整理力(せいりする力)

・試行錯誤力(いろいろためす力)

・連想力(おもいつく力)

・注意力(よくみる力)

・推移力(みぬく力)

 全てではないのですが、このうちいくつかはプログラミング学習においても重視したい力が含まれています。

例えば4月号では、情報整理力を育成するコンテンツとしてまさに、抽象化が取り上げられていました。

国語や算数だけでなく、21世紀を生きる子供たちにはこうしたスキルが必要です。

2年生といえばかけ算・・と思っていましたが、抽象化を学ばせるこの教材には非常に刺激を受けました。

なぜなら、探プロでもこの「抽象化」の考え方はとても重要だと考えているからです。

 

抽象化といっても、難しい話ではないのです。

みなさんもよく知っている"仲間集め"と同じです。

タクシーとトラック、バスの共通点をみつけて、乗り物というグループをつくる、あれです。

 

対象が動物だったり乗り物だったりと、見た目は子ども用の教材に見えますが、この2年生向けテキストにはなんとベン図が登場します!

(わたしがベン図を学んだのは確か高校生だったと思いますが・・)

さらに、表に記載された〇×を見ながらベン図に情報を整理する問題などもあり、なかなか高度なことを要求するなと感心しました。

 

このBlogでは過去に何度か抽象化について書いています。

dig-learning.hatenablog.com

なぜ抽象化の話が重要なのかについてはそちらを読んで頂きたいのですが、抽象化の考え方をマスターするとどんな良いことがあるのか?

についてあらためて書いておきます。

それは

効率的にデータを扱う

ことができる、です。

全てのデータを手当たり次第に見ていくよりも、データを整理して範囲を絞り見るべきものを限定する方が、効率よく目的に近づくことができるのです。


読者である大人の皆さんは、普段の仕事や日常の中でこの「抽象化」という考え方をごくごく自然に使っていると思います。

逆に、抽象化できないと大変です。すごく手間と時間がかかるのです。

例えば10個のデータがあるとして、この10個を1つ1つ調べるよりも、5個と3個と2個のグループに分けられることに気づくことができれば、調べるのは3種類で済むわけです。

 

このグループ分けを間違えてしまうと、、、どうなるか想像つきますよね?

抽象化の考え方を使いこなせないと、プログラミングでも同じ問題がおきます。

 

すごく似ているけど少し違うプログラムAとBとCとDとEという5つのプログラムがあるとします。

全体の95%が同じで、残りの5%だけが違うプログラムだったとき、もし95%の部分を変更しなければならなくなったらどうしますか?

5つのプログラムを全て変更することになるのです。しかも、全て同じように手を加えることになります。

 

ここでもし、抽象化の考え方を取り入れるとどうなるでしょうか?

例えば、この5つのプログラムを1つのグループにまとめることができれば、同じ部分を共通機能として使いまわすことができます。

そうすれば、変更するプログラムは1つで済む、というわけです。

 

だから、プログラミングの世界でも、うまく抽象化できるかどうか、というのはとてもとても重要なことなのです。

モノゴトをうまく整理して、効率化するために必要な考え方なのです。

 

しかし、この抽象化の考え方を使いこなすにあたっては1つ、問題があります。

それは、グループに分ける方法は必ずしも1つとは限らない、ということです。

だからこそ面白くもあり、難しくもあるのですが・・・

 

どういうことなのか、次回に詳しく書いてみます。

@tanpro-lab