傾いた本棚

研究,プログラミング,勉強,教育の話など

2018-2019: 長期的なプログラミング教育の実践 @早大本庄高校

概要

  • 2018年4月より,高校でプログラミング教育・課外活動を始めたのでその内容を報告.
  • 高校でプログラミング活動が普及するまでの流れを書いた(現参加者は52人).
  • 今後求められそうなプログラミング教育について考えたのでまとめた.

2020年度から順次プログラミングを用いた教育が必修化されるそうなので,なにか参考になればと思い記事を書くことにしました.対象は,

  • 教育関係者/ 教育に興味がある方
  • プログラミング活動について知りたい保護者の方々
  • プログラミング活動に興味を持つ中高生程度の学生

です.

 

生徒の主な業績

講師のプロフィール

大学院でセキュリティの研究&勉強をしながら趣味で高校の先生をしている.

情報 (専修)&数学 (一種)の教員免許を持つ.

基本情報,応用情報,ネスぺまでを取得.趣味で電子工作など.

 

なぜプログラミングを教えることになったか?

きっかけ(2018年 4月)

授業中雑談でセキュリティの話をしていたら,生徒から

「ハッキングのやり方教えてください!」

と質問された.

授業後,真似できない程度にざっくりと流れを説明した*1

その中で,

「プログラミング教室へ行ってみたが,独自のシステム云々といわれ,家で全く再現ができない」

「3か月間,if文,for文,簡単な関数定義の演習だけで十数万も(教室に)とられた」

「ブロックを組み合わせるだけではプログラムを"書いた"感がない」

などという現状を聞き,それくらいなら無料で教えるよということで放課後に週1時間程度のプログラミング教室を始めた.

1か月後

プログラミング教室がうわさで広まり,いつの間にか私の話を聞きに来てくれる人が10人程度になっていた.

最初はセキュリティが目的だったのでPythonをメインに教えていた.

このあたりから,

「授業中にプログラミングの本ばかり読んでいて授業をまともに受けない生徒がいる」

「プログラミングするから部活をやめると言いだした人がいるけどどういうこと?」

という問い合わせがほかの先生からくるようになる.

2か月後

プログラミング教室をやっていた時に通りかかった教頭先生(現学院長)に,「理系の部活がある」と教えていただき,プログラミングを教えるコーチとして登録していただけることになった.

また,活動を続けるうちに規模がだんだん大きくなっていたので(ここで20人程度),

のちに選択科目として

「プログラミング」科目の設置を提案していただいた.

半年後

もっとプログラミングの練習がしたいという声を聞き,AtCoderやAizu Online Judgeなどの競技プログラミングを布教した.

学部時代,私はアルゴリズムが苦手だったこともあり,実装力不足を感じていたので

「せっかくなら生徒と対戦するか!(笑)」

ということで私も再開した.

ネタバレとなるが,この6か月後に生徒にAtCoderのレートを追い越されることになる.

 

1年後(2019年) / プログラミング科目スタート

選択科目としてプログラミング科目がスタートした.

選択科目なので生徒の履修希望を聞くことになるが,

「プログラミングが枠から大幅にあふれるほどの人気で,どう抽選したらいいか……」

と連絡が来た.

高校のプログラミング必修化はまだ先だが,興味・関心はかなり高いことがわかる.

プログラミング科目について

f:id:Ryoiijima:20190627143340j:plain

テスト後の授業で解いた内容を説明する

 

授業では,Pythonをメインに使用した.

言語は迷ったが,1つ言語を習得すれば,ほかの言語にもすぐに適応できるはずなので(関数型などを除けば),まずはPythonということにした.

Pythonを知っていれば,ソフトウェアからハードウェアまで,作りたいものがある!となった時に,実現までの距離が短そうだと感じたため.

内容は,初歩的な内容(変数,条件分岐,繰り返し,関数定義等)を学習した後,

簡単なアルゴリズムや数学のパズルを解く,ゲームを作成してテストプレイからデバッグまで行うという形にした.

環境は,どのPCからでもアクセスできるようにGoogle Colaboratory

