中高一貫校のプログラミング教育のあり方~中学校・技術科と高校情報科の連携と棲み分け

筑波大学附属駒場中学校 技術科

中学校技術科の「情報に関する技術」にも大きな変化が

 

2020年度からいよいよ小学校でプログラミングが必修となります。環境整備や教材の準備、先生方の研修など、今年から来年に向けては実施に向けての準備が大詰めを迎えることになるでしょう。

 

小学校のプログラミング教育と並んで注目を集めているのが、大学入試へのプログラミングの導入です。2018年5月に安倍総理大臣が大学入試への情報科目の追加について言及したのを皮切りに、大学入試でも情報科、特にプログラミングを行うかという議論が始まっています。今後具体的な内容が示されるようになれば、高校でのプログラミング教育にも影響は必至でしょう。

 

 

このように、小学校・高校のプログラミング教育に注目が集まっていますが、実は次の学習指導要領改訂では、中学校の技術・家庭科(以下技術科)も大きな影響を受けます。

 

中学校の技術科では、「材料と加工に関する技術」「エネルギー変換に関する技術」「生物育成に関する技術」「情報に関する技術」が四本柱となっていますが、現行の学習指導要領の「情報に関する技術」でもプログラミングは必修になっており、以下のように書かれています。

 

(3) プログラムによる計測・制御について、次の事項を指導する。

ア コンピュータを利用した計測・制御の基本的な仕組みを知ること。

イ 情報処理の手順を考え、簡単なプログラムが作成できること。

 

「簡単なプログラムが作成できること」と明記されているので、これまでもプログラミングの実習が行われているはずですが、実際にはほとんど学んでいない(と感じている)生徒もいるのが実情です。

 

現行の学習指導要領の特徴は、課題の解決のために処理の手順を考えさせることに重点を置くなど、コンピュータを用いて計測・制御に関する技術の習得を目的としていることです。つまり、「計測・制御」が主な目的で、「プログラミング」はそのための手段であるということです。

 

これに対して、新たな学習指導要領の中学校技術科「D 情報の技術」のプログラミングに関する内容は

(2) 生活や社会における問題を、ネットワークを利用した双方向性のあるコンテンツのプログラミングによって解決する活動を通して、次の事項を身に付けることができるよう指導する。

 

ア 情報通信ネットワークの構成と、情報を利用するための基本的な仕組みを理解し、安全・適切なプログラムの制作、動作の確認及びデバッグ等ができること。

 

イ 問題を見いだして課題を設定し、使用するメディアを複合する方法とその効果的な利用方法等を構想して情報処理の手順を具体化するとともに、制作の過程や結果の評価、改善及び修正について考えること。

       

(3) 生活や社会における問題を、計測・制御のプログラミングによって解決する活動を通して、次の事項を身に付けることができるよう指導する。

 

ア 計測・制御システムの仕組みを理解し、安全・適切なプログラムの制作、動作の確認及びデバッグ等ができること。

 

イ 問題を見いだして課題を設定し、入出力されるデータの流れを元に計測・制御システムを構想して情報処理の手順を具体化するとともに、制作の過程や結果の評価、改善及び修正について考えること。

となっています。

 

最大の変化は、プログラミングを行うのは、「生活や社会における問題を解決すること」が目的となっていることです。さらに、「問題の設定」「手順を具体化」「制作」「動作の確認」「デバッグ」「評価」「改善」といった、実際のプログラムの開発工程を踏まえた詳しい記述になっていることも特徴です。高校の「情報I」では、これらを学んできていることが前提となっていきます。

 

また、計測・制御だけでなく、新たにネットワークを利用した双方向性のあるコンテンツのプログラムの制作も加わりました。従来の技術科のディジタル作品の制作では、ソフトウェア(アプリ)を使って切り貼りで作る場合が多かったのですが、新しい学習指導要領ではプログラミングをベースにすることが明記されています。

 

