WirelessWire News Technology to implement the future

by Category

プログラミングを知らない人がプログラミング教育をする危険性

The teacher of programming came, but nobody has a TECH.

2016.06.22

Updated by Ryo Shimizu on June 22, 2016, 08:55 am JST

 ある日、角川アスキー総研の取締役兼主席研究員である遠藤諭氏から、「プログラミングが他の職業でも役立つということに関してなにかアイデアはないか」と相談を受けました。

 アスキーの遠藤諭氏といえば、筆者も少年の頃、毎月夢中になって誌面を熟読した往年の「月刊ASCII」の編集長として活躍された方で、自らもプログラミングのプロフェッショナルでもあります。プログラマーでありながら、プログラミングを本業とせず、編集業を生業にしているところは、プログラマーでありながら経営者を生業とする筆者と相通じるものがあります。

 よく、「清水さん(筆者)は、まだ自分でプログラミングしてるんですか?」と驚かれることがあります。経営者とプログラマーというのがどうも符号しないようです。

 プログラマー出身の経営者が、経営者になってもプログラミングをしているケースは、大きく2つに別れます。

 ひとつは、自分自身がエンジニアとして現場の先頭に立って、なおかつプログラミングもしているという場合、弊社グループの場合、子会社のUEIソリューションズ社長の水野拓宏がそれにあてはまります。彼はプログラミングはもちろん、電子回路からVR機器からなんでも手作りしてしまう生粋のエンジニアで、なおかつ営業センスもあり、自ら営業先の要望を聞き取ってはプログラマーのわかる言葉に翻訳してしまいます。

 彼はよく「脳内プログラミング」をしています。客先で要望を聞いている段階から頭のなかでプログラミングを始め、ほとんどそれが出来上がった状態で帰社し、頭の中でやったプログラムの手順通りに部下に指示を出します。その意味では同じくUEIソリューションズ取締役の原大輔も、取締役という経営層にありながら、現役バリバリのプログラマーです。

 彼らは自分たち自身が生み出すコードがすなわちそのまま製品になるので、負担も大きく、超人的なセンスと体力がなければとてもこういうレベルの経営者は務まりません。

 一方、プログラマー経営者には、筆者のようにプログラミングは日常的にしているけれども製品にはしない、という人間も居ます。というかむしろこっちが主流派ではないでしょうか。

 出版社であり、アニメ、ゲーム、そして動画配信サービスと幅広く手掛ける株式会社カドカワの川上量生社長(ドワンゴ会長も兼任)も、元はプログラマーですが、今はプログラミングをほとんどしていません。ところが川上会長は技術のかなり詳細な部分や全体の性質まで理解しようとします。勉強熱心で、筆者らがドワンゴ社内で深層学習に関連した会議を開いているのを見つけては顔を出し、数学的な詳細の説明を求められることもしばしばあります。彼は状況に応じて臨機応変に対応できるようなプログラムを頭の中で常に修正、実行を繰り返しているのでしょう。彼はそれを「ゲーム」と呼びます。「ゲーマーはもっと経営者を目指すべき!」というインタビュー集もあります。こんなに技術理解に熱心な上場企業の経営者というのは珍しいと思います。

 筆者は川上社長とも違った形でプログラミングをします。
 それはいわば「理解のためのプログラミング」です。
 もしくは「経営のためのプログラミング」とでも言うべきものです。

 たとえば人工知能の技術分野は進歩が非常に激しく、毎日5〜20本の論文が発表されています。それをキャッチアップするのは容易ではありませんし、あまりにも膨大でどこから手を付けていいかわからず途方に暮れることもしばしばです。

 そんなとき、筆者はまずいの一番に自分がプログラミングをしてみます。

 難しくても、わからなくても、とにかくプログラミングしてみます。そして暴れ馬のような新しいアルゴリズムや人工知能の学習法というものを御し、それを思い通りに動かせるようになった時、初めて部下にバトンタッチします。

 部下は筆者の書いた数行から数十行にまとめられたサンプルプログラムを見れば、誰でもすぐに筆者が勉強して得た知識を業務に応用できるようになります。たとえば昨年は非常に複雑だった人工知能による画像認識なども、筆者が社内用に開発し、今はgithubで公開している深層学習プログラミング言語Deel(https://github.com/uei/deel)を用いれば、わずか数行で求めるタスクをこなすことができます。

deel = Deel()

CNN = GoogLeNet()

CNN.Input("deel.png")
CNN.classify()
ShowLabels()

 実際にこれらの命令が何を行っているのか知りたければ、それぞれのクラスの中身を見ればいいし、そこに興味がなければとりあえずこの部分だけ使えば実験はできます。

 同様に、Virtual Realityに関しても、UEIソリューションズでは水野が自ら率先してドローンや撮影機材を開発し、実験を繰り返して技術を高めたり、筆者は自らUnityというプログラミング環境でルームスケールVRのプログラミングを行ったりして「その技術を習得するのがどのくらい難しいか、その技術を応用する最短経路はどれか」ということを見極め、それから部下に引き渡します。

 注目すべき新技術を見つけ出し、限界を早期に見極め、しかるのち即座に部下が活用できるような形態までブレークダウンする。
 それができるのがプログラマーが経営者をやっていることの強みです。

 実際にプログラミングして確かめるのと、本だけ読んで上辺だけの知識を取り入れるというのは根本的に違います。

 筆者のようなタイプの経営者はプログラミングそのものを仕事とせず、経営方針を決定するため、世の中の最先端を理解するために自らプログラミングして確かめるのです。

 また、しばしば、「こういうプログラムが欲しい」ということを文章や動画ではなく、プログラムで表現します。

 そこまで作るなら最後まで作ればいいじゃないか、と思われるかもしれませんが、最終製品に求められるクオリティのものを経営者が作るよりも、そこは専門的な知識を持つ専任者にやってもらったほうが高品質なものが素早くできます。

 しかし、「こういうものが必要で、これを実現するためにはこのようなアルゴリズムが最適である」ということを言葉で説明しても、それは結果的に嘘になってしまうかもしれません。なぜなら、検証していないからです。検証しない以上は無数にある仮説のひとつでしかありません。

 だとすると、文章にするよりも簡単なプログラムの形にして渡すほうが遥かに効果的なのです。
 いわば表現手段としてのプログラミングがあるということです。

 ところで、プログラミング教育ということでいえば、今はいろいろな教室が乱立しています。
 これは非常に玉石混交なので少し注意が必要です。

 先日、筆者のところに「御社にプログラミングを教えます」と、T某というところからメールを頂いて、最初は「なにかの冗談だろう」と思って放っておきました。

 ところが、無視していると何度もメールをいただくので、とりあえず一度会ってみてどんなことを教えていただけるのか聞いてみようと思い、会ってみることにしました。

 筆者の会社は技術企業と銘打っており、どのお問い合わせ先にもまずいの一番に「開発案件のご相談」という項目があるわけです。その問い合わせフォームから大胆にもプロのプログラマー集団である我々にプログラミングを教えていただけるというからには、さぞかし我々の知らない最新技術に精通しているのだろうと思ったのです。

 現れたのは浅黒くて目の大きい青年・・・ちょっとプログラマーにはなかなか居ないタイプの青年・・・と、いかにもプログラマーという感じの、気が弱そうな黒髪の色白の青年でした。名刺交換すると、執拗にメールを送ってきたのは、案の定、浅黒い方の青年ということがわかりました。

 「今日はご足労いただきありがとうございます。私たちにプログラミングを教えて下さるということで、大変楽しみにしていました。実は私も勉強不足でして、まだまだプログラミングについて知りたいことが沢山あるんです。たとえば最近話題のConvolutionalLSTM、いわゆる畳込みLSTMについて原理を解説していただけませんか?」

 と聞くと

 「えっと・・・いや、そういうのは・・・」

 としどろもどろです。
 ちなみに彼は「まだ入社して三ヶ月だから」プログラミングができないそうです。そんな人がどうやって私に教えるつもりだったんでしょう。
 それにその教室のトップページには「一ヶ月でマスターできる」というようなことが書いてあるのですが・・・。

 というか、プログラミングができない人が営業に来るプログラミングスクールってなんなのでしょう。自ら効能がないと認めているようなものではないでしょうか。

 これは話が違うではないか、じゃあたとえばどの程度のレベルまでプログラミングを理解しているのか知りたくて

 「えーと、じゃあ、そこのホワイトボードに、バブルソートのアルゴリズムについて説明していただけますか?」

 と聞くと

 「私達はアルゴリズムは一切教えておりません」

 という返事が返ってきて、ものすごく驚きました。

 プログラミングを教えるという人が、アルゴリズムを教えない。

 えーと、むかしから「プログラム=アルゴリズム+データ構造」と言ってですな・・・と言っても始まりません。しかし、アルゴリズムを教えずにプログラミングを教えるということは、受け身を教えずに柔道を教えるようなものです。要するに、何の意味もないどころか却って危険ということです。

 というか、プログラミングを教えると標榜する立場の人がバブルソートのアルゴリズムを説明できないということは、おそらく知らないのでしょう。バブルソートは最も簡単なアルゴリズムのひとつです。我々はもう少し高度な、クイックソートのアルゴリズムや三次元の変換行列などを入社時にホワイトボードに説明してもらいます。それができない人は入社できません。つまり、目の前で私にプログラミングを教えて下さるという方々は、我が社の入社試験にパスするかどうかも怪しいということです。

 最初のConvolutionalLSTMの質問は少々意地悪でした。これは最新理論で、人工知能の専門家でも必死にキャッチアップしなければならない分野です。ただでさえややこしい畳込み(Convolution)に、さらにややこしいLSTM(Long Short Term Memory)が加わるわけですから、これを解説しろと今の筆者に言われても無理です。まあ無理だからこそ、敢えていま自分が一番知りたい最先端の分野のテクニカルタームを聞いてみたわけです。その前の週末に全脳アーキテクチャ勉強会に参加して、日本中から集まった気鋭の人工知能研究者たちのあたまを悩ませていた難問中の難問です。並大抵のプログラマーなら、説明どころか単語すら知らないでしょう。

 とはいえ仮にも私にプログラミングの手ほどきをして下さるというからには、当然ながら私の知らないことを知っているべきではないですか。
 まあ解説していただくことは期待しておらず、反応を見たかったのです。「Convolution」でも「LSTM」でも、知っていればちょっと見どころはあるかな、と思いました。この2つはいまやかなり有名な概念で、一線級のプログラマーがこの2つの単語の意味を知らないというのは、ちょっと恥ずかしいことだからです。

 「ええと、本職のプログラマーさんたちではなくて、営業さんとか事務の方とか、文系の方を対象としてRuby on Railsを教えるのがメインなんです。もちろんここからプロを目指される学生さんもいますが・・・」

 ところが弊社の場合、たとえプログラミングが本業でない文系の社員ですら、プログラミングを理解していて、教えることができます。実際、バリバリの文系だった元タミヤの前ちゃんこと前田靖幸CHOや、東浩紀の元秘書で、編集者である後藤大喜は単独で講義ができるほどプログラミングに精通していますし、それ以外にも秋葉原プログラミング教室で教えている土屋さんや片境といった面々は、もとは完全な文系です。彼らに組織だってプログラミングを教えたことは一度もありません。まわりが百戦錬磨の猛者だらけ、という状況から、彼らが勝手に学び、いつしか人に教えられるレベルまで育っているのです。

 UEI本社の営業マンは全員がプログラマーまたはプログラミング経験があります。彼らは筆者が毎月講師を務める本職のプログラマー向けの深層学習ハンズオンセミナーを毎回受講しているため、人工知能研究の最先端の知識を常にアップデートして共有しています。しかもソースコードレベルで実際に追体験しています。土日ともなれば、UEIの営業マンが走らせた学習タスクで会社の深層学習ワークステーションが頭から湯気を出す勢いです。

 T某が教材としている「Ruby on Rails(ルビー・オン・レイルズ)」は、少し前に流行ったWeb向けのプログラミング環境です。
 しかし問題なのは、それだけできるようになっても、実際にはなんにもならないということです。

 たしかにプログラミングを体験する、という意味ではRuby on Railsは悪くない題材でしょう。
 ところがどっこい、ただそれだけです。

 これだけでは実際にプログラミングを分かったことにはなりません。

 ScratchやMOONBlockと同じ、表面をなぞるだけです。いや、ある意味では単純作業しか学ばないという点ではScratchやMOONBlockのような子ども向けプログラミング言語未満でしょう。

 ScratchもMOONBlockも、目的は表現手段としてのプログラミングを学ぶことです。
 しかしRuby on Railsの目的は、典型的なWebサイトを短時間で作ることです。目的が絞られているから、教えるのは簡単で、そして、それだけです。いまどき、Ruby on RailsでWebサイトを構築するだけでは全くウリになりませんし、表現の幅としてはむしろ狭まります。
 

 そして典型的なWebサイトを素早く立ち上げたいだけなら、wix.comやwordpressを使ったほうが遥かに効率的です。 

 そういう意味では、T某のセミナーは、教材は非常に良く出来ているものの、12万円の値打ちがあるかどうかは断言できないと思いました。
 ふつうに参考書を買ってきて、独学で勉強したほうが身につきそうですが、先生に質問できるのは初学者にはありがたいのかもしれません。
 

 さて、その意味では、筆者が来月からNHK文化センター青山教室で開講する教養のためのプログラミング講座  〜ゲームからVR/人工知能まで〜は、似て非なるものですが、ややリーズナブルと言えるかもしれません。

 全6回で、一ヶ月半に渡って教えるセミナーですが、かかる費用はT某の1/6程度です。

 ただし、講座の目的は大きく違います。
 筆者が自ら解説するこの講座の目的は、あくまでも「表現手段としてのプログラミングを学ぶ」ことにあります。
 実際にどこにでもあるようなWebサイトをコマンドラインで作る、といったことではありません。

 それはそれでそういう知識が必要な方もいると思うので、別途探してみていただきたいのですが、その会社の営業マンは営業メールを送るのに熱心で、自分はプログラミングできないんですよ。

 ちなみに本当に教養としてさらりと知りたいのではなく、プロのプログラマーになるためのプログラミングを学びたくて、しかも独学でやる自信がないのであれば、学校法人系のちゃんとしたコンピュータの専門学校に通うことを強くおすすめします。まじめに通えば二年間でちゃんとプログラマーにしてもらえます。まあまじめに通うということがなかなかできないんですけどね。

WirelessWire Weekly

おすすめ記事と編集部のお知らせをお送りします。(毎週月曜日配信)

登録はこちら

清水 亮(しみず・りょう)

新潟県長岡市生まれ。1990年代よりプログラマーとしてゲーム業界、モバイル業界などで数社の立ち上げに関わる。現在も現役のプログラマーとして日夜AI開発に情熱を捧げている。

RELATED TAG