プログラミング教育の目的はこういうことにしよう

 小中学校でプログラミングを必修、なんて決まったそうな。
 反対はしないが何が目的なのだろうか?
 職業訓練の早期化であれば「データ例外とエラー処理」について延々教えないといけないわけで、当然訓練を受けていない教員には無理だろう。よく言われるように論理的な思考を教えるためであればもっと別にやることがあるわけであり、それこそ数学の問題をきっちり解かせた方がよほどよろしい。何が目的なのかわからん。
 そういえば「論理的」な私は小学校3年生だったかの時に社会科のグラフが「生産額」になっているのをいぶかしく思ったなあ。「生産量で比較するべきだ。インフレが起ったら生産は変わらなくても額は増えるから実態が分からないではないか」。今でもこれに対する論理的な回答はもらえてない。
 好意的に受け取れば、そういうガチで論理的なことに答えることができないから論理的なことを教えることはできない。しかしながら何らかの論理的なことを教える必要がある。その妥協案として浮世離れしたプログラミングを教えてお茶を濁そうとしているのかもしれない。

 もっともワタシは文句ばかり言うわけではなくてキッチリと提案する人間である。なのでプログラミング教育を行うのが仕方ないとしたら、こういう目的で、というのを提案できる。
「成功体験。とりわけ問題解決の成功体験を児童生徒にさせるためである。」

 コンピュータとは仮想機械である。今ではMS-Windows上で別のOSであるLinuxを動かしたりするエミュレーターを仮想機械、と呼ぶことが多いが元々はコンピュータそのものが仮想機械であった。教習所の運転エミュレーターはコンピュータであるが、車であるかのような印象を与えてくれる、仮想の自動車であるわけだ。
 この仮想機械、設計製作し、動かしてみることが比較的容易である。そしてその製作する手段がプログラミングなのである。自動車を作って動かすためには、金属は買ってくるとして、鋳物を作り、旋盤で削り、組み立てて、秋葉原で部品買ってきて、電線半田付けして、調整してガソリン入れて、免許取ってテストコース作ればいらんな、という多種にわたる膨大な手間が必要だが、自動車エミュレーターの場合は、とりあえずパソコンの前に座れば、できる。計器類を細かく作りこまずとも「面倒だったら四角形でよい」というアバウトさもある。
 実際に部品を削っての工作でないから、失敗があまり怖くない。木工でも間違えて切っちゃったらリカバリーは大変だし(ボンドで貼って済めばよいが)、被害も甚大である。(すみません、中学の時にのこぎりを入れる場所間違えて椅子削っちゃったの私です。)あるいは隙間埋めるための材を間違って捨てたり、穴をあけるのを忘れて組み立てたりするとショックがでかい。接着剤が乾くまで待ちきれずに続きの工程やって「ああ」ってこともない。
 これにたいしてプログラミングは「なかったことに」すればよい。間違ったコードは削除する。消してしまっても頑張れば何とかなる。あるいは作り漏れた部分も行を挿入して書き足すのは容易である。その時に接着に気を使う必要はない。
 なので製作過程のミスをモノとせず、心は折れても部品は折れず、気を取り直すことができれば動くものが作り出せる、これがよい。更に一度作ると壊れにくい(小学生の時の工作のあの壊れやすさ)。バックアップを取っておけばそれで足りる。
 だから教師が手伝ってやらねばならんかもしれないが、最終的に何か動くものができる可能性が、実際の工作に比べてはるかに高い。つまり成功体験を得やすい、ということだ。教育的効果は高いと思うがどうだろう。

 カメが横に動くだけであっても「成功体験」のためにはやる価値がある、のだが、そこで自分で考えるオプションを付け加えてやればより大きな「成功体験」につながるのではないかと思う。
 なので、カメが動くプログラミングを奨励しているみなさん。例えばスクリーンセーバーのフレームワークは用意してやりましょう。
 スクリーンセーバーは「とりあえず面白いものを作る」ことができれば成り立つ、かついろいろなやり方がある。なので絵の得意な子は絵を描けばいいし、ドット絵でパラパラ漫画も面白いかもしれん。プログラムで図形が書ける子はそっちをやってくれればいい。二次関数や三次関数のグラフを描画するなんてのも悪くない。そんなふうにすれば、現場で使うことがないプログラミング言語を用いて課題に沿った描画をする演習が、一挙に個性を発揮する教育になったぞ。工作よりもバリエーションが多いのだな。
 カメがうろうろするプログラム、それ自体に実用性はないがスクリーンセーバーに組み込めばそこそこ面白い。やがて起動の都度、動きが違うようにしたい、という児童生徒が現れてきそうだ。先生はそういう意欲を受け止めて指導することができれば、まず十分ではないかな?
 作った後、家に持って帰っても捨てるタイミングに困るということはございません。すくなくともおとーさん、おかーさんは自宅のパソコンのスクリーンセーバーを子供の作ったものにしてくれます。これ、本人にとっては自信になると思うんだが。
