プログラミングは誰でもしている

清水亮氏:それでは、プログラミングが誰にでもできるようにするというのはどういうことなのかを考えると、まず、そもそも「したいのか?」という話があります。誰もがプログラミングをしたいのか? 

「したい」という人は、あまりいません。生まれつきプログラミングをしたいという人は、あまりいないのですが、ところが、ここにいる誰もがプログラミングをしているはずなのです。ただ、それを「プログラミング」と呼んだことがないだけです。

朝が苦手な人は? 朝が苦手な人は、必ず目覚まし時計をセッティングしますよね。目覚まし時計をセッティングしたことのない人、手を上げてみてください。あ、すごいですね。さすが。竹田(茂。SCHOLARプロジェクト総合プロデューサ)さんだけですね。なんで、場を乱すようなことをあなたがやるんだ(笑)。  

目覚まし時計を設定するのは、「プログラミング」です。だまされた、みたいな顔をするのはやめてくださいね(笑)。

プログラミングとはなにかを突き詰めて考えると、僕はよく言っているのですが、プログラミングはコンピュータが発明されるずっと前からあります。もともと、「プログラム」はギリシャ語です。「πρόγραμμα(プログランマ)」というギリシャ語で、公に書かれたものという意味です。公文書ですね。だから、法律とか宗教のバイブルとかルールとか、全部プログラムなのです。

昔は、貴族や政治家のような特権階級しかやらないことだったので、みんな知らないのです。知らずに育ってきたし、プログラムという習慣もなかったということです。

現代では、それは帝王学とかマネジメント学とか経営学などと読み替えられていますが、全部言っていることは一緒です。コンピュータプログラマーが、たまたま機械という従順な存在だけをプログラムすることができたので、結果として、それが今までプログラムと呼ばれていたものだと気付いたわけです。

現実にも応用されるプログラミング

コンピュータの世界で使われているプログラミングテクニックを、現実の世界に応用することもあれば、その逆もあります。

例えばよく言われるのは、ここにお花畑があります、というちょっとメルヘンな話です。四つ葉のクローバーを探しましょうということで、ここに2人います。さあ、どうするといったとき、なにも考えずに2人で「わーい」と言って飛び出すのは普通、小学生です。

「できるだけ早く四つ葉のクローバーを探しなさい」と言われたら、普通だったら「お前そっち、おれこっち」とかやるでしょう。これを分割統治といいます。

分割統治はローマ帝国から来ています。「こっち側とこっち側を別々にやりましょう」ということです。これは実際のコンピュータプログラムでも、まったく同じ論法で、分割統治という言葉が使われます。プログラムという行為が、統治とか政治に使われたというのは、疑いもない事実です。

プログラミングの定義とは

プログラムとはなにか。今日は時間がないので、かいつまんで説明します。僕はこのように定義します。

「自分のいないところで、自分以外の存在を思い通りに操る方法」。

たぶん、これしか定義はないです。

操られている側は、プログラムをした人を意識する必要がありません。目覚まし時計がそうです。明日7時に起きなければというので、7時にセットする。でも、不安だから、6時半にもセットする。これは、自分以外の存在である目覚まし時計に対して、6時半になったら起こせということです。これは、モーニングコールも一緒です。

このように、自分がいないところで、自分以外の存在を自分の思い通りに動くようにすることを、すべてプログラミングと言うことができます。

わかりやすくプログラミングさせることの功罪

僕も、いろいろなプログラミング手法を考えています。MOONBlockというのはそのなかでは過渡的なもので、究極のかたちではまったくないのですが、とりあえず、わかりやすくプログラミングをしている気にさせるというものです。

ところが、MOONBlockだけを教えると、プログラミングを習った気がしないという問題があります。それは、Scratchでも同じです。プログラミングをやりに来たのに、なんかブロック遊びをして帰ってしまったという気分になる。今日、皆さんも帰るとき、そういう気分になると思います(笑)。

それは、お客さんが期待したプログラミングを教わるということではなかったからです。実際にはそうだったとしても。プログラミングしようと思って来たのに、目覚まし時計を設定しましょうと言って帰ったら怒るでしょう。それは違うだろう、みたいな。皆さんは、自分がイメージしている難しいプログラミングにあえて挑戦したいんです。そして、挫折したいわけです。挫折することによって、その価値がわかったような気になるのです。MOONBlockの素晴らしいところは、実際にキーボードを使ってプログラムに変換できることです。

だれでもプログラミングできるアイデア

どうするか。1つ、簡単なのは、MOONBlockの次のアイデアを考えてあったのです。それはなにかというと、目覚まし時計プログラミングと呼ぶものです。

