スクリーンショット 2017-08-10 9.56.21

 先日、長岡市で子どもたち向けにプログラミング教室を行いました。
 
 筆者と同じく新潟県長岡市出身の業界人である角川アスキー総研の遠藤諭氏をゲストに迎え、「プログラミングはなぜ面白いか」を伝えたつもりです。

 長岡での講演は何度かやっているのですが、毎度毎度、長岡の子どもたちの積極性と賢さには驚かされます。
 地元びいきもあるかもしれませんが、どうもその他の地域とくらべて、長岡の子どもたちはどこか「違う」のです。

 筆者の場合、会社を作る時に革新的な研究を行うチャンスが欲しくて応募した未踏ソフトウェア創造事業に応募した際、たまたま「天才プログラマー」という称号をいただいてしまったので、それを面白がって色んな人が筆者のプロフィールに書きたがります。実際にはそのように紹介されるのは甚だ不遜で、なおかつ間違っていると思うのですが、いちいち否定するのも面倒くさいので最近は言われるがままにしています。

 ただ、どこの地方やどこの大学に行っても、肩書に「天才プログラマー」と書いてあると、聴講者は疑いの目を筆者に向けてきます。それは当然です。何の根拠でそう呼ばれるのか、エヴィデンスを求められるのです。

 ところが長岡の子どもたちだけは無邪気に疑いもなくそれを受け入れます。不思議なことです。そこに対して過度の期待も羨望もなく、淡々と、「そういう肩書の人」として受け入れてしまうのです。これは興味深い現象です。

 そのうえで、長岡の子どもたちは、自分たちも天才であろうとすることをしきりに訴えてきます。「好きなものを書いておいで」と言うと、「三角関数の余弦定理を書きました」と小学生が持ってきます。無邪気なんです。彼らは公文式で高校生くらいの問題を問いている自分たちを無邪気に天才の卵と信じて疑っていない。なかなかやりやすい土地だと思います。

 プログラミングを教える時に、どういう題材から教えるのがいいのか、よく聞かれます。または、これからプログラミングを学びたいと思っているんだけど、どこから手を付けたらいいのか、と聞かれることもあります。

 「どうしてあなたの子供にプログラミングを学ばせたいのか」と親御さんに聞くと、「いずれ人工知能が主流になったらプログラミング能力は必須のものになるだろう」と言い、「なぜあなたはプログラミングを学びたいのか」と大人に聞くと、「人工知能をプログラミングしてみたいから」と言います。

 そういう人には、他のプロセスを全て飛ばして「いきなり人工知能のプログラミングから始めてみてはどうか」と提案することにしています。

 そういう話をすると大半の人は面食らうのですが、実際に都内の小学五年生にChainerのプログラミングを教えた経験のある筆者は、それがそれほど高いハードルの話を意味しないことを知っています。

 筆者らが少年の頃、プログラミング言語といえば専らBASIC(ベーシック)でした。非常に単純なプログラミング言語で、今思えば表現力が低く、回りくどいものでした。BASICのプログラムがちゃんと組めるならマシン語のプログラムも組めるだろうくらい、マシン語に近い原始的な言語でした。しかし筆者の同世代のうち100人がBASICに入門したとしたら、生き残るのは5人くらいで、そこからマシン語(というかアセンブリ言語)まで踏み込むのは1人か2人くらいでした。

 なぜそんなことになったのだろうと考えると、要はまともな手引書がなかったのです。

 当時のマシン語の教科書は、基本的に半導体の延長上に書かれていました。だから、論理回路やフリップフロップの仕組みを知っている人のためのものだったわけです。

 ところがBASICから入門してマシン語に行こうとすると、そもそもBASICで使う変数がマシン語でいうなんなのか、というごく基本的なことすら誰も解説してくれないので、BASICに存在しないレジスタという概念を理解しなければならなかったり、レジスタとメモリは違うということを理解しなければならなかったり、とにかくぜんぜんわからないという問題がありました。

 マシン語という、よりわからないものがあるので、比較するとBASICは簡単に見えるわけですが、その後、C言語、C++言語とプログラミング言語が進歩していったのと、オープンソースソフトウェアという概念が普及したおかげで、今やプログラミングは当時からは想像もできないくらい簡単になっています。

 地方には、この時代に敢えてBASICで子どもたちにプログラミングを学ばせようという思想の方々もいらっしゃるようですが、子供の頃からBASICをやってきた筆者に言わせればその思想は単なるノスタルジーであり、今それを行うのは幼児虐待に等しい蛮行だと思います。

 BASICはモダンな言語に比べて表現力が極端に弱く、やりたいことができるようになるまでのステップが長すぎてとても入門にはオススメできません。もしBASICが現代でもプログラミングの入門に最適ならば、「子供向け」という冠をとった「ごく普通の大学レベルのプログラミング教育」に導入されているはずですが、いまどきBASICでプログラミングを教えてる大学などありません。

 子供は環境適応能力が高いので、与えられるものがなんであっても適合してしまいます。それがBASICだろうがScratchだろうがJavaScriptだろうが適応力に大きな差はありません。たぶんPythonもそうです。だからたった2日のワークショップでも小学五年生がPythonで人工知能のコードを書けるわけです。

 むしろ大人はScratch相手でも四苦八苦します。そもそもキーボードを打つことすら覚束ないのが大人ですから、ビジュアル言語は大人にこそ必要なものでしょう。

 いまのところ人工知能に対応したビジュアル言語は存在しません。
 作ることは簡単です。なにせ筆者はビジュアル言語のひとつMOOBlockの開発者でもあります。実際にビジュアル言語で人工知能を構築する実験をしたこともあります。

 結論から言うと人工知能のプログラミングは単純すぎるため、今のところはまだビジュアル言語で記述するのに向いていません。
 もしかすると、その次のステップでは有効に使えるかもしれませんが、ビジュアル言語を使うにはまだまだ今の人工知能は簡単すぎるか複雑すぎるかのどちらかなのです。

 しかしキーボードを使ったプログラミングの入門としては、人工知能のプログラミングはかなり簡単な部類です。
 それ以前はもしかしたらテキスト処理のプログラミングの方が簡単、と主張できたかもしれませんが、そもそもテキスト処理は退屈なものですし、今や大半のアプリケーションが高度な置換・検索・集計機能を持っているため、昔のよう手で集計プログラムを書く機会は減っています。要はいまどきテキストファイルを処理するというのは別に嬉しくない、ありがたみがないのです。

 ありがたみがないことをわざわざ勉強してできるようになるというのはかなり苦痛です。
 Excelでできることを敢えてプログラムですることはかなり不毛です。

 プログラミング言語を習得するモチベーションは、既存のアプリケーションではできないことを実現できるからで、既存アプリケーションにできないことをやるのでなければ面白くありません。

 だとすれば、人工知能に興味があってプログラミングに入門したいのならば、最初から人工知能のプログラミングを学ぶというのはかなり合理的です。

 さらに、今の人工知能のプログラミングはかなり単純です。もしくは、単純なことの組み合わせの結果がほとんどです。
 人工知能のプログラムのほとんどがオープンソースになっているのは、そもそも難しいところがあまりないからです。隠すことにあまり意味がないため、GoogleやFacebookの研究所で作られた最新の成果をソースコードレベルで確認することができます。これもまた学ぶ側にとっては大きな魅力です。

 そのとっかかりとしてはPythonは非常に単純で学びやすい言語で、人工知能以外にもWebサービスや3Dプログラミングまで可能な、表現の幅が広い言語です。

 このお盆休みに、まずはPythonに入門されてみてはいかがでしょうか