事例52
効率よく・入り口のハードルを上げ過ぎないプログラムの指導案
~code.orgを用いた授業の事例
埼玉県高等学校情報教育研究会 鶴見美子先生
私は、教科「情報」で採用されたメンバーで構成されている埼玉県高等学校情報教育研究会の研究委員会に所属しています。ここでは、毎年共通のテーマを決めて指導案を研究しています。
個人的な話ですが、私は教員になる前はコンピューターの会社で働いていました。情報科の教員になって、初任の学校に配属された当時は、一人だけですから何から授業していいのかわからず、途方に暮れたこともありました。そんな時、この研究会で他の先生方と一緒に授業案を研究する機会をいただいたことで、心折れずに済みました。心から感謝しています。
埼玉県高等学校情報教育研究会では、一昨年は「論理的思考」を身につける授業案を研究しました。その時、生徒が本当に論理的思考ができているか確かめるには、やはりプログラミングを教えるのがよいということになりました。そこで昨年は、プログラミングの授業の前に生徒がどのくらいわかっているのかをつかむためのアンケートと、プログラミングの授業案の検討を行いました。
これからはプログラミング教育が必須になると言われていますが、実際にどこから・どのように・どんなレベルまで教えたらよいのか、具体的なことは何も示されていません。
実際、来年度(平成29年度)改訂教科書を見ると、「社会と情報」でもプログラミングを取り上げているものがけっこうあります。
では、「社会と情報」でどのようにプログラミングを教えたらよいのでしょうか。まず、とにかく授業にかけられる時間が少ないので、効率よく学ばせたいということがあります。また、生徒のアンケートの結果にもありましたが、アルゴリズムで難しいと感じてしまうので、入り口はできるだけ易しくしたいです。
そこで、私の知人のオーストラリア人のIT技術者からアメリカの小学校でアルゴリズムやプログラミングを教える時に使う教材として紹介されたのが「code.org」というサイトです。
このサイトは、アメリカの非営利団体が立ち上げたもので、ビル・ゲイツやマーク・ザッカーバーグらの寄付金で運営されています。アメリカやイギリスの小学校で実際に利用されており、code.studioというオンラインの20時間の学習コースで学びます。
code.studioは文字が読めなくても学習できる4歳から18歳までの初心者が対象のブロックベースのプログラミングです。順次処理からfor文、while文、関数、if文、入れ子のループ、デバックと順を追って学習できるようになっており、アメリカの有名大学でも使われています。
コースが4つに分かれていて、レベルに応じて選ぶことができます。子どもが好きなディズニーのキャラクターをプログラムで動かすようになっていて、実行ボタンを押すと「できたね」とほめてくれる、楽しい構成になっています。
ただ動かすだけでなく、ブロックでアルゴリズムを確認して、コード表示で実際に動いているJavaScriptを見ることができるようになっています。
code.studioを用いた4本の授業案を紹介します。
1つ目が、このcode.studioを使ってフローチャートを書いてからブロックを動かして、そしてプログラムを確認する、フローチャート重視のもの。
2つ目は、ブロックを先に動かしてからその動きをフローチャートにして、その後プログラムを確認するもの。
3つ目は、ブロックを動かしてコンピューターのしくみがわかったら、プログラムを確認して自分でプログラムを書こう(→コーディングまで行う)というもの。
4つ目は、ブロックを動かしてプログラムを見たらフローチャートの書き方を学んで仕事に応用しようというものです。以下、具体的に展開を説明します。
授業案1.フローチャートとビジュアルプログラミング
授業の目標は、フローチャートを用いて問題の整理を行い、コンピューターに命令を出すことです。
入学以前に勉強でつまずきを経験した生徒が多数いる学校の1年生で行いました。
授業は50分の1コマです。
「プログラミングとは何か」を教えてからフローチャートを考え、ブロックを操作してプログラムの記述を確認します。あくまで確認するだけです。
1本の線を描く、という動きをフローチャートとプログラムで表します。
まずはフローチャートで「100ピクセル前に進む」ことはこんなふうに描くという説明です。開始と終了があって、「真ん中に100ピクセル動く」とありますね。
次にこれをブロックプログラミングで表すとどいなるのか、実際にブロックを動かしてプログラムを見せます。さらにその裏でコードが描かれている…と説明しながら1つずつこれを進めていきます。
次に四角を描くときはどうするかを考えます。
最初は順次処理で描いてみます。図にあるようなワークシートを作っておいて、空いているところにフローチャートを完成させて、順次処理で四角を描きます。
これができたら、ループを使って四角を描いてみます。
フローチャートを用意しておき、「同じことを何回繰り返すのかな?」という形で描きます。そしてJavaの画面で確認します。
「四角を3つ描くとしたら」ということでループが入れ子になっていますが、この空白をいくつか作って埋めてもらいます。
ここまではワークシートを作りました。できそうだったら、ここから先は自分で全部やるように指示を出しましたが、次に進めた生徒はいませんでした。
この授業では、
・JavaScriptは記述させない
・プログラムコードは見せるだけにする
・生徒の能力に応じたペースで作業させる
・生徒同士の教え合いは歓迎する
ということに留意しました。
生徒からの感想が下図です。全体としては、経験がなかったり、やりたくないと思っていた生徒に関しても、やってみたら楽しいという意見が多く挙がりました。
授業案2. cord.orgを利用してフローチャートを作成する
50分4コマで行います。流れは図の通りです。
この授業ではWordでワークシートを作っておき、図のブロックを使って自分でフローチャートをWordで描いていきます。順次構造→反復構造→選択構造の順に進めていきます。
授業を進めるにあたっては、フローチャートやWordそのものに不慣れな生徒のために、実際に作業しながら説明することが大事です。そして随時ワークシートを回収してフィードバックしたり、早くできた生徒が他の生徒をサポート役にしたりして確実に理解させるよう留意します。評価は、code.orgのステージがクリアできたか、Wordでフローチャートを描けたかを観点として行います。
授業案3.cord.orgを利用してコーディング→実行→改善を行う
この授業では、フローチャートを描かずにプログラミングを行います。50分×5コマの授業です。1.2限目はcode.orgを使って古典的迷路など様々な問題解決を行い、3限目から5限目はVBScriptを使ったプログラミング演習を行います。
プログラミングの演習では、細かい文法を説明するのは時間がかかって大変なので、すでにあるサンプルプログラムを説明して、それを問題に合わせて改良させるという形を取ります。例えば「1~nの素数判定」という難しいプログラムを実際に見せてプログラムの解説を行い、それを改良をして「1~nの合計を計算をする」というプログラムを作るといったものです。
授業案4.アルゴリズム学習から問題解決学習へ
これは、プログラミング的な思考を使って問題を効率よく解決する経験をするものです。題材は、文化祭の企画内容を振り返って当日までの作業をリスト化し、フローチャートを作成して無駄な部分や失敗点を改善するというものです。
実施の流れです。1.2限目がcode.orgを使ったアルゴリズムとプログラミングです。授業提案3で使ったアナとエルサと古典的な迷路を使用します。
3限目はフローチャートの書き方説明と班分け、これまでの企画の振り返りを行います。
そして4限目から8限目までの5時間を使って、作業のリスト化、手順の並べ替え、ワークシートの作成、グループごとの発表を行います。フローチャートに入る前にcode.orgで慣れておくことで、スムーズに問題解決実習に移行できました。ゲーム感覚でできるのでより達成感があり、プログラミング自体を学習するよりも時間が短縮できました。
この授業を通して生徒に伝えるのは、
・ゲームもプログラミングで作られている。
・コンピューターは言われたことだけを正確にやる。言われたことだけをやるのでは機械に負けてしまう。
・人間は自分で考えて動くことができるので、自分で考えて動く人になろう。
ということです。
では考えて動くにはどうしたらいいのか、ということで、実際にフローチャートを作ってみます。
例えばカップラーメンを作るならどうしたらよいか、ということを書いてみます。
では、遠足のカレー作りならどうするか、フローチャートを書くための手順や確認事項を列挙していきます。
こういった作業を通して、フローチャートを使うメリットは、
・作業を一つずつばらばらに分けて作業の流れを表せる。
・複数人で作業をする場合は分担ができる。
・時間の流れがわかるのでスケジュール管理ができる。
・より効率的に作業を行うことができる。
などであることを生徒に気付かせていきます。
ここまでの手順を踏んだうえで、課題の文化祭のクラス企画の振り返りを行います。全体の動きと係について、誰が何をすればいいのかを具体的に書き出します。また、これと並行して全体の進行や、どの時期に誰が何をしたらよいかなども考えていきます。
これをフローチャートで作業をリスト化します。クラスを6人ずつの班に分け、班で1つのフローチャートを作ります。一人ひとりに役割を与えるとともに、作業の目的や意味をしっかり意識させて取り組ませます。
ワークシートと授業の取り組み状況、さらにまとめの発表で評価します。
プログラミング学習というものはあくまでも手段であり、目的は論理的思考と問題解決能力を身につけることなのであると思います。
プログラミング学習は、生徒にも教員にとっても非常に難解ではありますが、これからも効率よく興味と関心を高めて理解を深めるような教材を考えていきたいと思います。
※全国高等学校情報教育研究会 第9回神奈川大会 分科会発表より