N高等学校でプログラミング教育をはじめて4年が経ちました (original) (raw)

はじめに

N高等学校のプログラミング教育の担当者としてもう4年経った、元々ニコニコ生放送の開発者だった @sifue (吉村総一郎)です。

この4年間、本当に沢山の生徒たちとの出会いがありました。

N高に出会ってプログラミングを学び、自らの人生を切り開いていった生徒たちがいました。将来に対して希望を失っていた生徒が、最後は自信を持って大学に進学するのを見届けてきました。小さなコミュニティの中で尖っていたため社会に馴染めずにいた若者が、プログラミングの力で社会を良くしようと社会に巣立っていくのも見届けてきました。これからも彼らの人生がより実りあるものになり、また多くの人たちを助け、社会をより良いものにしていってくれることを切に願っています。

このエントリーについて

このエントリーは、N高等学校アドベントカレンダー1日目の記事です。

このエントリーでは、この4年間で試行錯誤のうえ至ったプログラミング教育でやってきたことをまとめます。N高等学校の生徒や、高校生向けのプログラミング教育をされている方の何かしらの気付きにつながれば幸いです。まだまだ至らない点もたくさんあると思いますが、これからも改善していければと思っています。

2016年の開校時が生徒数1482名だったN高は、いまや8倍近くの生徒数11493名になりました。この4年間で生徒たちに提供しているプログラミング教育も、インターネットを通じた生放送授業、教材提供、SlackやZoomを使ったコミュニティ支援やメンター活動、通学コースでの沢山のTAたちに支えられた対面での面談や制作活動支援、プロのエンジニアが張り付いてプログラミングに一日専念できる環境を毎日提供するプログラミングクラスの運営となど、本当にさまざまな形態のプログラミング教育をやってきました。

そしてこのN高等学校でプログラミング教育を受け、プログラミングを通じたAOや推薦入試による大学進学する生徒や、インターンやアルバイトを通じて就職などを果たす生徒も沢山でてきました。N高プログラミング教育を通じて微力ながら社会に貢献できているのではないかとも思っています。当初自分がドワンゴの新卒採用を行っていた時に感じていた「新卒採用にやってくる学生と企業が望む学生のレベルのミスマッチを少しでも解消したい」という思いが、少しは叶ったかなと思っています。

またN高等学校の生徒をインターンやアルバイト、就職で受け入れていただいている多くの企業の方々にこの場を借りて感謝させて頂きたいと思います。特にN高生向けのインターンを提供していただいているキャリアバイト様、また、毎年N高生を受け入れていただいていますクックパッド様には本当に感謝しています。

N高等学校のプログラミング教育の概要

N高等学校は2016年にできたネットの通信制の高校です。年5日のスクーリングを通うだけで高校卒業資格を得られます。詳しくはこちらをご覧いただければと思います。

このN高等学校のプログラミング教育では、**"創造力"を発揮するための高い人格とプログラミングスキルを与える**ことを目的としています。当初はプログラミングスキル提供のみに特化する予定でしたが、プログラマとしての良い振る舞いや考え方に関しても指導を行うように2年目から方針転換をしました。

取り組みの概要としては、

1. 完全初⼼者からIT企業のエンジニアとして就職できるレベルまで、幅広く、しっかりした内容の教育を⾏うこと 2. ⾃分の好きなことに取り組むこと 3. 対外的な活躍の機会を提供すること

を行っています。2と3は、作ることで学ぶスタイルを導入している小中学生のプログラミング教育でもよくある方針ではあるとは思います。1に関してはどちらかというとプログラミングスクール的な印象を受けるかもしれません。

そしてこのN高等学校には、ネットコースという全ての生徒が所属するコースと、全国13拠点に展開するキャンパスで1500人ほどが通学している通学コースというものが存在しており、それぞれで試みが異なりますので、それぞれについて説明します。

ネットコースでの取り組み

ネットコースでの取り組みは、

1. 学習アプリN予備校での週2回のプログラミング生放送授業と教材提供 2. Slackでのコミュニティ支援活動とコンピューター部の運営 3. Zoomでのビデオチャットを介したコーチング

となります。どれも生徒にとって強制というものではなく、生徒が受けたいと時に望んで選択するものです。

