デジタルな手書きのメモ帳

プログラミング、コンピュータを使ったものづくり、教育、子どもの発達に関する個人的なメモ帳

Scratch世代の子どものための"Hello,world!"に代わる一行を考える

この記事は『LITALICO Engineers Advent Calendar 2017 - Qiita』20日目の記事です。

Qiitaアカウントは@saorinrinrinなんですが、諸般の事情によりこちらのブログで投稿いたします。

 

 

エンジニアのみなさんは、「この世界のことを理解した最初の一行のコード」を覚えているだろうか。

 

 

1ヶ月ほど前、知り合いの、とある中学生がついにUnityに目覚めた。

 

とは言っても、Unity自体は最初に出会ってから半年以上経っているので、正確には、C#に目覚めた。

もりもりコードを書き始めたのだ。

 

プログラミング言語を書き始める中高生はもう別に珍しくないのだけど個人的に興味深かったのは、その中学生が、

 

・小学生の頃から3〜4年間に渡ってScratchを使っており、つくりたいアプリはほぼ何でもScratchでつくれるんじゃないかというほどのScratchマスターであったこと

 

・これまでにも何度かScratch以外の言語をおすすめしたにもかかわらず、使いこなす前に学習をストップし、結局使い慣れたScratchばかり使っていたこと

 

にある。