(https://colab.research.google.com/)を使用した.

GUIを使う演習はできないが,入門レベルで困ることはあまりなかった.

テストについて

プログラミング科目のテストはオンライン上で実施し,書籍やPCの持ち込み,Webの閲覧をしながら回答ができる形をとった(相談ができる一切のサイト,共有サイトの使用は禁止,主なルールは競技プログラミングと同じ).平均点は70.2点で,本やwebの閲覧を許可しても特に問題もないことが分かった.

(科目の概要は https://ryo-iijima.com/education/ に載せています.要望があればテストも公開します)

f:id:Ryoiijima:20191128140053j:plain

授業内で実施したアイディアソン 発表+みんなの内容を評価

現在(2020年3月)

高校でプログラミング活動に参加する人が50人を超えた.

正式には部活ではなく,同好会のようななにか(同好会としても登録していない)

なのだが,はっきり言って部活動の取り組みよりも生徒の業績が多い.

 

成績のいいひとばかりが集まっているわけではなく,生徒指導に何度も引っかかっているような人が,AtCoderで優秀な成績を残していたり,外部の大会で賞状をとっているケースもあり,

「あの子の頑張っている一面が見れてよかった」

とほかの先生から言われるようになった.

 

未踏ジュニアなど,外部の取り組みに参加したいという生徒が増えたので,

休み時間に生徒と1対1でミーティングを行い,興味や作りたいものに応じて

それならこんなやり方があるよーと提案する/アイディアを提供するようになった.

競技プログラミングを始める生徒が急増し,AtCoderなどのコンテストの後に勉強会が開かれるようになった.

私が何も推薦しなくても,生徒が勝手に競技プログラミングのコンテストで賞状をとってきたり,難関資格(セキュスペ)をとったと連絡が来たりするようになった.

 

以下では,生徒の取り組みの一部を紹介する.

 

生徒の活動内容紹介

リレーマスター(未踏ジュニア)

「陸上選手が運動の解析に使う機器は高すぎる」

「高校生でも使えるようなものが作れたら」

という案を陸上部の生徒から聞き,作ってみようかという話になった.

f:id:Ryoiijima:20200306115057j:plain

リレーマスター 運動時の挙動を解析するシステム

 

聞いた時点で高校生でも簡単に作れそうだと感じ,指標が取れそうなセンサがあらかじめ搭載されているMicro:bit を紹介した.
microbit.org

データの取得,解析を行う中で,資金が必要だという話になったので,

未踏ジュニアという事業に応募をすすめた.

jr.mitou.org

 

開発を進める中で,

  • ジャイロセンサの情報を線形代数の行列を用いて解析する
  • 加速度センサの周期を統計技術で解析する

という場面があり,この生徒はそれぞれを自分で勉強しながら実装を進めた.

実体験として,とりあえず動いて満足してしまうということも多いが,

早大本庄の生徒は

「使った技術は理解しながら進めたい」

という考えのもと取り組んでいる生徒が多く,すげー!尊敬!という気分になる.

簡単なC++デバッグ周りや技術的なアイディアだけ私が手伝い,あとは独学で進めている.

 

結果

micro:bitでプロトタイプ・計測方法の設計

=> バトンに埋め込みたいという話になる

=> micro:bitだと大きすぎるためM5StickCに変更

=> 3DプリンターでM5StickCを埋め込めるバトンを作成

2019年度  未踏ジュニア スーパークリエイター 認定 + NHK出演

 

競技プログラミング (AtCoder / JOI等)

何か練習できる場が欲しいという生徒にAtCoderやAizu Online Judgeをすすめた.

たまに競技プログラミングをしている人で放課後集まって,できた問題を解説する回が発生するようになった.

結果

勧めてから6か月で生徒にAtCoderのレートを追い越された(無能な講師の見本).私のレートも生徒に公開して,追い越せそうなラインだったのでやる人が増えたのかもしれない.

現在

という状況.来年こそ本選へ!という空気になっており,私も教えられるように空き時間で勉強をしつつ,生徒たちが集まって勉強しやすい環境づくりをしている.

競技プログラミングで活躍した生徒が,競プロ入門用のドキュメントなども作ってくれたので,来年度から始める人に配っていきたいと思っている.

(私もたまに参加しているが,生徒からは毎度ボコボコにされている.)

 

情報処理安全確保支援士(セキュスペ) / 基本情報 / 応用情報 取得

しばらくして,IPAの資格の勉強をするのが流行り始めた.

私もネスぺまでを持っているので,聞かれたら解説するようにはしていたが,

ほとんどの人は独学で取得していたもよう.

結果

合宿

f:id:Ryoiijima:20200301194406j:plain

プログラミング合宿の様子

学校で開催されている理系合宿の一環で,プログラミングの合宿ができることになった.

  • 2018年: セキュリティ 暗号の自作&解読 / サーバへの不正アクセス入門
  • 2019年: ゲームプログラミングの中の高校数学・物理

というテーマで合宿をした.*2休みの日にも関わらず定員を大幅に超えて応募があった.ゲームを作ったり暗号のプログラムを自作したりした.

 

反省

反省点や課題を挙げておく.

1. おすすめのテキストエディタとしてVimをすすめてしまう

    プログラミングを始める前にコマンドの習得で挫折してしまう人がいた.GUIベースで使えて,Gitやターミナルとも連携ができるVS Codeなどを進めればよかった.

2. 選択科目なら全員十分に興味があるはずだという気持ちでいた

    選択科目であっても,ものすごく前のめりな人から,とりあえず履修した,私が優しそうだから履修したという人まで様々だった.

プログラミング必修化にあたっては,

「どのやる気度の人に合わせて教えるのがよいか?」

という点が議論になるのではないかと思う.やる気のある人に合わせると難しくなるし,誰でもわかるように簡単にすると退屈する人が出ていくると思うので迷っている.

なるべく簡単に使える,簡単に学習できる教材が多いが,生徒と関わっていると「簡単にできるから面白い」となる人ばかりではないと感じる.

3. 自分自身の技術力不足

    教えることによって,自分の理解不足な部分や忘れてしまっている部分が浮き彫りになった.常に勉強し続けて,面白い技術の提供ができるようにしたい.

 

 プログラミング教育の今後

以上の活動をしてみて,プログラミング教育をするうえでどのように進めるのがよいか,どうすれば面白いかという知見がいくつか得られたのでまとめる.

  • 生徒の興味を重視した教育 (Curiosity)

  • 教師と生徒が互いに学びあう教育 (Influence)

  • 「面白いからやっているだけ!」と言ってもらえるようなプログラミング学習環境の提供(Enjoy)

生徒の興味を重視した教育(Curiosity)

プログラミングの授業では,アイディアソンを実施する,ゲームを作って遊んでデバッグをする,私が趣味で作成しているハードウェアを共有するなどして,なるべく興味のきっかけを提供できるように努めた.

オフラインの教育現場の強みとして,ある程度生徒と生活を共にしているので,各生徒がどのようなことに興味を持っているか,どのようなことなら面白がりそうかがわかりやすいという点があり,面白いところでもあると思う.

今後はただ単に知識を提供するだけではなく,興味のきっかけを提供することが重視されていくのではないかと感じる.

他の学校の場合は各段階で受験があってしょうがない部分もあるかもしれないが,

「生徒が興味を持つ前に知識を詰め込む」

という授業があまり面白いと感じられなかったので,このようなスタイルをとることにした.

生徒の興味を把握しながら,外で活躍できる機会を提供していきたいと思っている.

 

先生と生徒が互いに学びあう教育 (Influence)

情報技術は新しい技術や知識が登場するのが早いので,若い今のうちから,

「生徒からも学ぶ」「頑張っている・自分よりも技術の優れた生徒を尊敬する」

という態度で勉強し続けたいと考えている.

情報系の学科を出ていたこともあり,情報技術に関する知識に自信をもっていたつもりであったが,生徒からSlackで送られてくる技術の記事やトピックは私が知らないことばかりで,送られてくるたびに面白い.

私自身は大学院を卒業しても勉強をし続けるつもりでいるが,それでも若い人が感じ取った技術の面白さと,私が感じる面白さには違いがあり,歳をとるごとに,若い人のもつ技術を面白がるという意識が大切になってくるだろうと感じている.

「面白いからやっているだけ!」(Enjoy)

勉強する理由について,「可能性を拡げる」「経験値をためる」という大人が多いが,そういう打算的な考えを植えつけるための勉強は正直つまらないのではないかと思う.

「楽しいから勉強してる!」と自信をもって言える生徒を増やして大学・社会に送り出していきたい.これから教育に携わる中で,私自身が楽しんで勉強し続け,その面白さを子どもたちに知ってもらえるような授業や活動を続けていけたらと思う.

 

 

*1:セキュリティにかかわる内容はすべて,情報倫理に関する説明,注意喚起を十分に行ったうえで説明しています.

*2:セキュリティにかかわる内容はすべて,情報倫理に関する説明,注意喚起を十分に行ったうえで説明しています.