**********************************************************************
セッションs1b 分科会・パネル
テーマ:プログラミングはAIで十分可能になるか?
講師:池田 元三 氏
日時:2019/9/5(木) 21:00?22:30(延長して23:20)
参加人数:17名(終了時)
**********************************************************************

■はじめに
〇アイスブレイク&アジェンダ
 ・NHKで10年以内に90%以上がAIに置き換わる職業に"プログラミング"があった。
 ・そんなに簡単に果たして置き換わるものだろうか(NHKに聞いてみたい)。
 ・プログラミングは機械(AI)にできるのか。
 ・プログラミングとはなにか議論したい。
 ・どこまでAIでどこまで人間がやるのか。
 ・じゃあどういうことをやれば僕らがやることが増えるのか。
 ・小学校でプログラミングを教えるのはなぜか?機械にできるのなら教える必要ない
  のではないか。
 ・人工知能の話なども含めつつ議論していきたい。



〇各自自己紹介
 ・H8とか使っていたがしばらく現場を離れていた。
 ・ここ20年営業に移っていた。あまりコードを最近書いていなかったがステアリング
  委員長と10年くらい付き合いがある。
 ・AIに興味があってどこまで人間がやらなきゃいけないのか興味があってきた。
 ・会社のインフラ系に携わっている。8bitマイコンを使った回路基板からやってきた。
  LEDキャンプにも携わっている。
 ・プログラム委員会をやっている。学生たちは固まらずに将来どうしたらいいかとか
  どんどん言ってほしい。工場内のロボットについて携わっている。人に置き換わる
  ものなので関連がある。
 ・Unixの上でプログラムを作っていた。ゲームセンターのアーケードゲームを作ったり
  していた。今はUXの仕事をしている。AIでお客さんの体験をよくできるのか。
 ・掃除制御用のPLCにAIを組込むため参加している。
 ・業務の中でどれだけ工数を減らせるかに興味がある。
 ・AI関連の会社、雪道でも自動運転で走れるようにするためのシステム作りに関わって
  いた。ワトソンの勉強会に参加したりしたことがある。
 ・子供の教育を学校との間で連携しながらうまくやりたい。


