表題の件の通りで、所感を書いておきます。
やっとChatGPTを試してるんだけどとりあえず新人さん研修とかでよくみる自動販売機をJavaで書かせてみたけど・・・もうね・・・すごいね pic.twitter.com/jN0z0evmri
— あるかなむJP・おっさん (@arcanum_jp) 2023年3月18日
世の中AI、AIうるさいなぁ、話題のChatGPT、チャットでググってくれるだけだろ?って思ってたのですが正直、衝撃的でした。
前述のTwitterで書いたタイムライン通りなんだけど新人さん研修とかでよく演習課題にやる「自動販売機」を作ってもらいました。
これ実際コンパイルして使えるんですよね・・・
商品を選んで・・・お金を入れて・・・ちゃんとお釣りも計算して出してくる。
まぁ上のコードを見て感じたのはあぁ、、君、、ドリンクの情報が配列で変だよ・・・駄目だなぁ君・・・AI君、Javaのオブジェクト指向全然できてないじゃないか・・・じゃぁドリンクのクラスを分けてもらおうか?ククク・・・できるかな?
ちょっと手元にチャット履歴残ってないのでここでは出せないんだけど、実際に上記のドリンク情報をクラス化して書き直してくれるんですよね。
パッと見た感じ問題だったのは以下3点
①ドリンクの情報がクラス化されてない
②数字の入力にScanner#nextInt()を使用してるが数字以外のチェックがない
③自動販売機はお金入れてからドリンクを選択なのに逆
上記①については変更してくれて実行もできた。すごいねこれ・・・
②③についても難なく変更してくれるんだよね。ほほーん、、、
他で指摘を受けたけど当然ながら学習データ(ネット)にそのまんまのコードがあってそれを持ってきたと言う可能性もあるんだけど、こりゃ設計書があって業務処理を書くプログラマは不要になっていくなぁと。AIに読み込ませて書かせればいいんだから。
以下はAIが本格的に使われるようになった業界での妄想
前提として、誰でも使えるAIに仕様をぶん投げるなんてそのデータがまた学習されて他人の結果に出てしまうなんて危険性が今時点でも言われていて大手のSIerやサービサーは使わない宣言してるぐらいだから、その企業に特化したAI,学習データが提供されていると言う前提になります。多分そういう学習データを特定企業に売るサービサーが今後出てくるんだと思います。
じゃぁそういう設計書からプログラム書くだけのプログラマ何すればいいの?座して死を待つのみ?
一つはAIの書いたコードが正しいかをチェックする。つまりテスト職人になる。設計書からテストケースを書いてその処理が正しいかを保証できるエキスパート。
もしくはAIに読み込ませる設計書をAIに正しい結果を出すように書く人。先の①〜③の修正も一発でできたわけじゃなくて問い方をAIが理解できるように(具体的な指示)になるように書かないと正しくは変更してくれない。AIにプログラムを書かせるってのができるのならこの人がプログラマって呼ばれるようになるんだろうなと。
コンピュータの言語は機械語から抽象化を重ねて高級言語として発展してきた訳なんだけど今までの発展はどうしてもコンピュータ寄りの発展であってこれが自然言語で書けると言う風になるんだろうね。
じゃぁAIに書かせるのは初回開発の1回だけか?ええーーAIの書いたコードを人間がその後保守していくの?大変だよなぁ・・・COBOLシステムをJavaに書き換えるのに携わった事があるけど、どうしてもアレ、COBOLのシステムの思想をそのまんまJavaに書き換えるだけでJavaらしさってのがさっぱり無いのだよね。それを保守すんのも大変だろうし、アレは過渡期の対応でしかないんだろうなって思ったのだよね。とりあえず汎用機が使えなくなるので緊急避難としてツールでJavaに変換した。その後保守局面で少しづつ現代風に書き換えていく、そういう作業が必要になってくるんだろうなと。それと同じような作業がAIに書かせたプログラムにも必要に・・・
でも心配ご無用。AIに全てを毎回書かせればいいんすよ・・・という意見を見てしまった。仕様変更があったらその仕様変更後の仕様を食わせて全体を生成してもらう。なるほどーーー。そうするとテストの重要性が大きくなり今でもまわってる所はあるけどCIによる継続的なテストでシステムの正しさを保証していくのが大事になってくるんだろうなと。
じゃぁ案件ごとに仕様書変更してプログラム変更してテストして、テスト結果を捨ててるようなプロジェクトは今後AIによるプログラミングを受容するときに大変になるよね。契約のテスト範囲が仕様により影響のある部分ではなく全体のテスト結果も取り込んだテスト範囲ってなるね。
あと気になったのは毎回全体を書いてもらえばええやん・・そうなった時にAIは変更部分のみを書いてくるのかな?ということ。
もう一回同じ質問なんだけど別のサンプルコードになり、等べきでできるわけではないのだなと。 pic.twitter.com/UrcF8iqmNg
— あるかなむJP・おっさん (@arcanum_jp) 2023年3月19日
これが全く違うコードでね、そらChatGPTのサービス側で毎日学習してるんだから同じ結果にはならんってのは予想がつくのよね。
プロジェクト開始時に学習データを固定してそれを毎回使うとかそういう?そうすれば同じ結果で書いてくれる(かも)いやいゃぃゃ・・・逆ですね、、、全く違うコードでも結果さえ同じであればそれを受容すると言う考えになるんじゃないかな?そのためテストとしての重要性が増す。あぁそうするとコードの履歴管理が不要となる・・・(管理できない)
あと全てがAIが書けるとは限らないのでシステムのコアな部分、AIが書けないようなめんどくさい部分などは人間系が残っていくんじゃないだろうか?と。システムはこんな感じで3層構造になるのかなと。以下はテンプレートメソッドのような一般的なフレームワークを想定してます。
人間が書くめんどくさい処理レイヤ
-----↑------------------
AIが書く設計書から書いたレイヤ
-----↑------------------
コアな基盤レイヤ
-----↑------------------
リクエスト
これだとAIが書くレイヤは変更がゴリゴリ入るのでジェネレーションギャップみたいなパターンがまた復活するのか・・・
じゃぁAIが使う言語ってのは人間が分かる言語である必要があるのだろうか?Javaとかテストで保証するならAIが書くものは直接対象マシーンの機械語でも良いはずだよね。
なんか色々と妄想してた1日でした。
ちゃんちゃん