まずN予備校についてですが、週2回のWebプログラミング入門の生放送授業を1年を通じて行い続けています。内容はJavaScript/GitHub/Linux/Node.jsのものです。中学生卒業を前提とし、終えると一般的なWeb企業でアルバイト/インターンできるだけの実力が身につきます。これを経て実際に生徒がWeb企業にてインターン/アルバイトを行っている生徒がいます。その他にもiOS/Androidアプリ開発、Scalaの大規模Web開発、機械学習入門など様々な教材を取り揃えています。コースごとの詳しい内容は、こちらでみることができます。

feature-2-a28379c7ede9ffa7d4f4ca91ed2e94da.jpg
N予備校の授業の様子

2つ目のSlackでのコミュニティ支援活動とコンピューター部ですが、各種チャンネルでのITニュースの提供からプログラミングに関する質問の受付や回答、そしてコンピューター部での毎週の学内大会の開催や外部大会への参加斡旋などを行っています。生徒のコミュニティを盛り上げるために、Slackのボット稼働申請制度やこのQiitaのアドベンカレンダー企画など日々様々な企画を行っています。

スクリーンショット 2019-09-25 14.40.30.png
Slackでコンピューター部の毎週の大会が開かれている様子

3つ目は、Zoomというビデオチャットを介して行うオンラインでのプログラマーのコーチングです。プログラミングができる大学生TAによるコーチングを月額22000円で毎週受けることができるというものです(2019年10月時点)。プログラミングはまず個々人で理解のレベルが大きく異なるため集団授業がしずらく、また、わからない事象をどう質問してよいかがわからないことが多いです。そのため、画面共有とリモート制御での操作して教えてあげられるこのやりかたが非常に有効です。ちなみにこのZoomを使ったコーチングは、大学受験勉強用の特別進学クラスというサービスもあります。

image40.png
Zoomでコーチに接続した時の画面

通学コースでの取り組み

通学コースではネットコースと違い、通学する生徒が必ず受けなくては行けないプログラミングの時間が用意されています。よく、プログラミング教育は強制してやるものではないという話があがりますが、全く自身も同感です。そのため、このプログラミングの時間はプログラミングといいつつも、その前段のICT基礎を身に着けたり、N高生は無料で使えるAdobeCCを使ったデジタル創作などにも時間を当てられるように設計しています。

流れは以下のようになっています。基本的に大学生のプログラミングスキルをもつTA(Teaching Assistant)による運営となっています。

1. 生徒がその時間に取り組む内容をGoogleフォームを使って送信・記録。内容に応じてTAが声かけを実施 2. ICT基礎からはじめて、最終的に本人がつくりたいものを「作ることで学ぶ」ようにコーチング 3. やりたいことが見つからない生徒は、50項目程度のプログラミングやデジタル創作を選択させるWebサイトからやることを探す

このようにしてプログラミングの時間を、ICT基礎スキルの向上やコンピューターを使ったデジタル創作、プログラミングを使ったものづくりに当てます。

スクリーンショット 2019-09-26 19.35.27.png
興味のある学習分野を選べるWebサイト

なお通学コースの生徒は、費用はかかりますが生徒全員にMacBookシリーズを購入してもらっています。これによっていろいろなメリットがあります。

これらが大きなメリットになります。なんだかんだで、MacBookは生徒たちにすごく愛されています

高速なインターネットとキレイで大きなRetinaディスプレイがある環境さえあれば、生徒たちは勝手にコンピューターを活かしていろんなことをしたがります。なお教室には、3Dプリンタや電子工作機器、エンジニア選出の書籍などがあり、また、定期的に各キャンパスをまたいでZoomで配信されるLT(Lightning Talk)大会の開催がされています。

また細かく解説しませんが、代々木キャンパスと江坂キャンパスにプロのソフトウェアエンジニアが常に駐在してコーチする**プログラミングクラス**というクラスもあります。初心者からでもOKで、プログラミングを通じた高いアウトプットを出したい生徒や高校生プログラマーのリアルコミュニティが欲しいという生徒におすすめのクラスです。もちろんそれだけが目的ではありませんが、AO入試の合格実績やアルバイトやインターンの成果も高く出しています。詳しくはこちらをご覧ください。

プログラミングを学ぶ生徒たちの状況

N予備校の利用状況について

まず、N予備校でプログラミング関連コースを選択している受講者数は、

2750名 (全体の約24%)

となります。また、2019年度版プログラミング入門コースを選択しているN高生は、

1530名 (全体の約13%)

で、受講者の半分ぐらいが今年度の入門コースからスタートさせていることがわかります。(2019/11/26時点)

Slackのプログラミング系チャンネルの人数

