プログラミング講義の演習でペアプログラミング

けっこう長い年月、大学で文系の学生を中心に初心者向けのプログラミングの講義とExcelを中心としたアプリケーション利用の講義を受け持っている。プログラミングの方は以前は自分の書籍、そして改訂が追いつかなくなってからはその内容を書き換えて作ったテキストで教えている。ずっとJavaを教えているがJava言語を教えるのは学校の方針なので変えられない。ほとんどの学生は、おそらくエンジニアにならないと思うし、ここまでにプログラミングについての何かの講義を受けたことは前提にしていない。プログラマ養成という目的はなく、「世の中にはこういう世界もあるものだ」と思ってくれればいいくらいの講義であり、以前は受講者はすごく少なかった。もう1つ講義を持っていて、そちらはExcelを中心にしているが、数年前まではExcelの講義の方はまだ受講者は多かった。しかし、なぜかちょっとその傾向が変わっている。比較的まじめにJavaの勉強をする学生が増えて来た。情報処理試験を受ける人がその学部でも多いということを別の先生からも聞くが、もしかしたらスマホブームみたいなこともあるのかもしれない。

毎年同じように淡々とやってきたのだが、数年前にExcelの講義よりもJavaの講義を最後まで受ける人の方が多くなってきて、ちょっとやり方を変えるべきかと思うようになってきた。少しレベルを上げて、繰り返し基本をやるのをやめたりとかしてきたが、今年から「ペアプログラミング」を演習に取り入れるようにしようとした。講義は半分は解説しながらプログラムを打ち込んだりして、残りの半分は演習に充てている。去年までは基本的に1人ずつでやっていた演習を今年はペアプログラミングにしようとした。しかし、いきなり最初から人と組むのはどうかと思い当初は1人での演習とした。つまり、ベースになる知識がいくらかでも浸透しないと会話が成り立たないと考えたのである。今日は4回目の講義で、今回の演習でペアプログラミングやってみたのだが、結論を言うと正解だった。学生の表情がきわめて明るく、また、相談しながら何かをやることでの達成感があるのか、「できたー」と声を出す学生は1人や2人ではなかった。記録のため、その状況をブログに残すことにする。

  • 先週までで基本型を説明した。今日は文字列についての章で、+、length、substring、そしてStringBufferのinsert、appendくらいしか教えてない。それらでできるプログラミングとしては基本的なレベルの演習を与えた。
  • ペアプログラミングという言葉を使ったが、アジャイルとは何かみたいな話は一切していない。説明したのは「1台のパソコンを代わる代わる使って演習をやりなさい」という程度、また、適当に打ち込む側を代わることと、横から見ている人は「言葉で茶々を入れる」ということを強調した。問題ごとに代わるペアもあったが、「随時必要に応じて代わる」点を強調しておいたので、主体的に関わる側に随時切り替わるペアもあった。
  • チームをどう作るか迷ったが、講義は学科や学年をまたぐものであって、あまり同一学科の同一学年が集まっておらず、学生同志はほとんど面識のない様子だったので、単純に座席の近い者でペアを組ませた。人数が奇数だったのだが、1名のみTAが茶々入れ役をした。
  • ほぼ全員が、明るい表情で演習を続け、また、お互いに話をすることで、講義にありがちな重苦しい雰囲気は一気に吹っ飛んだ。通常の演習よりもリラックスができたのだと思われる。また、演習問題が出来上がった事は声や表情等に出るのだが、一人でやるよりも達成感があったのではないかと想像できる。また、問題の解釈をディスカッションしたり、うまく行かないポイントを会話するのを聞く事で、どういうところを迷っているのかもある程度は観察できる状態だった。
  • 問題に関する質問がほぼなかった。通常は演習中に、TAが走り回ってサポートしているが、サポートの必要がなかった。つまり、2人で演習にかかれば疑問点は解決できるということのようだ。
  • 終わってから作ったプロジェクトを作業していないPCでログインしている人に渡すように指導をしたが、そこで悩むことの方が多かった。この点についてはあまり指導しないでおいたので、仕方ない面はある。たぶん、次回からUSBメモリが必要だと気付く人もいただろう。また、下手なことをするよりもプログラムをメールで送り合った方が楽という点も気付くペアはいた。いずれにしても、ここは随時指導を加えるポイントである。

そういうわけで、ペアプログラミングってどうだろうかと慎重にスタートしてみたが、たぶん、これは学生も教師もやりやすい手法のようだ。特に、学生同志で、それぞれ上下関係が薄いという場合には問題なくワークしそうだ。学年の違いもまあ、あの年齢になるとそんなに気にならないのだろうか。ペアを今後どのように作るかちょっと悩ましいところもあるが、固定化しないでやるのがいいのか、あるいは固定化させるべきか考えないといけない。だが、いずれにしても、ペアプログラミングによる演習は積極的に取り入れて良さそうだ。

学校として成り立つには何が必要か?

私自身、ある学校でiOSの開発のことを教えており、このことを書くべきかどうか、同業者のことなのでちょっと迷ったのですが、きっかけのことがあってからやや時間が空いているので書く事にしました。自分の考えを残すのがブログの1つの役割でもあります。