目覚まし時計に限らないのですが、要するにプログラミングをしたいのは、どんなときかということです。朝、起きたいということもあるでしょう。毎朝、アサガオの観察写真を撮りたいというので、それを誰かにやらせるとしたらそれもプログラミングです。それは、Raspberry Piでかなりガチなプログラムを書かないとできません。

でも、もしスマートフォンの目覚まし時計機能に、「毎朝6時にカメラを起動して、写真を撮ってTwitterにアップロードする」と書いただけでそれができるのであれば、すごく簡単です。

じつは、iPhoneのアラーム機能は、プログラミングそのものなのです。時間を設定すると、繰り返しするかしないかとか、サウンドはなにを鳴らすかとか、スヌーズするかとかをセットできるので、ここに写真を撮れとか、撮った写真をTwitterに送れと追加すれば、小学生でも朝顔の観察日記を自動的に書くプログラムを書けますよね。天気も記録しろとか。

足りないものはモチベーション

答は簡単だったのです。ところが、答が簡単だったので、それをそのままやろうと思いました。ところが、また新しい過誤が見つかったと。今日は、2段先の話をしてしまいます。僕は、これで誰でもプログラミングができるわいと思ったのですが、そうではないのです。モチベーションがないです。

アサガオの観察日記を書くというのを、生まれつきやりたくてやっている人を見たことがないですよね。あれは、学校の宿題だから、仕方なくイヤイヤやっているわけです。

そうではなくて、自発的にそのようなことをするだろうかと探すと、あまりないのです。Apple Watchについている「今日はこれだけ運動をしましょう」というのだけでも鬱陶しいのに、なにが悲しくて自分を自分で縛るようなことをしなければいけないのか。

なにかがあったときに、これをしたいというのは、アメリカではいまIFTTT(イフト:もしそうならそれをやれ)というサービスが流行っていて、これもイマイチ使い道がよくわからない。けっこう便利で、例えばFacebookに写真をアップしたらDropboxに保存しろとか、なにかをすると勝手にやってくれるので、犬の調教みたいなものです。

ただ、それを使いこなすというのは、相当しんどいです。この手の研究は、いろいろな会社がやっていて、マイクロソフトもやっています。on{X}とかね。むかし、このマイクロソフトのソフトが、Android大賞を受賞するという恐ろしいことも起きちゃったんですけど。

on{X}も、だいたい似たようなものです。家に着いたらツイートするとか。こんなの、ストーカーが大喜びです。よほどの変わり者でないかぎり、これを使いこなす感じがしません。さっきのアサガオの観察日記もそうです。果たしてそれは必要なものか。

学びたい気持ちにさせることも重要

そこで、僕はもう1回、品川女子学院で中学1年生にenchantMOONを貸し出したときのことを思い出しました。

enchantMOONをいろいろな人たちに試しました。大学教授、社会人、電通マン、慶応大学、関西大学。でも、誰も使いこなせなかった。そのなかで、なぜ品川女子学院の1年生たちは、あれほど完璧に使うことができたのか。ほとんど説明していないのに。

彼女たちは、表現したいことがすごくあったのです。彼女たちは、自分で勝手に勉強したのです。僕らはきっかけを与えただけです、

子供なので、ほかに手段がないのです。我々にはいっぱい手段があります。ブログを書こうと思ったら、はてながある、Livedoorがある、Amebaがある、WordPressがある。ところが、中学生って、メールアドレスすらもらえているか怪しい。まあ、品女の場合はもらえているんですけど。そういう人たちに、これで自分を表現できるよ、手書きで書いたものがゲームとして動くよと教えた瞬間に、ワァーと夢中になってやってくれたわけです。

彼女たちにプログラミングを強制的に教えたことはありません。むしろ、僕は、プログラミングの授業ではなく、皆さんにこれからゲームの作り方を教えますという授業をした。それがすごく受けたのです。

今の若い子は、女の子でもゲームがけっこう好きです。そういう意味では、みんなの好きなゲームの作り方を教えますと言うと、勝手にハイパーテキストでクイズを作ったり、迷路を作ったり、ダンジョンみたいなものを作ったり、すごい創意工夫で作るわけです。

こういうことを私はやりたいけど、どうしたらいいの、どういうプログラムを書いたらいいの、という質問がワンサカ来るわけです。

そういう意味で僕は思ったのは、willがいちばん大事なんだということです。できることではなく、availableなことではなくて、willなんだと。

これが、プログラミングを簡単にするにはどうすればいいかということと、それ以上に、プログラミングをみんなが学びたい気持ちにさせるときにはどうすればいいかということが、両方バランスしていないとだめだという、僕のターニングポイントでした。