見出し画像

6歳の息子にPythonでプログラミングを教えはじめてみた話 1. 掛け算は足し算の繰り返し

意識高いわけではないんです

2020年から小学生のプログラミング教育が必修化になりましたが、それを意識したわけではなく、単純に自分がプログラミングを始めたのが6歳だったからというのが大きな動機です。大きな違いは自分の場合はすべて独学であったことでしょうか。教えすぎるのはよくないと思いますし、突き放すのもよくないと思うので、匙加減が難しいと感じています。

思ったよりもすんなりとプログラミングを子供が受け入れてくれて、かつ、楽しんでくれたので、この体験を共有することに意味があると思い、起稿しています。同年代のお子さんを持つ親御さんに参考にしてもらえたらと思います。

だってScratchは楽しそすぎるんだもの

子供用のプログラミング言語というと猫も杓子も犬も歩いてScratchという感じですが、あえてPythonを選択しました。IDEも使っていません。というのは、Scratchは見た目が楽しすぎて(笑)本質から目がそれてしまうのではないかと心配したからです。

また、プログラミングというのは、アルゴリズム、システム、計算機のアーキテクチャについての三つの理解が必要とされる領域だと考えています。せっかく頭の柔らかい子供の頃から計算機のアーキテクチャに触れる機会があるのですから、よりお化粧の少ない(と言えばいいのかしら?)プログラミングを見せてあげることに意味があるかなと思ったのです。

画像1

大きい数のインパクトは大きい

ところで数あるインタプリタ型言語の中でPythonを選んだのは、整数の桁数制限が緩いからです。うちの子は大きな数が並んでいるのが好きなので、多桁の足し算をニコニコしながら解いています。そんな流れで大きな数を扱うことのインパクトを欲してPythonを選びました。そういう意味ではCommon Lispでもよかったのですが、足し算引き算を学び始めたばかりの息子にはLISP式の書き方はなじまないだろうと思ったのです。

画像2

(これはCommon LISPによるプログラムの例です。10002番目のフィボナッチ数列の項を表示すると、こんなにズラズラと数がならびます。息子は大喜びでした。なにせ幼稚園児向けなので、細かい部分には目をつぶってください。)

足し算・引き算・掛け算で遊ぶ

Pythonのインタプリタを起動して一番最初に行ったのは、足し算や引き算を自由に入力させてコンピュータに計算をさせてやることでした。Pythonはコマンドラインで起動していて、画面いっぱいにインタプリタとの対話画面を表示しました。掛け算の記号がアスタリスク*になることだけ教えてあげると、子供らしくでたらめな数字をたくさん書き連ねて計算をさせはじめていました。特に楽しんでいたのは掛け算で、30桁くらいの数同士を掛け合わせて、「これ、読める??読める??」と、大きな数を作ってはケラケラと笑って楽しんでいました。これだけでも楽しんでくれるんだ!というのは大きな発見でした。

画像3

キーボードは二つ必要です

最初はラップトップ1台でプログラミング遊びを始めたのですが、すぐにキーボードをガチャガチャとたたき始めたので、息子用にキーボードを用意しました。宗教上の理由で(笑)拙宅にはUS配列の計算機しかないので、Realforce のUSキーボードを息子専用に接続し、好きに叩かせることにしました。

そもそもRealforceは頑丈なので子供のガチャガチャタイピングにも耐えてしまうのですが、「これはパパが前にお仕事で使っていたものだよ。本物のキーボードだから大事にしてね」とお話したら神妙な顔をして、慎重に、しかしめちゃくちゃなタイピングをガチャガチャと繰り返していました。

こうすると息子と自分とで同時にタイピングすることもできるようになります。こちらがタイピングしているときに息子が邪魔してきたりもしますが、ご愛嬌。ニコニコしながら諭しました。

息子の操作を見ていて気づいたのですが、数字を入力するときにはやはりテンキーを使っていました。+の記号もテンキーだとシフトキーを押さずに入力できるので便利なようでした。

コントロールキーの操作にニッコニコ

画面クリア(Ctrl-L)と、一行クリア(Ctrl-U)を教えてあげたら、画面のお掃除係を自認して、「きれいにするねっ!」とニコニコしながらタイピングをしていました。大人にとって見れば退屈な暗記項目でも、ニコニコしながら楽しめる子供は本当にすごいと思います。

変数への代入はすんなり理解してくれました

