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