僕が伝えたいメッセージは
コンピュータは君たちのものだよ
こんなに可能性があるんだよ
ということ,逆にこれだけは伝えたくないというメッセージは,
コンピュータはこんなに便利ですよ
でした.
可能性の話をします.音楽で考えてみましょう.音がポーンと一つなったとき,「これが音楽の基本なんだ,ふーん」と思うでしょう.音が二つポンポンとなると,少し印象が変わってきます.悲しく聞こえたり,楽しく聞こえたり.音が三つ四つと増えると,もうメロディと言えそうなものが聞こえてもっと色々な感情が表現できます.音楽ってすごい可能性があるなあと思えるでしょう.逆は,最初からサザンの曲を聴かせても違う意味で音楽の素晴らしさは伝わるかもしれませんが,自分で作ろうとか音楽そのものの可能性とかは伝わらないと思います.
Scratchの画面を見ると,タブで整理されているとはいえ,何か色んなアイコンが大量に並んでいます.まあ,プログラム言語を知っている人なら,こららをさーっと見るだけで大体どれくらいのことが出来そうかわかりますけど.最初からこんなに数があれば,何のすごさを見せたいのか焦点がぼけてしまいませんか.組み合わせることですごいということを伝えるのに不向きだと思いました.
「もし端についたら、跳ね返る」なんて導入するのは,すごく気持ちがわかりますよ.これを入れると便利ですし,特に入門のときにこういうのがあるとすごく教えやすいです.でも,そういう入門用の機能はさりげなくやるべきであって,こんな機能として見せちゃったらダメでしょう.これって,僕がこれだけは伝えたくないメッセージである「コンピュータはこんなに便利ですよ」そのものなんですよね.
ブロックが導入されたのは良かったと思います.だったら,「端についたら跳ね返る」という一つ上のレイヤの機能はそのブロックで作るべきでしょうね.端の判定と180度回転でいいのかな.
Scratchで嫌なのは,オブジェクト指向が中途半端に入っているということでしょうか.スプライトがあって,このスクリプトは選択しているスプライトの中に書かれているものだというモデルですね.ものを制御する,という見せ方がもの凄く全面に出ていると思います.Logoの亀もそうでしたし,ロボットのプログラミングをしてライントレースというのもやられてますけど,全部ひっくるめて,僕は嫌いです.
嫌いである最大の理由は,それがコンピュータらしくないからです.
らしくないのに,それを押し出すものだから,素人さんは「それがコンピュータだ」と思っちゃうじゃないですか.だから嫌なのです.何かを制御するというのは,コンピュータのごく一部です.
僕が考える,コンピュータのすごさは,自分でプログラム言語を作れる,ということです.Viscuitが動くためには,5段階くらいのプログラム言語の階層があります.二つの言語をまたいでいるところにコンパイラがあったり,FlashPlayerがあったり.こういう言語の階層のことをぼんやりでも頭に浮かんで欲しいのですよね.複雑なものには大抵こういう階層構造があります.ビスケットでもプログラミング言語もどきのプログラムを作ることができるんです.突き詰めて言えば,データの並びで何か意味を表現する,ってことですから.
オブジェクト指向も子供にはどうかなと思います.
オブジェクト指向って,プログラミングの中でかなり大人しいというか,優等生というか,まあ,複雑なシステムをどうやって秩序を保つかということですよね.なんでわざわざあるかというと,そうしなければぐちゃぐちゃになるからです.
オブジェクト指向が無い状態で,ぐちゃぐちゃのことを体験しなければ,オブジェクト指向のありがたさはわかりません.子供が何かを学ぶには整理され過ぎているんですよ.しかもそれが必要になるほど複雑なことをさせるわけでもなく.
コスチュームというのも,あれは何なんでしょうね.オブジェクトの一状態ということでしょうけど.スプライトがまずあって,その下に何枚かコスチュームがある.これは難しいと思いますよ.もちろん丁寧に順序立てて教えれば,小さい子でもマスターすると思います.でも,そんなことやってもコンピュータの可能性とか自分のもの感とか生まれるんでしょうか.それなりには獲得するでしょうけど,なんかすごく矮小化されたものになるように思うのですね.
変数とか制御構造とか,非常に古いプログラミング言語の構成要素ですけれど,そういったものが表に出ているのも嫌いです.そういうことを自由自在に使いこなせる人になって欲しいためにやっているんでしょうかね.
ビスケットだとそれなりに苦労しますけど,変数とか繰り返しのようなものはビスケットの構成要素の中で工夫できたりします.先日やったゲームを作るワークショップでも,小学校高学年の子が,弾が二発当たらないとやっつけられないお化けというのを自分で考えて(何もこちらで教えずに)作りました.どうやって作ったかわかりますか?お化けの絵を2種類用意しただけです.一発目が当たるとお化けは口を大きく開けます.口を開けたお化けは弾に当たるとやられます.絵を二枚重ねて,状態を表現している子もいます.これはかなり高度です.
こんな感じで,オブジェクト指向だったら得意なはずの,状態遷移を持つプログラムは,ほんとに普通に作られています.
機能が沢山あると,教えるのも大変だと思います.「もし..なら..」って,プログラムをやった人ならわかるでしょうけど,普通の人はこれだけ見てなんだかわからないでしょう.これを教えるのって大変だと思いますよ.大変なのが数が多い.使わないときは隠せるならいいんですが見せちゃうと,子供にこれは何,これは何って全部聞かれてしまうんじゃないでしょうか.
Viscuitのデザインで重視したことで,子供同士での教え合いを促す,というのがあります.言うのは簡単ですが,なかなか難しいです.子供が自分たちの言葉で理解できていないと教えられません.Scratchは中で起こっていることが複雑すぎて無理だと思います.ちなみに,ある小学校では小2の子が新一年生にViscuitの使い方を教える,という光景が普通に見られます.もちろん彼らが理解できる範囲の機能しか見せていないすごくシンプルな画面にしてますが.
新しいScratchになって,クローンというものが導入されたんですね.これはひどい仕様です.Scratchには継承が無いという中途半端さなので,複製されたものにはスクリプトはありません.猫が複製されても,親猫と同じ動きをしません.で,それを解決するために,「クローンされたとき」というのがあって,これは日本語訳が苦しいですね.英語だと「when I start as a clone」で,やった意味が分かったのですが重要なのはwhenじゃなくてIですね.
オブジェクト指向だから,メッセージを受ける人をどうやって指示するか,というのが構文上必要なわけです.ですが,Scratchにはそれが無くて,GUI的に現在選択しているスプライトに対して,という解釈をしているのですが.複製すると,親と子で分かれるので,子に対してどういう動作をさせるか別に指示しなければならない.それで,苦し紛れに「クローンされたとき(when I start as a clone)」が入ったわけですね.旗が押されたらというのが親にだけ動きます.スプライトにローカルな変数は作れるみたいですが,それは複製されないんですね.こういう仕様で複製をきちんと設計するのは難しいとは思いますが.僕だったら,複製したらそれらにもちゃんと名前がついて,スプライト一覧にも表示されるようにするかなぁ.で,子のスクリプトは親のコピーが薄く表示されてて編集はできないようになっているとか.
オブジェクトの複製は,Scratchはまだましな方で,プログラミンや前田ブロックはもっとひどい仕様です.これらは簡易言語ですね.プログラミング言語の土俵にはまだ載せられないです.
少しは言語のことになってきたかな.僕の誤解があればコメントで教えてください.
コンピュータは君たちのものだよ
こんなに可能性があるんだよ
ということ,逆にこれだけは伝えたくないというメッセージは,
コンピュータはこんなに便利ですよ
でした.
可能性の話をします.音楽で考えてみましょう.音がポーンと一つなったとき,「これが音楽の基本なんだ,ふーん」と思うでしょう.音が二つポンポンとなると,少し印象が変わってきます.悲しく聞こえたり,楽しく聞こえたり.音が三つ四つと増えると,もうメロディと言えそうなものが聞こえてもっと色々な感情が表現できます.音楽ってすごい可能性があるなあと思えるでしょう.逆は,最初からサザンの曲を聴かせても違う意味で音楽の素晴らしさは伝わるかもしれませんが,自分で作ろうとか音楽そのものの可能性とかは伝わらないと思います.
Scratchの画面を見ると,タブで整理されているとはいえ,何か色んなアイコンが大量に並んでいます.まあ,プログラム言語を知っている人なら,こららをさーっと見るだけで大体どれくらいのことが出来そうかわかりますけど.最初からこんなに数があれば,何のすごさを見せたいのか焦点がぼけてしまいませんか.組み合わせることですごいということを伝えるのに不向きだと思いました.
「もし端についたら、跳ね返る」なんて導入するのは,すごく気持ちがわかりますよ.これを入れると便利ですし,特に入門のときにこういうのがあるとすごく教えやすいです.でも,そういう入門用の機能はさりげなくやるべきであって,こんな機能として見せちゃったらダメでしょう.これって,僕がこれだけは伝えたくないメッセージである「コンピュータはこんなに便利ですよ」そのものなんですよね.
ブロックが導入されたのは良かったと思います.だったら,「端についたら跳ね返る」という一つ上のレイヤの機能はそのブロックで作るべきでしょうね.端の判定と180度回転でいいのかな.
Scratchで嫌なのは,オブジェクト指向が中途半端に入っているということでしょうか.スプライトがあって,このスクリプトは選択しているスプライトの中に書かれているものだというモデルですね.ものを制御する,という見せ方がもの凄く全面に出ていると思います.Logoの亀もそうでしたし,ロボットのプログラミングをしてライントレースというのもやられてますけど,全部ひっくるめて,僕は嫌いです.
嫌いである最大の理由は,それがコンピュータらしくないからです.
らしくないのに,それを押し出すものだから,素人さんは「それがコンピュータだ」と思っちゃうじゃないですか.だから嫌なのです.何かを制御するというのは,コンピュータのごく一部です.
僕が考える,コンピュータのすごさは,自分でプログラム言語を作れる,ということです.Viscuitが動くためには,5段階くらいのプログラム言語の階層があります.二つの言語をまたいでいるところにコンパイラがあったり,FlashPlayerがあったり.こういう言語の階層のことをぼんやりでも頭に浮かんで欲しいのですよね.複雑なものには大抵こういう階層構造があります.ビスケットでもプログラミング言語もどきのプログラムを作ることができるんです.突き詰めて言えば,データの並びで何か意味を表現する,ってことですから.
オブジェクト指向も子供にはどうかなと思います.
オブジェクト指向って,プログラミングの中でかなり大人しいというか,優等生というか,まあ,複雑なシステムをどうやって秩序を保つかということですよね.なんでわざわざあるかというと,そうしなければぐちゃぐちゃになるからです.
オブジェクト指向が無い状態で,ぐちゃぐちゃのことを体験しなければ,オブジェクト指向のありがたさはわかりません.子供が何かを学ぶには整理され過ぎているんですよ.しかもそれが必要になるほど複雑なことをさせるわけでもなく.
コスチュームというのも,あれは何なんでしょうね.オブジェクトの一状態ということでしょうけど.スプライトがまずあって,その下に何枚かコスチュームがある.これは難しいと思いますよ.もちろん丁寧に順序立てて教えれば,小さい子でもマスターすると思います.でも,そんなことやってもコンピュータの可能性とか自分のもの感とか生まれるんでしょうか.それなりには獲得するでしょうけど,なんかすごく矮小化されたものになるように思うのですね.
変数とか制御構造とか,非常に古いプログラミング言語の構成要素ですけれど,そういったものが表に出ているのも嫌いです.そういうことを自由自在に使いこなせる人になって欲しいためにやっているんでしょうかね.
ビスケットだとそれなりに苦労しますけど,変数とか繰り返しのようなものはビスケットの構成要素の中で工夫できたりします.先日やったゲームを作るワークショップでも,小学校高学年の子が,弾が二発当たらないとやっつけられないお化けというのを自分で考えて(何もこちらで教えずに)作りました.どうやって作ったかわかりますか?お化けの絵を2種類用意しただけです.一発目が当たるとお化けは口を大きく開けます.口を開けたお化けは弾に当たるとやられます.絵を二枚重ねて,状態を表現している子もいます.これはかなり高度です.
こんな感じで,オブジェクト指向だったら得意なはずの,状態遷移を持つプログラムは,ほんとに普通に作られています.
機能が沢山あると,教えるのも大変だと思います.「もし..なら..」って,プログラムをやった人ならわかるでしょうけど,普通の人はこれだけ見てなんだかわからないでしょう.これを教えるのって大変だと思いますよ.大変なのが数が多い.使わないときは隠せるならいいんですが見せちゃうと,子供にこれは何,これは何って全部聞かれてしまうんじゃないでしょうか.
Viscuitのデザインで重視したことで,子供同士での教え合いを促す,というのがあります.言うのは簡単ですが,なかなか難しいです.子供が自分たちの言葉で理解できていないと教えられません.Scratchは中で起こっていることが複雑すぎて無理だと思います.ちなみに,ある小学校では小2の子が新一年生にViscuitの使い方を教える,という光景が普通に見られます.もちろん彼らが理解できる範囲の機能しか見せていないすごくシンプルな画面にしてますが.
新しいScratchになって,クローンというものが導入されたんですね.これはひどい仕様です.Scratchには継承が無いという中途半端さなので,複製されたものにはスクリプトはありません.猫が複製されても,親猫と同じ動きをしません.で,それを解決するために,「クローンされたとき」というのがあって,これは日本語訳が苦しいですね.英語だと「when I start as a clone」で,やった意味が分かったのですが重要なのはwhenじゃなくてIですね.
オブジェクト指向だから,メッセージを受ける人をどうやって指示するか,というのが構文上必要なわけです.ですが,Scratchにはそれが無くて,GUI的に現在選択しているスプライトに対して,という解釈をしているのですが.複製すると,親と子で分かれるので,子に対してどういう動作をさせるか別に指示しなければならない.それで,苦し紛れに「クローンされたとき(when I start as a clone)」が入ったわけですね.旗が押されたらというのが親にだけ動きます.スプライトにローカルな変数は作れるみたいですが,それは複製されないんですね.こういう仕様で複製をきちんと設計するのは難しいとは思いますが.僕だったら,複製したらそれらにもちゃんと名前がついて,スプライト一覧にも表示されるようにするかなぁ.で,子のスクリプトは親のコピーが薄く表示されてて編集はできないようになっているとか.
オブジェクトの複製は,Scratchはまだましな方で,プログラミンや前田ブロックはもっとひどい仕様です.これらは簡易言語ですね.プログラミング言語の土俵にはまだ載せられないです.
少しは言語のことになってきたかな.僕の誤解があればコメントで教えてください.