プログラミング教育に関する考察
やろうと思いついけば1分で出来ることでも、やろうと思うまでは勝手には出来上がらない。作る技術も大事だけど、作ろうと思うことのほうがもっと大事。
大学や高校でかなりの人数にプログラミングを教えているはずなのに、プログラムを書ける人がこんなに少ないのは、「作ろうという思い」不在のまま「作る技術」だけを教えるからなんだ。僕のプログラミング演習ではそこんとこを何とかしたい。でも、モチベーションってのは教えたり与えたりするもんではないからなぁ。難しい。
2004/06/01 01:25:40の僕はこんなことを思っていたようです。今の僕なら「「作ろうという思い」不在のまま「作る技術」だけを教えるからではないだろうか。」と書くかもしれません。
渡辺さんの日記の「プログラムをゼロから教えるには、どんな形式で何コマかけてどこまで教えるべきだろうか。」という文章を読んでからいろいろなことを考えていますが、あまりまとまっていません。
もちろん、「作りたい物を作ることのできる」プログラマを育てるのなら、時間はたくさんあった方がいいのですが、現実的にはそんなにたくさんの時間を割くことができません。教える教師も、それなりに高いスキルを持った人間が一貫して教えるのが好ましいですが、結局のところプログラミングの専門家でも教育の専門家でもない、研究の専門家が片手間に教えることになる場合が多いかと思います。一貫して教える人を用意できなくて、複数人で持ち回りになったりするケースもよくあることです。
そして、やはりみんな「プログラミングは授業なんかで説明したって書けるようにならない、自分で手を動かして実装しないと」と思っているのでしょう、課題がたくさん出るわけです。 プログラミングの課題は、できる人にとっては軽い課題でも、できない人にとっては100倍もの負担となってのしかかります。半ば必然的に、「できる人」の書いたソースコードが出回り、できない人がそれを読解して改造して提出するというケースが出てきます。
「できる人」のソースコードや説明が、教師の作った講義資料よりもよいものなのであればそれは歓迎してもいいことなのかも知れませんが、そうとは限りません。学生たちは「ちょっとできる学生」が書いた「あまりよくないわかりにくいコード」を、それが課題の回答だからという理由で一生懸命読むかもしれないわけですよね。たとえそのコードに変数名の綴り間違いがあろうが、使われていない関数があろうが。
「コードを書いて、コンパイルエラーが取れて、実行したら期待した結果が出た」というのはゴールではないですよね。でも、現状の課題は「どんなに汚くても、人からのもらい物で中身を理解していなくても構わないから、とりあえず動く物を作る」という課題ではないでしょうか?そんな課題ではどんなにこなしてもプログラマは育たないのではないでしょうか。 僕自身は、大人数を相手に教えたことはないので、そういうシチュエーションでは実現不可能なことなのかも知れませんが、「とりあえず動くコード」を「わかりやすいコード」や「より高速に動くコード」に変える作業が抜けているように思います。生徒が自分で考えて作った「もつれたスパゲッティ」を、解きほぐして整理し、わかりやすくすることが必要なのではないでしょうか。
可能ならば、課題の提出が早い人にインセンティブを与えて「できる人」のコードを締め切り前に入手し、それを添削した上で無記名で公開してしまうというのがいいかもしれませんね。誰がその「添削」という労力を払うのかが難しい問題ですが。考えれば考えるほど、プログラミングの授業を1対多でやるのは難しいような気がしてきます。1対3くらいならまだなんとかなるかも知れませんが…。ううむ、そうか、僕が今まで教えてきたのは、全部最終的には1対1で目の前でコーディングしたり、できあがりのソースをメールで送らせてがりごり改良して送り返したりしているなぁ…。1対多には応用できないかも…。