インタビュー
『体験させること』こそプログラミング教育の基本
~トップエンジニアが語る、生徒と共に学んでいくことの大切さ
N高等学校 課外授業講師 吉村総一郎先生
プログラミング教育は「美術」や「音楽」とよく似ている
私はもともと株式会社ドワンゴで、「ニコニコ生放送」の各種ミドルウエアの開発に携わってきました。N高等学校では、講師として高校生にプログラミングを教えています。その中で、プログラミング教育というのは、美術教育や音楽教育に近いものだと考えて授業をしています。これは、Yahoo!Storeという世界で有数のウェブアプリケーションを作ったポール・グレアムの著書『ハッカーと画家』(※1)にも書かれていることです。
例えば、美術なら企画書の表紙のデザインを作る、音楽ならお店にBGMを流すなど、実生活で必要になることがありますよね。実社会においては、プログラミングもそういう立ち位置だと理解すればわかりやすいのではないでしょうか。
※1『ハッカーと画家 コンピュータ時代の創造者たち』(ポール・グレアム著、川合史朗訳/オーム社)[出版社のサイト]
そもそもプログラミングは、プログラムを使って「機械に命令をする」というだけのことです。そして、他人が作った命令を、そのまま流用するのが「ソフトウエアを使う」ということですね。ところがソフトウエアは、一般にある特定のニーズにしか対応していなくて、例えば、ワードプロセッサーなら文字を打って文書を作ることしかできません。
ここで、一人一人違う宛名に手紙を送りたい、となったときにプログラミングが必要になってくるわけです。名前を挿入するところだけを変えたいとき、つまり、特定の部分だけを入れ替えて手紙を作るとしたら、プログラミングをしないとできません。
プログラミングの利用でもうひとつ重要なのは、ものごとを効率化できるということです。例えば300人分の宛名を手書きで書こうと思ったら、恐ろしく時間がかかりますが、それをプログラミングしてコンピュータでやれば、数時間で終わります。こういうことが、プログラミングによる生産性の向上ということなのです。
つまり、プログラミングができるということは、コンピュータを自分の好きなように動かせるようになる、ちゃんと自分の仕事に合わせたソフトウエアを作ることができる、ということなのです。
ただし、プログラミングを身につけるためには、実際に作ってみることが必要になります。その辺りも、美術や音楽に通じているところです。美術なら実際にいい作品をたくさん見てとにかく描いてみる、音楽なら参考になる曲やいい演奏をたくさん聴いて、ひたすら楽器の練習をすることが必要なのと同じで、プログラミングでもコードを書いて、読んで、改変するということを繰り返さなければ身につかないのです。
まずは、もともとあるものの真似をしてひたすら練習し、その中から自分のオリジナリティを生み出していくということですね。これが美術や音楽と共通する「プログラミングを学ぶ基本」になります。
高校の「プログラミング」で最低限身につけておくべきこと
先ほどお話したように、「そもそもプログラミングとは何か」を理解していないと、先生方もどこまで教えたらいいのかわかりにくいと思います。私たちが美術や音楽とはどういうものなのかを知っているのは、学校の授業で実際に体験しているからです。プログラミングについても、まずは体験してほしいというのが私の個人的な思いです。
つまり、高校の授業では、生徒にプログラミング体験をさせて、「プログラミングとはどのようなものか」ということを実感させてあげるのが、最低限必要なことだと私は思います。
世に言うハッカーだとか凄腕のエンジニアといった人たちのレベルは、学校教育においてはあまり意味がありません。それはいわゆるプロの領域で、すべての生徒がそこまで達する必要はないからです。
まずは、ウェブ上でいつでもできるScratch(※2)や、グラフィックアートを作れるProcessing(※3)をご自身で体験してみるのがお勧めです。実際にやってみると、コンピュータに命令をして自動化するということがどういうことなのか、なんとなくわかってくると思います。最終的にはそういうものを積み上げてできたのが、皆さんがお持ちのスマートフォンや、パソコンで使っているアプリケーションなのだということに気づけばよいのです。
※2 Scratch 公式サイト https://scratch.mit.edu/about
※3 Processing 公式サイト https://www.processing.org/
ScratchやProcessingに関する本はたくさん出ていますし、講座なども各地で開催されているので、まずは先生方が体験した上で、プログラミング教育に挑むことが重要ではないかと思います。その上で、今度は授業にそれらを取り入れてみるのです。
中学や高校でプログラミングを体験する機会が増えれば、その中から才能のある子が必ず出てきます。そういった子は、自分で調べて学習を深めていったり、プログラミング教室に通うようになったりして、自分でどんどん力をつけていきます。優れた人材を生み出すためにも、プログラミング教育の裾野を広げることはとても大切なことなのです。
学校で習ったプログラミング能力は実社会でどの程度役立つのか?
コンピュータの役割とは、わかりやすく言うと「計算」と「自動化」です。それは、ジョン・フォン・ノイマンが、現在のコンピュータの基礎となる「ノイマン型アーキテクチャ」を作ってから変わっていません。「コンピュータというのは、順次実行を繰り返して、判定して、ループするだけなんだ」ということさえわかってしまえば、実社会での使い方が見えてきます。世の中の業務にあるような単純作業は、コンピュータを使うと基本的には自動化できます。つまり、プログラミングの経験をしておくことで、仕事を効率よく進める力が身につくのです。
高度な数学の技術が必要なAI(人工知能)を学校でやろうとする必要はありません。それよりも、プログラミングを体験したことで「この仕事はプログラミングを使ったら効率化できるな」ということに気づけることの方が重要なのです。それを思いついたら、自分自身ができなくても、社内のプログラマーに頼んだりソフトウエア会社に委託したりすることができるようになります。自動化が達成したら、今までその作業に費やしていた時間を他の仕事にあてることができるようになるでしょう。
このように、学校で「プログラミングを体験する」ことが、将来の仕事の生産性アップにつながります。そういった意味で、プログラミングの経験は社会で絶対に役に立つと思うのです。
高校生にプログラミングを教える際、興味を持って学び続けてもらうために必要なこととは
プログラミングに興味がある子とない子がいるのは確かです。ですから、どのようなタイプの子にも、基本的には「体験させてあげること」が重要だと思います。そして、学び続けるためには、何といっても各自のモチベーションを維持することが大事です。そのためには、生徒自身が興味のある領域に取り組むのが一番ですね。自分が好きだと思うこと、自分が作りたいもの、自分がこれで実現したいことがある領域に取り組ませるのです。
N高等学校では、ゲームを作りたい子はひたすらゲームを作っています。好きなことに情熱を持って取り組む中で、プログラミングも学んでいけると思うのです。
不得意な子でも、ある程度学べばプログラムを作ることはできます。難易度で言うと、ちょうど車の運転免許を取るのと同じくらいのイメージですね。基礎さえ身につけば、あとは言語が変わっても、それを調べながら自分でできるようになっていきます。一度運転免許を取ったら、車種が変わっても何とか運転できるのと同じです。
また、授業でプログラミングを体験すると、その中から興味が深まって自分で学習を進めたりコンピュータ部に入って活動を始めたりする子が出てきます。そういう子には、さらに手厚くサポートすることで、力を伸ばす機会を与えてあげるとよいと思います。
N高等学校には、ルーマニアで行われたコンピュータセキュリティの技術を競う世界大会CTF(Capture The Flag)で優勝した生徒もいます。私は、世界一の子とセキュリティの分野で競争しようという気は全くないです。むしろ無理です。ただ、その子が国内外の大会に出ると言ったら応援しますし、やはり一人だとどうしてもさみしいので、同じジャンルに挑戦する仲間を作ったりといった、サポートが非常に重要だと思っています。
プログラミングが得意な子が実力を競う場としては、日本国内の大会ならパソコン甲子園(※4)や情報オリンピック(※5)、ゲーム開発を競うUnityインターハイ(※6)などがあります。その他にもいろいろなアプリコンテストなども開催されていますので、そういったものへの参加を勧めるなどといったサポートしてあげるとよいでしょう。学校でそういった情報系の部活動に設備投資をしてあげられると、さらに理想的です。
※4 パソコン甲子園 http://web-ext.u-aizu.ac.jp/pc-concours/
※5 情報オリンピック http://www.ioi-jp.org/
※6 Unityインターハイ https://inter-high.unity3d.jp/
プログラミングの向き・不向きは文系・理系には関係ない
つまり、通常の授業ではプログラミングの体験をたくさん持たせ、興味があってできる子には、部活などでさらにレベルの高いものを作ったり、コンテストに出場したりして高みを目指せるような仕組みを作るということです。そういうことをしっかりやっていけば、日本のプログラミング教育は、かなりいいところまでいけると思います。
もともと日本人は、プログラミングやエンジニアリングといった細かいものに対するアプローチは得意だと思います。教育のための環境が整備できれば、日本は情報の分野で十分に活躍することができると思います。
先ほどお話しした世界一になった子も、最初に学んだのはProcessingという小・中学生向けのものでした。そういったものと出会うきっかけを与えたことが重要なのです。教育というのは、そういうものだと思います。
現在、N高等学校には私よりはるかにレベルが高い子がたくさんいますので、そういった子たちが楽しみながら、いろいろな仲間と共にプログラミングの技術を高めていける機会を作るよう、私自身も心がけています。
また、「プログラミングを教えるのは文系より理系の先生がいい」というイメージを持っている方も多いようですが、プログラミングの指導においては、実は文系とか理系とかはあまり関係がありません。と言うのも、プログラミングではたいてい「要件」といってコンピュータにさせたいことを指示するのですが、この要件を決めるのには国語力がすごく重要になるからです。「最初にこれをして、次にこれをする…」という論理的な文章を書いたり読み取ったりする能力が必要なのです。ですから、文系・理系関係なく機械にきちんと命令する国語力がしっかりある先生が、プログラミングには向いているかなと思います。そういう先生が、一度ご自分でプログラミングを体験されたら、あとは本を読みながらでも授業を進められると思います。先生自身の体験を、今度は生徒たちに分け与えてあげるというイメージで授業を進めればよいと思います。
生徒と一緒に学んでいく「プログラミング教育」
N高等学校でのプログラミングの授業は、頭で覚えなくてもよいからひたすら手を動かして、という方針で行っています。
このコンセプトのもとかなり自由な学習環境を用意していて、ウェブプログラミングだけではなく、例えばIoT(Internet of Things)といわれる、いわゆる組み込みプログラミングなども教えます。
また、ロボットのプログラミングをしてみたい、人工知能をやってみたい、CGのプログラミングをやってみたいなど生徒の希望があれば、それができるようにサポートします。3Dプリンターも用意しているので、自分自身がコンピュータで作った3Dモデルを実際に造ることもできます。とにかく、興味のあるものには何でもトライできるようにしています。
人間は、暗記したことは忘れてしまいますが、経験して感動があったことは決して忘れないものです。例えば、私が書いたプログラミングの本も、ここに出てくる「for文が云々…」みたいなことを覚える必要は全くありません。そもそも、目的によって使うプログラミング言語は違いますし、毎年新しい言語がどんどん登場しています。ですから、はやりのツールを覚えるのは、あまり意味がありません。わからなかったら、そのタイミングで毎回調べればよいのですから。実際、ソフトウエアのエンジニアも、常に新しいことを学んでいないと現場では全く役に立たないのです。
ですから、学校の先生もコンピュータのトレンドが日々変わっていくのを「そういうものなのだ」、と受け入れて、生徒と共に学んでいくという姿勢があれば、基本的には問題ないと思います。
今はプログラミングが学べるゲームもたくさん出ています。最近だと一番お勧めなのは、Nintendo Switch(※7)というプラットフォームに出てくる「ヒューマン・リソース・マシーン(※8)」というゲームです。
※7 Nintendo Switch https://www.nintendo.co.jp/hardware/switch/index.html
※8 ヒューマン・リソース・マシーン https://ec.nintendo.com/JP/ja/titles/70010000000753
コンピュータってこういう仕組みなんだ、こういうふうにしてプログラムを書くんだということが非常によくわかりますので、Nintendo Switchを買った生徒にぜひ勧めてみてください。もちろん、先生方ご自身もやってみられるとよいと思います。
ちなみにこのヒューマン・リソース・マシーンは1000円で買えます。また、600円でiPhoneとAndroidのアプリ(英語版)も出ていますし、パソコン版も出ています。パソコン版はSteam(※9)というゲームプラットフォームで、Windows、Mac、Linuxなど、どんなOSでもできます。
もしかすると、半分くらいで行き詰まるかもしれませんが、それでも全然かまいません。全部で41問ありますが、そのうちの20問くらいまで行けば、コンピュータとは何かということが大体わかると思います。
※9 Steam http://store.steampowered.com/?l=japanese
実は、プログラミングを教えていると、たまにすごく天才的な子がいます。こちらが教えていたら、そのうち生徒のほうがずっと詳しくなるという状況になることは珍しくありません。だから、先生は全然おびえることはないのです。そういう生徒がいたら、その生徒に説明させて、一緒に学んでください。それがプログラミングの授業になるのです。そして、先生ご自身が経験したことをほかの生徒に分けてあげてください。それができれば、高校のプログラミング教育は十分目的を達していると思います。
すごく進んだ子たちのためにスーパープログラマーのような人を呼んで話をしてもらうというのも、たまにはいいと思いますが、基本的には先生たちがプログラミング体験を通じて感じたことを、そのまま生徒たちに分け与えていくというのが、プログラミング教育の一番の基礎かなと思いますね。
学校や地域に役立つソフトを生徒自身が作る
校長先生にお願いしたいのは、忙しくて、なかなかプログラミングの経験をする機会のない先生方に、ぜひプログラミングの本やネット上の教材を使って、プログラミングの楽しさに触れる機会を与えていただきたいということです。
校長先生が音頭を取って、学校全体で意識が変わると、学内のコミュニケーションや仕組みなども自動化され、いろいろなことが効率化できるようになります。一番素晴らしいのは、学校をよくするためのソフトウエアをコンピュータが得意な生徒が作ってくれるようなことですね。
現に、N高等学校では、プログラミングスキルのある子が授業の開始時間を自動通知するためのアプリケーションを、HTMLとJavaScriptで作ってくれました。それを他の生徒たちがもっとよくしようということで、SNSでやり取りをして、皆でブラッシュアップしながらさらによいものにしていくということをしたのです。ネットの高校ならではのプログラミングコラボレーションですが、そういったものが、一般の高校でも起こるとよいと思います。一般の高校は、地域に密着したいろいろな要件というものがありますから、そういったことに寄り添った自動化を、生徒自身が作っていけるようになったら、日本の未来は明るいと思います。
子どもがコンピュータに興味を持ったとしても「そんな高いものは買えないよ」と言う親御さんもいらっしゃると思います。いくら子どもに才能があっても、コンピュータに触れる機会すらなければ、才能を伸ばしていくことは難しいですね。しかし、例えば、家が貧しくてピアノは買えなかったけど学校の授業でピアノに出会い、好きでやっていたら、いつの間にかコンテストに出られるようなすごい人になりました、というケースもあると思うんです。
同じようにプログラミングが必修になることで、プログラマーの原石に「プログラミングを体験する」機会を与えるのが、プログラミング教育の大きな目的だと思います。あまり難しく考えず、生徒と一緒に学んでいくという姿勢で豊かな才能を育んでほしいと思います。
[吉村総一郎先生プロフィール]
プログラミング講師。東京工業大学大学院生命工学科修了。製造業の製品設計を補助するシステムの開発に携わり、その後株式会社ドワンゴ入社。ニコニコ生放送の各種ミドルウエアの開発に携わり、ニコニコ生放送の担当セクションマネージャーとしてチームを率いる。2016年よりN予備校プログラミング講師として高校生にプログラミングを教える。
(N高校ホームページより)
[N高等学校]
学校法人角川ドワンゴ株式会社が運営する、インターネットを通じて学ぶ単位制・通信制高等学校。ネットで行うアドバンスド・プログラム(任意で受講する選択授業)では、ドワンゴのトップエンジニアによるプログラミング講座も行っている。