「名前をつけた箱を用意して、そこに数をいれることができるんだよ。それを変数と言うんだよ」

というめちゃくちゃあっさりした説明を飲み込んでくれました。

「箱につける名前は一文字でも良いし、長くても大丈夫」
「このイコールは、右のものを左に入れてくださいっていう意味だよ」
「変数と変数を足したり引いたりできるよ。変数と普通の数の計算もできるよ」

キーボードを渡すと自分のイニシャルを使って、新しい変数を使って代入したりして遊んでいました。

息子は、普通の数と変数が同じ扱いができるということをすんなり飲み込んでくれたようでした。

画像4

掛け算は足し算の繰り返し

自分が最初に触れた計算機はZ80でした。Z80の機械語には掛け算命令が存在しておらず、足し算引き算の組み合わせで掛け算を実現していたものです。高水準言語の世界に低水準言語の世界を持ち込むのは野暮かもしれませんが、息子にはこの話をしたあと、実際に掛け算を足し算の組み合わせでやってみよう!という提案をしてみました。

「むかしのパソコンは馬鹿だったんだね!」
「そうじゃなくて、技術が進んでいなかっただけだよ」

という会話があったのもご愛嬌です。

画像5

最初は実際に足し算の繰り返しを入力させてみました。「5×8くらいなら頑張れるけど、5×100だったらどうする?」というところから、繰り返しの命令を教えてみました。(この段階では自分でコーディングができるようになることを期待してはいません)

画像6

息子は幼稚園の英会話教室でアルファベットの大文字と小文字をどちらも覚えていますが、単語の綴りはまだ覚えていません。そのため変数名はひらがなで作っています。

ところでこれは本業(大企業向けITコンサル・アーキテクト)でも大きな声で言っていることなのですけれど、変数を英語にしなければいけないというルールはありません。最近のプログラミング言語の多くはUnicode文字を変数名として受け付けてくれています。たとえばOpen Sourceの世界で活躍するなど、世界中の人にコードを見てもらうことがあるなら変数名はわかりやすい英語であるべきだと思います。日本語の変数名を入力するのにIMEの切り替えをしなければいけないというのも確かに面倒ではあります。しかし、むしろ中途半端に意味の通らない英単語を不適切に組み合わせて変数名を作るほうがよほどコードの可読性を落としていることが多いです。(正直、閉じた世界であるところの大企業向けITの世界の、閉じた世界の専門用語・業界用語の英単語なんて知らなくて当たり前ですしっ💦)

閑話休題。

「ふぉー は繰り返しの指示だよ」
「れんじ の後に書いてあるカッコの中に、繰り返しの回数が書いてある」
「さっきと同じ用に、自分自身に足し算した結果を、自分自身に代入してるね」

あいかわらず、きわめて大雑把な説明しかしていません。というのは、ループの概念だけをまずは受け入れてほしかったからです。

九九の5の段を表示させてみる

先日、幼稚園でお友達の「けいし君」から突然「5×5は?!」と問いかけられてうろたえてしまった息子君には今、九九を教え始めています。そんなわけで5の段をパソコンに表示させてみました。追加で必要になるのは、print()だけですね。

画像8

実際に掛け算を順番にやらせてみることもデモンストレーションしてみました。

画像8

あれ?かける数とかけられる数・・・・場所が逆でしたっけ?💦 と若干冷や汗をかきながらも説明してみました。

「今度は、かける数 の中に1から10・・・の一個手前の9までが順番にはいってくるよ」
「それを順番に掛け算してるんだよ」

と割と一生懸命説明してみたのですが、本人は「なんで当たり前のことをクドクド説明しているんだろう」という雰囲気でした。結果を見せてあげることですんなに理解が進むのかもしれません。

長くなったので続きは別稿で

実際に子供にプログラミングを教え始めてみて感じたのは、教材作りを頑張らなくても子供は十分にプログラミングを刺激として受け入れてくれるということでした。このままPythonを教えるのか、Swiftに行くのか、はたまたLispかC++か、いろいろ迷っていますが、いろんな言語に触れてもらうのも一つのプログラミング教育なのかもしれません。次は足し算ゲームのプログラムで遊んだ話を書こうと思います。

これで記事は終わりです。以下投げ銭をいただけると励みになります。

ここから先は

0字

¥ 100

この記事が気に入ったらサポートをしてみませんか?