高校「情報Ⅰ」のプログラミング授業はどう教える?苦手意識を克服する3つの指導コツ

女教師のプログラミング授業
スポンサーリンク

はじめに:高校「情報Ⅰ」のプログラミング授業は難しい?醍醐味と面白さ

「高校生にプログラミング言語を教える」と初めて聞いたとき、教える側である私自身も「凄く難しそうだし、自分にできるだろうか」と大きな不安を感じたことを覚えています。

もちろん、何年教え続けていても今なお試行錯誤の連続ですし、日々の授業で上手くいったことや、さらなる改善が必要な課題は常に山積みです。

しかし、私が考える高校プログラミング教育の最大の醍醐味は、他でもなく「生徒にデジタルのモノづくりの面白さを直接伝えられること」にあります。

他の教科でも、生徒が「楽しい!面白い!」と知的興奮を覚える瞬間はたくさんあると思いますが、情報科のプログラミング授業は格別です。

なぜなら、各自のタブレットやPCを使って実際にコードを入力し、実行ボタンを押した瞬間に、「自分の書いたプログラムが思った通りに画面上で動き出す」という結果をその場で即座に確認できるからです。

(※実際の授業で使いやすいPythonの無料実行環境については、[こちらのPython授業環境と初級課題の記事](https://goodteacher1.com/informatics/informatics5/)で詳しく紹介しています!)

もちろん、プログラムは半角スペース1文字のズレや、コロンの打ち忘れといった些細な書き間違い(タイポ)があるだけで即座にエラーとなり、思った通りに動いてくれません。実行結果が表示されないときは、生徒たちも少なからずガッカリしてモチベーションが落ちることもあります。

しかし、プログラミング言語の世界は非常に正直です。こちらがタイピングミスをせずに正しく命令を与えれば、必ず実行結果は完璧に表示されます。

「どこを間違えてしまったのか」「何が原因でエラーになったのか」を、エラーメッセージを手がかりにじっくりコードを眺めて修正すれば、必ず解決できるのです。

しかも、1つの課題を解決するアプローチやゴールまでのコードの書き方は幾通りも存在し、「どれが正解でもいい(目的を達成できれば全て正解)」という自由度の高さがあります。

教える側の教員としても、生徒一人ひとりの柔軟なひらめきやユニークな発想力がコードから透けて見えるため、授業をしていて本当に楽しい瞬間です。

将来プロのITエンジニアやプログラマーを目指すのであれば、処理速度を極限まで高めた最適解を見つけ、誰が見ても美しいコードを書くことに注力すべきですが、初めてプログラミングに触れる大半の高校生に対して、最初からそこまで求めてしまうと、途端に苦手意識を植え付け、思考停止に陥らせてしまいます。

高校生になって初めてキーボードで打つプログラミング言語に対して、

  • 「難しくて全然わけがわからない」
  • 「エラーばかりで本当につまらない、大嫌い」

といったネガティブな印象を持たせるのは絶対に避けるべきです。

それよりも、

  • 「なんだか思いのほか楽しかったな!」
  • 「自分でも意外と簡単に動かせたぞ!」
  • 「少しだけ知的で賢くなった気がする!」

といった、肯定的な自己肯定感(自信)と興味を持ってもらえる指導のほうが、遥かに重要です。

そこで今回は、プログラミングに対する苦手意識を吹き飛ばし、主体的な学びを引き出すための「3つの指導のコツ」をご紹介いたします。

【指導のコツ①】「プログラミングは難しくない!」を徹底する慣れさせ作戦

女教師イラスト

教科書に載っている通りの超基本的なサンプルコードを入力して動かせたとしても、生徒たちにとっては「へぇ、実行したら文字が出たね。それで?」で終わりがちです。

そこで私は、新しい文法を教えた後は、教科書の内容の枠を超えた「楽しい練習問題」を数多く実践させるようにしています。

名付けて、体に文法を叩き込む「慣れさせ作戦」です。

子供の頃に自転車に乗れるようになったときも、鉄棒の逆上がりができたときも、縄跳びの二重跳びができるようになったときも、ひたすら反復練習を重ねて、体が自然に感覚を覚えるまで同じことを繰り返しましたよね。プログラミングの初期学習も、これと全く同じです。

ただし、プログラミングは体を激しく動かすわけではなく、頭と指先(タイピング)を使います。飽きさせないために、あの手この手でバリエーション豊かな練習問題を提示するのがポイントです。

そして、基本の文法を息をするように難なく書けるようになった段階で、ようやく応用問題へと入ります。

この応用編では、「基本文法をしっかりと理解していないと解けないけれど、基本コードを少しだけ捻って発想を転換させないと解決できない」という、生徒の知的好奇心を絶妙にくすぐる心を掴む問題を提示します。

(※もちろん、このような面白い問題をデザインするために、教員である私自身も日頃からアンテナを張り、発想力を鍛え続ける必要があります!)

応用問題を提示した際の生徒の反応は、実に様々です。

  • 「あぁ、なるほど!こう書けばいいのか!」とパッとひらめいて一瞬でクリアする生徒
  • 「うわぁ!急にパズルみたいに難しくなったぞ!」と頭を抱える生徒

しかし、後者の頭を抱えている生徒も、実は「基本ができているからこそ、どう応用するかで悩めている」のです。

もし基本文法すらおぼつかない状態であれば、そもそも応用問題の問いに対して自力で取り組む姿勢(スタートライン)に立つことすらできません。

基本の徹底的な反復練習によって「自分でもプログラミングができる」という自信がすでに育っているため、生徒たちの心理は「プログラミングは大嫌い」ではなく、

「なぁんだ、プログラミングって思ったより難しくないじゃん!」

へと確実に変化しています。

だからこそ、目の前に応用問題という「高めの壁」が現れても、「よし、なんとか自力でクリアしてやろう!」というポジティブな挑戦心(モチベーション)を持って取り組むことができるのです。

この流れを授業の最初の数時間で確立できると、次回以降の授業で新しいカリキュラム(例えばループ処理やリストなど)に入っても、

「基本を順番にやれば難しくない。次はどんな面白い命令ができるんだろう!」

というワクワクした心理状態からスタートできるようになります。

【指導のコツ②】生徒のやる気が爆発する!簡単なゲーム・RPG的要素の取り入れ方

プログラミング画面

指導のコツ①で「反復練習で慣れさせることが重要」とお伝えしましたが、何の目的もなく無機質なコードをただひたすら書いていても、生徒たちは退屈してしまいます。

国語の漢字練習のように「同じ漢字をノートに20回書く」といった無味乾燥な作業ではなく、プログラミングでは「20個の異なる命令(コード)」を作るわけですから、その題材自体が魅力的で面白くなければ、練習そのものが苦痛になってしまいます。

そこで私は、授業の練習問題に「ゲーム的な要素(ゲーミフィケーション)」をふんだんに取り入れて、楽しみながらコードを書かせる工夫をしています。

例えば、Pythonの学習で「if文による条件分岐」を教える際、対話型入力を可能にする `input()` 関数を組み合わせて、以下のような「簡易RPGゲーム」を例題として提示します。

“`python

print(‘凶悪なモンスターが現れた!さあ、どうする?’)

action = input(‘たたかう? にげる?\n’)

if action == ‘たたかう’:

print(‘見事に剣で斬りつけ、敵に大ダメージを与えた!’)

else:

print(‘相手の隙を突いて、ひとまず安全な場所へ退散した。’)

“`

非常にシンプルな数行のコードですが、これだけでも立派なゲームの骨組みです。

この例題を実行した瞬間、生徒たちは「まるで自分が本格的なアドベンチャーゲームを作ったクリエイター」になったかのように目を輝かせて大喜びしてくれます。そして、このシンプルな基本形からスタートして、「もっとストーリーを分岐させたい!」「自分だけのオリジナルゲームを作りたい!」と、自ら進んでコードを拡張し始めてくれるのです。

この後に続くカリキュラムで `elif` を使った多重分岐を教えれば、「どうコードを書けば思い通りのストーリーに分岐するか」「敵のHPを設定して戦闘を繰り返すにはどうすればいいか」など、自分のアイデア次第でゲームをどんどん高度に仕上げていくことができます。

このようにゲーム的要素を少し取り入れるだけで、生徒たちの学習意欲が劇的に跳ね上がるのを間近で見られるのは、教員として本当に嬉しく、心の中でガッツポーズをしてしまう瞬間です。

難解なアルゴリズムを丸暗記するのが凄いのではなく、「ゲーム作りに夢中になって遊んでいたら、いつの間にか高度なプログラミング構文をマスターしていた」という方が、圧倒的に学習効果が高いと思いませんか?

数回の練習をこなすうちに、生徒たちは「エラーが出ること」自体にも自然と慣れていきます。エラー表示を恐れず、何行目のどこに記述ミスがあるのかを自分自身で冷静にデバッグして解決する力(問題解決能力)が、授業を通じていつの間にか身についていくのです。

どうしても自分ではエラーの原因が見つけられないときは挙手をさせてヘルプに応じますが、大半の場合は以下のようなちょっとした部分が原因です。

  • インデント(字下げ)のスペースが半角ではなく全角になっている
  • 大文字と小文字が混ざっている(`if` が `If` になっているなど)
  • 括弧やクォーテーションの閉じ忘れ

ヘルプを求めてきた生徒に「ここをよく見てごらん」とヒントを出すと、

  • 「うわ、そんな単純なところ!?完全に盲点だった!」
  • 「半角と全角が混ざってたのか、気づかなかった!」

と笑顔で納得してくれます。

私はすかさず、

「よし、次はエラー画面が出たら、この辺りをよーく目を凝らしてデバッグしてみてね。機械は曖昧な書き方を許してくれないから、それだけ記述が正確になったってことだよ!」

と声をかけて送り出します。

意図的にエラーを起こさせて「コンピュータは非常に厳格で、正確な指示を求めている」という仕組みを実感させるエラー慣れも、重要な指導ステップです。

このRPG形式の課題の最終ゴールとして、「自分が作ったゲームを隣の席のクラスメイトに実際に遊んでもらい、お互いにバグ出しや楽しさを共有する発表会」を設けると、教室全体が最高の熱量に包まれます。

【指導のコツ③】エラーを恐れない心を養い、段階的な難問にチャレンジさせる工夫

プログラミング授業風景

この最後のステップは、指導のコツ①(プログラミングは難しくないという意識)と、コツ②(ゲーム感覚での主体的な制作体験)が十分に浸透した後の「総仕上げ」の段階で行います。

  • ステップ①: 「プログラミングは難しくない、自分でも書ける」という安心感を植え付ける
  • ステップ②: 「ゲーム的要素」を取り入れて、主体的な創作意欲を最大化させる
  • ステップ③: 「応用・挑戦編」として、これまでの知識を総動員する高度な難問へチャレンジさせる

ここで絶対に焦ってはならないのは、ステップ①と②が十分にクリアできていない(クラス全体の理解度が追いついていない)段階で、焦ってステップ③の難問に突入してしまうことです。これをやると、せっかく消えかけていた「プログラミング=難しくて挫折する科目」という苦手意識が再燃し、一気にプログラミング嫌いを量産してしまうことになります。

これでは本末転倒ですので、ステップ③を導入するタイミングは、生徒たちの普段の作業様子や表情、雑談での手応えを慎重に見極める必要があります。

導入のベストな合図は、生徒たちの口から「先生、もっとこういう機能を付けたいんだけど、どう書けばいい?」「ifの中にさらにifを入れるのって可能?」といった、自発的な知的好奇心の質問が飛び出し始めたタイミングです。

もし自発的な動きが少ない場合は、私の方から、

「みんな基本のゲームは完璧に作れたね!素晴らしい!じゃあ、次は『プレイヤーの攻撃力にランダムなばらつきを持たせる方法(乱数)』に挑戦してみたい人いる?興味あるかな?」

と少しワクワクする選択肢を提示して反応を見るようにしています。

当然、生徒によってプログラミングの得手不得手(習得スピードの差)は生じます。

ステップ③へ進むとクラス内での進捗の差は一層広がりますが、これは能力の優劣ではなく、個々の興味の深さや習得スピードの違いに過ぎません。生徒同士で優劣を感じて委縮してしまわないよう、教員による温かい声かけやフォローアップ(個別最適化)が求められます。

私は授業の課題提出を設定する際、「合格ライン(提出に必要な最低限の機能)」を非常に明確にし、そのラインは授業を真面目に受けていればクラスのほぼ全員が無理なく達成できる範囲に設定しています。

その上で、意欲のある生徒がさらにステップアップできるように、共有フォルダ内に以下のような「段階別の提出用フォルダ」を用意する工夫をしています。

  • `[フォルダ①] 必須課題提出(全員対象)`: inputと基本if文によるRPGの完成
  • `[フォルダ②] 応用チャレンジ①`: elifを活用した複数ストーリー分岐の実装
  • `[フォルダ③] スーパーチャレンジ②`: 乱数(random)やループ処理を取り入れた本格バトルの実装

この「マルチフォルダ設計」を取り入れることで、生徒は自分のレベルに合わせてどんどん上のステージ(フォルダ)への提出を目指してゲーム感覚で自発的にのめり込んでくれます。さらに教員側としても、どのフォルダに何名の提出があるかを見るだけで、クラス全体の進捗度や理解の深さを一目で可視化して把握できるという大きなメリットがあります。

ステップ③は、それまでの授業で自分が生徒たちに伝えてきた「デジタルの楽しさ」がどれだけ響いたかを明確に教えてくれる、教員にとっても非常にエキサイティングな通信簿のような存在です。

まとめ:楽しんで学んだ経験が、生徒たちの自ら解決する力(論理的思考力)を育てる

新しく共通テストの必修科目に指定された「情報Ⅰ」ですが、ただ単に試験の点数を取るための暗記学習にしてしまっては非常にもったいないです。

プログラミング授業を通じて、生徒たちが「エラーの原因を自分で探し、解決できた!」「自分で作ったゲームが思い通りに動いて友達が楽しんでくれた!」という成功体験を積み重ねることは、彼らが将来どんな道に進むとしても必要とされる「論理的思考力」や「主体的な問題解決能力」を養う最高の糧になります。

(※共通テスト必須化に伴う授業時間数やこれからの高校情報教育の未来については、[こちらの情報教育の未来を語る記事](https://goodteacher1.com/informatics/informatics1/)で解説しています!)

「難しそう」と身構える生徒たちの壁を取り払い、ゲーム感覚で楽しませながらいつの間にかプログラミングスキルを身につけさせる。これこそが、これからの未来のデジタル社会を担う生徒たちを育てる、情報科教員としての腕の見せ所であり、最もやりがいを感じる瞬間ですね。

プログラミング指導に悩まれている先生方は、ぜひ一度、この3つのコツを授業に取り入れてみてはいかがでしょうか?

最後までお読みいただき、ありがとうございました。

[関連記事]

  • [高校の情報科授業でPythonを教えるには?プログラミング導入の実践例とおすすめ環境](https://goodteacher1.com/informatics/informatics5/)
  • [高校「情報科」の授業はどう変わった?iPad・Chromebook・Surfaceのタブレット活用術と注意点](https://goodteacher1.com/informatics/informatics4/)
  • [高校「情報科」のオンライン授業どうだった?現役非常勤講師が語る現場のリアルと指導の工夫](https://goodteacher1.com/informatics/informatics2/)
  • [共通テスト必須化で高校「情報科」の授業はどう変わる?現役非常勤講師が語る指導の工夫と未来](https://goodteacher1.com/informatics/informatics1/)
  • [社会人経験を経て挑んだ教育実習!情報科・非常勤講師が語る「実習のリアル」と心得](https://goodteacher1.com/dream/dream11/)
  • [高校・情報科の成績処理はどうやる?現役非常勤講師が教える効率的なエクセル活用法と評価基準](https://goodteacher1.com/informatics/informatics3/)
楽しい授業のコツ
スポンサーリンク
ひまわり先生をフォローする

コメント

タイトルとURLをコピーしました