子供にプログラミングを教える時に気をつけている〇〇のこと

こんにちは。石川大貴です。

今日は、プログラミング教育に関するお話です。

どちらかと言えば、教える先生側寄りのお話です。
ですが、子供に習い事をさせたい考えている親御さんにとってもどこか参考になるかもしれません。

僕は最近、小中高生向けにプログラミングの家庭教師をしています。

僕の場合は、この仕事で食っていこうと思っているわけではなく、ただ好きでやっているだけですので、個別指導の家庭教師というスタイルでマイペースにやっています。

対面のマンツーマン家庭教師なので非常に効率が悪いのは難点ですが、そのぶん目の前の子供の成長を見守ることができる個別スタイルなので、毎回教える僕自身も楽しくさせていただいています。

子供にプログラミングを教えている中でいくつか思ったことがあるので、まとめておきます。
さて、それではいきなり本題に入っていきます。

■できない子はいない。できる分野とできない分野があるだけだ

小学生であっても、もう子供によって能力差は全然違います。これは、認めたくないかもしれませんが、紛れもない事実だと思います。実際に教えていて、如実に感じます。
(そしてこれはただの予想ですが、おそらく東京などの都市圏ほど能力差が大きいんだろうなと思います)

ただし、いわゆる「できない子」というのはいない。と僕はそう思っています。このマインドは大事です。

確かに、「理解が悪い」「なかなか覚えられない」「進みが遅い」などの事象はあることにはあるのですが、それら多くの場合は、突き詰めて言ってしまえば単なる「集中力」の問題だと思っています。言い換えると「向き不向き」「好き嫌い」の問題ともいえます。

以前なんかのテレビ番組で(ダーツの旅だったかな・・)田舎の小学生にインタビューしたのがありました。
インタビューした子供たちの中に、「引き算が苦手」という男の子がいたのですが、彼は本当に引き算ができなかったんですよね。スタッフが引き算の問題を出しても、答えられない。

それが今度は、スタッフが機転を聞かせてその男の子が好きだという「戦車」に掛けて問題を出しました。

「戦場に8台の戦車がいました。そこから3台の戦車がいなくなりました。さて、今残っているのは何台?」

すると、男の子は即答で「5台!」と当てました。

同じ容量で、今度は難しい二桁の引き算を戦車で出してみたら、男の子は「ん〜ん〜」と考えつつも、正解を出したんですよね。
この問題には周りにいた小学生も悩んでいたから、一瞬にしてこの男の子は「できる」側になってしまった。

これも、結局は「集中力」の問題だと思います。

子供というのは、教えている側が思っている以上に集中していない(話を全然聞いていない笑)時が往々にしてあります。集中していない時は、マジで話を聞いてません。マンツーマンですらそうなんですから、集団授業になればもっとそうでしょうね。

少し話がそれますが、「人の話を聞ける子」というのはそれだけで優秀だと思います。
話が聞けない子は本当に多い。

だから、まず1つ言えることは「集中力」のコントロールがめちゃくちゃ重要です。

では、「集中力」を高めるために何をしたら良いのか。
オーソドックスではありますが、ポイントを3つ挙げます。

■興味分野を見極める。好きなことを掛ける

1つ目は、興味のあること、好きなことを掛けることです。

例えば、プログラミングを学ぶ場合にしても、実は分野はいろいろあります。

「スクラッチ」を教えるのか、「HTML・CSS」を教えるのか、「javascript」を教えるのか。
ひとえに、プログラミングといっても、方向性は様々です。

受験勉強やテスト勉強など、何か近い将来に得られる利益のためにいま我慢してでもやらなければいけないこと、避けることがどうしてもできないことであれば、興味があろうがなかろうが取り組む。そういうことも人生においては時に必要でしょう。

しかし、プログラミング教育に関してはその類いではありません。
まずやってみて、トライしてみて、好きなんだったらやればいいし、嫌いなんだったらやらなくて良いと思っています。やるにしても、まず興味を持てるところから始めれば良いのです。

「できることが増えていくのが面白いな」とそう素直に思えることからやれば良いと思っています。

ですので、そもそも「何を教えるのか」自体もその子供の好き嫌いによって僕は変えています。