■本編
〇プログラミングとは何か?例えばV字モデルでどこまでをいう?
 ・例えばレンジならマイコンが時間になったら音を鳴らして止めるということをやる。
 ・要件定義から全部プログラミングだ。実装部分というのは時代とともに変わる。
 ・要件定義から上の要求は元から抜いている。
 ・実装からだと思う。何をしたいかなどは要件定義で決まっている。大事なのはそれを
  動かしたい媒体にどうやらせるかを考えるのがプログラミングだと思う。
 ・でもそれはコーダーだと思う。コードを書くという行為はコーダーでしかなくどういう
  ことをやるかをしっかり練ればコードに落とすのは難しくないと考えれば上からちゃんと
  やるのがプログラミング。
 ・ゲームプログラミングではこれらを全部ぶんまわす。
 ・アーキテクチャをしっかり考えられるのがプログラミングだとあえて言いたい。
 ・そうするとソフトウェアエンジニアはどこに所属するのか。それは区別すべきでは。
 ・学生さんもいるのでそれらも視野に入れることが大事だという意味でも言っている。
 ・AIでやれるプログラミングという意味ではコーディングの部分にあたるとは思う。
 ・モデルベースでは機械がやっている。これはどう考えるべきか。
 ・最後はマシン語で動く。これは一対一で一意に決まる。アセンブリもそう。しかし
  高級言語では一意ではない。未規定なものがある。a+b+cの足す順は決まってない。
  じゃあ今度はモデルではどうか。コード生成ツールに対して自分の意思を伝えるだけ。
  モデル書くのも実装だと考えるとかなり高いレベルもプログラミングということになる。
 ・しかしアセンブリに落ちていくときのことをどこまで意識できるかはその人の実力で
  かなり変わっていく。
 ・今どきのCコンパイラの修正機能は馬鹿にならない。
 ・RISCになると人間が書くのも難しい。
 ・小学生がやっているのはGUIでブロックを組み合わせているもの。でもあくまでも
  プログラミングだと思う。
 ・アセンブリでもいい書き方と悪い書き方とがある。
 ・アーキテクチャを考えると隣との結合を薄くするときにやり方がおかしいと変になり
  かねない。要件を理解しないといいアーキテクチャはできない。
 ・SimulinkでCソースコードを表そうとしたときサイクロマティックコンプレックス
  (条件分岐や関数への入口出口が多いなどをみるとそのプログラムの複雑さがわかる)
  などの問題が残るかどうかという研究をしている人がいる。
 ・自動車一台のソースコードを印刷して積み上げると45メートルになる。
 ・複雑すぎないようにしたりネストは3段階までに抑えるというようなルールを課したら
  解決するだろうか。
 ・ディープラーニングで学習させたらどうなるだろうか。もっと変なコードができるかも
  しれない。
 ・そこは何がどうおかしいかをちゃんと人間が指摘してあげるようにすればよいのでは
  ないか。
 ・教師を作ってしまったら人間のリソースを延長しているだけではないか。
 ・マイクロソフトが買収したがそれのいきさつは、パブリックのリポジトリは残念、
  でもプライベートは知見があったりするかもしれない。それを探そうとした。
  でもないかもしれないというのが現状らしい。
 ・ヒューリスティックリサーチは評価関数があってやる。それは人間が決めたもの。
  しかしディープラーニングは結果から学習するもの。
 ・昔は知識データベースだったが今はそうではない。
 ・「日本で一番大きな都道府県は」に対して「北海道」と答えるのか、それとも
  (このあとに「北海道だが二番目に大きいのは」と続く可能性が高い)と考えて違う
  答えを言うのかが、知識ベースの人工知能なのかディープラーニングでの人工知能
  なのかになってくると思う。
 ・自動運転ではそれが怖い。もし知識ベースのものであれば、事故しても「ああ。あの
  ルールに基づいて動いたから事故になったんだ。じゃあそれを変えよう」となるが、
  ディープラーニングでやった場合はなぜそう判断したのかが明確に見えにくくなって
  しまう。これは恐ろしいこと。
 ・マイクロソフトが膨大なクラッシュのデータからソースコードの微妙な部分を研究し
 てくれというのをカーネギーメロン大学か何かに依頼した話でWindowsに潜んでいたバグ
 が見つかった。
 ・デシベルの微妙な違いやものは7個以上になると同時に認識しずらくなってくると
  いった人間の認知の限界の領域については機械の方が正確。
 ・グラディウスの話。処理落ちしてかくかくするのが評判が良かった。実際はバグと
  いってもいい話。
 ・かくかくさせることでユーザに緊迫感を与える点ではプラス。これはAIにはできない?
 ・SNSなどの広告はどうしたらクリックされるかをディープラーニングで表示される
  ものがある。これは動的でHTMLは書かなくてもよい。つまりWEBエンジニアの仕事は
  もうすでにAIに取られている。
 ・ユーザが何に興味を持ったかというものからオススメを突き止めるアルゴリズムの
  ために博士を何人も投入したものより、ユーザが過去に検索したものはこれですよと
  一覧表示しただけの方が売り上げが上がったという事例もある。
 ・お金払うと例えばアマゾンのレコメンドに表示させる仕組みがあったりする。
 ・インドでは要求に対して忠実にそれのみしかやらない。追加でやるなら契約書にない
  ことは追加料金という話になる。日本では例えばいろいろな可能性を加味する仕事
  をする。しかしインドのようなものが主流になっていったら日本のようなおもてなし
  のようなものはどうなっていくのか。
 ・アジャイルやデービースクラムというものもある。
 ・機械化できるところが置き換わらないのは二つ理由があって、アセンブラ書いてた
  人がCをかけるようになるには勉強しなければならない。すぐに切り替えられるか。
  アセンブラ職人をクビにしてガンガン新しい人を雇っていくということは日本では
  なかなかできない。アメリカでは逆ですぐクビにして浮いたお金で多少給料かかっても
  新しい人材を確保するようにする。
  もう一つは、最先端のモデルをかける人を集められるかというとそれも難しいという
  事情もある。育てるにしてもものすごい時間がかかる。海外に勝てないどうしようと
  なるのが現状な気がする。
 ・ローコードなコーダーは需要が徐々に減っていっている(いろんな意見があるが)。
  もっと高級な領域でできる人、アーキテクチャをしっかり設計できる人が重要に
  なってきているんじゃないか。低いレベルではAIが判定には使われ始めてもおかしく
  ないと思う。
 ・C言語からモデルにしたとき何か情報を捨てたのか。
 ・AIがコード書くっていうのは変数の名前分けるのも人間がミスしないようにしてる
  だけ。モデル化できるのなら人間が解読できない、いきなり機械語になる可能性も
  あるんじゃないか。
 ・モデルからCに落とすときに抽象度は変わってない。でも何かあったときにどう
  調べるか。
 ・AIに任せるっていうのはブラックボックス化することではないか。
 ・プログラミングがAIによって完全に行われるというのはなにをもっていうのか。
 ・マイクロソフトがモデルの前にいろんな段階があって、お客さんがこう言ったとか
  もっといろんな段階があるから、人間ができるところとAIができるところとそれぞれ
  あると思う。その境界がまだまだ複雑。技術的なものとそうでないものとの境界が
  もっとちゃんとなっていくべき。
 ・悪いコンサルだと自然言語の一番いいとこしか見ないがいいコンサルだとお客さんの
  求めてるものしか見ない。
 ・AIは忖度ができない。人間は忖度ができる。そこは人間の方が勝りうる。
 ・照度センサが暗くなったらつけて明るくなったら消すという要求。一瞬電柱の壁に
  入っただけの暗くなったタイミングではどうするのか。AUTOをオンにしたりオフに
  したりできるかどうか。
 ・今はそんなのは全然できる。メッセンジャーで打つときに打つ文字数はどんどん
  減ってく。
 ・それはAIではない。
 ・いやそれはいろんな人のキー入力をクラウドに上げつつ最適なものを判断していく。
 ・推測変換しなさいといっている。人間がどう感じるのかはAIが推測できるのか。
 ・AIに教えている。確定を押した時点でそれが答えと教えているものになる。
 ・人間が学習できるのは自分の周りだけ。例えば自動車のエアコンにしても外気温や
  室内温度をクラウドに上げて全世界の人の快適なものを調べれば学習できる。
 ・学習の対象になっていれば、何を教えるかを特定すれば学習できる。
 ・学習の対象を教えないとAIは学習できない。
 ・社長と謝罪係はAIにはできない。
 ・快不快での話。
 ・新しく何かを推測する、いろんなデータから何かを新たに提供することはAIには
  難しい。



