約980名の生徒に行われたN高等学校のプログラミング教育の現状と課題

# はじめに
去年、2016年のN高アドベントカレンダーで、「[高校生にWeb上でプログラミングを教え始めたエンジニアがこの8ヶ月間で得た気づき](https://qiita.com/sifue/items/7e7c7867b64ce9742aee) 」という長いポエムを書かせてもらった者です。あれから1年が経過し、自身が担当責任者となりプログラミング教育をはじめて1年と8ヶ月が経過しました。

今回も、今年一年の試行錯誤の結果や課題をここにまとめることで、今後高校生にプログラミングを教える可能性のある先生方や、エンジニアからプログラミング教育業界に転身する方に、何かしらの参考になればと考え、この記事を書くことにしました。

現在学習中の生徒の皆さんにも、これを見てこのようにカリキュラムや教育方針が練られているのだなということを知ってもらい、学びに活かしてもらえれば幸いです。

# N高等学校とは

|![about_mainimage01.jpg](https://qiita-image-store.s3.amazonaws.com/0/2382/cdd197f7-1485-4ab8-2e51-bf7f94c46bc6.jpeg)|
| :---: |
| 沖縄にあるN高等学校の伊計本校 |

もうご存知かもしれませんが、[N高等学校](https://nnn.ed.jp/) とは、2016年に作られた、**やりたいことを徹底的にやりたい人のための新しいネットの通信制高校**です。ネットだけのコースは年間学費が実質10万円程度であるほか、費用は別途かかりますが、2017年度から通学コースという通えるコースが代々木と心斎橋キャンパスにできました。2017年11月現在、ネットコースには約4100名、通学コースには約200名が通っています。

全体で生徒は4313名で、このうち非対面のプログラミング課外授業を選択した方は980名程度、通学コースなどの対面でプログラミングを選択した方は120名程度となっています。

# N予備校とは

| ![feature-2-0e5dbef0671de7db966406c46a73032e.jpg](https://qiita-image-store.s3.amazonaws.com/0/2382/1b6fe955-2a6d-d3a1-1b16-5c71b3db663f.jpeg) |
| :---: |
| 授業風景 |

[N予備校](https://www.nnn.ed.nico/) とは、N高等学校のプログラミング課外授業で利用されているネット上の学習プラットフォームです。生放送授業とそのアーカイブ、HTMLで作られたスマホやタブレットに最適化された教材、Q&Aを利用でき、現在は月額1000円にて一般公開もされています。[プログラミングのコース](https://www.nnn.ed.nico/pages/programming/) では、最終的に、**「中学を卒業し、プログラミング経験がない人が、Web企業にエンジニアとして就職できること」**を目標として教材が用意されています。

|![教材.png](https://qiita-image-store.s3.amazonaws.com/0/2382/8d263c0a-5705-6a9a-72bc-2ef36ae75fe2.png)|
| :---: |
| 生放送授業と教材の例 |

詳しくは、 [プログラミングコースのページ](https://www.nnn.ed.nico/pages/programming/) を見ていただいた方がわかりやすいと思いますが、Webプログラミング入門、Scalaで学ぶ大規模Webアプリ、iPhone、Android、コンピューターサイエンスのコースが用意されており、今年度中に、ニコニコ動画再現コースが出る予定です。


## N予備校 プログラミングコースの想定学習時間

一時期、入門コースの教材の内容が [はてな匿名ダイアリーの記事](https://anond.hatelabo.jp/20170911110731) でバズったこともありましたが、非常にボリュームがある内容となっております。幅広いプログラミング関連領域の中で、「Webプログラミング」という就職につながりやすいプログラミングの知識にのみ特化した完全初心者向けの一本道教材ではありますが、基礎知識を学ぶ入門コースの想定学習時間は各章で、

| 章 | 概要 | テキスト教材の場合 | 映像授業を利用した場合 |
| :--: |:--: |:--: |:--: |
| 1章 | HTML/CSS/JavaScript | 10時間 | 34時間 |
| 2章 | Linux/Git/GitHub| 8時間 | 32時間 |
| 3章 | Node.js/Hubot/Heroku/XSS対策/CSRF対策 | 17時間 | 68時間 |
| 4章 | Express.js/OAuth/PostgreSQL/テスト/CI | 12時間 | 48時間 |


となっています。

完全な初心者で、学習に授業映像を利用した場合はトータルで182時間かかる計算です。ここまでを終了すると、初心者でも一般的なWeb企業でプログラマとしてアルバイトをできるだけの知識が身につきます。場合によっては就職も可能かもしれません。

そして入門コースを終えた方、もしくは、既にプログラマである方向けの以下のアドバンスのコースの想定時間は、それぞれテキスト教材のみの利用で、

| コース | 想定時間 |
| :--: |:--: |
| 大規模Webアプリ | 96時間 |
| iPhoneアプリ | 20時間 |
| Androidアプリ | 46時間 |

となっています。

これらと入門コース合わせて、完全な初心者が344時間学習すれば、大体のWeb企業でプログラマとして活躍できるたけの知識が網羅されるのではないかと思います。

N高等学校では入門コースを終え、アドバンスのコースを学習している生徒は、自身の作品ポートフォリオを作ってもらったあと、自信を持ってインターンやプログラマアルバイトに送り出しています。

またドワンゴの教育事業本部ではプログラマのアルバイトを採用しており、今年は2名の元Ｎ予備校生をプログラマアルバイトとして採用しました。そのうちの1名は現役のN高生です。現在教材制作ツールの改善などで活躍しています。

彼らの現状を見ても**N予備校プログラミングコースは、即戦力となるプログラマの育成に十分に効果がある**と自負しています。

なお、これらのコースの学習時間とN高生の受講者数の状況の一覧は以下のようになっています。

| コース名 | 一般的な学習時間 | N高生の受講者数 |
| :---- | :---- | :---- |
| 入門コース | 182時間 | 925名 |
| 大規模Webアプリ | 96時間 | 188名 |
| iPhoneアプリ | 20時間 | 120名 |
| Androidアプリ | 46時間 | 164名 |
| 合計 | 344時間 | 977名 |

以上は、2017年11月29日現在の数値です。

入門コースに対する他のアドバンスのコース群の受講者数比率を見るとわかると思いますが、入門コースをちゃんと終えれる人の数はなかなか多くありません。生放送授業においては90%以上が理解するまでは次の単元に進まない、を徹底してはいるのですが、それでも生徒が**モチベーションを維持できず脱落者を生んでしまう**ことは大きな課題だと思っています。

他のやりたいことが見つかってそれを学ぶために入門コースを辞めてしまったというパターンはとても良いのですが、プログラミング自体をやりたかったがやめてしまった、という人を救えるよう、**モチベーションを維持させるのがN高等学校のプログラミング教育における課題**だと考えています。

# 非対面のプログラミング教育としての施策

|![slack.PNG](https://qiita-image-store.s3.amazonaws.com/0/2382/dadc4afe-1194-c81a-c216-81ecc9b59bb1.png) |
| :---: |
| N高Slackの #programming の様子 |

N高等学校は基本ネットの高校ということもあり、非対面のプログラミング教育を行っていますが、N予備校という学習プラットフォームを利用しての教育のほかに、以下のことを実施してきました。

1. **チャットツールSlackにおけるプログラミングコミュニティーの支援**
 - 作品自慢やポートフォリオサイト作成の奨励
 - #programmingでの平日2~3個程度のITニュースの紹介 ([例:2017年11月分](https://paper.dropbox.com/doc/201711-s6eLMKOYqt7MFY95sX33G?_tk=share_copylink))
 - #club_computer での土日の[AtCoder](https://atcoder.jp/)の競技プログラミングコンテストへの参加
 - 生徒によるSlackボットの申請制度の実施
1. **N高生向けの3週間のドワンゴエンジニアインターンの実施**
1. **夏と冬の年2回、学内でWebアプリケーションのコンテストを開催**
1. **SlackやSkypeを使う、生徒への個別メンタリング**

どれもプログラミング学習のモチベーションに効果のある施策で、一定の効果を実感しています。

ただし、あとにも書きますが講師が主体的にできることというのはどうしても限りがあるため、環境を整備して、**いかにしてコミュニティが育ち、生徒たち主導による活動が育っていくようにするかというのが重要な課題**であると認識しています。

# 対面プログラミング教育としての施策

|![83f3c11caffc98af874076e693b1e0c8-1024x768.jpg](https://qiita-image-store.s3.amazonaws.com/0/2382/ce830c9a-03ae-c74b-7624-ffd3a290efbd.jpeg)|
| :---: |
| 代々木キャンパスでのLT大会の様子 |

一方通学コースのプログラミング教育は、ネットで用意してきたN予備校のプログラミング教育が持つコンセプト「Web企業に就職できるだけのプログラミングの技術を身につける」というものとは全く異なる教育方針を行っていくこととなりました。

それは**「作ることで学ぶ」というコンセプト**です。

日本で言うと、[CoderDojo](https://coderdojo.jp/)などの取り組みがそれに近いと思いますが、本人のやりたいことをベースに、作りたいものを作って学んでいくというやり方です。詰め込み学習で得られる知識とは根本的に異なる、自身が作りたいものを作っていくという工程の中で得られる知識が彼らの成長に着実につながると考えました。

なおこの思想は、「[作ることで学ぶ ――Makerを育てる新しい教育のメソッド](https://www.oreilly.co.jp/books/9784873117201/) 」という書籍をご覧頂くのが良いかと思いますが、これが実践できるための環境を整備しました。

具体的には、

1. **自分の好きなプログラミングを徹底的に進められる環境の整備**
  - ドワンゴのエンジニアとN高講師陣で選んだ200冊近いプログラミング学習書籍
  - 一般的な電子工作が行えるだけの機材
  - 複合機と3Dプリンターやマルチカッターなどののものづくりに必要な機器
  - 開発用のHoloLens
1. **プログラミングを通じてものづくりを楽しむ学生TA(ティーチングアシスタント)たちによるサポート**
1. **講師によるプログラミング授業の実施**
  - 代々木、心斎橋ともに1~2ヶ月に1度の特別授業の実施
    - [Unityを使ったHoloLensアプリ開発の授業](https://nnn.ed.jp/blog/archives/1205.html)
    - [競技プログラミング入門の授業](https://nnn.ed.jp/blog/archives/644.html)
1. **生徒有志によるLT大会の運営**

以上のようなものを用意し、通学コースのプログラミングの時間を徹底的に自分が作りたいものを作っていける環境を用意しました。もちろん作りたいものがない人は、就職に役立つWebプログラミングであるN予備校を利用して進めていけるようにしました。

ただこれにはこれでも、**やりたいことがない、という生徒さんには難しいという課題**があり、それらに対処する必要がありました。

# そして、今年のN高生たち

|![Honeyview_Image_43d5a91.jpg](https://qiita-image-store.s3.amazonaws.com/0/2382/89849d3c-bcc7-3238-9c40-fde96be85b15.jpeg)|
| :---: |
| 会津大学で行われたパソコン甲子園2017本選の様子 |

このような以上のような取り組みを行っていく中で、このような活動をされる生徒さんたちが出てきました。

- [2017年度未踏Jr採択 3名](https://nnn.ed.jp/news/blog/archives/1697.html)
- [学内コンテスト動くWebページコンテスト出場 3名](https://progedu.github.io/web-contests/move-webcontest2017-summer/)
- [スーパーコン2017本選出場 3名 20チーム中4位](http://www.gsic.titech.ac.jp/supercon/main/attwiki/index.php?SupercomputingContest2017%2F%E6%9C%AC%E9%81%B8%E7%B5%90%E6%9E%9C)
- パソコン甲子園2017予選出場 6名 3チーム
- [パソコン甲子園2017総合4位 2名 1チーム](https://nnn.ed.jp/news/blog/archives/3013.html)
- [学内LT大会への参加者 4名](https://nnn.ed.jp/blog/archives/2170.html)

もちろん学内の成果発表会やその他のLT大会の内容なども沢山紹介したいのですが、生徒たちの個人情報の都合上、学内外のニュースなどに取り上げられたものだけのため、競技プログラミング系が多い紹介となっています。現在もインターンが決まった生徒、プログラマーとしてのアルバイトが決まった生徒などの情報もありますが、これらはいずれまた紹介できればなと思っています。

またプログラミングを通じた活動をする中でやはり、アカデミックに行ってしっかりとコンピューターサイエンスを学びたいという意志を固めた生徒さんも何名か出てきました。彼らに対してはプログラミング学習とは別に、大学受験のコンテンツを作成しているN高等学校の教材制作部のメンバーと連携して、大学入試をしっかりとサポートしていきたいと考えています。

# 去年のPHH(バンタン プログラマーズ・ハイレベル・ハイスクール)を卒業したN高生たち

非対面で生徒たちにメンタリングを行っていく中で、去年の生徒たちの活躍も生徒たちに大きな影響を与えることもわかってきました。

- [卒業生の河野湖々さんのメディア掲載: 文系女子高生をどん底から救ったプログラミングの魅力 (ITPro)](http://itpro.nikkeibp.co.jp/atcl/watcher/14/334361/092500922/)
- [卒業生の太田荘嗣さんのメディア掲載: 「N高等学校」ってどうなの？ 卒業生に聞いた、学校生活と現在 (BuzzFeed)](https://www.buzzfeed.com/jp/takumiharimaya/nnn)

彼らの成長は、去年のPHHの講師を行ってくれた草野翔先生と佐藤雄一先生の指導が非常に大きいと思っています。**この先輩のプログラマーたちの活躍事例が現役のプログラミングを学ぶ生徒たちの大きなモチベーションにつながりました**。これは非常にありがたいことです。

# プログラミングへのモチベーションに対する課題に対して

まず大前提として、プログラミング教育というのは学習者の **プログラミングに対する情熱** の具合によって学習の成果もアウトプットの量も大きく左右される部分が大きいということがあります。

そのため、もともと進学意識や就業意識が高い生徒さんはプログラミングを学習することには問題はないのですが、それ以外の生徒さんたちの**プログラミングに対する情熱やムーブメントをどのように作り出すかというのが大きな課題**となっています。

即効性があり一番効くのは講師やTAによる大量のコミュニケーション時間の投入なのですが、一時的には効果が出るものの、最終的に生徒が講師やTAに依存してしまうという弊害があります。そうならないようにしなくてはなりません。

そして、われわれが至った結論としては

1. **プログラミングに関する学内独特の文化を作っていける環境の整備**
1. **多く発言し、行動するコミュニティーリーダーの徹底支援**
1. **生徒たちそれぞれのプログラミングに関する活動が、他の生徒に見えやすいようにする**

以上の対策を行うことでした。

まず最初の「プログラミングに関する学内独特の文化を作っていける環境の整備」関しての事例の紹介ですが、現在Slack上で運用しているボットは、生徒自身が申請して作ることもできるほか、運用されているボットに生徒がプルリクを送ったりできるようになっています。

例えば、Node.jsで動くHubotというフレームワークのボットとして

- [サーバルボット](https://github.com/sifue/serval-hubot/blob/master/scripts/chat.js)
- [コンピューター部ボット](https://github.com/sifue/club-computer-bot/blob/master/scripts/chat.js)

などが学内Slackで運用されており、これらは生徒からのプルリクを受け付けています。自らが普段利用する環境を生徒自身がカスタマイズすることで愛着がわいていきます。これは通学コースのキャンパスの設備にも言えますが、学内の設備や仕組みなどを、生徒がChrome拡張などを利用して自身で機能拡大してもらえば、それが彼らのプログラミング学習のモチベーションに大きく寄与すると考えています。

**生徒自身がカスタマイズしたシステムやソフトウェアを使っていける環境をいかにして学内に用意してあげるかが、講師の役割の一つであり、これがプログラミング学習のモチベーションを向上させるうえでかなり重要**なことだと考えています。学内のシステムを生徒自身が良くしていける、そういう環境を用意できるということは本当にすばらしいことで、それを今後もできるだけこれを支援してあげたいなと考えています。

そして次の「多く発言し、行動するコミュニティーリーダーの徹底支援」です。Slackのチャンネルにおいてはチャンネルの主のような生徒が登場してきますが、彼らがやりたいことややっていることを徹底して支援するといことになります。
このようなコミュニティリーダーの行動が周知されれば周知されるほど、それらは学内におけるプログラミング学習の大きなムーブメントとなります。また講師やTAのコミュニケーションはどうしてもスケールしませんが、**生徒のコミュニティ活動はどんどんスケールしていきます**。多くのコミュニティリーダーが育ち、N高のプログラミング教育の先輩後輩文化を築いていくことが、生徒たちのプログラミング活動のモチベーションの向上にとても重要なのだと考えています。

そして最後の「生徒たちそれぞれのプログラミングに関する活動が、他の生徒に見えやすいようにする」です。プログラミングは競技プログラミングのような競争的な分野もありますが、多くの場合においては、**大学受験のように点数で他人と評価されるようなことはありません。それぞれやっていることが違うためそれぞれが活かし合うことができるのです**。
具体的な事例で言うと、電子工作が得意な生徒とプログラミングが得意な生徒のコラボレーションなどがキャンパスで起こっていました。このように生徒たちのコラボレーションやお互いへの良い影響を促すために、Slack上での自慢の推奨や通学拠点におけるLT大会の開催、各キャンパスにおいて普段やっていることを黒板やホワイトボードに書いていくという試みを現在行っています。

ただSlack上に限って言えば、どうしてもチャンネルの参加者にしか生徒の活動が見えないという問題もあるため、学内新聞や学内のほかのプロジェクトでのプログラミングのコラボレーションなどを今後は模索していきたいと考えています。

# そもそもやりたいことがないという生徒への解決案

ある程度やりたいことがある生徒は、正しい動機付けやコミュニケーションによって、良い学習スパイラルに入っていくことが可能です。ただしもともと、**そもそもやりたいことがない、つくりたいものがないという生徒に対しては、特に「つくることで学ぶ」というのはなかなか難しい**ことがわかってきました。当初はそのような生徒にはN予備校を進めて技術力を高めてもらおうと考えていたのですが、モチベーションがない中では、N予備校でもどうしても進めることができないという状況に至る生徒さんもいることがわかってきました。

そのような生徒さんに**必要なのは対話**でした。生徒さん一人一人とのメンタリングなどの面談は当然として、当初生徒さんたちと仲良くなるためにやっていたのですが長らく辞めていたLoLやPUBGなどのネットゲームを通じた交流や、ボードゲームなどを使った生徒との交流も、最近になって再度また復活させることにしました。

そのような生徒とはまずは対話を基調として、生徒の趣味の領域であるゲーム制作やイラスト、CGの世界などからうまくプログラミングに繋げていくことや、今後タイピングや業務ソフト利用のICT教育や資格取得に寄せたりすることで、より多様なプログラミング教育を作っていけないかということを現在模索しています。

(追記: なお通学コースにおいては、大学受験、英会話、中国語会話、プロジェクト学習などが別の選択課外授業として用意されており、プログラミングにどうしても向かなかった人はこれらを進めることもできます。ただプログラミングに向く場合でも、適性度合いは生徒それぞれであるため、できるだけすそのの広い教育プランを今後増やしていきたいと考えていきたいと思っています。）

# 今後について

プログラミングを学びたい、就職に活かしたいと思っていてもなかなか活かしきれない生徒さんもいるということがこの一年でまたいろいろわかってきました。無論できる生徒さんが活躍できる環境づくりや、彼らのやりたいことの実現、インターン、就職、進学の支援というものは怠らずも、できるだけ多くの生徒さんがプログラミングを通じて人生を豊かにしていけるようなプログラミング教育づくりを今後もしていきたいなと思っています。

そしてとりあえずは今年度中は、

- N予備校の教材のアップデート (特に毎年の入門コースの大型アップデート)
- 生徒さんが自分がやっていることを周知できる場を増やす
- 生徒との対話機会を作っていく

というのをしっかりと取り組みたいと思っています。

以上非常に長くなってしまいましたが、この一年間模索してきたことやってきたことの報告と課題への取り組みでした。お読み頂き、本当にありがとうございました。

# 最後に宣伝

## 採用について

**N高等学校では、生徒さんと共に学びながらプログラミングを教えてくださる教職員とプログラミング担当TAの方を募集しております！！**

このプログラミング教育の試みに共感してくださる方、教職員全般ご応募は **[こちら](https://nnn.ed.jp/recruit/)** より、よろしくお願いします。

また、プログラミング担当TA(プログラミングチューターと表記されています)のご応募は **[こちら](https://hrmos.co/pages/nkou/jobs/00000012)** より、よろしくお願いします。

なお応募者に対するプログラミング教育に関するインタビュー記事を@type様に用意していただきました。自分と佐藤先生の対談記事となります。

- [音楽や美術を学ぶのと同じようにプログラミングを学ぶ――N高が挑む教育改革を支えるエンジニアたち (@type)](http://type.jp/et/feature/3471)

もしよかったらこちらもご覧ください。

## 書籍について

ありがたいことにN予備校のプログラミング入門コースの1章のHTML/CSS/JavaScriptの部分が書籍化されました！

|![高校生からはじめるプログラミング.jpg](https://qiita-image-store.s3.amazonaws.com/0/2382/045530fc-563f-e7aa-fd8d-83bbf18cf172.jpeg)|
| :---: |
| [高校生からはじめる プログラミング](https://www.amazon.co.jp/dp/4046019557/) |

何度かAmazonで売り切れ、まだ売れ続けていると聞いています。このN高のプログラミング教育に興味を持たれましたらぜひ、ご一読して頂ければと思います。(実はN予備校でも無料体験版があり結構見れちゃうんですが紙媒体が売れてます...)

### その後の記事

- [【2018年度】 Slackのチャンネル参加数変動を報告するボットとチャンネルランキング] (https://qiita.com/sifue/items/4223441376732b2170ba)
- [【2019年度】 N高等学校でプログラミング教育をはじめて4年が経ちました] (https://qiita.com/sifue/items/1b95647cd643f787d9aa)