小学生だから。中学生だから。頭が良い悪いとか、勉強ができるできないとか。そういう区切りは無意味です。テストの点数とか偏差値なんて関係ない。そんな固定概念で分けるのではなく、「興味が持てるか持てないか」だけを基準にして、何を教えるのかを決めています。

スクラッチが面白いと思う子にはそれを中心に教えていく。
HTML、cssなどのプログラミング言語に楽しく取り組める子には、それを中心に教えていく。といった具合です。

そして、さらに「それにできるだけ好きなことを掛ける」コンテンツにしていくこともやっています。

例えば、スクラッチを教える場合でも、野球をやっている小学生なのであれば、まずは野球の簡単なミニゲームを一緒に作ったり、ナルトに興味があるのならばナルトのキャラクターを使って動くプログラムを一緒に作る。といった具合です。

要するに、その子の興味分野、好きなことに寄せていくのです。
これで集中力は格段に変わります。

まあ、個別指導だからこそできるスタイルではあります。

個別カスタマイズというのはどこまで行っても、労働集約的な仕事になりますので、余裕のない現場の場合は難しいのでしょうが、本来ならば教育はこうあるべきだと僕は考えています。

多様性の裾野がますます広がっている現代では、尚更です。

■難易度を合わせる

2つ目も、個別指導だからこそできることですが、シンプルにその子の力と教える内容の難易度を合わせることです。

これは、基本中の基本なんですが、意外とバランス感覚が必要でもあり、とても重要なことです。

子供が「集中力を失う」原因はさまざまあると思いますが、多くの場合は「難易度が合っていないから」だと思います。

そもそも興味がある / ない、というのももちろん大きい要素ですが、たとえ興味があることでも、今の自分のレベルと、扱う問題の難易度が離れていると人は集中力を失います。そして、(本当はそれが興味の持てる内容かもしれないのに)その教科に興味がなくなり、やがて嫌いになります。

これは、大きい機会損失です。とてももったいない。

単純に、「難易度を合わせてあげる」だけで、その子の集中力が上がり、ひいては興味を持ち始める場合は多いんじゃないかと思います。プログラミングだけじゃなくて、他のことなんでも言えると思いますが。

どうしても子供は集団で学習する機会が多いはずですので、この「難易度が合っていないから」という原因で、消極的になってしまうことはとてももったいな〜なんて個人的には思っています。

ですので、その子の今のレベルをよく観察して難易度を合わせる。これは強く意識したほうがいいです。

ちなみに、この点をもう少し掘り下げると「難易度を合わせる」とはもっと具体的にいうと「すでにできることを解かせつつ、今の実力よりギリギリ上のこともやらせる」という意味です。
つまり、興味と自信を持たせる機会を与えながら、負荷もかけなさいということです。

これは大人も一緒ですが、すでにできることばかりやらせていても成長はありません。
今できないギリギリのことをやらせないと人は伸びません。しかし、扱うレベルがあまりに難しいとやる気を失います。

ですので、できるかできないかギリギリのところを狙ったレベルの内容に挑戦させます。
簡単にはできないけど、頑張ったら、粘ったらギリギリできそう。そういう内容です。

学校ではこういう経験もあまりできないと思うので、良い訓練にもなるでしょう。

ただし、例外として「興味を持たせる・集中力をあげる」ことをまず第一の目的とする場合があり、その時はあえて「できる問題」ばかりをやらせたりもします。これは、自信を付けさせて楽しくさせるためです。

子供の性格やタイミングなども考慮しながら、「できること」と「できないこと」のバランスを取っていくことが重要です。

■集中力をそぐ環境は改善する

話を元に戻します。集中力を高める3つ目のポイントは「環境」です。

集中できる/できないは、その子の能力うんぬんの問題だけでなく、環境も非常に大きいです。

中でも一番影響する要素だけ一つ挙げるとズバリ「スマホ」ですね。

東京ですと中学生以上はほぼ持っているという現状かと思います。

最近アメリカで麻薬中毒などを研究している研究者が本を出しました。
スマホというのは、誕生したのが2006年ぐらい?ですので、まだたかだか15年ぐらいの歴史しかありません。

仮に2006年に生まれた子供は、生まれた時からスマホが存在していて、今は14歳前後ということになります。

スマホにはもちろんたくさんのメリットがあるわけですが、子供時代からデジタル機器を持つことに関してどんな悪影響があるのか?それがいま研究されています。

