乳幼児のテキシコー - 私の思うプログラミング教育とその下地

# 概要

3歳の子供が生まれてから今に至るまで、その成長の過程でお膳立てしていたこと・してないこと・実際の軌跡と思ったことなどを記します。
なにかの理論に基づいているという事は基本的にはなく、単なる個人的な教育の話です。

# プログラミングの「素養」の差

はじめに、動機づけのような話をします。

私はプログラミングをする仕事をしています。
はじめてプログラミングをしたのは中学生のときで、神経衰弱やテトリスを作ったりしていました。
それが一部の受験に使えるのでは、という事もあって、父が教師をしていた高校に呼ばれて、当時の自分より年上の高校生にプログラミングを教えるという事もしました。

その頃から今に至るまで、プログラミングについて思うのは、あまりに個人差があるということです。
例えば「足の速さ」という尺度で人間を比較する時、障害があるなどの事情がなければ、同じ年代のそれなりに健康な人が50m走るときに、倍の速さの差が出るという事はあまりありません。1.5kmとかでも、開いて数倍という差です。（42.195kmになると、さすがに走りきれる人とそうでない人が出てきますが...）
人が持ち上げることのできる重さを考えると、それよりは差があると思いますが、とはいえ10倍ぐらいの範囲には収まるでしょう。

ところがプログラミングでは、そうではありません。

私は中学生のとき、ほぼ触りたてのVB6.0で、一冊のフォームアプリケーションの一般的な入門書をつまみ食いしてテトリスを作りました。それに要した時間が2日ほど。
私が仕事で作業を依頼する時、このスピード感と大きく差がなければそれなりには依頼できるかな、と思っていろいろな人に「テトリスを作るとしたら、どれぐらいかかりますか？」と聞くと、1時間から数ヶ月まで、まあなんとバラつきます。その差、100倍以上。
UIはてきとうでいい、なんならCUIでAAでもいい。
オープニングやエンディングはなくてもよい。
最低限ゲームとして成立して遊べることは必要。
という条件で見積を聞くと、職業プログラマにおいてさえ、1時間から数ヶ月で分布します。
これは、ほぼ業務プログラミング経験のない大学生であってもそうですし、なんなら大学生の方が早いことも実際にしばしばあります。


「必ずしもゲームみたいなプログラミングが全てではない。」
「単に早く書ければ良いわけではなく、きちんと設計をする習慣が身についている方が業務プログラマとしては大事である。」

もちろんそういった観点はあって、それはそれで大事なことですが、それにしても個人差が確実に存在するというのがここで言いたいことです。

この個人差、どうやって生まれるんでしょうか？

私はそのはっきりした答えを持っていません。ただ、どうやって生まれるかはわからないものの、とにかく劇的な差が存在するという結果を前提として、子供にはどんな事をどんな風に教えるとよいかな？という事を考えます。小さい時の方がよく伸びると言われる能力がいくつかあり、どうやってその能力を伸ばすような教育をするか？は重要と思うので。
もちろん、教育でどこまで変わるかは不明で、ひょっとすると単純な遺伝みたいなものがほとんどなのかもしれません。でも、そうでなかった時に「遺伝だと思ったから教育がんばらなかった」では悲しすぎるなあ、と。

# 言葉のない子供とどう接するか - 既にプログラミング教育は始まっている

生まれたての子供には、言葉はありません。泣いて何かを伝えようとすることはできますが、普段我々が日常的に用いている、整理された言葉を使うことはできないわけです。
そのため、私が子供とコミュニケーションをするときは、表情や動きなどで、どんな事を感じているかを想像しながらコミュニケーションをしていました。（今もそうですが）

子供の立場からすると、そのコミュニケーションによって「世界」、自分の外界・外なる存在のことを学習していきます。

子供がそうやって「手探りで」学習をしていくことが、個人差にある程度繋がっているのではないか。私はそのように考えていて、その仮説の元に子供と接しています。

## 規則性・再現性を大事にする

