プログラミング授業って難しい?
『プログラミング言語を教える』
って、初めての時はとても難しそうに感じました。
もちろん、今でも試行錯誤の連続ですし、うまくいったこと、改善が必要なことは常にあります。
ただ、私が考えるログラミング教育の醍醐味は
「面白さを伝えられること」
ではないか、ということです。
他教科でも、生徒が楽しい!面白い!
と思えることは多々あると思いますが、情報科ではタブレットやPCを使って実際にプログラムを入力し、実行した時に、その結果が表れるので、自分のやったことをすぐに確認できるのがいいな、と思うのです。
もちろんプログラムを1文字でも書き間違えるとエラーとなり実行結果が表示されないので、その時は気持ちも少なからず落ち込んだりするでしょう。
でも、プログラミング言語に関しては、ミスがなければ実行結果は正しく表示されるものなので、自分がどこを誤タイプしたのか、何がダメだったのか、じっくり眺めて修正すれば大丈夫なんですよね。
しかも、考え方や、ゴールまでの道のりはいくつかあって、どれが正解でもいい、というのも教える側としては生徒のひらめきや発想力も見えて楽しい部分だなと感じています。
もちろん、プロのプログラマーを目指すのであれば、最適解を見つけ、誰もが分かるプログラムを作成することに注力するのだと思いますが、初めて見て、触って、の高校生にそんなことを求めてしまうと、頭打ちしそうな気がします。
高校生になって初めて使用するプログラミング言語で、
「難しかった」
「わけがわからない」
「嫌い」
などと印象付けるよりも、
「なんだか楽しかったな」
「思っていたよりできたな」
「ちょっと賢くなった気がするな」
なんて肯定的な気持ちになってもらえるほうがいいわけですから。
そこで、私が考える3つのコツを紹介したいと思います。
【コツ① 難しくない、を徹底させる】
教科書の通りにプログラムを作成できたとしても、あれはあくまで超基本なので、
「へぇ、ふーん。それで?」
となりがちです。
ここで私は教科書の内容に沿った練習問題をたくさん実践させています。
いわゆる
「慣れさせ作戦」
です。
自転車に乗れるようになった時も、鉄棒の逆上がりも、縄跳びの二重跳びも、とにかくひたすら練習して身体が慣れるまで、できるようになるまで同じことを繰り返しましたよね。
それと似ています。
ただし、身体を使うわけではなく、頭と手を使うので、あの手この手の練習問題をさせるのです。
そして、当たり前のように基本プログラムを作成できるようになったら、応用問題に入ります。
ここでは基本ができないとできない問題だけれども、基本から少し頭をひねって発想しないと解決しないような、なんとも心をくすぐる問題を出します。
(というか、出せるように私自身も常に発想力を求められますね・・・)
もちろん、生徒の反応は様々で、
「あー、はいはい」
とすんなりできる生徒もいれば、
「えー!急に難しくなった!」
なんていう生徒もいます。
でもその時点で生徒は、基本が出来ているから悩むわけです。
基本がないと、そもそも問いに対して取り組む姿勢がなかったりするわけです。
この時点で、それまでの基本の練習が難なくできるようになっていると、生徒心理としては
「なぁんだ、プログラミング言語って難しくないね」
となっているのではないでしょうか。
それよりも意欲向上させる壁(高低差あり)が、目の前に立ちはだかるので、なんとかクリアしてやろうじゃないか、という心理に変化しているのです。
これが、授業の最初あたりでできるようになると、次回以降の授業で
「基本ができて当たり前。プログラム作成するのは難しくない。」
からスタートできるので、新しい課題に入っても、
「そんなこともできるんだ!」
となるのです。
もちろん、新しいプログラムに関しては何度も練習問題を実践していき、
「慣れ」
させるのがコツです。
【コツ② ゲーム的要素を入れる】
2つめの、ゲーム的要素を入れるということですが、上記で紹介したコツでは、練習問題をたくさんさせて慣れさせるとお伝えしましたが、何の目的もなくただひたすら練習していても何も面白くないです。
漢字練習のように、同じ字を20回書いて覚えるということではなく、20回別のプログラムを作成させるので、そのプログラムが面白くないと、練習もつまらないものになってしまいます。
そこで、ゲーム的要素を取り入れて、プログラムの練習をさせています。
例えば、Pythonの学習でIFの練習問題を提示した際に、inputを使って、RPGのようにします。
――――――――――
print(‘敵が現れた!さあどうする?’)
play=input(‘たたかう?逃げる?\n’)
if play==’たたかう’:
print(‘敵にダメージを与えた’)
else:
print(‘ひとまず退散だ’)
――――――――――
とても簡易にしましたが、こんな感じです。
そうすると、生徒はまるで自分がゲームを作ったかのように楽しんで取り組んでくれますし、これは例題なので、ここから色んな発想をして、自分なりのRPGを作っていってくれるのです。
この後の課題としては、elifで条件分岐が増えていくので、どうなったら、思った通りにプログラムが動作するのか、どんなプログラムを作成すれば、もっと面白くなるのか、は自分次第、ということです。
このようにゲーム的要素を取り入れると、途端に生徒のやる気が変化するのは見ていて楽しいですし、自分の中で小さくガッツポーズが出てしまいます。
何も難しいことができるのが、すごいのではなく、楽しくやっていたらいつの間にか色んなことが出来るようになっていたほうが、すごいと思いませんか?
数回練習問題をすると、エラーにも慣れてくるので、どこが間違っているのかを、自分自身で解決できる力も身についているのです。
どうしても分からない場合は挙手をさせて、ヘルプ要請に応じますが、ちょっとした部分
(スペースが半角ではなく全角になっていた、入力した文字が1文字違ったけど、見分けられなかった、など)
ですぐに解決します。
ヘルプを依頼した生徒は、
「そんなところ?盲点だわ」
「あ、気付かなかった」
と言いますが、
「次からよーーーく見てみてね。きっとエラーが見つかるからね。それでも分からない時は呼んでいいよ。」
と伝えています。
エラー慣れすることもとても大切で、私はわざとエラーを表示させて、プログラムって曖昧なことはNGなんだよね、と理解させるようにしています。
上記inputの練習問題では、自分が望む入力がされないときに、正しく入力をさせるための文言を考えさせるようにもしています。
最終課題は、自分のプログラムをクラスメイトに操作させてゲームを楽しんでもらえたらいいな、と思っています。
【コツ③ 難しいことにチャレンジさせる】
これは、コツ①、②ができてからのことです。
コツ①では、プログラミング言語は難しくないことを意識させました。
コツ②では、ゲーム的要素を取り入れて、ゲームっぽいものを作成させました。
コツ③は、応用編と題して、それまでの課題の難問にチャレンジさせる、ということです。
絶対に焦ってはいけないのが、ここでコツ①、②がクリアできていないうちに、コツ③に入ると、コツ①の観点がなくなり、
プログラム=難しい
となり、嫌いになってしまう確率がアップします。
そうなってしまっては、元も子もありません。
それだけは避けたいので、コツ③の導入はしっかり様子を確認してからがいいでしょう。
コツ③に入るポイントとしては、コツ①、②をしているうちに、自らもっとこんなことしたい、できるんじゃないかな、と思えるようになった頃合いがいいと思います。
もちろん、生徒から
「先生、こういう時はどうすればいいの?」
なんて質問があった時には
「きたー」
って感じですが、そうならない時は、私から生徒に
「次はこんなことをしてみようと思うんだけど、どう?興味ある?」
と聞いてみることもあります。
それは臨機応変にしていかないといけませんが。
プログラミング言語にかかわらず、得手不得手はそれぞれあるので、コツ③まで進んでいくと、必ず進捗に差が出ます。
その進捗の差は仕方のないものであって、生徒間で優劣が出ないように声かけも必要に応じて行う場合があります。
課題提出をさせる場合は、提出ラインを明確にさせて、そのラインはほぼ全員が可能な範囲としています。
そのうえで、ひとつずつステップアップを設け、次の課題が出来た人は、このフォルダ②に提出、さらに次の課題が出来た人は、このフォルダ③に提出、といった具合に、提出フォルダを複数用意して、やりたい人、できる人はどんどん提出フォルダへの保存をしていくように工夫をしています。
教員側としても、提出フォルダに分類することで、進捗の確認もしやすいし、クラス単位で半数以上がどこまで提出できているか、の確認もできます。
コツ③は、意欲の結果があらわれるので、自分が伝えてきたことがどれだけ伝わったのか、楽しんでくれたのか、面白がってくれたのか、または難しく苦手意識を残したままなのか、十分過ぎるほどに明確にしてくれます。
ぜひ、一度試してみてはいかがでしょうか。
ご購読ありがとうございました。
コメント