例えば、これは大人が対象の実験なのですが、
スマホというのはただ横に置いてあるだけ、カフェで相手と向かい合って話をしている時、机の上にスマホが置いてある、ただそれだけで会話の質がぐんと下がるんだそうです。

スマホが目線に入っているだけで、無意識的に気になってしまう。これは抗えない本能的なものなのでしょう。スマホが「目の前にいる相手との良好な人間関係」を築くことの妨げになりうることが実験でわかっています。

僕も教えていて、これには完璧に同意します。

家庭教師でレッスンをしている時、横にスマホを置いている生徒さんも多いのですが、100%気がそれます。LINEでブーっと音がなる。休憩時間や、少し手が空いたらさっとスマホを手に取り通知を見る。その子がどうこうではなく、人間にはこういう性質がある、というレベルの話です。

ですので、僕の場合は、スマホは禁止までにはしていませんが、あえて子供が一緒にいる目の前で、親御さんに上記のお話を伝えします。その後どうするかは、親御さんのご判断に完全に委ねますが、まあ知っておくと人生損をする機会が減るんじゃないのかな〜とは思っています。

もちろん「スマホ」だけではなく、「ただそこにあるだけで集中力を削ぐもの」というのはたくさん身の回りにあるはずです。

それらを排除していくだけで、環境は整っていき集中力は格段に上がりますのでぜひ実行してください。

■ビジュアルプログミング「スクラッチ」はやって意味あるの?

次はトピックが変わりまして、少しエンジニア向けのお話になるかもしれません。

僕は家庭教師を始めた当初、本格的なプログラミング言語(真っ黒な画面に文字をカタカタ打ってプログラムしていくやつです)を教えていました。

その後、お客さんから要望が多かったのでスクラッチも教え始めました。

最初は、スクラッチはあくまで練習、勉強のための勉強というぐらいに(ある意味バカにして)思っていたのですが、実際に教えているとそうではないことがわかります。

スクラッチというのは、本質的には「ストレスポイントを削ぎ落としたプログラミング教材」と言えると思います。どういうことか説明します。

「ストレスポイント」と僕が呼んでいるのは、子供が集中力を落としてしまう、わからなくて、できなくてストレスを感じてしまう、そういうポイントのことです。

もちろん難しい問題を扱って、それが解けないこともストレスポイントになり得ますし、例えば、パソコン画面端っこの方でドラック&ドロップがうまくできない(これ意外でしょうが、子供に多いです)などもストレスポイントの一つになります。

このストレスポイントというのは、適度にあるのであれば良いのですが、あまりにストレスが多すぎると子供は集中力を落とします。我慢してやり切る力が高い子はそう多くないですから、子供の場合は特に気を付けねばなりません。

そして、スクラッチとは、「余計な部分を全部削ぎ落として、思考力(プログラムを組むこと)だけに集中できるもの」だと僕は捉えています。だから、ビジュアル(文字を打つのではなくブロックを使って)でプログラミングなんです。

ここでいう「余計な部分」とは、「プログラミング言語を書く」という行為です。

一応付け加えておきますが、でも本来はそれが「プログラミング」ではあるんですよ。

スクラッチを使って実際の仕事しているのは、教育関係者だけです。
つまり、スクラッチはあくまで学習教材であり、実際に世の中で働いているエンジニアは何かしらのプログラミング言語を書いて仕事をしています。もちろん、将来本当に働くのであれば、プログラミング言語は覚えなきゃいけません。スクラッチじゃ現実のものは何も作れません。

しかし、「プログラミング的な訓練をすること」つまり、あくまで「論理的な思考力を鍛えること」が目的なのであれば、プログラミング言語を覚えることは全部余計なんですよね。書き方のお作法とか、どんなメソッドがあるだとか、そんなことは全部必要ない。

ですので、思考力を鍛える場合には、むしろスクラッチの方が上です。

下手にプログラミング言語を教えて、最初のとっつきにくい書き方のお作法とか、覚えなきゃいけないことの多さとか、それで嫌になる子もいます。

それよりも、視覚的にできるビジュアルプログラミングで「考える」訓練が楽しくできるのならばそちらを使ったほうがいいと僕は思っています。

■何のために教えているのか?

僕は、プログラミングを教えるのは、「子供の将来を広げるため」だと思っています。

