もうすぐ小学校でのプログラミング教育が始まる。
それを受けてか、世の中にはプログラミング知育玩具が多く販売されている。
カードやUSBのブロックでロボットに命令を与え、思い通りにルートを進ませる、という類のものが多い。
私もいくつか持っている。
以前、知人からプログラミング教室を開かないかという話をいただき、検討する過程で、人寄せになるかと思い試しに買ってみたものだ。
で、買う前から思っていることなのだが、これって、それほどプログラミングに関係なくないか???
いや、確かに、
・目的達成への手段を調べ
・プログラム実行の過程で起こる事を予測し
・失敗の原因を探り
・トライ&エラーを繰り返しながら解決をはかることで
・論理的な思考力や集中力を培う
ということをやっているのだから、合っている。
合っているんだけれども、非常に表面的というか、少しかすってるだけというか、やれることが浅いというか、『遊んでいる』というより『掌の上で遊ばせて貰っている』感がすごい。
プログラミングの本質を突いていない気がする。
ロボットをルート通りに進めてみても、工夫の余地が小さ過ぎてそんなに面白くないし、新たに何かが発見されることもないし、自分の独自のアイデアが形になる部分も小さいし、特に何かが便利になるということもない。
一通り動かした後、カードやUSBブロックに入っているデータの中身を見てみて、同じようなものが作れないか挑戦してみる、というなら非常に面白いけれども。
以下は完全に私の経験からなる私の意見であり、国や他の技術者諸兄諸姉の考えとは異なるかも知れないが、私の思うプログラミング教育の目的とは、
・論理的思考
・合理的思考
・探求心
・自分で調べてやってみる力
・最低限のコンピューター操作(おまけ)
を身に付けることなのである。
特に、合理的思考というのは今の日本に足りずプログラミングで養うべき重要な点である。
人がやらなくても良いことは人がやるべきではないのだ。
『人が手で丁寧にやらないと心がこもってない(出力結果は同じなのに)』という類の迷妄を吹き飛ばさなくてはならない。
最低限のPC操作と安全なインターネット利用の仕方だけを教えた後、すさまじく面倒なスプレッドシート操作の宿題と、キーワード『VBA』を与え、出力結果さえ合ってれば手でやってもプログラムを作ってやってもOK、とかいう方法はどうか。
全て一気に身につきそうな気がするが、ハードルが高いだろうか。
子供同士、ペアプロでやっても面白そうではないか。
プログラマーとして優秀なのは、面倒臭がりな人間である。
理不尽で単調で詰まらなくて面倒な作業を割り振られ、深夜まで残業続きの日々−−−。
その時、自分を奮い立たせ指先ばかりを動かし続ける勤勉な人は、企業では評価されるかも知れないけれども、少なくとも優秀なプログラマーではない。
作業内容を見直し、少しでも人間がやらなくても済む部分を見つけ、自動的にやる方法を考え調べ、トライ&エラーを繰り返しやり遂げる者こそが優秀なプログラマーである。
注:あくまでプログラマーの話である。システム構築全体や社会全体がそうであるとは言っていない。
昔、要件を調整せず、人員も調整せず、クライアントにただ土下座外交を繰り返すばかりで部下もろとも巻き込んでプロジェクトを大炎上させてばかりの先輩がおり、彼がある時、若い部下に
「おいお前、なんで手ぇ動いてないの?
手ぇ動かせよ!」
と叱責していたのだが、ねぇねぇ、
システム屋は手を動かすのが仕事じゃないからね。
頭を動かすのが仕事だからね。
今、部下君、考えてたんじゃん。
この状況を脱する為の、もっと効率良い方法考えてたのかも知れないじゃん。
そんでお前は人を動かすのが仕事のポジションなのに、なんで毎日手ばっか動かしてんの?
少しは上司とクライアントを動かそうよと思ったものである。
上記は企業内での話であるが、教育機関も、子供に敢えて手間の掛かる方法で面倒なことをさせることで精神の修養が云々〜、みたいなところがあるので、そもそもプログラミングと相容れない部分がある。
なぜ突然このような記事を書いたかというと、今朝のNHKのニュースで『理系の女性を増やすために女児向けプログラミング知育玩具が出ています』という特集をやっており、例のごとくカードを読み込ませロボットを進ませ、着せ替え人形のアイテムを集めてワーイ!というのをやっていたからである。
うーーん、ロボットの進路上にファッションアイテムを配置したら女児が喜ぶと思ってるのかぁ……。
そしてそれがプログラミングなのかぁ……。
うーーーーーん。
うーーーーーーーーーーん……。
あのね、実は世の多くの女児は、プログラマー的思考を育むのに超☆適している玩具を既に持っていますよ。
それは、変身ヒロインアニメの変身アイテムである。
ブローチやら筆やら瓶やらのコレクションアイテムを本体に差し込むと音が出たり液晶画面にキャラクターの絵が表示されたりする類のあれだ。
あれで遊んでいる際に、子供に話しかけてみてほしい。
「なんでこっちの筆とそっちの筆で、差し込んだ時の音が違うんだと思う?
見比べてみよう。
そうだね、筆の横にある刻みが違うからだね。
差し込む穴の内側を覗いてみよう。
小さいスイッチがいっぱいあるね。
筆をさすと、刻みがこのスイッチを押すの見える?
初めにこのスイッチとこのスイッチが押されて、もっと差し込むと別のスイッチが押されるね。
1回目と2回目の組み合わせのパターンで、違う音が出るみたいだね。
1回目に押されるスイッチが n 個で、2回目が m 個なら、組み合わせパターンは全部でいくつ?
でも2回目のこのスイッチはどの筆でも必ず押されるね。
『2回目押されたよー』の合図なのかも。
必ず押されるなら組み合わせパターンから除かないとね。
じゃあ、刻みの場所を自由に変えられる道具を工作してみたらどうなる?
さっきと違う音が出たね。
他にも音が出るか試してみよう!
でも、めちゃくちゃに変えてちゃ効率が悪いよね。
ここに表があるよ、マトリックスって言うよ。
縦の列が Column 、横の行が Row って言うよ。
ここに、全部の組み合わせパターンを書き出して、他に音が隠れていないか一緒に探してみようよ」
キラやば〜☆
たったこれだけの課題なのに、プログラミングに必要な要素がバンバンでてくるよぉぉ。
プログラミング的な思考力を養うなら他に、昔からある電子ブロックや電子工作も適しているように思う。
若しくは、ピタゴラスイッチを作るとか。
ソフトウェアというのは、昔、ハードウェア(配線等)でプログラムを組んでいたのがめんどくさくなり、一部の配線を動的に変えられねーかなーと工夫した結果、ソフトなウェアになったのだ。
どうか子供達よ、プログラミング教育を受けた未来の大人たちよ。
正しく面倒臭がりになってほしい。
『手でやらないと心がこもってない』と言う前に、心の定義および、その注入プロセスにおける機序を明確にできる人間になってほしい。
人間は人間にしか出来ない事をすべきであるという意識を持ち、人間にしか出来ない面白い探求に、興味ある物事の探求に、自己のリソースを振り分けてほしい。