わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

指定行を日本語で説明

今年度のプログラミング授業では,終了時の小テストに,例題プログラム*1の特定の行を指示し,その内容を日本語で説明するという課題を入れています.
答案は多彩なのですが,正誤判定をするだとか,正解率を算出しようだとかいった意図はなく,書き慣れ,説明慣れをしてくれればと思っています.
しかし“問いっぱなし”というわけにもいきません.事後に正解案を作っています.次回授業で振り返るほか,授業のページでも公開しています.
字数に余裕があれば,正解案は2通り示すよう,これまで心がけてきました.コーディングに忠実な,言ってみれば手続き的な説明の仕方と,その処理が何を意図したものであるかを記した,宣言的な説明の仕方です.
正解例を作っていくと,手続き的な説明の方が字数は多くなりますが,コードの各部分と,説明の中の語との対応づけが,より容易となります*2.宣言的な説明は,字数をより少なくできるのに加えて,処理の本質を見出すことにもつながります*3
どちらで書くかというのは,担当授業で指示すべきものではありません.主に2種類の書き方があることを示していきたいところです.学生には,状況に応じて最も良い説明の仕方を一つ,選べるようになることを期待し,毎回,頭を働かせ手を動かす課題に取り組んでもらうとします.


それで終わったら苦労はしませんで,正解案より前,問題文づくりの際にも,学生に答案を書いてもらえるよう,配慮しておかないといけません.
“書き言葉”の例なしで,80分ほどこちらが口頭で説明し,じゃあ残り10分で書いてみてねと言っても,なかなか書けないのです.
そこで,問題をPowerPointのスライドとする際にも,他の行だったらこう書けるといった例を入れ,「例にならって〜を説明しなさい」という問い方にしています.
何回か出題をし,次回の授業の問題文を作っているところで,小さなことですが,変数名だけでいいのか,それとも「変数i」のように「変数」を書いておくべきなのかが,気になってきました.
学生時代に論文の指導を受けたときのアドバイスを,思い出します.それは,小文字の変数名から文を始めないというものです.英語で論文を書く際の慣習なのですが,日本語で,プログラムコードを“書き言葉”で表す際にも取り入れると,書きやすくなることに気づきました.
「i」ではなく「変数i」と書く,というのは,英小文字から文を始めないようにする手段の一つに過ぎません.例えば型名については「型int」は不自然であり「int型」とします*4.これが文頭にならないようにするには,それより前に,接続詞または何らかの修飾語を置くことになります.「intの変数xは…」という文は,「10行目で宣言されたint型変数xは…」のように書き換えます.
文頭小文字回避を徹底するのは,なかなか難しいです.この記事を書きながら,次回授業の問題案を見直すと,ファイル名や,「forループ」といった言葉が,小文字の文頭となっています.何か語句を書き加えるか,そのままにするか…次回授業の直前まで,考えることにします.


追記:公開済みのスライドから,出題・正解の例を載せます.2行2列の行列どうしの積を求めるプログラムです.正解例では先に挙げたものが宣言的,後のほうが手続き的です.

*1:資料として配布しています.プログラムコードには行番号を振っています.

*2:宣言的な答案よりも,減点のリスクが少ない,あるいは満点は取りにくくても加点してくれやすい,というメリットを挙げることができそうです.

*3:授業の対象外ですが,「こんなコードよりも,等価でもっと読みやすい/処理時間の短いコードが書けるのでは」と,プログラムコードの改善を図るのも,宣言的なほうが有用となります.

*4:関連:http://d.hatena.ne.jp/takehikom/20090111/1231626937