そうなると、中学校技術科と高校の情報科の連携、あるいは棲み分けはどのように考えたらよいのでしょうか。今回は、特に学力の高い中高一貫校でのカリキュラムのあり方を考えるために、筑波大学附属駒場中学校の技術科の授業を取材しました。                         

 (2018年11月21日・28日)

 

Visual Basicを使った総和のプログラム・ライントレースカーの制御プログラム作り

 

昨年この学校のプログラミングの授業を取材したのは、生徒が興味のあるテーマごとに分かれて学ぶ発展学習「テーマ学習」の授業でした。テーマ学習は、希望者から選ばれた10人で行いますが、今回は技術・家庭科の通常授業なので、1クラス41人が一斉に取り組みます。

 

今回見学したのは、Visual Basicを使った総和のプログラム作りと、ライントレースカーの制御の授業です。いずれも50分の授業を2コマ連続で行います。

 →「テーマ学習」記事へのリンク

https://www.wakuwaku-catch.net/jirei1888/

 

論理回路→4bitコンピュータ→Visual Basicは技術科だからこその流れ

今回の授業の組み立てについて、技術科の渡邉隆昌先生にご説明いただきました。

 

中学校の技術・家庭科で行うプログラミングは、計測・制御、つまりものを動かすためのプログラミングが中心です。そのため本校では特にアセンブリ言語を重視しており、最初に論理回路を深く学んでいます。具体的には、まずディジタルIC実験ボードを使って、いわゆる「0・1の世界観」による二進数演算の仕組みと、配線がどのようにつながるかを学びます。その後、4bitコンピュータのプログラムを作ります。ここで行うのはLEDの点滅、7セグメントによる数字の表示、ブザー音など単純な動作の組み合わせですが、実は活動そのものの難易度としては相当高いものです。本校の生徒は、基本的にこういった手応えのある問題にチャレンジするのが好きなので、頑張って食いついてきます。

 

このように初めにアセンブリ言語と4bitコンピュータのプログラミングを学んでから高級言語によるプログラミングを学ぶというのが本校のカリキュラムの特徴です。

 

高校の情報科でもand/or/notなど論理回路の基本的な部分には触れますが、流れとしてアセンブリまで詳しく学ぶことはできません。その意味で、よりハードに近い論理回路からスタートしているのが、技術科としての特徴を生かしていると思います。さらに、論理回路を順序立てて考えていくことは、プログラミングの1行ごとの意味を考え、「言語」として理解することにつながります。

 

技術科の中の流れで言えば、中学2年の3学期にダイオードを使って半導体の仕組みを学んでいます。これは技術科の4領域では「エネルギー変換」で扱う内容です。これが3年生の論理回路につながっていきます。

 

一方、他教科との連携で言えば、中学2年の2学期に物理で電気を学んでおり、これが今お話しした半導体の内容と関連していますが、物理では理論的な部分を、技術科ではより実用的な部分を担う、という形で棲み分けています。このことは先生同士で特に申し合わせているわけではありませんが、生徒たち自身はわかっているようです。いわば阿吽の呼吸といったところです。

 

1. Visual Basicで計算式のプログラムを作る

 

見学した2日間の授業は11月の下旬2週にわたるもので、技術・家庭科で2学期の最初から行ってきた「情報に関する技術」の単元の最後にあたります。中学校3年生の1クラス41人が、コンピュータ教室で1人1台のデスクトップ機を使って授業を行います。

 

 

授業の最初に先生がプログラミングの経験を聞かれたところ、このクラスはScratchの経験がある人が約3分の2、マインドストーム等のコンピュータ制御をやったことがある人が2,3人いましたが、コードを書くプログラミングについては約4分の3が初心者でした。

 

