事例254

創造的写経プログラミング授業のすすめ

埼玉県立川越南高校 春日井優先生

第12回全国高等学校情報教育研究会全国大会より(2019年)
第12回全国高等学校情報教育研究会全国大会より(2019年)

初めにこの授業の前置きについてお話をします。

 

辞書には、「創造」とは「新しいものを初めて創り出すこと」。「写経」は「経文を書写すること」と書かれています。よくプログラムを丸写しすることを「写経」といいます。「創造」と「写経」は相反する考え方ですが、何か通ずるものがあるでしょうか。

 

 

プログラム学習において、「写経」をさせるという話を聞きます。

 

写経ですから、何らかの功徳はあるでしょう。生徒に感想を書かせると、「タイピングが速くなった」と書く人が時々見られますが、これがプログラミングを学んだ成果といってよいのでしょうか。

 

 

正解を答える問題をこなすだけでは、プログラミングが正解主義に陥ってしまう

大学入学共通テストに情報科が課されることになり、傍用問題集やネット教材など、プログラミングの学習教材が増えてきたように思います。また、プログラムを正確に書けるようにする学習教材もあります。

 

このような試験に対応する教材や、プログラムの習得のための教材の共通点として、正解を答えるタイプのものが多いように思います。

 


 

小学校でSchratchを使って自由にプログラムを作った生徒にとっては、不満を感じるのではないでしょうか。また、正解を答える問題をこなすだけなので、生徒はプログラミングを正解主義で捉えてしまう恐れがあります。

 

さらに、プログラミングを学習して問題を解けるようになっても、プログラムを作る意義を見いだせないと、単なる試験に対応するためのツールになってしまいます。これでは、せっかく全ての高校生がプログラミングを学習しても、「問題は解けるようになったけど、何の役に立つの?」という本末転倒な結果になってしまうのではないでしょうか。

 


このような問題意識を持って授業を検討していたところ、2016年の神奈川県の実践事例報告会で、東京都立町田高等学校の小原格先生が乱数を使ったプログラミングの実践を発表されていました (※)。

この実践を発展させて、配列や関数なども学習した後に同様のことを行ったら、生徒がプログラミングをさらにプログラムを活用するのではないかと考え、本実践を行ました。

 

「乱数を利用するJavaScriptプログラミング授業の実践~プログラミングで「好きなもの」を作る活動の工夫」

 

 

まずは基本構造とアルゴリズムを確認。ここでは空欄補充などで「正解」をしっかり身に付ける

ここからは授業の概要を説明します。授業の流れはこちらの表のとおりです。

 

 

埼玉県の県立学校では、各生徒にGoogleのアカウントのIDを1つずつ割り当てています。ですので、Google Colaboratoryを利用できますし、Google Classroomでベースとなるプログラムを配布することができます。

 

 

1限目から6限目の授業では、Google Classroomで学習の要点となるプログラムを配布し、繰り返し・分岐・配列、関数などの基本的な考え方を確認しながら、プログラムの流れや処理の考え方を学んでいきます。

 

特に理解させたい箇所についてはプログラムの空欄を補充して完成させ、実際の動作を確認していきます。

 

 

ここまでは正解がある問題を考えさせていますが、ここで学習したプログラムが、後にグループで自由な発想で作成するプログラムを作る際の「写経」をする基となります。次に、ここで行ったプログラムの例をいくつか見ていきます。

 

 

例1)距離に応じた運賃の計算プログラム

勤務校は遠方から電車で通学する生徒が多いため、題材として西武新宿線を取り上げることにしました。

 

 

最初の例として、距離に応じて運賃を求めるプログラムを完成させました。これがそのときに配布したプログラムです。赤の下線は空欄にしたところになります。 

 

 

例2)関数を用いて1日の平均乗降人数をグラフにする

2つ目のプログラムは、関数を用いるもので、2021年度の1日平均の乗降人数をグラフにする問題です。

 

 

そのプログラムがこちらです。このプログラムは、戻り値がない関数でグラフを書くものですが、戻り値を用いてグラフを書くプログラムについても学習しています。

 

 

例3)乱数を用いて等しくない確率でくじの結果を出力する

3つ目は乱数を用いたプログラムです。

 

ここでは乱数の用い方を確認しただけなので、特に空欄は設けていません。また、乱数を用いる内容なので、西武新宿線の話題でもありません。これらのようなプログラムを用いて、自分でプログラムを作るために必要な知識について理解できるよう、授業を進めていきました。

 

 

 

学習したプログラムを発展させて、生徒自身のオリジナルのプログラムを作る

ここから、いよいよ今日の本題の「創造的写経プログラミング」の実践についてお話しします。本実践で「創造的」と呼んでいるのは、授業で学習したプログラムを発展させること。「写経」と呼んでいるのは、学習したプログラムを模倣することです。

 

要するに、「創造的写経プログラミング」とは、学習したプログラムを発展させて、生徒自身のオリジナルのプログラムを完成させることになります。

 

 

授業で行う課題は、「これまでに学習したプログラムを改変したり、応用したりして、何かが便利になったり、何かの役に立つようなプログラムを作ってください」としました。

 

