プログラミング学習とScratch raspi python

30
プログラミング学習と Scratch, Raspberry Pi, Python @みんなのPython勉強会#15 2016/8/10 プログラミングサークルOtOMO 塩野 禎隆

Transcript of プログラミング学習とScratch raspi python

Page 1: プログラミング学習とScratch raspi python

プログラミング学習とScratch, Raspberry Pi, Python

@みんなのPython勉強会#15

2016/8/10

プログラミングサークルOtOMO 塩野 禎隆

Page 2: プログラミング学習とScratch raspi python

本日お話しすること

昨今、日本国内においても小学校でのプログラミング教育の必修化が検討され、ネット上でも多くの議論を見かけるようになりました。

今回は、

・Scratch

・Raspberry Pi

・Raspi上でのPython、Scratch、Mincraft Pi、GPIO

に関しての話題を元に、Pythonとプログラミング学習の可能性を皆様と考えたく思います。

Page 3: プログラミング学習とScratch raspi python

自己紹介

• 塩野 禎隆(しおの よしたか)

• もともとは、建築計画学という分野の研究者

• Python歴は4年ほど。(プログラマではなくSI)

• 子ども向けプログラミングは、5年前ほど。

• OtOMOというサークルに父兄として参加し、そのうちに毎月数回、小学生を対象にScratchや簡単な電子工作などを教えるようになる。

• 活動の中心である阿部和広先生の下で、子ども向けのRaspberry Piの書籍、Studuinoの書籍をお手伝い。

Page 4: プログラミング学習とScratch raspi python

ちなみに、こちらはブロック玩具とArduino互換機であるStduinoというデバイスを利用して、自動ドアなどを作りながら「計測」と「制御」を学んでいくセットです。

今日は主に「Raspberry Piで始めるどきどきプログラミング」という本に書かれていることが主になります。

Page 5: プログラミング学習とScratch raspi python

プログラミング言語Scratch(スクラッチ)

Scratchの画面(バージョン2)

Page 6: プログラミング学習とScratch raspi python

2016年8月に発表HTML5で動きます。

Scratchとは