授業ではBasic言語の歴史や、言語としての特徴の解説を聞いた後、共有フォルダーに入っているBASICのサンプルプログラムをコピペで取り出し、コードを見て何をするプログラムなのか考えることを行いました。ここで使ったのはお絵描きのプログラムで、Microsoftのアクセサリに入っているペイントと同じものです。BASICではペイントの色を右クリックで切り替えるところを、ペイントでは使いやすくするためにボタンを使っていることなど、今回の授業で学ぶことを押さえます。このように、最初の段階からプログラムの1行1行が何を意味しているかを意識させています。

 

 

簡単なプログラムの「意味」を理解しつつ、必要な部分を書き換えていく

 

今回の授業の目標はWindowsの開発環境 Visual Studio (VS)を使って、Visual Basic(VB)で総和のプログラムを作ることです。VBはイベントドリブン型のプログラミング言語で、ボタンなどをクリックするとプログラムが実行するようになっています。汎用性があり、簡単なゲームやアプリケーションの開発にも応用できます。

 

VS、VBの画面はボタンが多いので、先生が指示したもの以外はさわらないことを押さえた上で画面を作っていきます。最初は「フォーム」「プロパティ」「ツールボックス」だけを開いて、フォーム上にボタンを作るところから始めます。

 

 

ツールボックスから「ラベル」を持ってきてデザイン画面に貼り付けます。続いてプログラム画面に移動して、「private sub」と「end sub」の間に指定された文字列を貼り込んでボタンの表示を変更します。作業の説明は教室前方のスクリーンに先生が操作するパソコンの画面を映し出す形で行います。

説明のペースはかなり速く、集中力が必要ですが、生徒たちはわからないところがあるとまず周りの人に聞いて何とかしようという姿勢が自然に表れています。

 

 

ある程度進んだところで、「ここまでできた人は、自分で演算子を使ってプログラムを書き替えて、テキストボックスに入った数字を計算するプログラムを作ってみよう」という指示が与えられました。

 

かなり苦戦していた人もいましたが、それでも半分以上の生徒がいろいろなパターンの計算式作りに取り組んでいました。1時間目の最後は、「『消去する』というボタンはどのように作ったらよいか」という課題が与えられ、できた人から休憩となりました。

 

単なる「打ち込み」ではなく、プログラムに必要な情報整理の仕方や各行の意味するところを考える

 

授業後半の1時間で総和のプログラム作りに取り組みました。

 

ボタンを貼り付けてテキスト表示を変更していく手順は1時間目と同様です。ボタンの準備ができたら

総和のプログラム

 Dim N,Total As Integer

   N=TextBox1.Text

  Total=(N+1)*(N/2)

   Label1.Text=Total

を指定通り入力します。

 

このプログラムは、変数(整数型Integer、NとTotal)や演算子(乗算*、加算+、除算/)、TextBox(入力)、Label(表示)などを使い、繰り返し文を利用しているので、計算式を作る際の基本的な要素を経験することになります。

 

 

生徒たちは整数1からNまでの総和の計算の仕方は理解できているので、ここではコードを打ち込むことによって、プログラムを作るのに必要な情報の整理の仕方や、それぞれの行が何を意味しているのかを知っていくことになります。

 

作業が終わった生徒は実際にラベルに数を置いてみて計算結果を確かめていました。プログラムとしてはわずか4行ですが、ちょっとしたタイピングミスでも動かないこと、きちんと順序立てる必要があることなど、人間とコンピュータのやり取りの「作法」を凝縮した活動の中で実感していることがわかりました。

 

 

2. Visual Basicでライントレースカーの制御プログラムを作る

1週間後、VBを使う2回目の授業がライントレースカーを用いた計測・制御のプログラミングです。この授業でも制御する環境としてはMicrosoft Imagineを用い、Visual Basicで制御モジュールを操ります。

 

ここで使うライントレースカーは、単に車を動かすだけでなく、制御モジュールの内部構造がどのような仕掛けになっていて、どのようにプログラミングされてきたかをより深く学ぶために、同校の先生方が外部の企業やアドバイザーと協力して、約10年をかけて開発してきたものです。昨年度の「テーマ学習」では10人で行っていたものを、今回はクラス全員が一斉に行います。

 