(いまさらながらハイパーカードはよかったかな、と。)

 そしてコンピュータは速く正確で疲れない。これは児童生徒が使うものとしてもそうだ。この特性を生かして「問題解決」なんてのをやらせると、現実世界と向き合い、それに対して何かをやったという実感が得られる。うまいことにコンピュータは修正は楽だし、できることを制限してしまうのもアリだと思うからだいたいにおいて成功体験ができるのだな。これを組織的にやらせてみよう。

 子どもらしく「ゲーム必勝法」なんぞをやらせてもいいが、結構プログラミングが手間だ。
 こんな風に基本的なことをまとめてくれている人もいたりして、参考にするといいのだが。。。それでもホネだ。
 なので今まで当方がやってきたのを例として挙げると、娘の自由研究ネタとして公開されたデータの分析あたりが適当と思う。
 2011年は、なぜ電力不足を回避できたかを気温と電力消費量の関係から考察。2016年は熊本地震の余震がいかに多かったかを視覚化。まあ、こんなところだ。
 あまり一般的ではないなあ。遊び心が必要であれば暗号化ソフトでも書かせてみるかね?教える側はテキスト⇔文字コードの変換サブルーチンを用意しよう。ルール作って「作成/解読コンテスト」でもやってみようか。
 そういやビル・ゲイツはクラスの美人と隣りになるような席替えプログラムを作っていたとか。

 当方、相当量のプログラムを作ってきたが、だいたいは解決したい問題があって、どうするかを考えて作ってきたものである。どうしてうちの部署はモチベーションが低いと言われているか?心当たりが・・・ひょっとして客観的データから実証できないかな?もしデータがあるとしたら、、、あったはあったがベタうちテキストでは扱いにくいぞ。なんかいい方法ないかな・・・まてよこの記号をとっかかりに分解すれば自動化できるんじゃ。できたー。早速動かして、うわっ、思った以上、これは下がるはずだわ。プログラムで自動化しているからほかの部署と比較するの簡単なんだよね。「!?」見なかったことにしよう。ログオンID最近増えているけど、ちゃんと使っているの?とりあえずテーブル検索の形でチェックツール作成。しかしこんなにかかってはとても実用的とは言えない。えっと配列に読み込むってのがテクニックなんだな?ソート域も無駄なく指定したいところだが、ああ、こういうやりかたをすると空行に左右されないのね。おお!100倍近い速度になった。書き出しもきれいになった。さて結果は・・・こりゃあたしの手には負えんわ。全社的に対応してもらわないと。終わりはスカッとしたものではない。しかし、それであっても成功はしている。

 こうやって作っているうちについてくるのはVisionを持つ力である。もっと別のデータを探してこれないか。これだけの項目がそろえばよい。今の自分のプログラミング能力ではムリなんだけど、こんなテクニックがあれば先に進める。こんなのが見えてくる。列幅をコピーする方法は?他のプログラムを起動して終わるまで待って結果を取得するには?csvをデリミタ付きで読み込む際にはどうすれば?
 そんでもって正解はだいたいにおいて「Webを検索すれば出てくる」。言ってみればカンニングし放題である。探して、見つけて、コピペして、手直しして「動いた!」これもまた成功経験である。
 カンニングしても成功体験になるのはこれいかに?何をカンニングするかは自分が決めるからだ。そのかわりVisionが持てなければカンニングすらできない。これがテストのカンニングとの違いだ。(私のプログラミング時のカンニングペーパーにはあちこちから集められた「慣用句」とも言うべきコードがずらずらと並んでいる。)

 こんな風にプログラミングを通して、成功体験を与えることができる、先を予測して見通す力を培うことができる!というのが私の経験から言えることである。なのでそういうところを見据えたプログラミング教育をやろう。すると自ら問題を解決した経験がたまってくるものだから、それが当たり前になり、物事を改善するコトに抵抗感を持つ人が減ってくるはずだ。

 解決しようという問題があって、コンピュータだと比較的簡単に解ける問題があったりするから、成功体験が得やすいのだ。成功したのは論理的に詰めていったから、ってのがあるのでその分、問題解決に対して積極的になれるわけだ。
 従来、この問題解決に積極的になる、というのは特権階級の発想だったのだが、多少は広がるということだ。
 もっとも「答えだけ知りたい」と言う人にはプログラミング向いてないよね。なるほど、それで「無理矢理プログラムを書かせる」教育が必要なわけか。ガッコのせんせーご苦労さん。

 私の場合なのだが、
 めんどくさいことがあって
 どうやったら手を抜けるか考えて
 コンピュータにこれを任せれば楽だと気が付いて
 プログラミングして
 思い通りいった
 ということがあって、やったーって思って、
 思い通りいかなかった場合は反省があって改善して
とまあこういう成功体験が積み重なるわけだ。
 さらには
 (コンピュータに○○を任せることができれば)こういうことができる
というビジョンが作れるようになって、それを実現してゆく。
ここまできてはじめて「たっのしーい」になるのだよ。

 ついでに言うとタブレットでプログラミングやらせるのは不適当です。タッチパネルはキーボードに比べて精度が低すぎる。プログラムでは文字の打ち間違えは致命的。「,」と「.」打ち間違えてロケットが落ちた例があるのだよ。(実際に落ちたのは「-」を打ち損ねたケースだという説もある。)

社会問題ネタ、目次
ホーム