BLOG

人工知能の時代が来てもプログラミングが必要である理由

2017年01月31日 23時29分 JST

2017-02-01-1485910744-650435-pisa3x_729x659.jpg

日本は貧乏にわざわざ向かうのか?

「デジタルデバイド」という言葉は、日本ではネットやコンピューターを"使う人"と"使わない人"の断絶というような意味で使われがちである。しかし、この言葉は、本来、ネットやコンピューターを"使う人"と"使わない人"の間に生ずる"経済格差"のことまでを述べたものだ(NTIA=米国商務省電気通信情報局が1995年に公開した調査報告書)。ひとことでいえば、「デジタルを活用しないと人も国も貧乏になる」と言っている。

PISA(OECDの学習到達度調査)の結果について、2回にわたって紹介したが(日本の子供は賢いがコンピューターが使えないOECD、PISAの結果をみると日本はもはや"オタク"ですらない)、日本の子供たちは世界的に見てもコピューターやネットを使っていない。

以下は、数学・読解力・科学の成績の良かった国々とのコンピューターの接触度をグラフにしたものだ。利用度としては、最低クラスという程度だが、学習に活用しているかではほとんどの設問で最下位となる(PISA調査国内での話だが=前回記事参照)。

2017-02-01-1485910894-8428927-iede_1200x912.jpg

2017-02-01-1485910930-9513862-gakkode_1200x912.jpg

OECDが子供たちの学力を調査するのは、10年後、20年後の経済活動を考えてのことだろう。PISAを実施する目的としては、「教育方法を改善し標準化する」とあるが、子供たちの"学力"というのは"ヒト"という経済リソースの埋蔵分のようなものだからだ。ところが、20世紀における内燃機関や電気回路にあたるキーテクノロジーは、いまやネットやデジタルに移ってきている。

私が、経済学者の野口悠紀雄氏さんと共著させてもらった『ジェネラルパーパステクノロジー』(アスキー新書)は、"デジタル"が新しい世紀を形づくる汎用技術(general purpose technology)だと述べたものだ。野口悠紀雄氏によると、'91年の旧ソ連崩壊は、まさにデジタルテクノロジーの社会への浸透の遅れが大きな原因の1つだった。社会主義の政治体制が、オープンで分散的なコンピューターネットワークを受け入れにくかったことも背景にあった。

極端な話をすれば、子供たちがネットやコンピューターに圧倒的に触れていないという日本の現状は、旧ソ連崩壊を連想させるほど危ういものに見える。

一方、いまから30年も前のものだが、北海道大学の青木由直教授(現名誉教授)が書かれた『中国パソコンの旅』(エム・アイ・エー刊)という本がある。1987年、日本ではNECのPC-9801シリーズが売れまくり、一太郎などのビジネス用ソフトが本格的に使われはじめた頃である。

当時は、中国へのお土産は電卓が喜ばれたというくらいだから、中国のコンピューター事情は著しく遅れていた。ごく一部でIBM PC互換機の生産が、細々ながら始められていたとある。ところが、この本の表紙には「電脳大国を目指す中国の素顔」と、帯には「電脳大国を夢見る」とも大きく書かれている。1980年代の終わりころに、中国の指導者たちは、日本のはるか後方にいる中国のコンピューターやエレクトロニクス産業を、将来的には世界のトップレベルにすると明確なビジョンを示していたのだ。

それを実現するために、彼らは何をやったのかというと「コンピューター教育へかなりの投資が行われている」と書かれている。中国には「百年樹人」ということわざがあるそうで、そのためには人材をじっくり育てることが重要だというわけだ。

ひるがえって、2017年のいま、中国は世界のコンピューターを製造しまくっている。スーパーコンピューターのTop500で首位を取るようにもなったし、百度のディープラーニング技術は世界的にも注目されている。

AllWinnerの64ビット・クワッドコアという最新スマホなみのCPUが数百円などは、我々の生活や身の回りのものを大きく変えうると私は思っている。DJIのドローン技術に対して、米国の注目企業3D Roboticsもコンシューマ市場で戦うのをあきらめた。