写真提供 筑波大学附属駒場中学校
写真提供 筑波大学附属駒場中学校

最初に「知識編」としてVB、Microsoft Imagine、Visual Studioなど開発環境と、今回使うライントレースカー(WR-LTC2M)の構造について説明されました。特にライントレースカーについては、センサ、アクチュエータ、インタフェース、LED、可変抵抗器などの各部位の役割を丁寧に説明し、車の動きに対してどこが・どのような役割をするのかを確認した上でプログラミングに入っていました。

 

 

その後、VS、VBを立ち上げてプログラミングに入ります。前回同様、「フォーム」「プロパティ」「ツールボックス」だけを開いてプログラムを記述していきますが、授業全体を通して「前回と同じように」ということを意識させる言葉かけがされていました。

 

 

プログラムを書くことを通して「順次」「反復・分岐」を順番に経験

今回の授業は、「順次」「反復・分岐」を順番に経験しながらライントレースカーの動きを制御する流れとなっています。

 

ツールボックスから制御モジュールのアイテムを選択し、フォームに貼り付け、ボタンで「前進」を作ってプログラム画面にコードを打ち込んでいきます。

 

前進では、下記のプログラムの右モータをOn、左モータをOnにします。

 Ltc1.RightMotorOn()

 Ltc1.LeftMotorOn()

 

同様にして、「停止」も作ります(→右モータ、左モータともにOff)。しかし電源を入れてもそのままでは動きません。左右のモータの( )に速度を指定する数値(0~255)を入れなければならないことを示して、プログラムの単語や記号一つひとつがどのような意味を持ち、それらを組み合わせた命令が機器の動きにどのように反映されるかを確認します。

 

このあと「右折・左折」「速度を変える」は、サンプルプログラムをコピペしたものを使い、自分たちでコードのどこを変えればよいかを考えて改変していきます。さらに、「後進」や「回転」も前進や左折・右折のプログラムから工夫して作ります。

 

先生からは随時ヒントが与えられますが、生徒たちの作業を見ていると手当たり次第にいじるのではなく、プログラムのどこを変えたらよいかという点についてある程度目処を立てて変えてみる、ということがうかがわれました。

 

 プログラムを改変することで新しい動きを作り出す

次の課題は「黒のラインまで進む」で、ここからは分岐や反復が入って来ます。

 

ここでもまず「黒まで前進」のボタンを作り、黒と白を判断する閾値を指定するプログラムを設定して、センサが黒のラインを感知したらそこで車を止めるプログラムを作っていきます。

 

※右センサーが黒と判断した場合、左右モータを止める。

 それ以外は前進する。10秒間動作する。

 

Ltc1.TimerReset()

Ltc1.LeftMotorOn()

Ltc1.RightMotorOn()

  Do While Ltc1.Timer <10

       If  Ltc1.RightSensor=False Then

               Ltc1.RightMotorOff()

         Ltc1.LeftMotoroff()

       End  If

  Loop

       Ltc1.RightMotorOff()

       Ltc1.LeftMotorOff()

 

 

中にはいったんラインを通り越してからバックして止めるユニークな動きを作る人もいました。

 

その後は「右トレース」→「左トレース」と進め、早い人は自分で「ライントレース」→「よりスムーズなトレース」を自分で工夫して作っていきます。LEDを光らせる工夫を入れている人もいます。

 


この授業も生徒が一人1台のライントレースカーを使って行います。以前は二人で1台で行っていましたが、学習に対しての責任が生れるという点で、やはり一人1台の方がよいとのことです。活動の中でも、理解や興味に合わせて(時に失敗しながら)どんどん工夫を加えていく生徒もおり、学びを深めるという点で確かにこの方が有効であることが感じられました。

 