• キーボードを極力利用しない、ビジュアルプログラミング言語のひとつです。(http://scratch.mit.edu/)

• 2006年に最初のバージョンがMITメディアラボのミッチェル・レズニックさん率いる「ライフロング・キンダーガーテン・グループ」によって開発されました。

• グループ名が表すように、子どもだけでなく、「子どもから老人まで」を対象とした初学者向けのプログラミング環境です。

Version1.4 Version2.0 Version3.0

FlashベースのWebアプリSqueak VM上のアプリ(Win、Mac、Linux,Raspi、iPad….

Page 7: プログラミング学習とScratch raspi python

Scratchとは - プログラミング言語以外の特徴

Scratchは、ブロック言語として有名になってしまいましたが、

• SNS機能:作品を世界中に公開、共有できます。ユーザーが他者の作品を評価したり「Studio」というキュレーション機能があったりします。

• 版管理機能:Scratchは他者の作品を改造し、公開することを推奨しているため、(Remix機能)、非常に多くの派生作品が生まれます。

といった、言語だけでなく、SNS+コード共有といった、近代的なプログラミング環境に近い環境も特徴です。

リミックスツリー(作品の改良を樹形図として表示)

質問、雑談BBS

Page 8: プログラミング学習とScratch raspi python

Scratchとは

….大人の世界同様、 SNS機能があるがゆえに作品のコメント欄も掲示欄も荒れます。

…しかも他国語で煽られることもあります。

…でも、時間を置くと、ユーザーが自ら自浄していくケースもあります。コメント欄に書かれた英語や、返答の日本語の文を、Google先生で翻訳する子もいます。また、複数のユーザーによる作品の改良(Remix)によってより良い作品が生まれたり、コメントを素直に受け止めて、次作につなげる子もいます。

…これも大人の世界同様です。

Page 9: プログラミング学習とScratch raspi python

Raspberry Pi

Raspberry Pi Model B

Page 10: プログラミング学習とScratch raspi python

Raspberry Piとは

• エベン・アプトンさんが創設したRaspberry Pi財団が開発しているワンボードマイコンです。

• エベンさんが英国のケンブリッジ大学で教えていた時、学生がソフトウエア(おそらく上層の)の知識に偏りすぎていたため、もう少し下層やハードよりに興味を持ってもらいたい、というのが、開発のきっかけとのことです。

Page 11: プログラミング学習とScratch raspi python

Raspberry Piとは

• 25ドルにすれば、多くの学生、子どもが自由に触れることができるコンピュータになる、というコンセプトから、多くのサプライヤーが支援する形で製造しています。(知人の組み込み屋によると、普通に作れば100ドルは下らないそうです)

• 日本において、PC8001などの8bit機が流行っていたころ、英国にはMicroBBCというPCが普及していたそうです。また、欧州が米国にコンピュータ産業で負けている昨今、ARM自体が英国の企業であることが、Raspberry Piが生まれた背景にあるのかな、と思います。

Page 12: プログラミング学習とScratch raspi python

Raspberry Piとは – 個人的に考える特徴

個人的に、コンピュータ教育における、Raspberry Piの特徴は、安いことよりも、

• OSをはじめとするソフトウエアリソースが潤沢

• GPIO(汎用入出力端子)がある ->Lチカが出来る

• SoCにGPUが内蔵されている ->Minecraft Piが動く

の3点であると思います。

現在は、ハードウエアとしては、より高性能なワンボードマイコンも登場しておりますが、この3点の強みを合わせたものは、現時点でも存在していないと思います。

Page 13: プログラミング学習とScratch raspi python

Raspberry Piとは

現在、Rapberry Piで主に利用されるOSであるRaspbian(2016/5版)には、デフォルトで

• Pythonおよびゲーム向けライブラリ• Scratch(バージョン1.4)• MathematicaおよびWolfram Engine(数式処理)• Minecraft Pi(クリエイティブモードのみ、API公開)• Sonic Pi(Ruby由来の音声、音楽、音響プログラミング

環境)• Node-Red(Node.jsをベースとした、Webブラウザ上で

ビジュアルコーディングできる環境)• その他Java開発環境などなど

….といった環境がごっそりプリインストールされます。

Page 14: プログラミング学習とScratch raspi python

Raspberry Piとは

…子どもたちにRaspberry Pi渡して放置したら、基本Minecraftしかしません…

…子どもたちはMinecraft大好きです。

…ただ、ネットワークで複数のMinecraft Piで連携させて、バーチャル鬼ごっこする、といったことも起こるので、それはそれでよいのかな、と思ったりもします。

Page 15: プログラミング学習とScratch raspi python

Scratch <-> Pythonon Raspberry Pi

Scratch2MCPI Minecraft Graphics Turtle

Page 16: プログラミング学習とScratch raspi python

Scratch <-> Python on Raspberry Pi

出典は見つけ出せませんでしたが

「Raspberry PiのPiは、PythonのPy」

と、当初、生みの親のエベンさんが言っていたそうです。

実際に、海外ではよく利用されていて、初期のRaspbianでは、Raspberry Piの特徴ともいえる、GPIOやMincraft PiのAPIを操作するためのライブラリ、サンプルコードが、主にPythonで提供されておりました。

GPIOライブラリ名 :RPi.GPIO

Mincraft Pi APIライブラリ名 :minecraft

Page 17: プログラミング学習とScratch raspi python

Scratch <-> Python on Raspberry Pi

• RaspbianにインストールされているScratch1.4は「遠隔センサー」という、ソケット通信で他のプログラムやホストとデータを送受信する機能があります。

• Pythonには、「py-scratch(ライブラリ名scratch)」という、Scratchと遠隔センサーで通信するためのライブラリが早期から公開されていました。(こちらはRaspberry Pi以外の環境でも使えます)

• その流れで、RaspbianにおけるScratchのGPIO、Minecraft機能拡張は、Pythonが利用されています。

Scratch(遠隔センサーOn)

Python

Minecraft Pi

GPIOScratchGPIO7(or4)

scratch2mcpi

py‐scratch

py‐scratch

Rpi‐GPIO

Minecraft API

Page 18: プログラミング学習とScratch raspi python

Scratch <-> Python on Raspberry Pi

…残念なことに、知る範囲では、Raspberry PiでScratchを楽しんだ小学生が、その後Python環境を利用するようになるのは、なかなか難しい様子です。

高校生以上になると、自力でWiiリモコンをRaspi上のScratchで利用できる環境をPythonで作る子もいたりしますが、やはり少数です。

ScratchでWiiリモコンを使う

Page 19: プログラミング学習とScratch raspi python

プログラミング「を」学ぶプログラミング「で」学ぶ

Page 20: プログラミング学習とScratch raspi python

プログラミングを学ぶ プログラミングで学ぶ

子ども向けのRaspberry Piのワークショップで、一度親御さんの依頼で、小学生にPythonを教えたことがあります。

テキストエディタの使い方までは、親御さんが教えていたこと、また、アルファベットが読めるとのことだったので、Minecraft PiをPythonから動かすプログラムの作り方を教えました。

しかし、教えた以上のことはできませんでした。

….この状況は、大人にプログラミングを教える際にも、よくあることかと思います。

Page 21: プログラミング学習とScratch raspi python

プログラミングを学ぶ プログラミングで学ぶ

• キーボードの壁

• アルファベットの壁

(言葉、文字の壁ともいえます)

• 親、大人の壁

(いわゆる先入観。インタネット危険

この子ならで出来る/出来ない)

子ども向けプログラミング学習における「3つの壁」(経験則的なもの)

キーボードに慣れていて、英語もアルファベットも抵抗がなく、インタネットもきちんと使える子でも、意外と大人の壁が厚く、うまくプログラミングを学ぶと

ころまでいけない子はたまに見かけます。

Page 22: プログラミング学習とScratch raspi python

プログラミングを学ぶ プログラミングで学ぶ

段階 年齢 特徴

1 感覚運動段階 0~2 感覚と運動が表象を介さずに直接結び付いている時期

2 前操作段階 2~7 他者の視点に立って理解することができず、自己中心性の特徴を持つ。

3 具体的操作段階 7~12 数や量の保存概念が成立し、可逆的操作も行える。

4 形式的操作段階 12歳以降形式的、抽象的操作が可能になり仮説演繹的思考ができるようになる。

子どもによっては、より若い年齢で次の段階に行くこともあるが、段階はかならず1‐>2‐>3‐>4となっていく。感覚的に、反抗期になる小3が一つのラインと考える。また、未就学児でも利用しやすい環境が良い効果を生んでいるケースもある。

ジャン・ピアジェによる「思考発達段階説」(wikiより)

Page 23: プログラミング学習とScratch raspi python

プログラミングを学ぶ プログラミングで学ぶ

「デバッグこそ重要な思考法」(シーモア・パパートさん)

何かがうまくいかないときに、自分の操作を一歩引いた別の視点で眺める経験というのは、他の教育、学習法だけでなく、日常かでもではなかなか体験しにくいです。デバッグを一度でも体験することは、継続的に自らの手でものを作り、学ぶことにつながる、と考えています。

「概念を、頭の中に入りやすい(理解しやすい)大きさにかみ砕いてあげる」

良い概念、理念であっても、一気に理解することは難しいため、はじめは、子どもたちの理解の速度に合わせて表現や情報量、タイミングを考えながら伝えます。

「子どもたちが知的に活動しているのは、彼らにとって個人的に意味のあるものを組み立てているときだけだ」(ミッチェル・レズニックさん)

意味や興味の持ち方のバリエーションを伝えるのは大事です。状況によっては、作っているものの別の価値を見出してあげることもありますし、逆説的に、ただ仲間内でMinecraftで騒ぎたい子たちを、別のものに興味を持たせて解散させたりします。

子どもたちにプログラミングを教えるときに気をつけていること

Page 24: プログラミング学習とScratch raspi python

プログラミングを学ぶ プログラミングで学ぶ

プログラミングに適性を持つ方々ではない人々に、プログラミングを学んでもらう、もしくはプログラミングで学んでもらうためにも、

1. 上手くいかないときに、どうすればよいかを考えて自分で解決させる

2. 概念や理念を正しく、しかし理解しやすく伝える

3. 何より興味を持ってもらう、個人的な意味を感じてもらう

の3点は、子ども同様に重要であると思います。

Pythonの場合、2.に関しては、良書が多いのですが、1.に関してはチュートリアル的に説明を行うことが多い書籍では伝わりにくい部分があります。3.の興味においては、Pythonの適応分野の広さが強みになる、と考えます。

大人や学生さんにプログラミングを教える場合に転用すると

Page 25: プログラミング学習とScratch raspi python

プログラミングを学ぶ プログラミングで学ぶ

…ですが、今まで、Pythonをやってみたい、という子ども、もしくや大人に出会ったことがありません。

…プログラミングに興味がある人の多くは、ゲーム、Webアプリ、スマホアプリなどの適応分野から入ってきます。そのため、Javascript、Java、Swift、C#(というかUnity)、国内特有とは思いますがRubyが人気かな、と思います。

…潤沢なライブラリ、適応範囲の広さが、逆に特徴をなくしているのかな、と思っています。

Page 26: プログラミング学習とScratch raspi python

プログラミングを学ぶ プログラミングで学ぶ

Sugar OS

Autodesk社さんの建築CADであるRevit、VasariはPythonShellや、DynamoPythonScriptでプログラムから建築の3Dデータを生成することができます。

柱、梁、天井といった、なじみのある要素をプログラミングから操作できるため、コンピュータにも建築にも興味のある人に受けが良いです。

建築CAD+PythonもしくはDynamo

OLPCプロジェクト(One Lap Per Child)で開発されたノートPCの、GUI部分が独立してSuger OSとして公開されており、Raspi3で動きます。Python、PyGTK、 GTK+で構築されてます。

OLPCは、筐体の良さだけでなく、GUIもよくできているため、展示をしている使ってみたくなる人が多い様です。

興味を持ってもらえるかな、と最近検証しているもの

Page 27: プログラミング学習とScratch raspi python

まとめに変えて

Pythonの適応分野で、子どもたちが食いつきそうなことを、教えていただければ幸いです。

よろしくお願いいたします。

Page 28: プログラミング学習とScratch raspi python

参考文献等

「Dynabook」の背景にあった、知られざる物語

http://www.atmarkit.co.jp/ait/articles/1306/06/news111.html

2013年5月19日に行われた、Scratch Dayにおける阿部先生の基調講演の記事です。LOGOのシーモアパパートさん、SmalltalkやDynabookのアランケイさんが、プログラミングと教育を考えていたか、その流れがSqueak EtoyやScratchにどうつながっているかがよくまとまっております。

マインドストーム — 子供、コンピューター、そして強力なアイデア

LOGOを開発したシーモアパパートさんの著書です。子どもたちがコンピュータやプログラミングを通して学ぶことに関して、「構成主義」という言葉をもとに、多くの事例、提案があります。

作ることで学ぶ ―Makerを育てる新しい教育のメソッド

シーモアパパートさんの構成主義を、現在のパーソナルファブリケーションが発達した世界に適応、発展させるべく作成された書籍です。学習環境の形成の仕方など、多免停な視点から、あたらしい学びを考えています。

Page 29: プログラミング学習とScratch raspi python

参考文献等

小学生からはじめるわくわくプログラミング

阿部和広先生の書籍です。巻末に、Personal Comupterの定義をしたと言われているアランケイさんのDynabookに関する当時と今のエッセイが収録されています。

Page 30: プログラミング学習とScratch raspi python

最後に

世界初の子ども向けプログラミング言語LOGOを開発し、子どもたちがコンピュータで学ぶことの可能性を示した、シーモアパパートさんが

2016/7/31にお亡くなりになりました。

この場を借りて、ご冥福をお祈りします。

> python

>>> import turtle

>>> t = turtle.Turtle()

>>> for i in range(0,4):

>>>    t.forward(50)

>>>    t.right(90)