Slackの各プログラミング系チャンネルの人数です。10人未満のチャンネルは無数にあるため、10人以上のチャンネルだけのランキングにしました。エンジニアとしてのアルバイト、3Dゲーム系、機械学習系、デザイン系、アプリ開発系、ものづくり系が人気のあるジャンルです。 (2019/11/26時点)

チャンネル名 参加者数
adobe-cc 291
programming 256
club_computer 160
programming-beginner 112
エンジニアアルバイト 99
自作er 90
blender 49
unity_gamedev 46
slack_bot_develop 40
club_computer_競プロ初心者 37
programming-intro 36
maker 31
javascript 31
work-share 31
機械学習 29
vtuberになりたい貴方 28
python 26
programming-random 26
vr 25
typing 23
java 23
unity_game-making 22
vrchat 18
swift 17
vim 17
github 16
web-design 16
golang 14
cg 13
mitou 12
web_designer 12
apple 12
ruby 11
hololens_dev 10
scala 10
live2d 10

通学コースのプログラミング学習状況

2019年度の1学期終了時点のものですが、大体6割近い生徒がICT基礎の学習を行っています。ICT基礎は必須課題となっており、Macの使い方、タイピング、G Suiteの使い方、Adobe PhotoshopとAdobe Illustratorの使い方を学ぶ内容になっています。このICT基礎を除くものだと、Web開発、デザイン、ゲーム開発が人気の取り組みです。

ICT基礎あり.png
ICT基礎(必須)ありの場合の割合 (2019/7時点)
ICT基礎なし.png
ICT基礎(必須)なしの場合の割合 (2019/7時点)

通学コースで学習に使われているツールの割合

Photoshop、Unity、N予備校プログラミング入門コースがN高等学校の通学コースでプログラミングの時間によく使われるツールとなっています。本格的なプログラミングを行っている生徒もいますが、プログラミングが合わないという生徒は、Adobe CCを使ったデジタル創作をすることが多くなっています。

生徒たちが学習に用いているツール.png
生徒たちが学習に用いているツールの割合 (2019/7時点)

今年度の生徒たちのコンテスト成果

今年度も沢山の生徒が様々な賞を取ってくれました。ただしこれらは生徒が自主的にチャレンジして成果を収めたもので、プログラミング教育の仕組みやサポートの成果というわけではありません。ただこのように成果を上げてくれている生徒さんたちが、N高のプログラマーコミュニティの盛り上げに貢献してくれています。なおこのような生徒の活躍は、N高ニュースの生徒の活躍タブに紹介されるようになっています。 (2019/11/26時点)

日付 内容
2019/06/06 N高・平川晴常さん、独創的なアイデアを持つIT人材発掘プロジェクト「未踏ジュニア」に選出
2019/09/19 梅村時空さん日本ゲーム大賞2019 U18部門」銅賞受賞
2019/10/23 河内 誠悟さん 「U-22 プログラミング・コンテスト2019」日本事務器賞受賞
2019/10/28 N高生を含むチーム「NASA Space Apps Challenge Kushimoto」で優勝
2019/11/06 N高チーム「異能(Inno)vation」ジェネレーションアワード部門 企業特別賞受賞
2019/11/08 萩原爽太さん「アプリ甲子園2019」準優勝

エンジニアとしてのアルバイト/インターンをした人数

ソフトウェアエンジニアのアルバイト・インターンの人数は以下の通りです。年度をまたいだ重複を排除して、合計62名の生徒さんが、実際に企業でソフトウェアエンジニアとしてアルバイト/インターンを行いました。なお全てを把握できているというわけではなく、これは職員で把握しているものだけとなっています。 (2019/11/26時点)

年度 人数
2016年度 10名
2017年度 17名
2018年度 23名
2019年度 (4月-11月) 20名

大学合格実績

N高全体の2019年の大学進学実績は、こちらにまとまっています。そこそこプログラミングを通じたAO入試や推薦入試で大学に進学していますが、全体を通じた厳密な数は集計していません。プログラミングクラスの大学合格実績はまとめてありますので、そちらも参考にしてもらえればと思います。プログラミングクラスでは卒業生10名のうち6名が大学進学し、電通大や慶応SFCへのプログラミングを通じた合格を果たしました。

生徒の作品

生徒の作品のうち、生徒に了承を得て公開可能なものに関しては、QiitaのN高のオーガナイゼーションのAboutにまとめてありますので、こちらもご参考ください。

高校生プログラミング教育の3つの課題

以上のような状況のN高等学校でプログラミング教育ですが、展開していく中で現在も課題となっていることもあります。