そこが、本質です。

教育には、「コンテンツ」と「トレーニング」という二つの側面があります。

ぶっちゃけ「コンテンツ」としてのプログラミングなんてどうでもいいんです。

将来本気でやりたくなったのならば、自分で勉強していけばいいですし、逆に今たとえ有用なプログラミング技術を身につけたところで、10年後は結局また新しい技術を学ばなければいけなくなります。いまの世の中では、同じ労働であればその労働の価値はだんだんと下がっていきますので。

ですので、大事なのはむしろ「トレーニング」の方です。

そして、「トレーニング」の観点で大事なことが何点かあると思っていますので挙げていきます。

■「作る側に回る」その体験をする

プログラミングとは、何かを生み出す行為に他なりません。

ぼくたちの身の回りには、プログラミングによってできているものでありふれています。

お店でよく見かけるようになったペッパーくんや、お掃除ロボットのルンバなどもそうですし、もっと身近な炊飯器や電気のon/offのスイッチ、今見ているこのwebページなどもプログラミングが使われています。

普段私たちは、これらを「使う側」でしかないので、それが一体どのようにしてできているかを意識することはないでしょう。

しかし、それらは確実に誰かの手によって作られています。誰かが作ってくれたモノによって私たちの生活は豊かで、成り立っています。

日本における教育とは、何かと「受け取る」ことが多いものであるとぼくは思っていますが、ここに質的な転換をもたらせるのがプログラミングの醍醐味の一つです。

消費するんじゃなくて、作る側に回る。何かを生み出す。自分で組み立てていって、アウトプットを作る。

今の学校教育では「受け取る」ことのほうが圧倒的に多いでしょう。何かを生み出す、作るという経験は少ないんじゃないかと思います。

しかし、世の中に出た後、社会に出た後に大事になってくるのは、こうした「作る」ことです。

特にこれからの時代はもっとその色が強くなってくるでしょう。人に言われたことだけやる人間では、働いていくことも「メシを食うためだけ」と割り切って「つらい」と感じるかもしれません。

「作る側」に回ることができれば、人生を面白く、楽しく生きていくことができるかもしれない。

別の言葉で言えば、「自主性」です。
「受け身」でいるのではなく「自主的」になること。そういう自主学習をする。

学校時代から、こういう体験を刷り込んでいくことは非常に大きな財産になると僕は信じています。

■失敗を良しとする。何度も試した先に、できるようになる

「むしろ、たくさん失敗した方がいい。」これもプログラミングによって磨ける大きな姿勢です。

プログラミングの世界では最初から正しいプログラムを作ることはできません。
まず作ってみて、実際にどうなるか動かしてみて、意図と違ければどこに原因があるのかを探して、また考えて直す、そしてまた動かしてみる。

こういう試行錯誤の連続の世界です。むしろ、たくさん間違った者が遠くに行ける世界です。

今の世の中、トライ&エラーを繰り返せる人材の方が生命力は高いと思います。

そして、これも学校ではなかなか「失敗しろ」という文化はない気がします。(そういう学校なのだすれば、良い学校ですね)

いきなり100%の完成度を目指すのでなく、とりあえずやってみる。作り始めてみる。手足を動かしてみる。1%でも2%の進捗でも良いからまずやってみる。

そうして、粘って粘ってコツコツやっていくと、完成度が10%になり20%になり、50%になり、100%の完成度に近づいていく。

これは大人になってから、実際の仕事で行うプロセスに等しいと思っているので、そういう体験を今のうちからできることも大きいと思います。

できなかったことができるようになる。わからなかったことがわかるようになる。こういう経験は好奇心を刺激して面白いものです。

■できるだけ「教えない」こと

先生としては、「失敗をさせる」ために重要なことがあります。

それは、「あまり教えない」ことです。

人にもの教える先生や講師という立場はどうしても教えたがりますし、色々と教えることで変な話安心感が(自分のほうに)生まれたりします。

ただそれで満足していてはダメだなと僕はいつも思っています。

教えるのではなく、一緒に肩を並べて、一緒に考える、一緒に悩む、一緒に学んでいく。それでいいのではないかと思います。

(だから、僕もよく「ん〜わかんないなー。できないなー」なんてことを、生徒の隣でよくつぶやいています笑)

むしろ、できるだけ教えない方がいい。というかその方が難しいんです。教えるのは簡単です。

