読解力:それ以前の問題がある
新井紀子著の「AIに負けない子どもを育てる」はすべての教員 ー 小学校から大学まで ー が読むべきだと強く思うようになった。生徒の学習活動への見方が変わるからだ。
かくいう私自身が,去年まで「読解力」という視点で生徒の学習活動を見ていなかったことに愕然としている。すでに遅しの感を否めない。
もちろん,「教科書が読めていない」とか「問題文をちゃんと読んでいない」ということは常に感じてきたし,その都度「あらためて説明する」「詳しく説明する」「違う視点から説明する」などの処置を施してきた。しかし,ベースにあったのは「教科書くらい生徒は読める」という前提だった。しかし,今は,「教科書がちゃんと読めない」という前提に立たないといけなくなってきている。
そればかりではない。「テキストを読もうとしない」という,読解力以前の問題があることがわかってきた。
(このあとしばらくはプログラミングに関する用語が出てくるので,適当に読み飛ばして結構)
コンピュータ実習でプログラミングの授業をしているのだが,先日は,センター試験の「情報関係基礎」を題材に授業を行った。
まず,センター試験の問題を解く。正解を配り,問題に正解を書いておくように指示してからプログラミングの授業に移る。
授業で使用している言語は CindyScript で,Mathematica ライクだが,C言語などと似たような書法で書く。これに対して,センター試験の問題文のプログラムはちょっと独特なので,「翻訳」する必要がある。そのことを配布テキストに書く。
たとえば,繰り返しは for (CindyScriptでは repeat)や while ではなく,範囲を示して「繰り返す」と書いてある。
また,代入は左向き矢印だ。
たとえば,2017年の図3はつぎのようになっている。
これを,CindyScript で書くときは次のように翻訳する。
・繰り返しは repeat で,繰り返しの回数を書く
・代入文の ← を = にする
・「等しい」の意味の = は == にする
・配列の表現,たとえば Siten[n] は CindyScript ではSiten_n にする
・行末にはセミコロン ; が必要である
これらはすでに説明して実習も行っている。そのうえで,念のために同じことをテキストのこの節にも書いているのだ。
にもかかわらず,やらせてみると,配列の要素 を [n] のままにしたり,行末にセミコロンを書かなかったりする例があとを絶たない。
これだけの問題ならアルゴリズムも何もない。「プログラミング的思考」もない。単なる翻訳作業である。「なぜわからないのかなあ」と思う。60分間,相談自由でやっているにもかかわらずである。もちろん,中には「相談できない」「相談したくない」という生徒もいるが,結構相談しながらやっているのだ。
ある日の授業で,次の事例を目にした。
3人で相談している生徒が,わからない,というので聞きに行った。何を書けばいいのかわからないというので,元の問題は? ときいてみたら,元の問題,すなわちセンター試験の問題の該当部分を開いていないのだ。元の問題を参照しなければ、配布したテキストだけでは何を書けばいいのかわからないのは当然のことだ。ところがそれをしていないのである。「読んで意味がわからない」のではなく,「読んでいない」のだ。
そういえば,レポートの添削時に「テキストをしっかり読んで」とコメントすることがよくある。書いてあるのに読んでいないのだ。
提出されたプログラムはプリントアウトして添削しているが,センター試験のマスの中に入る選択肢の番号を書いている者もいる。
前掲の図3でいうと,ケ には選択肢の番号 0 が入る。しかし,プログラムとして書くのは i だ。ところが,それを,選択肢の番号 0 にしているのである。
つまり,プログラムとして読んでいないのである。
ある日の授業では,こんなことがあった。
教科書に掲載されているライフゲームを実際にプログラミングしようという課題。まずどのように設計するかを説明するページが2ページあり,その次にプログラム例があり,これを完成するようになっている。
パソコン室のパソコンは,教員側から生徒の画面をモニタできる。見ていると,早くも最初のプログラムを書いた者がいる。速いなと思うと同時に,怪しんだ。設計の解説の2ページは読んだのか。
最初のプログラムは,円を描くコマンドに中心と半径を書き込むだけで,中心と半径も示されているので簡単に書ける。
Matrix_x_y が1のとき,そのマスに色を塗った円を組み込み関数
fillcircle(中心の座標,半径)
で描く。
スクリプトは次の通り。ただし,fillcirlce() の引数の中心の座標、半径は書いていないので,ここを完成させること。マスの左下の座標が [x,y] のとき,中心は[x,y]+[0.5,0.5] , 半径は,0.3 とすればよい。
repeat(N,x,
repeat(N,y,
if(Matrix_x_y==1,fillcircle( , ));
);
);
なんのことはない,括弧の中に,[x,y]+[0.5,0.5] , 0.3 を書くだけだ。ほとんどの生徒ができている。
その次のプログラムも,解説を読んでいればそれほどむずかしくはない。ところが,その生徒は,そこでパタっと止まってしまったのだ。
5行目を書いて完成しなさい。
01 : mp=mouse();
02 : x=floor(mp.x);
03 : y=floor(mp.y);
04 : if(1<=x & x<=N & 1<=y & y<=N,
05 : Matrix_x_y の値を変えるプログラム
06 : );
説明 : クリック位置を取得する関数は mouse() である。戻り値は座標。
戻り値を変数 mp に代入すると,mp.x で x座標,mp.y で y座標をとり出すことができる。座標は実数なので,整数化するために床関数 floor() を用いる。
これを x, y とする。また,(x,y) が N×N の枠内のときだけ実行するように,
if(1<=x & x<=N & 1<=y & y<=N, で条件分岐する。Matrix_x_y の値(白黒)
を変えるには,Matrix_x_y が0なら1,そうでなければ0にする。
プログラムのあとの説明を読めば,5行目には「Matrix_x_y が0なら1,そうでなければ0にする。」を書けばよいのだが,この説明を理解するためには前のページを読んでおく必要がある。
つまり,ここで止まっているということは,前を読んでいないのである。
これは,読解力以前の問題ではないだろうか。
非常に危惧していることがある。今流行の,「アクティブラーニング」だ。「流行」と言ってはいけないのだろう。文科省が示す方針である。
考え方そのものについては否定するものではない。すでに指摘されているように,形だけを真似た失敗,を危惧するのである。
はじめに挙げた事例では,3人ともテキストをちゃんと読んでいなかったので,「わからない」が発信できた。もし,3人のうち2人はちゃんとテキストを読んでおらず,ひとりだけがちゃんと読んでいたとしたらどうだろう。そのひとりがあとのふたりに教えることになる。このとき,あとのふたりが,「テキストをちゃんと読まなきゃだめなんだ」ということを学ぶだろうか。ああそうか,で終わってしまうのではないだろうか。ああそうか,で終わってしまったら,その生徒には「テキストをちゃんと読む」というスキルは身に付かないままだ。
学期初めには,テキストを読んで自分で考えようとはせずすぐに相談に行く,という事例も目立った。「まずしっかり読んで」と注意して,その後は少しよくなったが,相変わらず自分で読まない生徒がいる。こんな状態では読解力は身に付かないだろう。
「なぜわからないのだろう」についての理由解明はまだ終わっていない。疑問が多すぎるのだ。読解力だけではないだろうが,それも含めて原因追究はまだまだこれからである。