ビスケットのあれこれ

ビジュアル言語ビスケット(Viscuit)に関するあれこれを書いてゆきます.

Scratchのここが嫌いだ(2)

2013-10-24 12:33:10 | 1
僕が伝えたいメッセージは
 コンピュータは君たちのものだよ
 こんなに可能性があるんだよ
ということ,逆にこれだけは伝えたくないというメッセージは,
 コンピュータはこんなに便利ですよ
でした.

可能性の話をします.音楽で考えてみましょう.音がポーンと一つなったとき,「これが音楽の基本なんだ,ふーん」と思うでしょう.音が二つポンポンとなると,少し印象が変わってきます.悲しく聞こえたり,楽しく聞こえたり.音が三つ四つと増えると,もうメロディと言えそうなものが聞こえてもっと色々な感情が表現できます.音楽ってすごい可能性があるなあと思えるでしょう.逆は,最初からサザンの曲を聴かせても違う意味で音楽の素晴らしさは伝わるかもしれませんが,自分で作ろうとか音楽そのものの可能性とかは伝わらないと思います.

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のここが嫌いだ(1)

2013-10-24 11:46:02 | 1
今までは,一般人に対するプログラミング教育の重要性を共に説いて行く仲ということで,表立ってScratchの批判はして来なかったのですが,安倍首相までがプログラミング教育を言い出したので,そろそろ良いかと思って,ちょっと書いておきます.(1)となっているのは,この先何回続くかわからないから.

コンピュータ科学を専攻している人は,この先を読む前に自分でScratchとViscuitを比較してみるのもよいかと思います.良い勉強になるはずです.

まず,こういうツールには(特に子供向けと言っているツール)伝えたいメッセージというのが必須です.

僕はViscuitを作ったときに子供たちに伝えたかったメッセージは
 コンピュータは君たちのものだよ
 こんなに可能性があるんだよ
ということでした.この二つをかけ算すると,この可能性を切り開くのは君たちなんだよ,ということです.

それと,逆にこれだけは伝えたくないというメッセージもあります.それは,
 コンピュータはこんなに便利ですよ
です.なぜこれを伝えたくないかというと,便利なのは誰か大人が作ったコンピュータだからです.「君たちの」とは真逆.それと便利さは教育的にはまずいことも多いです.例えば電子辞書は急いで意味を調べたいときには便利ですけれど,世の中の知の世界の広大さは全く伝わりませんよね.本棚に重くて分厚い全12巻の百科事典があって,そこに書かれていることの多様さに圧倒されたこと.そういう経験をして,10回か100回はその百科事典で調べたいものを調べて,その後じゃないと電子辞書は使ってはいけないと思います.今の大人が考えた「しょぼい便利さ」なんかで発想を狭めてしまわずに,君たちはコンピュータの本質からスタートして,もっとすごい便利なものを発明してもらいたいのです.

こういうことは,まあ文系的なというか素人向けに言ってるんですが,そういうかけ声だけじゃプログラム言語は作れませんよね.ちゃんとコンピュータの専門家向けに分解すると「どういう性質をどのようにして伝えるか」が大事になります.

まず「誰が作っても同じプログラムになるのはいや」でした.同じになっちゃうと,コンピュータは自分のもの感,自分で作った感が大きく損なわれます.

Scratchは最初に猫が出てきますが,まずそこが嫌いです.最初に絵を置きたい気持ちはよくわかるんですが.Viscuitを教えてて,特に高学年の男子に多いのですが,絵を描くのを極端に嫌う子がいます.他人に自分の絵を見られるのが怖いというか.この現象はそのまま大人の男性にまで及ぶのですが.こういう人を育ててしまっているのは美術教育の最大の課題だと思いますが.そういう人のために最初に絵を用意しておくと教えやすいというのは確かにあると思います.それから単に一斉に教えるときの技術的な問題として,時間が短くてロジックを重視して教えたいときには,最初に絵を用意された環境からスタートすることがあります.絵を描く時間は人それぞれまちまちなので,それを最初の方に持ってくると,描くのが遅い人を待たないといけないということです.それで,絵を用意することはあります.だけど,それは特殊なケースであって,基本は絵がないものからスタートします.

動いている絵がそもそも違うので,誰がやっても同じプログラムにはなり様がありません.

動き方の指定もそうです.Viscuitではメガネにいれた部品のずらし方で動きが決まります.その指定がアナログ的なので同じ動きにする方が難しいです.Scratchだと10ステップ前へ動くというやつですが,まず数値で表現しているのもあれですし,初期値として10が入っているというのもあれです.

Viscuitでは初期値に関してはかなり気を配っています.絵を描く画面で実は最初に選択される色はランダムです.もう少し正確に言うと,明度と彩度は0.5から1の間のランダム,色相は360度のランダムです.これらの幅はViscuitの初期設定で変えられることができて,どんな初期値でやればどのように全体の作品が変わるか,ということも実験できるようになっています.ただ24bitの色をランダムに割り振ってだと,こんなに奇麗にはなりません.

なぜそうしたかというと,絵に深い関心のある人は,初期値の色なんて関係なく自分の選びたい色を選ぶのですが,絵にあまり関心の無い人は,最初に選ばれた色を何も考えずに使います.そんな人たちばかりが集まって作品を作ったとき,全体として色のバランスがとれるようになっています.

線の太さは,わざと太めの初期値にしています.幼児がクレヨンで描くくらいの太さです.この太さだと,誰が描いても上手く描けないので,絵の下手さがバレないというのもあります.僕らは普段は線の太さを変える方法をわざと教えていません.太さが嫌な人は,一番最初に線の太さを変える機能を探すことになるのですが,自分で見つけ出す,というのは結構重要で.子供は自由に勝手にやりますけれど,少し大きくなると,言われたことしかやらなくなりますから.必要な機能は自分で探せ,というのはコンピュータに対するもっとも基本的な姿勢ですよね.

自分で作った感を大切にしつつ,出来上がった作品はなんか上手く行った.これが裏で支える技術の重要さってものです.

Scratchはあまりその辺はこだわっていないですよね.だけどできた作品は,もちろん手をかければオリジナルっぽくなりますけど,さらっと作るとみな同じになっちゃいませんか?

プログラミング言語の話なのに,どうしてこんなに絵のことばかりかというと,例えば文字の言語だったらキャメルケース(BlueFishみたいな書き方)かスネークケース(blue_fishみたいな書き方)とか,インデントの段数とか,そういうこだわりに相当すると思ってください.

Scratchの悪口というよりViscuitの宣伝になってしまいそうですが,(2)に続く.