ちょうど、2〜3年ほど前、複数の人からまったく同じ依頼を受けました。一部の方には個人レッスンもしました。依頼というのは「あるスクールへ通ったのだけど、まったく何も勉強できなかった」というものです。実際、個人レッスンしても、けっこう当たり前のことでつまずいていたのです。どこでどんなことを習ったのかを聞き、みなさん、同じことをおっしゃいました。もちろん、どの学校なのかはここでは伏せますが(とは言え関係者にはすぐ分かるでしょう)、その学校に行けば、「まとまった数のアプリケーションが作る事ができる」という点に実用性を感じたということなのです。また、値段的にも安いということもあったみたいです。

そういうわけで、みんな期待するのはそのスクールへ行けば、自分もアプリケーションを作れるようになるだろうということです。ところが通ってみると、テキストが配られ、アプリケーションのソースとちょっとした解説があり、その通りに入力してアプリが動いた〜というのの繰り返しだそうです。当然、動くアプリのプログラムだから、動く訳ですが、その繰り返しで、何十もアプリケーションを作った上に、さて、自分で作りたいアプリケーションがあるのだけど、プロジェクトを作った後にハタと手が止まるというわけです。

このスクールはかなりメディア露出もしたりして、そこそこ有名であり、かなり多数の受講者がいるようなことが紹介されています。だけど、同じようなことを言う人に何人にも出会い、私にとってはこのメッセージのタイトルの内容、つまりは学校とはなんぞやという考える契機になりました。

もっとも、「サンプルアプリケーションをたくさん作る」点はけっして悪くはないと思います。スクール側は期待するのは、実例から学ぶということでしょう。きちんとした実例は確かに手本ではあります。しかし、単に作業として進めてしまうと疑問に思う事なく進めてしまい、実は何も理解していない人も発生します。それは受講者の力量だろうと言ってしまうと、学校ってそこで終わるのです。学校の最終目標は、当然ながら生徒の能力を高めることに尽きるのです。ただ、100%それが達成できないだろうとか、絶対はないとか、いろいろエクスキューズはあるでしょう。しかし、学校として、全部の生徒に対する能力を高める努力をしないというのは正しいあり方ではありません。もちろん、そのスクールでは、実際にiOSのアプリをApp Storeに登録した人もたくさんいるらしく、まったくだめなわけではないようですが、一方で、私個人の周囲にも、失礼ながら落ちこぼれた人が何人もいるというのは、多分、成功者の方が少ないのじゃないかと想像できます。

ちなみに、そのスクールで結果を出した人ってのは、どうやら、作業をした後に、講師をしっかり捕まえて、あれこれ質問をした人ということを聞きました。その人は、手本と自分の知識の対比を判断でき、ギャップを埋める努力をしたということです。その方は、たぶん、一般より安い受講料で高い効果を得たという意味で、得るもの多数あったでしょう。しかしながら、聞くところによると、そういう人はごく小数、特に誰かが講師をスタックしたら、結局他の受講者は質問すらできないような場合もあったりするということです。まあ、実際には常にそうではないのかもしれませんけど、そういう状況が1回でもあると、受講している人は悪い状況を印象深く記憶するものです。

ただ、残念なことに、そうしたスクールの成功事例を「アプリケーションのサンプルを作らせる」という点に集約して、それによって儲かるみたいな話に流れている傾向があります。学校もベースはビジネスです。もちろん、儲かるという点は重要です。しかし、明らかに楽に儲かる方法みたいなパターンとして理解されているのはほんとうに残念です。サンプルベースでの学習の方法についてはは、ここでは詳細は書きませんが、実際のところは運用は難しいです。本来、学習には王道はないという前提があるとします。すると、学校というのは究極的には生徒に苦労させ、また言い換えればつまずかせて、その状況を打破する手伝いをし、そこから生徒は何かを得るという状態を作るということが求められます。苦労するのは当たり前だけど、そこで手を差し伸べるのが学校の役割と考えます。サンプルベースの学習でもそれは可能ですが、すくなくとも作業として集約させれば、苦労やひっかかりはありません。その場では「至ってスムーズ」としか思わないでしょう。そうではなくて、むしろ、ひっかけ、あるいはひっかかりをうまくコースの中に入れることによって、自力で解決させるような手法を取るほうが、本来の学校の機能を満たすと思います。

別にそのスクールがある前から、私は同じような事を言ってきており、そういう手法はどうなのかときかれることも多々あり、上記のようなことをお話することも何度もありました。結果的に学校に行っても地力が身に付かなかった人が多く出てくると、市場が飽和した段階で挽回する手段はなくなります。それは、学校にとっても生徒にとっても幸福な話ではないでしょう。長らく学校にかかわっている人はその意味が分かると思います。来シーズン(つまり4月から)、こういう主張をする私をラインからはずす学校がある一方で、こういう主張が正しいということでライン拡充を依頼するところもあります。もちろん、ラインからはずされれば何もできないのではありますが、一方で、本筋を忘れないで、かつ今時の市場環境において受け入れられるテイストってのもやっぱり考えて、がんばってやろうかなと思った次第でした。