中国のデジタルが世界のトップレベルか否かは置いておくとして、いま日本の子供たちは100年かけて人を育てるというような境遇には置かれていないように思う。なにしろ、学校や家庭でのネットやコンピューターの利用率が世界で最低レベルである。しかし、だからといってこれを「終わっている」とは言いたくないものだ。ではどするのかというと、チャンスは「プログラミング」にあると思う。

2017-02-01-1485911070-8218144-chugoku_1200x1734.jpg

『中国パソコンの旅』(1987年、エム・アイ・エー刊)。日本のマイコン初期の恩人の一人である著者が、縁あって中国各地のパソコンの現場を訪ねた貴重なレポート。

「すべての仕事はプログラミング化すべき」である理由

前回の記事で、私は、PISAの結果データをどのように加工したかについて伝えたいと書いた。なぜ、そんなことを書いたのかというとプログラミングについて話をしているときに、いつもではないが意識を共有できていないことがある。たとえば、プログラミング教育のメリットとして、しばしば「論理的思考力が身につく」などと書かれていたりもするのだが、どうも私にはシックリこない。

もちろん、論理的思考がないとプロクラミングできないから、この点にケチを付けるのは限りなく言いがかりに近いのだが、プログラミングを学ぶことで得られるものは、もう少し別のところにある。そのモヤモヤモヤは、具体的にプログラムを紹介するのがいちばん分かりやすいと思ったからだ。とはいっても、この流れなのでコードまで紹介するのは別に機会にまわすことにする(「人生のたいていのことはPythonでできる?」の続編を予定)。

PISAのアンケート結果の集計といっても、日本の一般的な学級の成績を集計するのと基本的には変わらない。エクセルの表でいえば、縦(行)に学級名簿よろしく生徒の名前が並んでいて、横(列)に国語、算数、理科、社会のテストの点が並んでいるような感じである。

ただし、PISAの場合には、縦(行)が72カ国の54万人の生徒たちぶんが延々と続いていて(氏名など個人情報は含まず国番号などが入っている)、横(列)は、600以上の設問項目の選択結果などのデータが、これまた延々と続いている。なんとも、壮観な世界規模の成績一覧表を手にしたとイメージしていただきたい。

単純な縦集計と棒グラフの作成なので、社会人1年目のビジネスマンでもやっている作業だが、これを私は、Pythonというプログラミング言語を使って200行ほどのプログラムのコードを書くことで行った。おらそく、同じことはエクセルに付属のVBAでもやれるはずだが、私の場合は、Pythonの勉強がてらやってみたのだった。なにしろデータが巨大なので画面上で操作するのは骨が折れそうではあるが、それがプログラミングしようと思った直接の理由ではない。

なぜ「わざわざ手でもできることをプログラムに書いてやった」のか? 理由は、次のようになる。

------

手作業でできることをプログラミングしてやる理由

  1. 間違いが少なくなる

  2. やり直しが気楽に何度でもできる

  3. 他人がプログラムを読むことで正しい仕事の仕方をしたかわかる

  4. いちど作ったプログラムは、次回のPISAでも、他の問題にも応用可能

  5. コンピューターを使ってしかできないこともできる

------

「間違いが少なくなる」とか、「他人が見て正しい仕事かわかる」というのは物凄いことだと思うのだが、たぶん多くの人は「ふ~ん」という程度の反応しかないかもしれない。ふだん手作業でのエクセル操作に慣れていると、この部分が担保されていないことの危うさに麻痺しているからだと思う。

もちろん、ソロバン感覚でちょっとした集計をしたいとか、絶対に間違いようのない使い慣れたシートを使うのなら別だが、これだけ大きなデータを操作するとなると、構造はシンプルでも間違いが発生しやすくなる。集計後に間違いがないかを知る工夫はできるが、手による操作ではどこで間違えたかを特定しにくい。

料理は、プログラミングと少し似ていて、料理の「レシピ」が、プログラミングにおける「コード」に相当する。この2つに共通しているのは、必要な材料や、作業のやり方が、すべて洗い出されて列記されていることだ。これによって、「漏れ」という間違いが少なくなる。

それだけなら、エクセル作業も、作業手順書などをあらかじめ書いてからやればいいでしょうというかもしれない。しかし、エクセルの手作業では人為的な操作ミスが生じてしまう"スキ"がある。それに対してプログラミングでは、コードは厳格に書かれたとおりにしか実行されない。

