先生方の意識の中へのプログラミング導入
~プログラミング導入に待ち受ける障害を乗り越えるためのアイスブレイク
愛知県立瀬戸北総合高等学校 田中健先生
はじめに私のプログラミング歴をお話ししますと、ゴリゴリのプログラマー街道を歩いてきたというわけでは全くありません。大学院でインターネット言語教育学という少々聞き慣れない学問を専攻したことをきっかけに、情報教育に興味を持ち、非常勤講師として愛知県内の私立高校で情報の授業を担当したことがはじまりです。
2000年代半ばの当時、ある紹介制のSNSが流行していたことを覚えておいででしょうか。そのSNSはテキスト処理に適している特徴を生かすためかPerlでプログラムが組まれており、生徒も利用していて興味がありそうだったために、授業(高校ながらゼミという位置づけでしたが)で擬似的なそれを作ってみようということになりました。当然、サーバーサイドプログラムですので、慎重にデバッグやテストをしないといけないのですが、私もまだまだ若く、ネットワーク管理の専門家もいなかったために、いきなり生徒のプログラムを学校の基幹系サーバに置いてしまったわけです。非常に残念なことに無限ループを見落としていたようで、見事にサーバが飛びました。いきなりネットワークが停止したことで学校中の先生方に平謝りの行脚を続け、当然のことながら疑似SNSは頓挫、中止とあいなりました。その後、愛知県の教員に転職してからは、この苦い経験を踏まえて、ネットワークに大きな影響を比較的及ぼさないクライアントサイドプログラムでプログラミングを行なっています。主に、HTMLとJavaScriptを中心とするWEBプログラミングです。
本日はこれからプログラミングを授業に導入しようと考えていらっしゃる先生も多いと思いますので、私がプログラミングの授業の中で感じたことや、こういうことなら簡単に始められるというきっかけに繋がるようなこと、また実習授業にまつわる情報科教育の変遷についてお話しいたします。
教科「情報」の変遷
2003年度新教科「情報」が誕生し、科目として「情報A・B・C」が置かれました。そこから10年、先般の学習指導要領改訂によって、現在各校で「社会と情報」と「情報の科学」の授業が実施されています。次に、画面上には「情報Ⅰ(仮)」とありますが、こちらに「Ⅰ」と入っているのは、今なお多くの学校で分割履修されている情報科目を、2単位きっちりと1年生の教育課程に置いて学ばせることを期待しての命名ではないかと考えます。
「情報A・B・C」から、「社会と情報」「情報の科学」に改訂された際、指導要領にどのような変化が起こったかといえば、一番大きく取り上げられるのは「実習授業を授業時間数の何分の一以上実施すること」という指定が外れたことです。ご存じのように、教科「情報」の設立当初に、期待されていたであろう「コンピュータを利用して何ができるのか、何を行なうか」といった手段としての実習授業は、「コンピュータ室を利用した授業を行なう」といった目的としての実習授業へと、見事にすり替わって今に至っています。
その元凶は、2000年以降数年間に実施された、骨抜きで悪名高い教科「情報」15日間講習と免許濫発なのでしょう。当然ながら、当該講習は学校単位で派遣される先生が選ばれており、教科「情報」を教えることを望まない先生も多数存在したはずです。付け焼刃の状態では、年間指導計画策定もままならないことは容易に想像できます。そこで、ほとほと困った先生が、実習ならコンピュータ室でオフィスソフトの使い方を実施すれば手っ取り早いじゃないかと、伝家の宝刀「1学期Word、2学期Excel、3学期PowerPoint」が全国各地で生産されたのでしょう。なにぶんオフィスソフトを教えるというパソコン教室の授業は非常に楽なので、そのまま情報の授業として定着してしまったのではないかと推測されます。聞くところによれば、実際に今なお多くの高校でそのような授業が展開されているようです。
「社会と情報」「情報の科学」の完全実施に時代が変わっても、教科書や教材こそ変わりましたが、教える先生は変わらず、新規の正規採用の先生も少ないままなので、情報の授業のあり方にはあまり大きな変化は見られません。そこで、このままではいけないということで新学習指導要領の「情報Ⅰ」となったわけです。ここでの一番大きな変化は、「情報の科学的な理解」を全生徒の評価基準に据えることであり、それまでに得た知識を使って何ができるのかを考えさせることになると推測しています。個人的には、次の改訂では、実習授業を目的ではなく手段に戻す一策とするのではないかと考えております。
プログラミング導入に待ち受ける障害
ここからは今回のテーマである、プログラミングを先生方が授業に導入するうえで、どんな障害がどの程度あるのか、ということを少し見ていきます。もし、いきなり「来週からプログラミングの授業をやってください」と伝えられたとしましょう。授業実施に必要なものは何でしょうか。授業計画をどのように組み立てていくでしょうか。
プログラムを動かすわけですから、当然コンピュータがないと始まりませんが、まずは勤務校の生徒のレベルを勘案したうえで、どの言語を使おうかと思い悩むのではないでしょうか。C++かJavaかPerlか。意図する動きをさせるためにはライブラリが整っていることが必須条件ですし、学校で習ったことを自宅で復習させるためには、ある程度名の知れた汎用的な言語を選んだ方が実用的でしょう。また、適当な教材が用意できなければ、授業担当者がイチから作らなければなりません。授業以外の雑務に追われるのが日本の先生の実情ですから、よほど教材研究に熱心な先生ではない限り、選択した言語に関する教材づくりを毎回授業の度に行なうのはほぼ不可能に近いと思います。
言語についてもう少し掘り下げてみましょう。先生は当該分野のプロフェッショナルとして教壇に立っているわけですから、当該言語に精通していることが求められます。プログラミングの授業中で一番厄介なのが、実行エラーを起こした生徒の作ったプログラムのデバッグ処理です。円滑に授業を回すためには生徒の書いたコードを見てエラーを瞬時に見つけ、次の生徒のヘルプに向かう当意即妙な対応が必須です。インストラクターであると同時に、スーパーデバッガーでなければならない、これが第一の障害です。
その次の心配事として考えられるのが、勤務校のコンピュータ室の環境です。.NETが入っていないのでC++を単純なテキストエディタで学ばせる…考えただけで背筋がひんやりしてきますよね。Javaを選べば、Eclipseが必要でしょう。開発用プラットフォーム以外に目を移せば、性能に関しても心配は尽きません。テキスト処理だけであれば、各学校に配備された量産型低スペックコンピュータで事足りる筈ですが、複雑な処理をする場合はいかがでしょうか。プログラムを書いていて完成間際にコンピュータが固まったら、生徒は一気にプログラミングが嫌いになると思います。教育機関に身を置く者として身に沁みて感じることに、ハードウェア・ソフトウェアの問題、要するに備品と予算の問題に関しては一教員の手の届く範囲のものではありません。しっかりとしたプログラミング教育には、大きな力が必要と言えるのかもしれません。
コンピュータの環境がクリアされたら、次に考えられるはその運用・保守についてです。そもそも一体誰がプログラミング環境を整備してくれるのでしょうか。プログラムのファイルをプラットフォームの初期設定はどうするのか。授業内外を問わず故障するケースも数多くあるでしょう。メンテナンスも授業担当者がわざわざ放課後に2時間3時間残って、教材研究の一環でやってしまいましょうか。それには分掌と部活を手放す必要がありそうで、なかなか現実的ではありません。プログラミングをやれと言われても、そこまでのリスクを背負ってまで、やろうとする気概のある先生はなかなかお見えにならないと思います。
このように、情報の授業の中にプログラミングを組み込むうえで、必要なものをあれこれ挙げ、考えれば考えるほど、不思議なことに必要なものがそっくりそのまま障害になってしまっている。プログラミング教育を行なうに際して二の足を踏む要素が出来上がってしまっています。このように、プログラミング授業には、実施にこぎつけるまでにとにかく労力を要することがわかります。
今すぐに始められるプログラミング
とはいえ、できない難しいと文句を垂らしていても始まらないので、こういった状況や限られたリソースや中でできることを前任校(愛知県立安城南高等学校)で考え、実践したことについてお話ししたいと思います。
こちらは当時の授業で使っていた日本文教出版「情報B」の教科書の目次です。これまでプログラミングを授業で扱って来なかったという先生にとっては、もしかするとこの第2章の第4節「データ処理の手順」は、扱わないと読み飛ばしていらっしゃる部分なのかもしれません。教科書の一部なので、座学の授業では展開し難いことはよくわかるのですが、よく内容を見てみると、なかなかいい教材に仕上がっています。
※クリックすると拡大します。
この単元では、HTMLとJavaScriptを用いて、ブラウザ上でプログラムを動かし、どのように処理されるか見てみましょうという事例が紹介されています。今コンピュータ室にある備品でプログラミングを教えられないか、ということを考えた時、HTMLならばメモ帳などのテキストエディタでも十分書いていけますし、デバッグにかかる労力も比較的少ないと思います。また、タグでマークアップするだけの初心者にも易しいつくりですので、教員側にそれほど深い知識がなくとも「タグのスペルがおかしいね。全角文字が入っているよ」程度の指示で修正できることがあります。インタプリタ処理の良いところですね。処理のキモにもなるJavaScriptもオブジェクト指向でありますが、本家本元Javaのような難解な内容を取り扱うわけではありませんので、生徒が最初に触れる言語としても優秀なのではないかと考えます。
なお、第4節の1ではHTMLによる処理手順の簡単な解説、4節の2ではアルゴリズム・フローチャートの基本的な考え方、4節の3ではアルゴリズムの例として暗号ゲームが掲載されています。簡単ですので、ぜひ参考になさってみてください。
※以上、クリックすると拡大します。
私の実践例ですが、この教科書にして6ページ分の分量を行なってみたところ、最初HTMLの基礎から始めて、中学校での成績がオール3程度の生徒相手に、だいたい5時間程度で完結させることができました。数学的な思考を苦手とし、数字の羅列を見るだけで反射的に拒否反応を起こす生徒も一定数存在します。特にアルゴリズムでループさせるところ、s=1+1/2+1/3+……などという数学的帰納法の数字のページを見るだけで、即座に「無理!」と口に出してしまうという生徒は思った以上に多いので、これをテキストに置き替え、数字の処理ではないものにすることで、数学嫌いの脊髄反射的「無理!」は回避されました。
もちろん、プログラミングも学問の一種ですので、40人生徒がいたら40人すべてが興味を持つかと言ったらそういうわけではありません。しかし、最初から処理手順がややこしい言語を教えて、プログラミングにとんがった生徒1人だけを引っ張るより、簡単な言語から始めることで「プログラミングは難しいけど、もしかすると面白いのかもしれない」というふうに思わせられればしめたものですし、経験を積まれた先生方の技量を生かして、20人、30人と引っ張ってこられれば、プログラミングの授業の一歩として大成功と言えるのではないかと思います。実際、前述の例を試したところ概ね好評でした。
・プログラミングは自分には関係ない難しいものだと思っていた。
・思ったより簡単にできた。
・自分の書いたプログラムが動くと嬉しい。
・この授業を通してプログラミングの面白さを知った。実際に自分でもサーバを立ててやってみたい
というような生徒も現れました。実用性としてはWebプログラミングに限られてしまいますが、JavaScriptでも変数・ループ・配列を扱いますので、アルゴリズムに触れさせる入り口としては十分かなと思います。
この授業を行ったのは情報活用コース(普通科ではあるが、卒業までに14単位情報科目を履修するコース)で、3年次に課題研究という科目を配置しています。課題研究ではWebプログラミングを活動内容とし、HTMLとWebデザインの技法を一通り学ばせてからCSS、JavaScriptを工夫して組み合わせ、最終的には各自がクラスメートに紹介したいものについてのWebサイトを作成し、相互評価させる、という活動を実施しました。
今回お話しした内容の一部につきましては、平成26年度の文部科学省「学校教育・プログラミング教育実践ガイド」(※)に掲載されておりますので、詳しくはそちらをご覧いただければと思います。先ほどプログラミング導入に待ち受ける障害として、知識・経験の問題、備品・予算の問題、そして時間・労力の問題を挙げましたが、今ご紹介した内容であれば、比較的簡単に実践できるのではないかと考えております。
最初は「プログラミングをやってみる」というのが目的でもよい
最後に、今後の展望についてお話ししたいと思います。最初に、情報教育の目的がコンピュータを使うことのみに注力されがちになってしまっていること、また、そのように曲解されたまま10年過ぎた、ということを話題に挙げました。それに背反するようなことを申し上げるようですが、最初は目的から入るという選択肢があってもいいと思います。当然のことながら最初は誰もが「プログラミングって何?」というレベルです。であれば、まずプログラミングを経験すること、が目的になります。それはそれで十分立派な目的です。ただ、ここを強調しておきたいのですが、目的は不変ではないということです。当初の目的のまま安住していてはダメですよ、ということです。
授業立案を例に取れば、まずはプログラミングの授業を行なうことが目的で良いと思います。初回の授業が終わったら、授業担当者として感じる部分があるはずです。この教材で良かったのか、この手順で良かったのか、TTが必要なのか、サブ教員が何人ほど必要なのか、いくらでも反省材料は出てきます。当該プログラミングの授業は、良かったのか良くなかったのか。良くなかったとしたら何を変えればいいのかという改善点を洗い出すことで、目的は「やってみる」というレベルではいられなくなります。改善を積み重ねていくことで、実践そのものが目的である、というレベルから、プログラミングは生徒が研究したり、創造したりするための手段だと言えるまでになります。要するにプログラミングは表現の一手段である、と授業担当者として捉えられるようになれれば、情報の先生としての存在意義になると考えています。また、こうした実践を蓄積していくことが、新科目「情報Ⅰ」の実施に向けて積み重ねていくべき土台の一部ではないかと思います。
これは私がいつでもどこでも、それこそユビキタス的に宣言していることなのですが「情報の授業なんてコンピュータを触らせているだけなので誰でもできる」と他教科の先生に思われたら負けなんです。自分が情報の先生として存在している意義はどこにあるのか、それを日頃から考えて日々の授業に臨むことが大切ですし、それこそが情報の先生たりうる矜持になるのではないでしょうか。日々の授業で苦労されている情報の先生は日本中にたくさんお見えです。私が実行委員を務める「全国高等学校情報教育研究会」もそんな先生方が集まり、様々な情報交換を行なえる貴重な機会ですので、愛知県の先生方にもぜひお越しいただければと思います。
さきの中教審の中間報告では「大学入試向け、情報科は強化すべき教科の一つ」と文面で出てきています。皆さん情報の先生として、これからも共に頑張ってまいりましょう。