○学校におけるプログラミング教育
 ・自分のしたことによって何か成果が出ること、初めて自分で車を動かしたときとか
  すごく嬉しかった。
 ・なかなか実社会では失敗ができない時代なので、サイバー空間で何か失敗ができる
  のは価値があると思う。
 ・サイバー空間で何かできることはあまり面白くなかった。でもプログラムで動く
  ものがたくさんある中でその仕組みを理解したうえでその後どうなっていくかを
  想像できるのは大事ではないか。プログラミングでもともと動くものを自分で思い
  描いたように操作するような課題をやったときにプログラムを作る喜びとは違う、
  操るような喜びを感じた。
 ・小学校の教育でPDCAを回すものはなかったらしい。45分算数やったら国語になって
  45分経ったら理科になり、というものだった。
 ・言語を教えるというより論理的に物事を組み立てる練習という点で意義がある。
 ・日本の政治家たちが考えているのは従順な人たちを作り上げるようなもの(と捉え
  られてもおかしくない)。欧米のようにイノベーティブなものを促すものが少ない
  (全然ない)。
 

■まとめ
 ・大事なことは、機械的作業ではなく物事を考えるということができるかどうか。
 ・プログラミングとはというところで、コードを書くということが好きな人は多い。
  新しいものを生みだすという点からも、人間がやるべきものだと思っている。