常に色々な事を全力で学び続けている子供の立場で考えると、一番わかりやすいのは規則性がある物事でしょう。例えば、自分が笑うと他の人も笑ってくれる。最初はものすごく単純なところから、因果関係というか、自分がこうすれば世界がこうなる、という事を学んでいくはずです。
そうすると、子供の理解の世界において規則的でない事があったとしたら、それは処理するのに困るはずです。
例えば、ある時は笑いかけると喜ばれるのに、別の時には怒られる。

もちろん、実際の世界には理不尽というものが存在しますし、表面的には理解できない規則性も山程あります。
しかし、それを理解することは、ある程度言葉が伝わるようになってからでも良いでしょう。そもそも、どんなに頑張ったところで、感情などによって完全に規則的な対応ができない場合は出てきます。そうであれば、できるだけわかりやすい規則性を作って接する瞬間を意図的に作り出すことで、**なるべく早くこの世界に規則性・法則性というものがあるのだという概念を掴むことを手助けする。** 私はこれを出来る限り大事にしています。

## 「同じ高さで」純粋に物事を楽しむ

上からとか下からとか、そういう事ではなくて、目の前の事象について出来る限り子供の目線で見て楽しむ。
特定の理解の仕方を強要せずに、目の前で子供がどう理解しているのかという事を感じて、それを楽しみながら、一歩理解を進めるにはどうすればよいか、考えて試してみる。その反応を見て遊ぶ。

そのような事を考えて接していると、日々面白いのですが、特に際立って面白かったのは2歳4ヶ月頃の子供の行動でした。
クレヨンを片付ける、というだけの事なのですが、一人で添付の画像のようにしまったのです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/94255/b4dc8de5-f062-8670-5102-f87527d4927f.png)

私は、これはだいぶびっくりしてしまいました。随分器用なしまい方をするなあ、と。
左側の列は、真ん中の色に合っているのですが、右側の列。規則性わかりますか？
これ、一番左の色をひっくり返して、クレヨンの"足元"に重なるように持ってくると、並びが一致しているんです。
おそらく当時、しまうクレヨンの足元の色がクレヨン自体と一致する、という学び方をして、そのようなしまい方になったのではないか...と推測しています。
このしまい方は何度か再現していて、少なくとも意図的にこうしまっていた事は間違いありませんでした。しかし、3歳3ヶ月の今も、子供はこの規則性を言葉で説明する事はできません。
**言葉にできないだけで、既に世界の規則性を感じている。** それまでも、もちろんそういう事を考えてはいたのですが、こんなに鮮やかに示されて、子供って実は秩序の塊なんだなという事に深く感じ入ってしまいました。

このような感性を"素直に"伸ばすことができれば、プログラミング的思考は十分に養えそうな気がしませんか？私はそのような気がしていて、乳幼児とどう接するかによって既に差が生まれつつあるんだろうな、と思っています。

## のめり込めることに、のめり込ませる

どんな事でも良いと思うのですが、とにかく集中できる事にのめり込ませる事が大事だと思っています。
言葉を知らない子供に対して、「とにかくこれが面白いから集中してやって」という事を直接伝えるのは、難しすぎて不可能のように感じています。時に一緒にゲーム等を楽しくやって"助走"をつけてやって、一人で集中できる物事をつくる。
賛否両論はあるでしょうが、その時間を作り出すために、私は子供にiPhone/iPadでかなり遊ばせています。
うちの子供の場合は、物理/アプリを問わずパズルがすごく好きで、1歳8ヶ月の頃にはiPadで柄や色を合わせる「はらぺこあおむし」のパズルをすらすらと解けていました。
また、iPadやiPhoneのジグソーパズルは常に向きが揃っているものが多く、向きを考えるという工程を省略できるので子供にとって簡単になっており、これもすぐにできるようになりました。
一方で、レールをつなげてスタートからゴールまで道を作るタイプのパズルは結構難しく、本当に理解できたと思えたのは3歳になってからでした。

