暇つぶしプログラム教室の第一回

C言語をslackで教える、という奴。 PostScriptのサブセットみたいな処理系を書かせる、というのが、一人目が無事最後まで終わった。

一部こちらの理解が正しくなくて不要に大変な事をさせてしまったが、最終的にはなかなか良いコードになった気がする。 こちらも最初から全部完璧とはいかん事は当然と思えば、まぁまぁうまく回ったんじゃないか。

途中かなりバグって何が悪いのかも良く分からない状態になったが、そういう経験が出来るのは良い課題だったと思う。 適度に複雑なので、適当に書くと動かないのだよな。

規模的にもこのくらいのコードをきっちり書ければ昨今のC言語なら十分かな、と思う。 ここより大規模な物は別の言語が良いだろうし、そもそも最近は個々の実行単位は小さい傾向がある。

指導しながら書けても一人で書くにはもう少し経験は要るだろうけど、そこら辺はコード読みとかいろいろ書くとかの話なので、教えるという点ではこの位で十分と思う。

終わってみて思うのは、やはりこのPostScriptのサブセットを書かせてみてslackで指導する、というのは、プログラムの教え方としてはなかなか良い、という事。 githubのソースと解説のページとslackの指導という3つの要素が全部あるのがいいよな。

自動で採点出来る形だとどうしてもコードの書き方の指導にはならないので、中級を目指す所ではslackで指導するのは良いと思う。

またあまりに自由に書かせ過ぎてしまうと指導が大変過ぎるので、適度にコードを用意しておくのは大切だと思う。 用意しすぎるとコード書く練習にならないので適度に途中から無くす方が良いだろうが。 そういう点で書籍はこういう目的にはいまいちと思うんだよな。 やっぱ最初の段階からforkしてやっていくのが良かろう。

また解説のページをちゃんと書くのも、二人目以降を考えると良い。 slackで全部書いてしまうと同じ事をその次の人にもやらないといけないが、必要な解説をmdに足していくと、だんだんとその人用に解説しなくてはいけない事が減っていく。

初心者がどこでつまづくかは実際にやらせてみた方が良く分かるので、やらせた結果をmdに反映していく方が良い文書になる気がする。

jmpは実装させた方がそれっぽい

最初はワード実行はCのスタック使えば良いかと思ってたのだけど、 ちょっとした手違いで自前のスタック必須になってしまった。 で、これだとループを実装する時にjmpが必要になってしまってそれを実装した。 実行可能配列内の相対アドレス指定のみ、というjmp。

やってみるとこれが結講面白みがある。 継続の所の実装が少し大変だが、 jmpを入れる方が勉強には良いなぁ、と思った。

そこで解説の方もjmpを実装するように変えてみようかな?と思っている。 どう自然な形でまとめるか、というのは考える必要があるけど、実行可能配列内だけの相対ジャンプ、という仕様は実装も簡単で論理的にも綺麗で出来る事も多いので、良いアイデアと思った。

トゥールーズまでの電車で考えてみるかなぁ。