これは、先に述べたように、トラブルが発生したりわからないところが出てきたりした場合にも、生徒が先生に頼らずまず自分で、それから周りに訊いて解決するという姿勢が身に付いているからこそ、できることでもあるのでしょう。先生ご自身も改良を加える中で、生徒が失敗しやすいポイントを判断できるようになられたそうです。

 

できることが限られている4bitコンピュータでの苦労があったからこそ、VBが理解できる

写真提供 筑波大学附属駒場中学校
写真提供 筑波大学附属駒場中学校

プログラミングはほとんど未経験でありながら、2週連続で総和の計算とライントレースカーという、全く違う素材を使ってプログラミングをするのはたいへんではないかと思われましたが、生徒たちは思い思いのやり方で楽しみながら取り組んでいました。生徒たちに話を聞きました。

 

「4bitコンピュータ→フローチャート→プログラミングと進んできましたが、プログラミングはif、then、else…という『言語』なので、分岐を入れるとどう進むかなど、フローチャートで書いていたものを言葉に置き換えるとこうなるんだな、ということがよくわかりました」(プログラミング未経験)。

 

「今までプログラミングは難しそうだと思って敬遠していましたが、明確な論理があることがわかり、勝手な思い込みだったことがわかりました。プログラムに使う英単語は限られているし、これがもし英語であれば一つの単語にいろいろな意味があるけど、プログラミングの時は一対一対応なので、覚えてしまえばむしろ簡単だと思いました」(プログラミング未経験)。

 

「今まで4bitコンピュータでは、できることが限られていて、その中で何とかやりたいことをやるという感じだったけど、VBを使うことで、やれることが一気に広がった感じがして気持ちよかったです。逆に、VBから始めていたら、機能が多すぎて使いこなせなかったかもしれません。4bitコンピュータを経験していたことで、どこまで単純化させればいいかという勘がつかめたように思います」(Scratchの経験あり)。

 

「小学生の時にScratchをやったことがありましたが、その時は絵を動かしたり、ゲームを作ったり

しただけで、何が・どのようにつながっているというところまでは考えていませんでした。プログラムを言語で書くことでつながりがよくわかり、Scratchがどのようにアレンジされていたかが見えてきました」(Scratchの経験あり)。

 

2回の授業後、もう一度渡邉先生にお話をうかがいました。

御校のように学力の高い生徒にプログラミングを教えるとき、どのような工夫をなさっていますか。

 

プログラミングはある意味限界がありませんから、授業の中で扱うのであれば、先に進むことよりも、どのタイミングで工夫させるかということを、いかにうまく配置していくか考えるのが工夫のしどころだと思います。

 

今回の計算のプログラミングの内容であれば、生徒が「もっとできるかもしれない」と感じるのは、ある意味当然かもしれません。実際、計算のプログラミングはHello worldの次に易しいので、2つ3つのテキストボックスを使った記述の方法を理解できれば、ほとんどの計算のパターンを作るのは可能です。しかし、授業の中でそこまでやってしまう必要はなく、できる子はそのあと自分でどんどんやればよいのです。

 

また、本校の生徒はモノを制御するということに興味や関心はあっても、実際の経験がないためにわからない、ということがよくあります。ですから、授業ではきっかけを作ってあげればよいと思います。わずか2時間での経験であっても、やったことは大きな違いとなると思います。

 

ただ、本校は高校から入学してくる生徒もいます。彼らはこのような経験をしてきていませんので、高校入学時にある程度調整することは必要です。これについては、高校の情報科のカリキュラムの見直しに合わせて進めています。

 

今後小学校でプログラミングを学んだ生徒が入ってくるとき、中学校・高校のプログラミングではどのような配慮が必要でしょうか。

 

