最近、c-lessonfsharp-lessonで人の書いたコードを見ていて思った事。

初期のプログラムの学習というのは、なにかバグとかにあたったりして試行錯誤する所で進んでいる気がする。 例えば今、32bitのintを4つのcharに分けて保存する、みたいなコードを書く所で、 16進と10進の間の変換とかを試行錯誤しているのを見て、 intとかの値とかビットとかの理解が進んでいるように見える。 そういうのってたしかにあったよなぁ。

最初プログラムを学ぶ時に、本を読むだけではダメだろうな、というのは皆が思う所だろう。 だから写経というのが良く行われるが、 これもあまりにもトラブル無く写すだけだと学習効果がいまいち高くない、 というのは体感として皆も思っている事に思う。 やらないよりはマシという感じでやっている気がする。

なんかちょっとトラブルとかあって試行錯誤して解決出来るくらいがいいんだろうな、とは思う。 理解出来ないまま解決するようなのは良くないので、 理解出来る程度の難度でありながら、 なんか理解出来ないまま動いてしまったという事があまり無い程度には難しい詰まり方が望ましい気もする。

別にバグに限らず、複数の実装方法がある時にそれぞれを試してみる、というようなのも学習にはなっている気がする。 何にせよ、試行錯誤する体験が初期のプログラム学習の本質と思う。

では逆に言えば、初期のプログラムの学習をするためにはこの試行錯誤の体験を最大化するのが良いのでは無いか。 費用対効果を最大に試行錯誤を体験させる。 さらに言えば、プログラム教育の教材というのは、この試行錯誤の体験で評価するべきものなのかもしれない。 プログラムを教える時も書いたコードについてなにか言ったりしがちだけれど、本当は経験が重要なのだから、 必要な経験を費用対効果最大になるように積ませるのが本来考えるべき事なのでは無かろうか。

試行錯誤というのは完全に用意されてしまうとあまり良くない気もするけれど、 一方である程度は場を用意された方がしやすいという部分もある気がする。 なんか試行錯誤を積むのに良い感じの設定を追求していくのが初期のプログラム教育の本質かもしれない。

教えるという視点で考えると、書いたコードを採点するのでは無く、その過程で行った試行錯誤で想定しているものをやったかどうかを問う方が良いのかもなぁ。

なおc-lessonは割とひな形というか骨組みくらいはこちらで用意して中を書いてもらう、という形態で、 fsharp-lessonは割と自由に書かせている。 c-lessonの方がより扱う話題が広いのである程度同じ所は通ってもらわないといけないのに対し、 fsharp-lessonはどちらかというと構造を作る練習をするのを目的としているから、 という違いがある。

初期のプログラム教育の経験を最大化するという視点に立つと、どちらが良いのだろう?