例題1-0:そもそもリーディングスパンテストって何だ

A: これからリーディングスパンテストのプログラムを作っていくわけだが、「じゃあB君作ってみて」って言ってもどうしたらいいかわからないだろう?

B: いきなり何を言い出すんですか。わかるわけないじゃないですか。

A: だよな。初めてプログラムを独学しようとするとき、プログラムを書くことによってコンピュータにさせてみたい「何か」がある事が多い。 けれども、その「何か」をさせるためには何を調べたらいいのかわからなくて途方に暮れることが多いんだよ。逆に言えば、自分が何をわかっていないのかをはっきりさせれば、やるべき事が見えてくる。

B: なんか謎かけみたいですね。自分が何がわかっていないのかがわかる人は、わかってる人なんじゃないかと思うんですが…。

A: まあそりゃそうなんだが、多くの場合はわかる部分とわからない部分が混在しているからね。それをはっきりさせるだけで大分見通しが良くなる。 さて、初めてプログラムを独学しようとする人が引っ掛かりそうな点を挙げてみると、例えばこんなのがありそうだ。

  1. プログラムをどうやって入力したり実行したりしたらいいかわからない

  2. プログラム言語の文法がわからない

  3. ある作業をプログラムとして具体的にどのように書いたらいいかわからない

  4. 自分がプログラムとして書きたい作業自体がよくわからない

B: あのー。最後の奴ですが、いくらなんでも自分がプログラムとして書きたい作業くらいわかっていると思うんですけど。

A: そうかね? じゃあB君がプログラムにしたい作業を言ってごらん。

B: へ? リーディングスパンテストですが。

A: リーティングスパンテストというのは具体的にどういう作業?

B: ええと、被験者に課題文を見せて、音読してもらうと同時に下線を引いた単語を覚えてもらいます(注:日本語リーディングスパンテストの場合)。 読み終わったらまた次の課題文を表示して、同じ作業を2文から5文ほど繰り返します。で、最後に下線を引いた単語を課題文×5秒の制限時間内に再生してもらいます。

A: ふむ。思ったよりしっかり覚えているな。感心感心。じゃあ次の課題文へ表示を切り替えるには具体的にどういう作業が必要なのかな。 そもそも被験者が課題文を読み終わったというのはどうやって判定すればいい? 再生時間はどうやって管理する?

B: あー、うー。えーと、えーと。

A: ほら。テストの手続きはよく理解していたみたいだけど、そのテストにコンピュータをどのように関わらせるのか具体的なイメージがなかっただろう? この部分を具体的に想像できていれば、プログラミングについて何を勉強したらいいのかはっきりするはずなんだ。

B: むむむー。

A: せっかくB君がリーディングスパンテストの手続きを言ってくれたから、それを土台にプランを立ててみようか。ちょっと待ってて…ふむふむ。こんな感じかなぁ。

../_images/01-0-01.png

実験によっては、必要な手続きを全部PCに任せて実験者は横でのんびり終了を待てばいいだけっていう具合にも出来るんだけど、リーディングスパンテストの場合はそれが難しい。 例えば被験者が自然なペースで課題文を音読し終えたかなんてチェックは人間がやる方がよっぽど手っ取り早い。だから、ここでは以下のような役割分担をしている。

PC

課題文を選んで表示する
課題文をいくつ見せたか数えておく
再生時間を計測する
何試行おこなったか数えておく

実験者

被験者の音読をチェックする
被験者が再生した単語を記録する

B: うーん。プログラムを書き始めるまでにいろいろ決めないといけないんですね。Aさんはいつもプログラムを書く前にこんなのを描いてるんですか?

A: 複雑なプログラムを書く時には簡単なメモをとっておくことはあるけど、大抵はいきなり書き始めるよ。今回は入門編ということでじっくり説明しているからね。 このようにPCに何をさせるのかを決めておくと、どのようなプログラム技術が必要なのかはっきりする。 まあ、実際にはプログラムでどのような事が出来るのかある程度イメージがないと何をPCに任せて何を人間がやるのが楽なのかピンと来ないだろうけど。 このあたりのさじ加減は経験がものをいうところかも知れないね。

B: ところでこの図の緑の(1)(2)(3)って何ですか?

A: ああ、これから話そうと思っていたところだ。それぞれPCがしなきゃいけない作業が入るんだが、何かわかるかい?

B: ? なんだろう。(1)はスペースキーが押されるまで待つだけですし、(2)も再生時間が終わるのを待つだけですよね。 (3)は…、あれ? (3)もスペースキーが押されるのを待つだけ?

A: そう。(1)~(3)の間、PCはキーが押されたり時間が経過するのを「待つ」んだ。 「待つ」という動作は心理実験のプログラムでに非常によく出てくる パターンなのでぜひ押さえておきたいところなんだけど、 普通のプログラミング入門書では最初の方で取り上げられることが少ないんだよね。 まあ、手作業で処理していたデータをPCでぱぱっと処理したいとかいう動機でプログラミングを始める人が多いんだろうから、「待つ」なんて時間の無駄のようなプログラムが後回しになるのは当然なんだけど。 そんなわけで、今回の「リーディングスパンテストを作ろう!講座」は「待つ」プログラムから始めよう。

B: いつのまにそんな講座名が。

A: 「キー入力を待つ」のと「一定時間待つ」のではキー入力を待つ方が少しだけ難しいから、まず一定時間待つプログラムを書く。 続いてキー入力を待つ処理を追加して、少しずつリーディングスパンテストの形に近づけていこう。…えっと。あ、そうだ。

B: ん? なんですか?

A: ひとつ確認しておかないと。心理実験では、刺激や条件の順番をランダムにする事が多いんだが、リーディングスパンテストの課題文も順番はランダムにする必要があるのかい?

B: 確か決まっていたような気がするんですが。ちょっと文献を見てみますね。…えーっと、課題文が意味的につながらないように文の順番を決定すると書いてありますね。

A: ふむ。じゃあ完全なランダムじゃないな。ま、でも順番のランダム化は非常に重要なテクニックだから、ランダム化も解説しちゃおうか。ランダム化の手続きが組み込まれたプログラムから ランダム化しないプログラムへの書き換えは簡単だし、B君のいい練習問題になるだろう。

B: えー。なんでわざわざ。

A: 文句を言わない。こういう処理の書き方は、一度覚えてしまえば別のプログラムを書く時に使いまわすことが出来る。そういうノウハウが蓄積すれば、新しいプログラムを書く時に本当に初めて書く処理を考えることに集中できるから、絶対に覚えておいた方がいい。 そんなわけで、次回は一定時間待つプログラム…そうだな、5秒待つプログラムを作成しよう。次回からテキストエディタを使ってプログラムを書くぞ。

B: はーい。