なぜ、急にUnity(というかC#)に目覚めたのか。

 

Scratchのプログラミング方法

ScratchMITメディアラボが開発したプログラミング環境で、画面上にキーボードで英字を打ち込んでいく方法じゃなくて、コードのかたまりがブロックみたいになっててそれを組み合わせることによってプログラミングしていく。   

 

・マウス操作でできる({}の閉じ忘れとかスペルミスによるエラーがない)

・日本語でプログラムを組める

 

ことから、小学生から使える教育用のプログラミング言語として有名である。

「ビジュアルプログラミング言語」と言われたりもするんだけど実際はテキスト(文字)読んで理解しないとプログラムを組めないのでここでは「ブロック型言語」としておく。

 

ブロック型言語からテキスト言語への移行って?

Scratchは見た目以上にいろんなことができて、ひとつの技術や知識を深めていくプロセスを学ぶことができると思っているんだけど、 まぁなんか「早く大人が使っているホンモノのプログラミング言語に移行したら?」みたいなことを言う大人もいる。

 

個人的には、その言語がその子の手足となって自由な表現を獲得できるものであるならScratchでもViscuitでもそれ以外でも(それが可能な言語なら)いいんじゃない?と考えている。ただ、やりたいことが出てきたときにそれが今の手段(言語)だとできないのであれば、別の手段(言語)に恐れずに移行できる力はあったらいいなぁと思っている。

 

「わかった!」と思える運命の一行 

そんなこんなでUnity(C#)に目覚めた中学生には「自分がつくった3Dゲームをスマートフォンアプリ化したい!」という「Scratchじゃ成し遂げられないこと」への学習動機は十分にあった前提で、聞いてみた。

   

「ねぇ、これまでもScratch以外のいろんな言語やったじゃん、

どのコードの一行が「わかった!」と思える

決定的な一行だったの?

 

 

この一行が返ってきた。

 

 transform.position += new Vector3 (0f,0f,-0.1f);

 

 

え? いきなりこれ?!

"Hello,World!"じゃなくて??(…というのは冗談ですが。)

 

f:id:saorin88:20171220195238p:plain

  

中学生曰く

「この一行が読めるようになったことで、オブジェクトの変化のさせ方も座標もわかったから何でもできる気がした。あとは変数の書き方わかったときも大事だったけどね」

とのこと。

 

実際はこの一行はUnityのNew Scriptにデフォルトで書かれている

Update関数の中に書かれてあったものなので少なくとも

 

    void Update () {

        transform.position += new Vector3 (0f,0f,-0.1f);

    }

 

ここまでは理解してたと思われる。

(Start関数とUpdate関数のそれぞれの役割もわかっていたかもしれない。)

 

この一行で何がわかったの? 

おそらく上記のコードをその子が理解するときにScratchにおける↓こういう感じのスクリプトが頭に浮かんでいるはずなのである。

f:id:saorin88:20171220030533p:plain

 

f:id:saorin88:20171220195403p:plain

 

特に上のひとつはScratchを使う上でも

ほとんどの人が最初に通るであろう第一歩目的なスクリプトである。

 

このスクリプトが頭に浮かぶということは、C#の一行が「オブジェクトをz方向に-0.1動かす」を意味しているということ以外にも下記のようなことを一度に理解しているはずなのだ。

 

・Unityでも、3Dオブジェクトに対してScriptをつけることで、Scratchのスプライトに対してスクリプトを組んでできることと同じようなことはだいたいできる

・Update関数の中に入れるのははScratchでいうと「ずっと」の中に入れるようなもの。

・位置座標や向きなど3Dオブジェクトの属性を取得して何らかの操作をすることができる

・3D世界ではx,yと同じようにzの値を操作することができる

・+=は「〜ずつ変える」!

 

 もちろん厳密にいうと間違ってる部分はあるし、Vectorの意味なんかたぶんわかってない。

でも、今無理矢理正しい概念的知識を身につけさせようとしたも、たぶんすぐに忘れる。その内、自分の中で辻褄が合わなくなって「あれ?」と思ってもっと知りたくなるときがくるので、本当の意味で理解するのはどっちにしろそのときになるのだ。

 

なんでこの一行で目覚めたのか?

 

1.新しく出会ったプログラミング言語も、今までやってきたScratchと同じ仕組みだと理解できる環境だったから。

 

変数の型、変数の宣言、演算子、代入、if文...大人がプログラミング言語を学ぶときに最初に出会うものだが、Scratch世代の子どもたちはそれらを学んでも部分的には理解できるがそれは全体感をつかむことにはならない。全体感をつかむ前に時間がかかりすぎて諦めてしまうこともある。UnityのオブジェクトにNewScriptをAddする感覚はScratchのスプライトにスクリプトをつくっていく感覚に近かったのだろう。 

 

2.子どもの目的(ゲームつくりたい)の最初の一歩(キャラクターを動かす)に直結する一行だったから。

 

ゲームをつくりたい子どもはまずキャラクターを自由に動かしたい。Scratch世代の子どもたちは位置座標と同じように角度、画像、大きさなどもオブジェクト(キャラクター)の属性だということがわかっている。そのため「キャラクターの座標が変化する」ことさえできれば、他の変化もできたも同然だと思えるのではないか。

 

アプリやWebサービスをつくりたい子どもなら別の一行になっていただろう。 

 

 

3.これだけ書けばオブジェクトに変化ができる短い一文だったから。

 

ゲームをつくるのに特化したライブラリやフレームワークはいろんな言語にあるが、キャラクタースプライトを画面に出すだけで3〜5行ぐらいはコードを記述する必要があるものが多い。Scratch世代のこどもたちはマウス操作でオブジェクトを配置することに慣れている。マウス操作でできていたことが3〜5行のコードが必要になるとするとゲームをつくるまでの道のりがひどく遠く感じてしまうのも仕方ない。 きちんとプログラミングを学ぶのであれば避けて通れない道ではあるが、最初の一行ぐらい、「これならできる」と希望を持ちたい。

 

まとめ

この記事で言いたかったのは「Scratchからの移行はUnity(C#)がいい!」ということではない。

ゲームをつくりたい子どもは「キャラクターを自由に動かす」 ところから始めたいけれど、アプリがつくりたい子どもは「ボタンがクリックされたら変化が起こる」から始めたいかもしれないし、Webサービスを作りたい子どもは「IDとパスワードでログインする」ところから始めたいかもしれない。

 

つくりたいもの、その目的に合わせた言語を使えばいいと思っている。

 

Scratchから始めてC#以外の他の言語を使って何かをつくれるようになった子どもも知っている。

 

ただ、Scratchを使いこなしている子どもたちの頭の中にプログラミング言語についてどのような知識の枠組みがあって、どのような方略で新しい知識を取り込んでいくのかという観点を考えることは、Scratch世代の今後の学習をサポートする上で役に立つのではないだろうか。

 

ちなみにインターネット世代の私にとっての小学生時代の最初の一行は

 <a href="xxx.html">リンク先</a>

 だったように思う。この一文で、Webの世界は無数のページがリンクでつながっているということと、「リンク先」という文字にURLのようなメタ情報をつけることができるということを知った。

 

みなさんにとっても「最初の一行」があるだろうし、それぞれの時代背景の中で変わっていくものかもしれない。これからの子どもたちの「最初の一行」はどういうものになるだろうか。 

 

 

この記事は『LITALICO Engineers Advent Calendar 2017 - Qiita』20日目の記事でした。

明日は@wapa5pow さんの「開発環境でHTTPとかの通信をキャプチャしていい感じでデバッグする方法」です。お楽しみに!

女子とプログラミング

開発職としてコードを書いて働いていたときは

自分の外見が普通の20〜30代の男性だったらどんなに働きやすいだろう、

と考えていたときがあった。

 

職場では滅多にいない若い女性として十分可愛がってもらったのだけど

そのラベルをとって、自分の仕事を見てほしいな、と思うこともあった。

 

medium.com

『女の子らしくコードを書く、ということ』という記事を読んだ。

 

"女性らしい"格好をしているだけでプログラマとして見られない。

それだけでなく、女性というだけで

初心者扱いされる、内容にフィードバックしてもらえないといった経験が

いくつか語られていて、心に響いてしまった。

 

「相手が男らしくシスジェンダーな白人男性でも、おなじフィードバックするかな?」と考えなおしてみてください。

 

プログラミングでも数学でも科学でも何でも、

女の子へのフィードバックが意識的にか無意識的にか

男の子へのそれと異なることがあって、それは悪いことではないんだけれども

無神経にならないようにしたいな、と私は思う。

 

私自身はインターネットの世界に魅了された女子小学生だったので

 ※詳しくは過去記事 ↓

 2000年代当時の小学生から見たインターネットの世界 - デジタルな手書きのメモ帳

 

もし自分が少女だった頃にプログラミングを習っているとしたら、

つくっている中身以外でとやかく言われるのは嫌だ。

 

たとえば、うさぎやくまのキャラクターが好きだから

そういうキャラを使って背景の色をいろいろ組み合わせた上で

自分でプログラムを組んでアプリをつくっていたとして、

「キャラクターかわいいね」

「背景の色の組み合わせ方がおしゃれだね」

「今日の服装女の子っぽいね」

などという声かけしかしてこない大人は絶対に信用しない。

 

アプリがどんな機能を持っているか、

プログラムの中身についてどういう設計をしたか聞いてほしいし、

もっときれいなコードの書き方があるなら指摘してほしい。

かわいいものは好きだけど、それとプログラミングへの興味は別物である。

 

一方で、「それ、かわいいね」と言われると

うれしくなったりやる気になったりする女の子もいるということを忘れてはならない。

女の子のプログラマをもっともっと増やしていこうとすると

そういう女の子たちの作品を「かわいい」「おしゃれ」という言葉で

誉め称えて、育てるのもひとつの方法なのかもしれない。

 

その女の子たちの中には、「やっぱりわたしはコードを書くことには興味ないわ」と

思う子がいるかもしれないけれど、

それはそれでいい。

好きか嫌いかも判別できない存在とみなされるよりましだ。

 

その女の子たちがフィールドにあがって、

大人になったときに"自分らしい姿"で闘える

世の中になっていますように。

"プログラマらしい服装"で武装しないと認めてもらえないという呪縛から

解き放たれていますように。

 

わたしも、そういう世界をつくっていく一人になりたい。

本レビュー:『数学ガールの秘密ノート/丸い三角関数』で数学はおもちゃになる

数学。三角関数。加法定理。

 

ど文系の人は耳をふさぎたくなる単語かもしれない。

大学受験のときに勉強したなぁ、という人は

「咲いたコスモスコスモス咲いた」と、ぶつぶつつぶやいているかもしれない。

  

かく言う私も受験のために手続き的に勉強しただけの身なので

サインとかコサインとかいうあれらが、何のために存在するのかわかっていない。

 

三角関数に限らず、そもそも、

中学や高校時代に勉強した数学の公式やグラフ、

あれらは何をしているのか?何かの役に立つものなのか?

 

本書は中学生・高校生レベルの数学を

わかりやすく楽しい会話形式で解説しているシリーズの内の一冊であるが、

この、「数学とは、いったい何をしているのか?」という問いに

真正面からぶつかっている。

 

プログラミング教育ツールであるScratch(https://scratch.mit.edu/)上で

サインカーブに興味を持った小学生がいたので

研究がてら復習がてら、たまたま手にとった本だったのだけど

内容より何より、数学への接し方、関わり方の姿勢の記述がおもしろかった。

 

作中で、「座標平面上の(a,b)を原点を中心にして回転させよう」という課題出てくる。

普通の参考書であれば、ここから最大限言葉を噛み砕いた解説が始まるところだが、

この本では、登場人物の一人が

「なぜですか?」と聞いている。

 

なぜ、点を回転させるのか? と。

 

数学の問題の意図するところのわからない我々にとっては、

よくぞ聞いてくれました!という感じ。

 

この問いに対する回答のひとつとして、

主人公は「それを考えてみたいから」と答えている。

 

つまり、

主人公にとって数学の図形は<おもちゃ>のようなもので

目の前にそれがあれば、引っ張ってみたりいじってみたりしたくなる、

ただそれだけだというのだ。

 

これだけ聞くと「うぉー理解できない」「数学オタクと自分はやっぱり違う」

という風にとらえられるかもしれない。

 

けれども、

もし、子どもたちがみんなこのような姿勢で数学に出会うことができれば、

と考える。

 

おもちゃをいじる感覚で機械の使い方を習得したり

分解して仕組みを知ったりする子どもはときどきいるが、

同じように、遊ぶ感覚でグラフ上の点を自由にいじることができれば。

 

好奇心をもって数学に取り組む人はもっと増えるのではないか。

もちろん、どうやっても興味をもてない人もたくさんいるだろうけど。

何かを知ったり考えたりすることは本当はもっと楽しいことなのに。 

 

遊ぶことと学ぶことはいつだって紙一重だ。

 

中高生にはもちろん、数学が好きじゃなかった大人たちにもおすすめな本でした。

 

Amazon.co.jp: 数学ガールの秘密ノート/丸い三角関数: 結城 浩: 本

 

 

2000年代当時の小学生から見たインターネットの世界

従兄の子ども(2歳)がiPadを使って遊んでいた。

2015年、幼児がデジタルデバイスをおもちゃとして当たり前に使い
小学生が動画を編集してYouTubeにアップロードしたり
マインクラフトで友達と遊ぶために自力でサーバをたてたりしてしまう世界だ。

大人たちは口をそろえて
「最近の子どもはすごいね〜。もうついていけないわ。」と言う。
私はその言葉を聞くたびに子ども側の立場で
にやにやしてしまうのである。

コンピュータとインターネットの世界には、
親や学校の先生には入ってこれない領域があるのだ!

なぜ、子ども側の立場にたつかというと
15年ほど前、私もコンピュータとインターネットの世界に
魅了された子どもだったからである。

インターネットが家庭において普及し始めた
1990年代末期から2000年代初頭にかけて
当時小学校高学年〜中学生だった私は
家庭にあったパソコンWindows98を自由に使うことができた。
(当初従量課金のダイヤルアップ接続だったため
インターネットは時間制限されていたけれども。)

小学校にもコンピュータルームが設置される時期で
また2000年〜の学習指導要領が適用される時期でもあったため
「総合的な学習の時間」にてインターネットを使った調べもの学習、
パワポを使った発表学習といった授業も受けた。

というわけで物心ついた頃に出現したパソコンというものは
出会った頃には既にインターネットとセットになっていた。
けれどもSNSもブログさえもまだ世の中に存在していなくて、
「ただの調べものができる箱」だったのである。

さてインターネットに接続された自由に使えるWindowsを手に入れた私は
すぐにその箱を「調べもの」ではなく
「コミニュケーションの道具」として使い始めた。

2000年代当時、ブログもSNSもなかった頃、
学生がつくった子どもたちのための交流サイト(掲示板)が存在した。
そこでは、普段の生活では出会わない高校生、
大学生のお兄さん・お姉さんが話を聞いてくれた。

もちろん、「荒らし」や有害、アダルトな情報も混在していたけど
ある種自治的な空気も流れていて、
ネットを利用する上での個人情報流出の危険、
匿名利用のマナーなど「ネチケット」といわれるものも
すべてネットの中で学んだ。

学校の先生も友達も両親も誰も知らなかったし教えてくれなかったから。
その代わり、その世界はひとつの居場所だった。

コンピュータとのそんな関係がさらに変わったのは小学校卒業目前の頃。
「ホームページの作り方」を知ったときだった。

子どもでもホームページをつくることができると知ったその瞬間、
インターネット上のものはすべて
「ただ見て利用するだけのもの」ではなく、
「自分でつくることができるもの」に変わった。

最初はHTMLタグをいじるだけでできる無料サービスを使っていたけれど
その内、フレームの構成もデザインも0から自分でつくりたくなった。
個人HP用の無料サーバー(広告付き)を借りて
Windows付属のメモ帳でHTMLもCSSも直打ちしてFFFTPでファイル転送して
バナーをつくるためにPhotoshopの使い方も学んだ。
すべてネットで調べて独学でつくった。そのときは中学生だった。

個人の趣味の範囲でしかなかったけど、何よりも楽しかった。

学校の友達でホームページをつくっている子は少数だったけど
2000年代初頭のその頃すでに
インターネット上では個人ホームページ人気ランキング<小学生部門>があるぐらい
大人顔負けのWEBデザインをする子どもたちがわんさかいた。

あぁ、あの頃の「子どもたち」は今、何をしているんだろう。

15年たった今、ふと思う。



あの頃私はインターネットの世界が最先端でカッコいいと思っていたので
コンピュータのハードそのものやプログラミングには興味を持たなかったけど
初期家庭用コンピュータが出始めた頃に出会っていれば
ハードにも夢中になっていたかもしれない。
(そういう世代の方もいらっしゃいますよね。)

本、漫画、テレビ、ゲーム。
大人がつくったものを提供される側でしかなかった子ども時代において、
大人と対等に何かを発信できる可能性というのは本当にわくわくすることだった。


コンピュータとインターネットの世界は変化し続けるからこそ
子どもたちの本来の力が発揮できる場所なのだと思う。
そして子どもたちが「選ぶ」場というのはそのまま社会の未来とつながっている。