その条件として、グループで一つのアイデアにまとめ、それをプログラムすること。全員が必ず自分のコンピュータで動作させることとしました。また、エラーが出たら基本的にグループで解決し、やむを得ない場合には教員からアドバイスをするということにしました。

 

 

この授業は、学んだプログラムを改変してできることをグループで考え、それを行うプログラムを作成し、最後にプログラムの用途や設定を文章で記述させる、という流れで行いました。

 

この流れにより、生徒は正解がない問題を考え、それを行うプログラムをグループで考えながら作っていくということになります。

 

  

「創造的写経」から生まれたプログラムたち

生徒が作成したプログラムをいくつかご紹介します。

 

こちらは、乱数を使って夕飯のメニューを決めるプログラムです。こういったプログラムはいくつかのグループで見られました。このグループのプログラムの特徴は、決まったメニューに合わせて一言添えているところです。

 

※クリックすると拡大します

 

こちらは10連ガチャのプログラムです。

 

ガチャを作るのは、比較的多くの生徒がやりたいようです。多くのグループでは一度にガチャを引くのは1回だけで、実行回数を稼ぐことによってガチャを何回も引くことにしていましたが、このグループは構文を使って10連ガチャにしているところを工夫しています。

 

※クリックすると拡大します

 

さらに難易度が高いガチャを作りたい、というグループがありました。一定回数ガチャを引いて、レア度が高い物が出なかった場合に、必ず一定回数でレア度が高い物が出るようにしたいと言うのです。

 

このグループは、レア度が高いものが出ていない回数を数え上げるところまでは自力で作っていましたが、レア度が高いものが出る確率の変え方のアイデアは、自分達で作ることができなかったので、私の方から配列に確率を入れるアイデアを提案し、残りは生徒たちで完成させました。

 

※クリックすると拡大します

 

こちらのプログラムは入力を伴うもので、コンピュータを相手に「あっち向いてホイ」をするというプログラムです。このグループは、コンピュータにも向く方向にいくらか偏りを作って、人間のような感じを出したかったようです。

 

※クリックすると拡大します

 

最後が、関数を用いたプログラムをアレンジしたグループで、太陽系の惑星の直径を比較して、★の数で表現するグラフを作っています。画面に★がうまく収まるように、★1個を約3000kmにしています。

 

※クリックすると拡大します

  

様々な設定を決めるに際してプログラムを作る動機や条件を整理→試験問題のリード文に通ずる

今回の「創造的写経プログラミング」の授業を通して感じた学習効果がこちらです。

 

自分たちでプログラムを作るに当たり、生徒はさまざまな設定を決めます。これはプログラムを作る動機や条件になり、共通テストでのリード文に書かれそうなことになります。ですので、この経験は、リード文を早く読むためには必要な経験ではないかと思います。

 

また、生徒がプログラムを作るためのロジックを主体的に考える機会になったと思います。これにより、実際に自分が取り組んだプログラムについてアルゴリズムの理解が深まったように思います。

 

生徒はより複雑なことをやりたいという意欲があるように見受けられました。そのため、よりリアルに近づけるために細かい設定を決めていくため、プログラムは予想以上に長くなる傾向が見られました。

今のところ生徒へのアンケート等を行っていないので、定量的な結果を示すことはできませんが、プログラムの目標を達成するための効果的な授業になったと思います。

 

  

先生自身の授業づくりにも「創造的写経」の精神を取り入れて

「創造的写経プログラミング」は、授業で学習したプログラムを模倣するだけではなく、生徒がオリジナリティを考えてプログラムを発展させる方法です。

 

最初にお話ししたように、そもそもこの授業は私のオリジナルではなく、小原先生の授業を模倣したものです。

 

小原先生の授業は、「情報の科学」でなさったものでした。この実践から6年が経過して「情報Ⅰ」が始まることで、私自身もプログラミングの授業を検討することになり、小原先生の実践を模倣してこの授業を作りました。

 

模倣した授業ではありますが、小原先生が実践された当時とはプログラミングの扱いも変わっています。そこを「情報I」に合わせた点が、私のオリジナリティになるのではないかと考えています。

 

これまで「社会と情報」を設置していた学校が多くありました。また、免許外教科担当や臨時免許で情報科の授業を担当されている先生も、まだまだ多いとの資料も公開されています。そのため、「情報Ⅰ」にどのように取り組んでいこうか、と迷われている先生も多いのではないかと思います。

 

「キミのミライ発見」のサイトには、約10年間に渡る数多くの実践が紹介されています。ここに紹介された授業を模倣してみることで、授業を受ける生徒にとって多くの刺激があり、資質・能力を伸ばすことにつながると思います。先生にとっては、模倣には抵抗があるかもしれませんが、実際に授業をすることになれば、自分の学校の生徒にあわせるために、なんらかの工夫をされることになるでしょう。

 

私が「模倣した」ことを隠さずに実践発表を行ったことにより、情報科の授業に不安を抱えている先生方が、このサイトにある授業を模倣されるようになれば、多くの高校生が魅力的な授業を受けることになると思います。ぜひとも模倣から始めることにチャレンジしてみてください。ただ、その際には「パクる」というような表現をなさらず、創り出した人を尊重していただきたいと思います。

 

神奈川県情報部会実践事例報告会2022オンライン オンデマンド発表より