ブロックプログラミングもコードを書くのも、パッケージになってカバーがかけられているのか、中身が見えているのかだけの違いで、プログラミングとしての考え方は同じです。ただ、今後小学校でプログラミングを学んでくるようになると、中学校・高校ではこのパッケージをいかに紐解いて中身を見せてあげるかが重要になってくるのではないかと思います。micro:bitも、ブロックプログラミングだけでなく、MakeCodeエディターを用いてJavaScriptに変換できるようになっていますから、小学校でブロックプログラミングをやってきたのであれば、中学校ではJavaScript(コード)という使い分けも可能ですよね。

 

このライントレースの開発を最初に始めた10年前は、プログラミングと言えばブロックプログラミングかCかの選択肢しかありませんでした。中学生にCは難しいので、VBを使って彼らのレベルに合わせたものを自分たちで作りました。現在は、GUI(Graphical User Interface)側の裾野が大きく広がっていますが、VBを使うことには自分なりのこだわりを持っています。

 

4bitコンピュータ→VBのつながりは具体的にどんなところに活かされるのでしょうか。

写真提供 筑波大学附属駒場中学校
写真提供 筑波大学附属駒場中学校

4bitコンピュータとVBを学ぶ手順は実はほぼ同じで、簡単なプログラムを少し書き換える、つまりどこのアドレスにあるものをどのように改変するか、という形で学んでいきます。この点は、生徒たちは意識していないかもしれませんが、ブラックボックスの内部の仕組みをどのように考えるかという経験は必ず生きて来ます。

 

4bitコンピュータは、単純なだけにできることが限られているので、自分が作りたい動きを表すためには、持ち駒をどのように使ったらよいかを順序立てて考え抜く必要があります。思考としては相当ハイレベルです。VBは4bitに比べるとできることがたくさんありますが、4bitで苦労したからこそ、あのようにスムーズに取り組めると思います。最初からVBでやっていたら、かえって使いこなせなかったでしょう。

 

カリキュラムを作る時、特に配慮されていることは何でしょうか。

 

本校の学びの特徴は、スピードを上げて先取りするわけではなく、決められた進度でそのかわり中身を濃く学び深めていくことです。いわば教養主義で、これは全教科で同じスタンスです。

 

生徒は、とりあえず先生の話を聞く態度は身に付いています。ただし、今日の授業のように聞きながら自分で調べて工夫しながら好きなように勝手に進めている人もいます(笑)。先を急いで内容が浅くなると、生徒は興味を持たないので、深めていく中でいかに手応えのある内容に取り組ませるかが工夫のしどころです。内容が浅い話は露骨に興味を示しませんから(笑)。

 

カリキュラムを作る時は、最初は定型通りのことを確実に習得する活動から始めて、徐々に工夫の余地を広げていくという形にしています。例えば、先ほどお話しした中2のセンサ回路では工夫の余地はほとんどありませんが、論理回路では自分で工夫した動きを作らせ、最後のプログラミングで開放してあげるという感じです。

 

取材を終えて

この技術科の授業が終わった後のコンピュータ室では、生徒たちが部活の資料作りをしたり、他教科でパソコンを使う作業の続きをしたり、「工芸」の授業のCADを使った作品の仕上げをしたり、とそれぞれの課題に取り組んでいました。学年ごとのレベル差が大きい中学・高校時代に、異なる学年の活動を自然に垣間見ることができる場を設けることは、技術面でもモチベーションを上げる意味でも重要であることを感じました。

 

今回の授業は、2学期の期末試験の直前の時期でした。それでも昼休みの教室の生徒たちは、寸暇を惜しんで勉強するというよりは、文庫本に読み耽ったり、カードゲームをしたり、黒板を全面使ってハイレベルなクイズを出し合ったりしていました。渡邉先生がおっしゃった「教養主義」は、授業以外の場面でも垣間見られました。

 

自分たちで学ぶことができる生徒たちに、プログラミングという絶好の思考の訓練となる場をどのように与えていくか、その授業をどのように設計していくかというたいへん貴重な事例を見ることができました。