例えば、生徒が間違いであるプログラムを組み始めた時、もちろんこちらとしては先がある程度読めるので、「そのやり方でいくと多分うまくいかないよ」というのはわかります。

そして、その時点で方向修正をして、正解へと教えていくのは絶対にやっちゃダメです。

これは、「失敗を摘み取る行為」です。その子の可能性を潰すとすら思います。

とにかく自由にやらせてみる。自分のやり方、自分の思う方法でやらせてみる。何かやろうとしているときには先生は見守る。この姿勢が大事です。

だから、僕のレッスンでも例え扱うカリキュラムが同じだとしても、生徒によって途中のプロセスは異なっています。違うものができることもあります。

でも、それでいいんです。その子のやり方、その子の特徴を尊重する。
「自主性」を持って進めて、自分で間違いに「気づく」ことも1番の学びになります。

そういう可能性は、先回りして潰しちゃいけない。

ただし例外として、学びはじめの初心者の時などにはある程度のことは教えてあげる必要があるでしょう。

何も知らない初期の状態では、当然「はい、どうぞ。自分でやってみて」といったところで「何をしたらいいのかさっぱりわからない」という状態になりますから、ある程度の武器は与えてあげる必要があります。

何事もそうですが、ある程度の道具があり、武器があり、基礎があって、そこからやっと自分で動き始めたり、思考ができたり、応用ができたり、オリジナリティーが生まれたりするのです。

ですので、「教えなきゃいけない部分」と「教えずに見守る部分」の範囲を自分で考えながら指導していくのが良いのではないかと思います。

そして、そもそもプログラミングにおいては、正解は一つではありません。

「正解はひとつじゃない。いろんなやり方があるよ」ということは、レッスン中も僕も口をすっぱくして繰り返し言います。

学校の勉強は基本的にテストに向かってやりますし、最終ゴールは「受験」ということになりますから、どうしても正解があり、それを学んでいくというスタイルです。

しかし社会では、正解が見えなくて自分で見つけていかなくちゃいけないし、やり方も一つではありません。それが大人になってからの仕事です。厳しい世界です。

そういう経験もプログラミングを通してできることは大きな糧になるでしょう。

■「いま学んでいること」と「現実世界」をつなげる

これも大事な視点です。僕はレッスンの節々でたまに脱線した世間話をチラッと入れます。

例えば、今日Aという内容を勉強したのだとしたら、Aという技術は身の回りのこんなことに使われているよ、Aという技術を使ってこんな仕事をしている人がいるよ、いくらぐらいお金になるよ、などです。

できるだけ学習と現実世界のリアルを繋げていく作業を意識します。

こうすることで、「自我に目覚めさせること」にもつながるのかななんて思っています。

教えているのはあくまでプログラミングという一つの世界、しかもそのほんの一部でしかありませんが、いま学んでいることと現実世界がつながり始めると、「外の世界」につながると良いなと期待しています。

子供というのは、通常接する大人は親と学校の先生ぐらいでしょう。
そこに親でも先生でもない、僕のような人間が話をする機会というのは手前味噌ですが、影響があるのだろうなと思いながらやっています。

「社会にでたら、こうして働くのか」
「この技術が、世の中のこんなことに使われているのか」

こういったことがリンクしはじめると、他のことにも興味を持ち始め、ゆくゆくは「自分は何をしたいのか」といったことを考えてくれるようになったら嬉しいですね。

学校という世界は、とにかく狭い宇宙の中です。
でも実際の世の中はとてつもなく広い。

社会に出てから、いろんなことを知り、自分の興味を探るのではなく、今のうちから、「世の中ってこうなってるんだ」「あ、面白そうだな / つまらなそうだな」「自分は何が好きで何が好きじゃないか、それがよく分かった」とか、そういう感性を育てることが大切だと思います。

以上、かなり長くなりました、今日はおしまいです。

結局は、教えるに当たって大事なのは本質を忘れない、ってことなのかなと思います。

未来の可能性を広げようと思ったら、個々が持ってる原石を見つけて、信じて、伸ばす方法を考えて実行してみる。外の世界も見せてあげて、新しい視点を与えてあげる。

そんなことを試行錯誤しながら、僕も探っているところです。

コメントを残す

メールアドレスが公開されることはありません。