料理が失敗してしまったら(調味料の工夫で修正できないレベル)、もうそれは捨てるしかなくなってしまう。手作業のエクセル操作は、同じようにイチから出直すしかなくなってしまうことが多い。一度やった操作を、目を凝らしながら注意深くやり直すというのは精神的にも疲労をともないやすい作業だ。

それに対して、プログラミングでは「やり直し」が気楽に何度でもできる。

言い方を変えると完成版を作るまでは「失敗」が許される世界である。間違いが見つかったら、コードを修正して再度実行してやればよい。どこが間違っていたかコンピューターの力を借りて調べることもできる。

再実行には、私のPythonのプログラムで、54万人分、200個以上のグラフの自動生成が数分しかかからない(工夫してあるからだが)。たしかに、プログラミングの間違いを探すのも大変ではあるのだが、仕事を改めて分解してみるという点である意味教育的でもある。

「ある人が書いたプログラムを、他の人が読むことができる」ことも、実はとても重要なことである。手作業での集計は、その過程をビデオで撮影しておいて第三者が確認するなんてことをしない限り、作業した本人がちゃんとやったか信用するしかない。重要なデータ集計を、そんな綱渡り的なやり方に任せきってよいのか? それに対してプログラミングでは、本人はもちろん、第三者が、いつでも何度でも正しい作業が行われたかコードを読むことで確認できる。

たぶん、プログラミングについて意識を共有できていないと感じるのは、ここまで述べた感覚を当たり前に感じるかどうかの違いなのではないかと思う。

コードを書いて(これはどこか脳を作るような感覚で楽しい)、そこに集中したらあとの実行はラクができる(単純作業は疲弊しますからね)、間違っていたらプログラムを直していく(これは成長させる感じがしていい)、そして、それを世界の人々と共有できる(オープンソースやGitHubなどの世界)。

つまり、プログラミング的な思考というのは、もちろんいちばん根っこは論理的な思考なのだと思うが、コンピューターの力を借りて、しばしば論理的ではない人間が、よりまともな仕事ができるようにしようとする発想のことにほかならないのだ。

そして、いちばんいいのは「コンピューターを使ってしかできない仕事」ができたときがいちばん充実感があるし、みんなの役にも立てるというものだ。

プログラミングというのは、少しも大げさではなく「言語や文字が発明されて以来」の新しい"課題解決"のプロセスのはずである(当たり前だけど)。それは、プログラミング教育によって「論理的思考力が身に付きますよ」なんて、古臭いものではないということを言いたい。

ただし、このプログラミングという領域にプログラマーという特殊な人種だけがいることが、いささか問題なのだ(初期の"文字"が占い師や歴史を記述する役人など特殊な職業の人にしか使わなかったというほど高級な話ではないが)。だからこそ、「すべての人にプログラミング」という話になる。すべての仕事がプログラミングで行われる理想の社会というのは、現実には不可能なのだろう(空想的プログラミング社会?)。

しかし、それに近づいていくことは、その人の仕事や企業や世の中にあふれる誤解や無駄や間違いをグッと少なくするはずである。

2017-02-01-1485911293-5681980-openpyxl_1200x1773.jpg

Pythonからエクセルのファイルの中身を操作したりグラフ作成などができるOpenpyxlのサイト。グラフの大きさなど神経をつかう手作業もプログラム化できる。今回は、PISAのネット、デジタル関連の設問すべてについて選択肢ごとに並べ替えた200本以上のグラフを自動作成した。「コンピューターでしかできないこと」とは言えないが、とても手でやる気になる作業ではない。

「人工知能バカの壁」問題とプログラミング教育

ご存じのとおり、いま「ディープラーニング」という人工知能の手法が、さまざまな分野で生かされはじめている。一般の人々が恩恵を受けている例として、昨年11月に、グーグル翻訳が新システムになって翻訳精度を見違えるほど向させた(正確な意味は不明だが従来比で翻訳エラーが55~85%減少したとか)。今後は、製造業や金融分野での応用も増えるだろうし、自動運転タクシーなどでお世話になるのだろう。

こうなると、人工知能が人々の仕事を