前後して、iPhoneではなく、プラスチックのテトロミノのパズルを３歳の誕生日に与えました。与えたときから、ある程度時間をかければなんとか解けていましたが、しばらく熱中してからは、1〜2分で解けるようになりました。
テトロミノパズルの解き方の慣れは面白く、最初は1手先2手先を読むという事は全然できなかったのですが、慣れるとほぼ瞬時に判断ができるようになり、このパターンだと埋まらないみたいな判断が相当速くなりました。
考えてみれば、それまで触れていたパズルはパズルといいつつほぼパターンや形状の認識であって、論理的にこのミノはここには入れられない、みたいな頭の使い方はしていませんでした。一方テトロミノでは、そうした論理的な規則性も含めた思考が必要になるので、これはプログラミング能力の本質のひとつなんだな、ということを実感しました。
同時にゲームの凄さという事も実感しました。
ゲームなしで、言葉も十分に伝えられない子供に対して、どうやって頭の使い方を教えればいいのか？とまで思ったぐらいです。私自身が小さい頃、父がよく「ゲームが強い人は頭が良い」と言っていて、ずっとそれはそうだと思ってきましたが、ここに来て「他に熱中して頭を使うような良い手段を思いつかないわ」と強く思ったのでした。

## 話を自分で作る（作らせる）

これはもはや私が子供に対してしている事ではなくて、子供がYouTubeを沢山見た結果主体的にやっている事ですが、自然と自分で話を作って一人おままごと的な事を創作でやっています。
完全にオリジナルストーリーで、ちょいちょい現実世界の設定を反映したパウパトロール（？）やシルバニアファミリー（？）のストーリーをずーっと喋りながら遊びます。
話を作るという行為はまだ論理的な規則性と結びついてはいませんが、この話が論理的な規則性と結びつけば、それはもはや一種のプログラミングになります。
他にも、自分の思いを表現する替え歌を即興で作って歌ったりもしていますが、総じて自分の考えを表現するという訓練がよく出来ているように思い、これもまたプログラミングにおいて重要な下地であると感じます。

# 総括

「なんだこれは、どこがプログラミング教育の話なの？」
と受け取られるかもしれません。
でも私は、プログラミング能力とつながる本質的な能力というのはここに述べたような"教育"によってもたらされるものと信じています。多分、ごくごく普通の「のびのび遊んで、のびのび育てる」みたいな程度の子育てと大きくは変わらないと思います。ただ、規則性とか同じ高さで物事を楽しむとか、一つ一つの事をどれだけ丁寧に・きちんと向き合ってやるか、という事なのかな？と思っています。雑に遊ぶのではなくて、子供の将来の能力のどういう事につながるのかを想像しながら、今と向き合う。そんな話でした。
ちゃんちゃん。

# おまけ・最近の課題

最近個人的に課題に思っているのは、「良い手筋を見せる」ということです。
子供にずっとBaby sharkのパズル（shark blast）をやらせていたのですが、単に子供にやらせるだけだと、偶然良い手筋を理解できれば理解が進むものの、同じことの繰り返しになってしまう場合がしばしばある、という事を学んだのでした。（これはテトロミノとは対照的で、テトロミノはやらせれば確実に力がついていきましたが、shark blastの場合はそうではなかった）
それで、実際にゲームをしている瞬間を見せる必要があるんだなという事を悟って、最近はテレビを活用しようと思ったりしています。もっとも、まだ現時点ではYouTubeを見ているだけですが...

子育て関連は、プログラミングと全く関係ない話で以下のような事も考えています。よろしければどうぞ〜

[理屈を超えた世界との向き合い方 - 「こどものあいだ」に教えることベーシック](https://note.com/sasanquaneuf/n/nef52a27e04ef)
[「こどものあいだ」に子供に知っておいて欲しい12のこと - 世界をロジカルに捉える](https://note.com/sasanquaneuf/n/n0c8f3e2602bf)