original image: © peshkov - Fotolia.com
original image: © peshkov - Fotolia.com
もはやアルゴリズムは不要になりつつある。
スーパーマリオのプレイ動画からスーパーマリオを生成するvid2gameというAIの完成はもはや驚くべきことなのか、それとも当然そうなるべくしてなった結果と受け取るべきなのか難しいところである。
https://www.youtube.com/watch?v=IlOwnxkDL4Q
最近、アルゴリズムを考えることがなくなってきた。基本的になにも考えてないのではないかと思う。仮に必要なアルゴリズムがあったとしても、ほとんど瞬間的にその問題を解決するアルゴリズム「ではなく」、その問題を解決するAIを学習させる方法(強いていえば学習させるためのアルゴリズム)を考えてしまい、そしてそれで学習させると、残念ながら自分がうんうん頭を悩ませて作るアルゴリズムよりもたいていの場合は出来が良いものが出来上がってしまう。
前々から、「仕様書の通りにプログラムを書くコーダー」という職業が謎だと思っていた。信じられないことに、ほんとうにそういう仕事はあるらしいのだ。そしてバグがないプログラムは存在しないこともよく知られている経験則だ。
こうした仕事は、早晩、AIにとってかわられるだろう。すでにスクリーンショットを見ただけでコードを生成するAIも開発されている。
https://www.youtube.com/watch?v=pqKeXkhFA3I
もっとやればもっとできると思う。しかしなぜ誰も作らないかと言うと、もはや恐ろしすぎるのだ。この話全体が。もうどうしていいのかわからない、というレベルである。
ブレストをすると、その翌日にはAIが勝手にプログラムを完成させているとか、そういうことが本当に起こりうる。そういう世界が音を立ててやってこようとしているのである。
あとはやる気の問題であり、そういうデータを真剣に集めようとするかどうかという問題でもある。
こんな恐ろしい話があるだろうか。
人間は創造性までAIに代替されつつあるのである。
しかし「仕様書の通りにプログラムを書く」という仕事に、そもそもどれほどの創造性があったかというと、正直いえば疑わしくもある。
もちろん個々のコーダーの「創造性」を疑うことはしない。たしかにプログラミングはとてもクリエイティブな行為だ。しかし、一方でこう言う考え方もできる。プログラマーがクリエイティブを発揮できるのは、仕様書に「書かれていない」部分を考える時だと。
なぜなら仕様書は満たすべき通過点(ウェイポイント)であり、仕様書と異なるものを作ってはいけない。しかし仕様書には明記されていない事柄がいくつもあり、プログラマーは仕様を満たしつつ将来の拡張性や保守性に配慮したシステムを構築する。創造性があるとすればそこだろう。
しかしプログラマーの創造性というのは得てして諸刃の剣である。プログラマーが過度の創造性を発揮した結果、誰もメンテナンスできなくなるコードが出来上がる危険性もある。
ひとつ自分の失敗談を披露しておこう。
あるとき、ネットワークゲームをひたすら作り続けていたことがある。ほぼ毎月のように新作を要求されるので、毎回プログラムを書いて、デバッグして、テストして、というのがしんどいと思うようになって来た。もっとゲームの内容そのものに注力したい。もっといろんなシナリオを作りたいと考えた僕は、極めて柔軟性の高いスクリプト言語を設計した。
極めて画期的であり、条件分岐やフラグの管理はもちろん、Oracleデータベースの参照や更新が可能で、さらにはメールとの連動、他のユーザとの通信や連動もできるようになっていた。
それまで作った全てのゲームをこのスクリプトひとつで再現可能だった。
しかもこのスクリプトにはオーバーヘッドがなかった。
全てのスクリプトは静的なC++コードに「コンパイル」され、全くのオーバーヘッドなしにバイナリで動いた。
少しWebサービスをかじったことがある人なら、どれだけ野心的なプロジェクトか想像できるだろう。そもそも「C++言語で動くWebサービス」自体がもはや珍しいのである。このころの僕はスピード狂であり、Apacheよりも高速なhttpdを自作するほどだった。
こんな強大なシステムをわずか一ヶ月で設計から実装まで組み上げたのだ。自分で言うのもなんだが、神がかっていた。しかも、ほとんどバグもなく完璧に動いたのである。
その結果どうなったか。
まず、肝心のゲームのシナリオの中身を作る時間がなくなった。あわてて前日に突貫工事で二本のシナリオを作った。分岐を含むし、1日に一分岐しか遊べないのでそれでしばらくは持つはずだった。
しかし、この「システム」の最大の問題は、スクリプトの自由度が「高すぎる」ことだった。
その結果、このスクリプトは、ほぼC++言語そのものと同じくらいに複雑で、プログラマーでなければ書けないものになった。
シナリオライターに毛が生えたくらいの人が使おうとすると、あまりに難解で理解できないのである。
それでも、某大手ゲームメーカーから転職してきたプログラマーはこのシステムの自由度に舌を巻いた。「これさえあればどんなゲームでもつくれる」と彼はいい、実際に過去のゲームをほとんど完璧にそのスクリプトだけで再現した。彼はたまたまプログラマー出身だったので、それができたのだ。
しかしやはり普通の人にシナリオを書かせるのはもはや絶望的に難しかった。ありとあらゆることをできるようにした結果、C++言語と同じくらい複雑な言語仕様を持つスクリプトは、普通の人には到底メンテナンス不能だったのである。
というか自分でもなんでそんなものをそんな短期間に作れたのか今思い返しても理解できないが、肝心のゲーム内容が作り込めてないんだからゲームは当然失敗した。それでも数年間、ほとんどメンテナンスなしにそのシステムは動き続け、とある花見会場で偶然知り合った女性が、そのゲームの数少ないプレイヤーの一人だと知った時(そして彼女がお金を払っている有料コンテンツはそのゲームのみ)には衝撃を受けた。
まあしかし、この話はその程度である。
プログラマーが創造性を発揮しすぎると、メンテできなくなる。
メンテできないコードは、書き直した方が早い、と言われる。
そもそもプログラムがどんどん複雑になったり、バグを孕んで行ったりする根本的な原因は、仕様がどんどん変わって行ったり追加されたりするからだ。
本来は、仕様が変わったら都度、設計変更をすればいいのだが、そんな時間もないほどに仕様がどんどん変化するのでプログラマーは疲弊する。
唯一プログラマー出身の僕が企画者として得意だったということを挙げるとすれば、最初にシステムのおおまかな仕様を決めてしまい、自分のあたまのなかにある「システム仕様」からできるだけズレない範囲で仕様を拡張するので、プログラマーは仕様変更にともなう設計のやりなおしをほとんどしなくて済んだはずである。まあなかには行き違いでやりなおしになったものもいくつかあるが、ほとんどの場合は、僕の思う仕様のシステムが出来上がって来た。
しかし、本来は、仕様が変化したら、設計をやりなおすのが理想的なのだ。そんな暇がないからやらないだけで、そもそも論でいえば絶対に仕様変更とともに設計変更をしたほうがシステムとして最適になることは間違いない。これはどんなプログラマーに聞いても同じ答えが返ってくるだろう。
しかしもし、仕様が変わるたびに瞬時に新しい設計に変更できるとしたら・・・?
仕様を書く人間にとっては天国だろう。
自分の欲望のままを仕様書にぶつければよく、プログラマーから「また終電か」と嫌味を言われたりキレられたりしなくて済む。
おそらくそのようなことはかなり近い未来に実現してしまうはずだ。
AIがプログラムを書くというのはまさしくそのようなことなのだから。
こうなったとき、プログラマーはどうなるんだろうか。
プログラマーという職業はなくなってしまうのか?
うん、おそらくなくなるだろう。なくなるか、ほとんど残らなくなる。
そのかわりに、プログラマーがやっていた数少ない創造的な仕事は、それまでプログラマーに対して「発注」していた仕様書きや企画担当者が担うことになる。
電信技師という職業が消滅して、LINEアプリが電信技師の機能を補完することで遠くにメッセージを送れるようになったのと同じように、プログラマーという職業が消滅して、プログラミングというスキルがAiによって補完され、普通の人が思い通りのプログラムをAIに書かせるようになるはずである。
そのとき人類は初めてコンピュータという驚異の道具を本当の意味で使いこなすことができるようになるだろう。
おすすめ記事と編集部のお知らせをお送りします。(毎週月曜日配信)
登録はこちら新潟県長岡市生まれ。1990年代よりプログラマーとしてゲーム業界、モバイル業界などで数社の立ち上げに関わる。現在も現役のプログラマーとして日夜AI開発に情熱を捧げている。