1. プログラミングは、好きなことを学ぶという姿勢でないと学習成果が上がりにくい 2. プログラミングは、興味の対象も理解度も、個々人で大きく異なる 3. 高校生がプログラミングを学ぶ時に、基礎となる力が足りていない場合が多い

この3つの課題があり、未だに明確な打開策は見いだせず悪戦苦闘をしています。

1. プログラミングは、好きなことを学ぶという姿勢でないと学習成果が上がりにくい

これはよく言われることですが、プログラミングを通じて作りたいものがある、または、解決したい問題がある、プログラミング自体が好きであるという方は、すごく学習成果がでます。情熱(いわゆる内発的動機付け)を持って学習ができさえすれば、コーチングを通じて適切なプロジェクト計画と目標を設定することで、どんどんアウトプットしていくことができます。ただこれは当然のことかもしれません。また、そういう生徒さんは、N高等学校内の何かしらのプログラミング教材やコミュニティにアクセスしてくれるため、そこから更に学んでいくことができます。

しかし、プログラミングでやりたいことがないという生徒さんへの対応は結構大変です。これに対してはこの4年間明確な答えは出ていません。情熱が最も大事と言いつつ、情熱を起こすための方法というのは、なかなか確立が難しいのです。結局は面談をしたり、おためし的に様々な技術を体験してみたり、また興味のある趣味に近いものからコンピューターを使って楽しさを発見するように促す、などをしてはいますが明確な対処が打てないでいます。ネットコースで生徒さんにプログラミング講師陣がアクセスする手段を持たない場合には、担任からの働きかけ以外でプログラミングに対する興味を持ってもらうことが非常に難しい状況であると感じます。

ただ人間というのは不思議なもので仲間内で流行っているとそれをやってみたいという情熱が沸き起こってきたりするので、対面で会える機会さえあれば、情熱を持っている人と一緒に取り組む機会を与えたり、情熱をもって開発している人のLT発表を一緒に聞いてみたり、プログラミング講師自体もプログラミングの楽しさをアピールする発表をしたりはしています。とはいえこれも響くこともあったり、響かないこともあったりと、万能薬はなかなか見いだせていません

またあとで出てきますが、プログラミングを学ぶための基礎力の問題が、プログラミング学習への興味を妨げている場合もあります。いわゆる「なんか難しそう」という偏見です。そういう場合にはScratchやmicro:bitというヴィジュアルプログラミング環境を導入として、楽しさから覚えていくというのとても重要かと思います。

なおN高等学校で活躍している生徒たちの中には、小学校時代からScratchによるプログラミングを通じたものづくりをされている生徒さんも多くいます。Scratchはプログラミング教育において彼らのプログラミングに対する情熱を育てるのに絶大な効果を発揮していると感じています。興味はあるが「難しそう」という先入観だけが障壁であれば、ヴィジュアルプログラミング環境を通じた開発体験は情熱に火をつけるのにとても有効と考えています。

2. プログラミングは、興味の対象も理解度も、個々人で大きく異なる

これもプログラミング教育における大きな問題の一つです。プログラミングは音楽や美術と似ています。音楽で言うと、かたやヘビメタを演奏している生徒がいれば、かたや雅楽やアフリカンミュージックを演奏している生徒もいます。またヘビメタでギターを弾いている生徒たちも、エレキギターの教本を始めたばかりの生徒とインディーズバンドのメンバーとして全国ツアーをしているギタリストが一緒に同じ教室にいる状態というのが、プログラミング教育の現場だと思っています。

このような状況でプログラミング教育を成立させようとすると、なかなか授業形態というのは難しいと感じています。基本的には大量のバリエーションのある映像教材やテキスト教材を用意して、あとそれぞれには1対1でのコーチングやメンタリング、そして、同じジャンルに所属する生徒コミュニティ内の教え合いや褒め合いの文化を醸成していくしかないと考えています。

このようにしても全てはカバーしきるのは難しく、これも永遠の課題かなと思っています。コミュニティや文化を醸成しつつ、オンラインとオフラインの1対1のコーチングの仕組みと、誰もが利用できる数多くの教材を用意したり導入したりということを徹底的にやっていくしかないと考えています。

なおコミュニティがたくさんできてくると、いわゆるできる人たちのコミュニティもできてきて、そういう中からは天才が個人で作るよりも更に高いアウトプットが発生してきたりすることもあります。そういうこともあり、N高等学校のプログラミング教育では、生徒のコミュニティの支援や文化の醸成というものをとても重視しています。ただ、これも正解がなにかは模索している状況です。

