先ほど書いた記事では、プログラム教育に対する誤解を挙げて、プログラム教育はそういうものではない…という否定ばかりを書いた。
否定ばかりされて、何が何だか分からなくなった、という人もいるかもしれない。
今度は、プログラム教育が何を目指す教育なのか書いてみたいと思う。
学校の勉強では、国語・算数・理科・社会・図工・音楽…などというように、学科がわかれている。
これが当然のように思われているが、実は学校教育の弊害の一つが、「学科を分ける」という考え方だ。
国語と算数は別のものだろうか?
算数には文章題が良く出される。問題の意図を理解するには国語の能力が必要だ。
理科では数式をよく使う。社会問題である二酸化炭素の削減を論じるとき、科学の知識は必須となる。
図工だって幾何が理解できていなくては展開図を作れない。音楽は周波数が単純な整数比となるとき、美しい和音となる。
これらの学科を分けて考えることに、いったいどんな意味があるのだろう? 全部ひとつながりではないのか?
でも、小学校時点から学科を分けて教えられた結果、多くの人が国語と算数は違うものだと思っている。
本来、学問というのはひとつながりになっているものだ。
理系と文系、なんて垣根は、このつながりを理解していない人が生み出したものに過ぎない。
「数学なんてやって何の得になるのか」という、子供が良く発する質問がある。
答えは幾通りも考えられるが、この質問が定期的に出てくることに目を向ける必要があるだろう。
数学が他の分野に繋がっている、ということに気付けば、この質問は出てこない。
質問が出てきた時点で、学校教育制度の負けだ。学問がつながっていることを教えられなかったのだから。
誰かがつながりを教えなくてはならない。
その子がテレビゲーム好きなら、すべてのテレビゲームの裏で数学が駆使されていることを教えられると良いだろう。
その子が音楽好きなら、古代ピタゴラス音階からの、音楽と数学の結びつきを教えられるかもしれない。
その子が物語好きなら、不思議の国のアリスの作者は数学者で、言葉遊びの裏に数学が潜んでいることを伝えてみよう。
すべてのものは学問の対象になりうる。そして、すべての学問はつながっている。
じゃぁ、どんな学問であっても、その意味を自分の興味に結び付けられるはずなんだ。
ただし、これらを教えるためには、当然のことながらそのことに詳しい大人が周囲にいる必要がある。
子供が興味を持っている分野、というのも、一人一人違うので学校では教えにくい。
プログラム教育は、この現状に風穴を開ける、新しい学習方法だ。
コンピューターは万能シミュレータだ。理論的に論じられるものであれば、どんなものにでも化けられる。
そこで、各自が思い思いの趣味を楽しめばいい。それだけで、学問のつながりを肌で感じられる、他にない学習方法となる。
ただし、自分でプログラムする、というのが大前提だ。
お絵かきツールを使って絵を描くだけだと、紙とペンをコンピューターに置き換えただけで、学習効果は得られない。
まず、自分で絵を描いてみる。
これは図工の知識が必要だ。
続いて、コンピューターにプログラムするために、絵の中に現れる線の角度や長さを測ってみる。
これは算数の知識だ。
プログラムする。
言い換えれば、ちょっと特殊な言葉を使って作文をする。
この作文の出来は、直接結果に表れる。
正しい順序で書き方を説明できていないと、正しい絵が描けない。
論理的な文章を書く訓練になる。国語だ。
結果がうまく出ないとき、どこが悪いのか探さないといけない。
作ったプログラムが長くなってくると、その中のどこがおかしいのか探すのは大変だ。
結果をよく観察し、おかしくなった場所を特定し、自分のプログラムの手順のどこら辺が悪いのか推察する。
つづいて、プログラムの該当箇所を探し出し、書き換えてみて、正しくなったかを確認する。
これは理科の実験と同じだし、小学校では教えない、工学的なフィードバック改良過程だ。
ここでは絵を描く例なので、社会や音楽は出てこない。
でも、音楽を作ることもできるし、地理クイズのようなゲームを作り出す子だっている。
画面上で多数のキャラクターを動かし、物語を作る、という遊びを始める子も多い。
子供は想像の世界でお話を作るのが大好きなのだ。
楽しい物語を作るには、良いお話がどういう構造になっているかを知らないといけない。
そして、それをみんなが楽しいと感じる方法で表現しないといけない。
これには国語の能力だけでなく、表現能力やプレゼン能力が必要となる。
学校では教えないが、実社会で必要になることが多い技術を、子供が勝手に学び始める。
想像力さえあれば、どんな学問でもプログラムと結びつく。
学問の垣根を飛び越え、学んだことはすべてつながっている、と肌で感じ取る。
これが、「プログラム学習」の第1の効用だ。
▼「知ってる」と「説明できる」の違い
ネットを見ていると、誰かの発言に対して「知ってる」と知識をひけらかそうとする人がいる。
しかし、発言者と「知っている」という人との間には、知識に圧倒的な差がある。
例えば、あなたはパンダを「知っている」と思う。
じゃぁ、今すぐ何も見ずにパンダを紙に描いてほしい。
これがパンダだよ、と説明してほしい。
おそらく、知っている人の多くは、描けない。説明できない。
これは、誰もが知っているはずなのに、実はほとんどの人が説明できないというギャップを楽しむ「記憶スケッチ」という遊びだ。
(故ナンシー関の考案したもの。多くの人が描いた「パンダ」や「カマキリ」などの絵が載った書籍が発売されていて、爆笑ものだ)
これは単に「絵が下手だ」という話ではない。
絵が下手でも、ちゃんと「知っている」人は、的確に説明できる絵を描く。
どんなに絵が上手な人でも、説明できるほどに詳しくなければ、何か偽物くさい奇妙な絵を描く。
誰かが説明したのに対して「知っている」と言うだけの人の浅はかさがよくわかる。
知っていても何も偉くはない。説明できるほどに知識があれば、ちょっとは偉い。
小学校の友達同士で、勉強でわからないことを教えあう、というのは普通に見られる光景だ。
多分、頭の良い子が教える側に回るだろう。
その子はなぜ頭がいいかというと、よく友達に教えるからだ。
初めて教えるとき、いきなり上手には教えられない。
どうやったら相手に伝わるのか、よく考えないといけない。自分が知っていると思う事を、さらに細かく分解しないといけない。
友達に教えようとしても、最初は要領を得ない。
でも、何度か説明するうちに、説明がすっきりしてわかりやすくなる。
これ、説明する子が、説明するうちにより深い理解に進んでいるんだ。
そして、深く理解しているから、次の授業で教えられた内容もすぐに頭に入る。
残念ながら不公平な話で、頭の良い子はどんどん頭が良くなる。
頭の悪い子は、教えられてばかりで、教える機会に恵まれない。なかなか理解が進まず、頭が悪いままだ。
プログラム学習は、この不公平を失くす役割もある。
コンピューターは何も知らない。いちいち教えてやらないと何もできない。
自分の知っていることをコンピューターに教える…つまり、プログラムする、という経験を通じて、より深い理解に進むことができる。
何度も繰り返すうちに、説明できるレベルまで理解しよう、という習慣が自然に身に付く。
どんなものを見ても、これを人に説明できるだろうか? と考え始めれば、実際に説明しないでも深い理解にたどり着くことができる。
これが、プログラム学習の第2の効用だ。
以下は余談だけど、大切なこと。
頭が良い子がプログラムを作れるのは、当然に思えるかもしれない。
でも、頭が悪い子こそ、プログラムを経験する意味が大きい。今までに人に教えた経験が少ないから、伸びしろも大きい。
頭が悪い、と思われていた子が、プログラムを始めた途端にぐんぐん頭が良くなっていくなんてことだってあり得る。
ただ、教えることに慣れていないから、最初は時間がかかるかもしれない。
急がずにじっくりと取り組む環境が必要だ。
ところで、「世界で最初のテレビゲーム」と呼ばれるスペースウォーを作ったスティーブ・ラッセルは、「うすのろ」というあだ名で呼ばれていた。
他の人よりも頭が悪く、何をさせても遅かったそうだ。
#「うすのろ」は、書籍ハッカーズで出てくる翻訳語。原語でのあだ名は slug 、「なめくじ」の意味だ。
でも、じっくり取り組むことで、誰もが認める、面白いプログラムを作り出した。
あまりに面白いから、他の人も真似し始めた。多くの亜流が生まれ、そこからさらに亜流が生まれた。
結果として、今のテレビゲームがある。すべてのテレビゲームは、彼が作ったゲームの子孫だ。
彼は「うすのろ」だったかもしれないけど、その分伸びしろが大きく、最後には誰もやらなかった大きなことを成し遂げたんだ。
これからプログラムを始めようと思っている人は、途中であきらめずに続けてほしいと思う。
▼模倣すること
先に記憶スケッチの例を挙げたけど、もちろん急に言われたものでも上手に描く人がいる。
何で描けるかと言えば答えは簡単で、以前に描いたことがあるから、だろう。
見ていても、なかなか細部が頭に入ってこない。でも、一度描いてみれば頭に入り、記憶だけでも描けるようになるのだ。
一度描く、というのは「模倣する」ということだ。
模倣するというのは研究の基本で、まずは何かを模倣することから始まる。
そして、コンピューターというのは万能のシミュレーターだ。
論理的に表現できることであれば、ありとあらゆることを模倣できる。
1990年代に LEGO LOGO というプログラム教育があった。
まぁ、今でもあるのだけど、僕も当時あこがれて入手した。
(注:本来教育組織向けで、個人が入手するようなものではない)
テキストに「洗濯機の動きを作ってみましょう」というのがあった。
子供の興味を引くなら、そこは車とかじゃないの? と思うのだけど、読み進めるとこの課題が絶妙であることがわかる。
最初は、ドラムを回転、逆回転させてそれらしい動きを作ることを目指す。
一定回数動かしたら「洗濯完了」ランプを点灯し、完了を知らせるようにする。
洗濯機のふたにセンサーを付けて、ふたが開いたままでは動作が始まらないようにする。
この際、動作が始められないことを知らせる「エラー」ランプを点灯させる。
とりあえず、ここまでは作り方のサンプルもあった。
以降は、余裕があったらやってみよう、と書かれた課題。答えは載っていない。
・洗濯、脱水などのモードランプをつけ、回転動作を変える。
・洗濯ものの量を変えられるようにし、時間などを調整する。
・動作中にふたが開けられたら緊急停止させ、エラーランプをつける。
車を題材にしていたら、こんなに細かく真似をする項目を出せないだろう。
車は「自動的に動くもの」ではないから、プログラムで模倣しにくいのだ。
模倣することで、普段気付かない「洗濯機」の細部が理解できる。
どんなものであれ、細部を知ると驚きがあるものだ。
ここでは、自分でプログラムを作っているのだから、「緊急停止」がどんなに難しいことか知るだろう。
世の中すべての洗濯機が、この複雑な機構を取り入れていることに驚くかもしれない。
模倣することから得られるものは大きい。
そして、コンピューターは万能シミュレーターだ。
自分でプログラムすることで、なんでも模倣できる。世の中を深く知ることができる。
これが、プログラム学習の第3の効用だ。
プログラム教育の利点は多いのだけど、ここでは3点ほど効用を挙げてみた。
もう一度まとめ直すと
・学問がつながっていることを知り、多くの知識を結びつける能力が身に付く。
・知っている知識を説明することで、より深い知識を得ることができる。説明能力が身に付く。
・観察し、模倣することで世の中を深く学ぶことができる。
深い知識を持っていて、それらの知識を結び合わせる方法を知っていて、観察眼を持った人材が育つ。
ついでに言えば、説明能力があるからプレゼンだって上手だろう。
つまりは「頭が良い人が育つ」とまとめてもいいんじゃないかな。
本当にこういう人材が増えれば世界が変わるだろうね。
追記 2016.4.20
Scratch を開発した MIT メディアラボで学び、日本で Scratch の普及に努めている阿部和広氏が、「情報処理」に発表した論文が無料公開されていました。(PDF)
論文なので、プログラム教育とは何か、なんてことは理解していることが前提で、僕の記事内容とは異なります。
プログラムの授業で起こったことなど、実践風景をまとめたもので、読むのに専門知識は不要です。
これを読んでもらうと、小学生でのプログラム教育についてイメージされやすいかと思います。
追記 2016.6.30
文部科学省が、プログラム教育に関する有識者会議の議論取りまとめを発表していました。
この日記に書いた「誤解」や「目指すもの」は、日記執筆時点では僕の考えに過ぎなかったのですが、文部科学省も大体同じ認識を示していました。ほっとしました。
もう一つ、上の日記には「人に教えることでより深く理解できる」ということを書いたのですが、この学習方法を「ファインマンテクニック」と呼ぶのだそうです。
ファインマンが考えたわけでもないのですが、天才の名前を付けることで「正しい学習法である」という感じは出ます。
その一方で、名前だけで満足して本質が理解できない人も出てきそう。
リンクした記事は、たぶん理解していない人が書いていますし、理解するつもりもなさそうです。
同じテーマの日記(最近の一覧)
関連ページ
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |