文系大学でのプログラミング教育

投稿日:2019年07月01日 |カテゴリー:勉強, 学校

みなさま、こんにちは。おくむら(@nori_broccoli)です。

縁あって文系大学にお世話になっているおくむらですが、受け持つ科目は今までとさほど変わらず、プログラミングや人工知能基礎論のようなもの、情報処理技術者試験をベースとした情報技術に関する授業みたいなものばかりです。ただ、これまでの環境とは打って変わって、そもそも数学さえ履修してきていない学生に対してプログラミングを教えるというなかなか離れ業をやっているところです。

論理的に物事を考え、抽象的に対象をまとめ上げていく、そんなプロセスを教える必要があるのですが、「具体的にどうなりますか」「この場合はどうなりますか」というパターン学習に話が進みがちで、無限にある組み合わせを全て教えることは不可能なので結構悩んでいたりします。この方法さえ知っていれば、いろんな応用ができますよね?という話がなかなか通じないんですね。

とはいえ、「あなたも私も人間ですよね」みたいなどこかのオブジェクト指向のテキストみたいな話をしてもよく分かってもらえないし、処理の抽象化みたいな話になってくるとちんぷんかんぷんという雰囲気がすごいです。質問を受けるときは大抵「これはどうやって書くのでしょうか」という根本的なもので、考え方だけ教えたとしても、「で、どうやって書くのでしょうか・・・」と戻ってきて堂々巡りになってしまいます。

特に、繰り返し処理(whileやfor)が出てくると急に難易度が上がったと感じるようで、自分自身で処理を追えなくなってしまっています。何回目の繰り返しかはさておきとしても、同じ処理を何回も繰り返すだけということがなかなか分からないようです。そのために処理を抽象化してまとめていくという話もやはり通じません。

ちょっとでも楽しんでもらえるようにと課題もできるだけ工夫するのですが、楽しいと感じる以前のところで悩んでいる学生が多いように思います。フローチャートを書いたり、いろんなお絵描きをしたりしても、それとプログラムがどう繋がるかがよく分からない状態なので、ノートと鉛筆でプログラムで解きたいことをまとめてみようと言ってもなかなか難しい状態です。

まず、「変数の値の入れ替え」が理解に苦しむところのようで、printで出力する順番を入れ替えてプログラムが完成だと言い張る学生が続出します。printは同じ文をコピペして、出力順が入れ替わるように(変数の値が入れ替わるように)と指示してようやく半数ぐらいがどんなプログラムを書けば良いかぐらいはつかんでくれます。C言語で授業をしているのも問題の一つですが、一時変数を使わないと(分かりやすく)入れ替えることはできないですよね、とまで言ってようやく感覚だけが分かってもらえるといったところ。

もちろん、変数の入れ替えを使うところは多々あって、次に鬼門となるのが「並び替え」です。いわゆるソートアルゴリズムですね。バブルソートを書くにしても何にしても、2重ループが必要になったり変数の入れ替えもいろんなところで起きたりと、理解が進まなくなるポイントのようです。

毎週毎週悩みながら話をしています。もし、「こういうやり方が効果的だったよ!」みたいな情報があれば是非教えてください。