3. 高校生がプログラミングを学ぶ時に、基礎となる力が足りていない場合が多い

コーディングを伴うプログラミング学習をする際に最もネックになる基礎的な力は、国語力だと考えています。国語力の中でも特に読解力が高い人に関しては、N予備校プログラミング入門コースをやるだけで、高いアウトプットを出せたりするようになります。もちろん読解力が特に重要ですが、自分の考えていることを論理的な文章に落とし込むための記述力も、最終的には必要になるものと考えています。

ただ国語力を高めるためにはどうすればいいのか?というものに関しては明確な答えをN高のプログラミング教育では出せていません。本を読め、文章を読め、沢山の文章を書けと生徒たちに言うことはできますが、大量の本を読む習慣やしっかりした文章を書く習慣は、実は国語力の高い人の習慣だったりします。

じゃあ苦なく国語力を上げるためにはどうずればいいかというと、自身の考えでは、国語力のある人とのチャットコミュニケーションが効くのではないかと思っています。とはいえ、Slack上のチャットコミュニケーションにもいろいろな格差があり、Slackの雑談チャンネルでは短い言葉とreacjiと画像しか流れず、議論などは基本されません。議論はある程度真面目なテーマのチャンネル内の会話や、1対1の議論の時にしか生じないのです。

それも踏まえてどうするのがよいかというと、結局これもやはり1対1や少人数でSlack上でコーチや担任とチャットをして、国語力を上げるトレーニングを兼ねた形でチャットコミュニケーションをしていくしかないと考えています。

そしてこのような文章のやりとりが苦なくできるようになるためにも、タイピングもとても重要だと考えています。ましてや最近の高校生は、タッチデバイスとLINEのスタンプに慣れすぎていて、タイピングはもちろん、長い文章を使ったコミュニケーションも苦手だと考えています。

N高等学校のプログラミング教育ではタイピングをとても重要視しています。ネットコースのコーチングでも通学コースのICT基礎の必須課題でもまずはタイピング能力を高めるところからはじめます。また先日ありましたが、N高のネットの運動会ではWeather Typingを使用しますし、超会議、町会議では寿司打大会を開催して、生徒のタイピング能力の向上に力をいれています。

スクリーンショット 2019-11-27 2.55.08.png
ネット運動会 Weather Typingの様子

タイピング能力が上がると、テキストを通じたコミュニケーションをするようになり、それが国語力の向上に繋がります。そうなるとプログラミング学習の際のテキストやチュートリアルの読解力にも繋がり、また、コードの記述力の向上にも繋がります。そしてもちろんプログラミングでコード自体をタイプする際にも、キーを打つことに対して脳のリソースを消費することなくできるようになり、タイピングは本当にいい事ずくめだと考えています。

プログラミングを学ぶ際の基礎力を強化するためにタイピング教育をしていくことを現在のN高等学校のプログラミング教育では重視していますが、これもまだ模索の段階であり、これがベストな答えであるかはまだわかっていません。

まとめ

以上が、この4年間を経たN高等学校プログラミング教育の全体像でした。

もはや、N高等学校に所属する生徒が11493人となり、これは高校生の300人に一人がN高生という計算になります。その中のプログラミング教育をさせてもらえるということは、日本の将来に与える影響も非常に大きく、常に身の引き締まる思いです。また通学している生徒に対しては直接対面でリーチできるものの、ネットコースの生徒にはまだまだ基礎ICT教育の部分でリーチできていないところもあり、ニーズに応じていろんな手法を模索していきたいと考えています。

このような試みをさせてもらえる中で得られることもとても非常に多く、今まではあまり外部に発信できていなかったのですが、今後はできうる限りこの経験をどこかにフィードバックしていきたいなと考えています。今回は含めることはできませんでしたが、N予備校でのN高生の学習データを分析したことからわかったことなどもあり、それらもどこかでまた公開したいと思います。

長くなりましたが、ここで読んで頂きありがとうございました。

追伸

なお最近自分自身は何をしているかと言うと、ひたすらTypeScriptで学校法人の業務改善をするためのツールをたくさん書いていたりします。最近は、G SuiteもSlackもGitHubもZoomも学校法人角川ドワンゴ学園でしっかり使っているツールはAPIが出ているので、プログラミングスキルがあれば様々なインテグレーションを作ることができます。こういった業務効率化の話もまたこの話はどこかでできればと思っています。

過去の記事