プログラミングと教養
これからの子供達にはプログラミングが出来るようになって欲しい、とは常日頃思っているのですが、その一方、知識が偏りすぎないか、プログラミングが、その他の勉強と比べて上等な、優れているものと思ってしまわないか、も懸念しています。
私自身は、我が子がプログラマーになって欲しいとは思っていません。ただ、プログラミングできるスキルや、それを応用して何ができるのかを考える力をつけてもらいたいと考えています。応用させるためには、幅広い知識が必要です。
日本の義務教育では、幅広い知識よりも、国語・算数・理科・社会・英語ができれば、特に問題なく過ごせます。得点が良ければ羨望の眼差しです。
教科書通りのこれらの知識だけでは、プログラミングの応用力という点ではかなり不安があります。
しかし「幅広い知識」というのはどういったことを学べばよいか、広すぎてわかりません。
海外では、「幅広い知識」をどうやって身につけているのでしょうか。
リベラルアーツという言葉を聞いたことがあるでしょうか。
簡単にいうと、一人の人間が備えておくべき教養のことで、日本では馴染みがありませんが、一部の大学で導入されてきています。
音楽や弁論などもありますが、日本人の感覚では、それを「学ぶ」という感覚を持っている人は少ないと思われます。
現在のトップレベルのビジネスマンの中には、いわゆるお金を稼ぐ力はもちろん、博士課程も複数持っていたり、芸術に造詣が深い方も多いそうです。
プログラミングを学ぶ子供達は、いずれ世界に出て活躍して欲しいのですが、技術だけの会話では済まないビジネスの世界。
プレゼンテーションを気に入ってもらえるよう、アイデアや技術力を高めるのはもちろんのこと、パーティーや食事会、雑談の際に、自分を覚えてもらい、気に入ってもらうためには、教養が必要です。
ただ、日本いると、大学で「リベラルアーツ」を扱っているところに行ったとしてもグローバルな知識がつくかどうか疑問です。
ジャーナリストの山田順さんが分かり易くまとめていただいています。
日本で学ぶところがないのであれば、親が学んで家庭でやるしかないです。
以下の本が参考になります。有名な本なのでご存じの方も多いですね。
図書館にもあると思うので、もし買うのが難しい場合は図書館へGo!
ライフネット生命の出口さんの話も参考になりました。
親子で今後学習計画をされる際は、子供が自然に興味を持ち始めた分野は、子供自身に極力まかせるのが一番です。
ただ、そうはいっても任せるのは難しい。
以前の記事でも取り上げた、プログラミングコンテストで総合優勝をとった宮城君のママのお話が参考になります。
以下、サイト一部抜粋、太字はこちらでつけました。
プログラミングをしているのか、休憩をしているのか、傍目にはよくわからないことが多いですね。ちゃんとプログラミングが動いているときは進捗でわかりますが、バグで困っているときはさっぱり。遊んでいるときも、プログラミングをしているときも、パソコンに向かっているだけなので、プログラミングをサボっているのか判断しづらいです。勉強でも一緒なのだけれども、教えたことができないとお互いにフラストレーションがたまってしまいます。それで機嫌が悪くなって衝突してしまうこともあり、苦労しています
優勝するような子供を持つ親でさえ苦労するのであれば、一般的な私たちはさらに苦労するはず!
私も毎日試行錯誤しながら子供に最高の教育が何かを考えていますが、なかなか効果があるのかわかりません。
ただ、一つ言えることは、一生懸命考えたお題が、子供に楽しんでもらえた時、とてもうれしい!ということ。
まだ教えたいことが山ほどあるのですが、子供がわかるようなところまで落とし込むのに時間が掛かっています。
このブログで少しずつ考えをまとめ、その結果をお知らせできればと思います。
かけっこ教室とフォームチェックと機会学習
最近、子供のかけっこ教室に行きました。
感じのよい先生で、指示も分かりやすく、これから運動会にかけて、こどものフォーム改善をしていきたいと思います。
単に練習していくのも良いのですが、なにかプログラミングで効率化できないものか。
今後子供達は、機会学習や深層学習、AIを、ごく自然に、道具のように使うと思われ、それを教育する大人も、使いこなせるようになっておきたい。
そうだ!機会学習で我が子のフォームチェックをしてみよう!
フォームの改善度合いをチェックして、練習後フィードバックしてあげたいです。
使えそうなサービスを探してみました。
OpenPose
PoseNet
https://arxiv.org/pdf/1803.08225.pdf
OpenPoseが検知能力が高そうですが、色々インストールするものがあるようで、うちの貧弱で空き容量の少ないノートpcでは無理、ということでPoseNet を選択。javascriptでいけるというのも、開発時間があまり取れない身としては助かります。
やりたいことの道のりは遠そうなので、何段階かに分けてみます。
1. PoseNetを使った簡単なゲーム作成
2. 1で特定の姿勢(決めポーズとか?)で必殺技だす。
3. 録画した動画でも1のゲーム可能にする
4. 走る動画から、フォームを部分的に定義して実際に認識できるようにする(右足着地 左足着地 右足蹴り上げ 左足蹴り上げ 等)
5. 良いフォーム、悪いフォームの定義(どうやろう、、、)
6. 我が子のフォームと理想のフォームを差異を見せながら、フィードバックしてあげる
スポーツの動きを分析する研究を調べてたところ、気になる論文を見つけました。
B .目標 の み :学習者は HMD を通 して 提示 され る ゆ
っ く りと し た 目標動作 に あ わ せ て ス イ ン グす る .
C .リアル タイム フ ィ ードバ ッ ク : HMD に ゆ っ く り
と し た 目標動作 と学習者の 全 体像 を表 示 し, 学
習者は そ の 誤差情 報を見 な が らス イ ン グす る ,
→簡単にいうと、Bは見本を見ながら見よう見まねで練習する、よくある練習方法。これだと見本の動きとのかけ離れた動きになったそうです。Cは自分の動きと見本の動きの差を見せながらの練習で、これだと誤差が小さくなる、という研究結果が出たそうです。
また、機会学習といっても、ここまでだと単に画像解析です。
番外. フォームデータの収集と学習で理想のフォームを見つける
大量の子供達のかけっこデータなんて既存でないだろうから、いちから集め直しかな、、
これを6月の運動会までにやるのは厳しそう、、、。まずは我が子のかけっこ動画をとって、我が子にその動画を見せながら色々直してあげようかと思います。
小学生向けProject Euler計画 その1(結果)
以前の投稿
小学生向けProject Euler計画 その1 - 子供にプログラミングを教える方法
で、自然数の合計を求める問題を作成したので、早速我が子に出してみた。
結果は、、、まだまだ改善の余地ありでした。
まず問題文が分かりづらかった(後ほど修正)
出したときは、なんとか意味を伝えて分かってもらえた。
我が子のクラスには35人いるらしいです。
増えるイメージを具体的に示したく、
以下の式を書いてあげました。
1
1+2=
1+2+3=
1+2+3+4=
1+....+9+10=
...
これを見せた後、少し計算し始めました。
おお!いいながれ!
その後少し悩んだあと、答えがきました
「35分!」
(けっこう増えるのに時間かかると思ったのかな・・・)なんでそう思ったの?と聞くと
「35人いるから!」
やられた!
「で、でも、34分後には34個できるので、ほとんどみんなに渡せるし、もう少し前にそろうんじゃないかな、、」
でも、その後我が子はこの問題に飽きて、別なことをし始めてしまった。。。
残念ながら、これ以上の継続は出来なさそうなので終了としました。
条件として「最短時間で」とか、「そのとき何個になる?」とかを聞かなかった私が良くなかったのですが、我が子ながらさすが。。。
問題の出し方にもう少し工夫しないと、、、以下を考え中です。
第1 計算させてしまう
合計が35までぐらいなら、実際に計算出来る範囲だろう。
第2 ガウスの考え方で解く
1+2+3+4+5+6+7+8
8+7+6+5+4+3+2+1
それぞれ足して
9+9+9+9+9+9+9+9=72
72/2=36
でも、割り算が出来ないときついな。
第3 プログラムを改良する(数を1ずつふやす)
8を越えるまでネコがしゃべるプログラムを作成する。あえて以下のように繰り返しは使わないものを作りました。繰り返しが出来たら合格。変数の増やし方は敢えてプログラムっぽく、変数の値+1を変数にいれてみる。
https://scratch.mit.edu/projects/306947092/
第4 プログラムを改良する(加算)
第3のプログラムを元に、ネコが言った数を合計していく。合計用の変数を新たに使う必要があるので、分かりにくくなるな、、、これも、ループが出来たらいいかな。。。
https://scratch.mit.edu/projects/307099148/
紙面の計算でやりきろうとすると、積商や九九が途中の計算ででてくる。その点、プログラミングで愚直に足し算していくと、大きな数でも難なく答えが出るのは、子供にとっては便利に感じてくれるかもしれない。。。
小学生向けProject Euler計画 その1
わが子には、プログラミングを学んでもらいつつ、算数・数学の素養も付けてもらいたい。
勝手にやろうとしている小学生向けProject Euler計画ですが、サーバを用意するのも今は難しいので、とりあえず問題だけも考えてみようと思います。
1問目は、やはり自然数の和を持ってきたい
1+2=3
1+2+3=6
1+2+3+4=10
・・・・
1+2+3+・・・+99+100=?
普通の教え方では、まず計算させてみるだろう。5分ぐらい?
手で計算するのは大変であることを実感してもらう。
でも、このあたりは対面式での授業でないと厳しいかもしれない。
ネット上だと子供が飽きて試行錯誤せず答えを知りたがる。まあ大人でも一緒ですね。
我が子に先ほどの問題を出したことがあったのですが「難しい!」色々考えてみようか。いろんな解き方があるかも。「もう思いつかない!」まあそうだよね。
ただ、最近、クイズにハマっているようで、子供用のクイズはもちろん、大人も悩むようなクイズを(正解は無理だとしても)考え続けられることがわかった。
たとえば以下のクイズは、移動しながら、何回か中断しながら、色々回答してくれた。
謎解きの要素があった方が燃えるのは心情としてはわかるので、自然数の和に絡んだ謎、ミッションを作ってみよう。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
とんでもない機械を発明してしまった。
増やしたいものを登録すると、かかった分の数が生まれてくるものだ。※5/4 見直すと解りづらい文章だったので修正
例えば、ケーキを登録する(ケーキ1つを★にしてみよう。)
1分後 1つできる(★)
合計 1個
2分後 2つできる(★★)
合計 1+2=3個
3分後 3つできる(★★★)
合計 1+2+3=6個
、、、
どれか食べてしまうと、もう増えなくなる。1個目から食べないでおいて、何分後に、自分の学校のみんなに分けられるだけ増えるだろう。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
単純な数の和の問題を、身近なことに紐付ければ興味を持ってくれるかな、、。答えるのは「何分後」なので敷居も低くなった。
一般的な回答方法としては以下を教えたい 。
けど、「教えない」のも1案かもしれない。
① 法則を見つけて解く(ガウス)
小学校3年生位のガウスという少年の話をすると刺激になるかも。
1+2+3+・・・+98+99+100
100+99+98+・・・+3+2+1(逆から並べた足し算を用意する)
それぞれ順番に足すと
(1+100)+(2+99)+(3+98)+・・・+(98+3)+(99+2)+(100+1)
101+101+101+・・・+101+101+101(100個)
101×100=10100
最後に÷2をして 10100/2=5050
②平均で解く
1+2+3+4+5+6
→(1+6)/2=3.5 3.5*6=21
1+2+3+,,,+98+99+100
(1+100)/2=50.5
50.5*100=5050
平均の考え方が分からないと難しいか。
図も欲しいな、、
③法則を見つけて解く(数式)
n(n +1)/2
シグマ知っている高校生くらいからかな。
④表計算ソフトを使って解く
Microsoftのエクセルやgoogleのスプレットシートで数字を1ずつ増やしたものを全て選択してしまえば、合計がでる。
⑤プログラミングのループを使って解く
scratchで書くとこんな感じか
https://scratch.mit.edu/projects/306578930/
プログラミングで解くことは簡単ではあるが、知的かどうかというと疑問に思えるかな。
今日本屋でみたら、以下の茂木健一郎さんの本でも、子供は「探求心」をもたせると、自分でおのずから進んで勉強に取り組むらしく、今回クイズ形式にしたのはよかったかもしれない。
あとは、小学生のみんなに、考えてもらう工夫だな。。。
最強のプログラミング勉強法、その後
以前、恐らく最強のと思われるプログラミング教育法をご紹介しました。
kodomoprogramming.hatenablog.com
その結果がでたのでご報告致します。
結果は、、
惨敗でした。。。
我が子にとっては難しすぎて、改良している間に元に戻せなくなり、改良できず、飽きてしまったのです。
横スクロール型のゲームっぽく、背景や敵キャラが右から左へ繰り返し出てくるような動きを作り、当たり判定や敵の動きのバリエーションを増やして貰おうとしました。
このあたりは、うちにあるドラえもんパットの、のび太がタケコプターで移動しながら敵キャラを避けるゲームを参考にしました。
今回使った環境は、「プログラミングゼミ」
最初は改良しようと色々いじってたのですが途中で別なことをし出したので、どうしたのか聞いてみると、「わからなくなった」と。
ベースの動きは作ってあげてたのですが、いじらなくても良いところをいじったりもしていました。
正しい修正方法を教えてあげようとするも、すでに興味がなくなった我が子はプログラミングゼミに入っている別なゲームをやりだすので、これ以上無理強いするのはよくないと判断し終了としました。
今回の問題点は、改良しようとするプログラムの難易度が我が子と合っていないことと思われました。もう少し易しいものを考えたいと思います。
小学生向けProject Euler計画発動
最近更新出来ていませんでした。
理由は情報処理試験を受けていたため。結果は、、、次回頑張ります。
倒れでもただでは起きたくないので、試験勉強中に見つけたサイトがあり、子供の教育に活かせそう!と思ったので進めていきたいと思います。
見つけたのは、Project Eulerというサイト。
世紀の大数学者、オイラーの名を付けた、プログラミングによって課題を回答していくサイトです。
レベルは大人でも難しく、全問解ける人は世界でも数人いるかどうか、のレベル。
これの小学生向けサイトがあったらいいなと思ったのですが、なかなか見つからず、であれば自分で作ってしまいたい。
子供には、ゲーム感覚で課題をこなしてもらい、じつは算数、数学の知識もつく、そんなサイトをめざしたい。
出したい問題は以下を参考に作ろうかと思ってます。
1+2+3+…+n=n(n+1)/2
素数を見つける
数遊びその1(https://oeis.org/A112088/a112088.html)
ヨセフスの問題
完全数を求める
友愛数を求める
100の約数(の数)
、、、
問題の出し方に工夫が入りそう。