original image: © Sergey - Fotolia.com
プログラミング上達のための必須条件 運動と知能
How to be a better programmer?
2017.01.27
Updated by Ryo Shimizu on January 27, 2017, 08:11 am JST
original image: © Sergey - Fotolia.com
How to be a better programmer?
2017.01.27
Updated by Ryo Shimizu on January 27, 2017, 08:11 am JST
秋葉原プログラミング教室もようやくプロジェクト発足から一年とちょっとが経ちました。
大勢の生徒さんを抱える中で、教員も増員して、益々盛り上がって来ました。
本来、開発会社がプログラミングを直接教えるというのは非効率的なので、合理的に考えればビジネスに成りえません。
けれども、大人向けのAIプログラミングコースと、子供向けのBASICコースの二本立てにすることで、どうにかビジネスの形になってきました。
また、昨年に引き続き第二回全国小中学生プログラミング大会の開催も決定し、近々発表させていただく予定です。
新しい目というのは面白く、新規に加わった教員の人と話をしてみると、「どうもキーボード操作に慣れなくてイライラしている子供が多いようです」と教えてもらいました。
確かに、筆者も16歳までは自己流のキーボード入力だったため、自分自身でもキーを思い通りの速さで打てず、イライラしてた時期があったことを思い出しました。6歳から16歳の10年間にも渡って、キーボードを使っていたにもかかわらず、イライラしていたのです。
筆者がどのようにしてキーボード入力を克服したのかといえば、高校のときにタイピング練習ソフトを授業でやったからでした。
毎日キーボードを叩いているのに、タイピングごときで他の誰にも負けたくなかったのに、プログラムも書けない補助教員に負けたことが悔しくて毎日練習した結果、学校で誰よりも速いタイピング速度になりました。
タイピングが速いということは、プログラミングに限らずあらゆる分野で有効なスキルですから、これを身に着けない手はありません。
大人であっても、タイピングが速いということは未だに重要です。
平均より10%タイピングが早ければ、プログラマーなら1日8時間で48分、一ヶ月20営業日で960分・・・つまり16時間も得することになります。たった10%速いだけで、2営業日ぶんも仕事が速いということになります。仮に他人より20%タイピングが速ければ、その倍、4営業日、40%速ければ8営業日。つまりタイピングが速いという、ただそれだけで一週間以上の効率の差ができるのです。
まあ本当に優秀なプログラマーはタイピング量そのものがどんどん減っていくんですけど、それを加味しても凄い違いだと思いませんか?
だとしたら、プログラミングスキルを鍛えるのと同じくらい、タイピングスキルを鍛えるのは大事です。
特に我々がむかしよくやっていたような、9分間コーディングバトルではタイピング速度がものを言います。
いかに正確に素早くキーボードをタイプするか。
そこで来週一週間はタイピング大会を開催することにしました。
プログラミング言語に特化したタイピングゲームのスコアを生徒同士で競い合うのです。
もちろん教員も参加します。そうすると「○○先生に勝った!」とか「○○先生に負けた」という競争心が子供を強くモチベートするからです。
自分で用意した単語をタイピングソフトの問題として出せるZ-TYPEというゲームソフトがオンラインで公開されていたので、これにenchant.jsのgithub上のサンプルコードを読み込ませてこれで競うことにしました。
これがなかなか難しく、同じ単語の繰り返しなのに非常に手強いです。
とりあえず自己ベストは7000点台。1万点は行きたいですね。
このゲームの場合、ボムなどのゲーム的要素や、正確であればあるほど点数が高くなる要素などもあるので、完全にタイピングの速度だけを競うものではありませんが、そういうもののほうが子どもたちにはとっつきやすいのではないかと思います。
教員にやらせると、「うわーオレ苦手なんだよなあ」とぐちぐちいいながらも楽しそうにプレイしていました。
そう考えると文章とかの入力を想定してローマ字入力とかな入力の両方を練習してもらうというのもいいのではないかと思います。
ソロバンを習いに行くと暗算に強くなる、みたいな感じで、プログラミングを習うと副作用としてキーボード入力が早くなるといいですね。
大人向けのAIプログラミングコースの方も、実はプログラミングは初心者という人がけっこうな数居ます。それでもAIのプログラミングを学んでみたいということなんですね。
あちこちで言っていますがいまやAIのプログラミングは、プログラミング全体を通しても簡単な方です。
Pythonという言語の少し奇妙なルールに慣れてしまえば、非常に簡単に扱えます。
そこでAIプログラミングコース用にはChainerのサンプルコードを使ったタイピング練習を勧めてみました。
けっこう手強くて面白いです。
なにごとも基本が大事なのでタイピングに気を使うというのは盲点でした。
自分が普段なにげなくやってることほど、気づくのは難しいですよね。
HoloLensがやってきて、もし世界が全部HoloLens的なものになってしまったら、タイピングはいらなくなってしまうのでしょうか。
そんなふうに心配する人もいるかもしれません。
筆者が思うのは、タイピングは未だに最強の入力手段であるということです。これは10年やそこらでは覆らないでしょう。
とはいえ、タイプライターの歴史は1879年ですから、まだ一世紀と少しの歴史しかありません。
けれども頭のなかで確定した言葉を入力する手段としては現段階では最も速くて効率的なことは間違いありません。
実際にHoloLensのバーチャルキーボードを使ってみると、あまりの使いづらさにめげそうになります。
視線カーソルを押したいキーに合わせて、それからエアタップすることで入力するのですが、これは地獄です。
音声入力もありますし、そこそこの精度がありますが、検索キーワードならともかく、長い文章を入力するのは絶望的です。
タイピング速度が仕事の効率性に大きな影響を与える状態はあと半世紀くらいは続くと思います。
プログラミングはどんどんビジュアル言語に置き換わりつつあります。
ゲーム開発の世界でも、ビジュアル言語でゲーム開発する方向へ少しずつシフトしているようです。
ただ、ビジュアル言語になったとしても依然としてキーボード入力がなくなるわけではありません。
意思疎通の手段としてはキーボードで打たれた活字のほうが圧倒的に読み取りやすいからです。
活字とはなにか、ということを筆者はよく考えます。
筆者のテーマが手書きにあるからかもしれません。
筆者はキーボードは残ると思っている反面、おそらく手書きも残ると考えています。
キーボードは頭のなかである程度固まったアイデアを書き記すには適しているのですが、もっともやもやしたものを共有するには不十分な機能しかありません。
数式にしろ図にしろ、概念図にしろ、そういうものを考えたり検討したり伝えたりするのに、どうしても手書きは必要です。手書きとキーボードのどちらが残るかと聞かれたら、迷わず手書きと答えます。ただ、どちらもあと1世紀以上は残るはずです。
キーボードはもしかするとあと1世紀くらいで廃れるかもしれませんが、手書きはあと10世紀はいけるのではないかと思っています。BMI(脳直結インターフェース)ができれば或いは手書きがいらなくなるという可能性も考えましたが、人間は手書きという運動そのものによってアイデアを整理している可能性さえあり、運動を伴わないBMIでは手書きの完全な代替は無理だろうというのがいま時点の筆者の仮説です。
なにしろ最古の壁画は4万年前のものが見つかっています。いわば400世紀もの間、人は手でなにかを描くということを続けてきているわけです。これはタイプライターやコンピュータの歴史とは比較にならないほどの圧倒的な違いです。
むしろ手書きということが、人間性のアイデンティティでさえあるのかもしれません。
どういうことかというと、絵を描くAIを作るときには2つのアプローチがあります。ひとつは、無から有を生み出すというか、もともと学習したもやもやとした概念から、もやもやとした図を作り出すことが出来ます。ただしこれは、ある種のドメイン性というか、顔なら顔、服なら服、靴なら靴といった、分野を絞り込んだ学習が必要です。いろいろな分野を混ぜると混乱してよくわからないものになってしまいます。
もうひとつのアプローチは、運動生成です。
まず手を動かしてみて、動かした手が線を引き、その引かれた線を見て自分のイメージに合ってるかどうか確認し、フィードバックする、またはその線とは別の線をもう一度描く、などの動作を繰り返してイメージを具現化していく方法です。
低解像度の情報ならば、直接生成のほうが比較的高速で簡単です。
しかし、高解像度の情報を作るためには運動生成が有望です。
そもそも、人間の脳を構成するニューロンは興奮する/しないのデジタルコンピュータです。
であるにもかかわらず、なぜ我々は、「なめらかな曲線」や「とめどなく流れる時間」を感じることが出来るのでしょうか。
実はこうしたアナログ量、連続量をニューラルネットワークが学習するのは非常に難しいんです。
単なる信号の強弱でもない、時間の流れを知能が認識するためには、実際に時間の流れを体感すること、すなわち運動を生成することがどうしても必要です。
運動生成とその視覚的フィードバックによって初めて知能はアナログ量という極めて高度な概念を獲得できるのではないか。
そのためには運動しながら考える、考えながら運動する、それをフィードバックする、ということが知能発達に大きな影響を与えているのではないかと最近は考えています。
まだ腕を動かして、運動生成しながら絵を描く機械というのは成功例を見たことがないのですが、作り方はある程度想像できます。
GANのような方法でアナログ量的な運動生成(たとえば二軸ロボットの腕のそれぞれの回転角度とペンを設置させる継続時間)を行うGeneratorと、そうして描かれた線が人間が描いた線に近いかどうか判定するDiscreminatorが敵対学習を行って、少しずつ人間の描いた線に近づけていくようなアプローチです。
これに類似したアプローチがうまくいった場合、単純に得られたアナログ運動量を線形に拡大すればいくらでも高解像度の結果を得ることが出来ます。
GANのこれまでの成功を考えると、筆者にとってこれは決して荒唐無稽なアイデアという気がしないのです。
同じように、人間がタイピングを覚えるというのは、機械が機械学習するのと似ています。「あそこでしくじった、次はきをつけないと」「ああ、うち間違えないようにここは慎重にやらないと」などと、自分の中で試行錯誤を繰り返すわけです。運動生成とフィードバックという意味では手書きもキーボードも根本は同じところにあるのかもしれませんね。
おすすめ記事と編集部のお知らせをお送りします。(毎週月曜日配信)
登録はこちら新潟県長岡市生まれ。1990年代よりプログラマーとしてゲーム業界、モバイル業界などで数社の立ち上げに関わる。現在も現役のプログラマーとして日夜AI開発に情熱を捧げている。