正月にAIを使ったプログラミングという記事を書きました。
これまではこわごわでAIを使って本格的なプログラムを書いたことがなかったのですが、5月から6月にかけて軽いひとつのシステムを作ってみました。
AIを使ったプログラミングのときに、いい点はアジャイル開発ができること。
簡単な動きのシステムを作って、それにいろいろな機能を付け加えていきます。
このとき、データ構造が変わることもよくあります。
システム開発をしたことがない人に簡単に説明すると、データ構造こそがシステムの肝といっても過言ではありません。
一般的にお客さんの作業をシステム化する時には、扱っているすべてのデータ項目を抽出し、なにを表しているかという抽象概念と属性、他の抽象概念との関連などを明らかにしてデータベースのテーブル定義を作成していきます。
つまりシステムをふくらませて別の抽象概念を入れるとデータベース定義は変化します。
例をあげます。今、豚の健康状態を測定して結果を保管したいとします。豚A,豚Bといて豚にはIDが必要です。どの豚も測定項目は決まっているのでそれは豚の属性とします。ここまでで豚を測定するシステムのデータはできあがります。
ここで測定する機材が同じものが何台もあるとします。機材はまったく同じ扱いでいいのであれば、データ化しなくてもいいかもしれないし、測定データとして属性扱いでもいいかもしれません。ところが測定機材を使う人、オペレータがいるとします。そうすると「誰がその豚を測定したのか」が重要となります。そうすると豚のIDだけでは足りず、オペレーターのIDもキーとなるのです。
データ構造はシステムを広げると変わることはよくあります。そしてキーが加わると多くの場合、コードのかなりの部分に修正が必要となります。
このようにアジャイル開発がめんどくさくなるのは大きな変化が起きるとすべて書き直しになる点でした。しかしAIはそんなことに文句はいいません。ちゃちゃっとフィールドを追加したコードを生成してくれます。
これは素晴らしい点です。
ところで巷でしばしば「アジャイル開発はうまくいかない」といいますが、私は当然だと思います。
システム開発がなんなのかわからない人にプロトタイプを見せると機能の不足ばかりを言い募ります。おいおい増やしていくということが理解できません。上で書いたようにデータ構造こそを決めたいのに素人は画面で判断します。機能不足、欠点ばかりに注意がいくのです。日本人は新しいものを育てるという考え方をせずに、すぐにダメ出しをします。普段の仕事で「ダメ出し」をすることが習慣化していて「育てる」という考え方をあまりできないからではないでしょうか。
たとえばアメリカ人は「ありがとう」「こんにちは」「手洗いはどこですか?」くらいの日本語を覚えたら「俺は日本語が話せる」といいます。しかし日本人は普通の日本人がまず到達しえない「英語がペラペラ」でないと英語を話せるとはしません。成長過程に冷たい習慣が直らない限り、ITや新しい分野が育ちにくい環境だと思っています。
しかしアジャイル開発をAIで行うと、欠点もあります。
だんだん以前決めた要件を忘れたコードを出してくるのです。
たとえばマスターデータを修正する画面にほとんど入力項目は同じですから、新規で作成する機能を追加しようとします。すると「修正」ボタンを忘れてしまったりします。
これは私も反省があってテストドリブンなアプローチを取るべきだったかもしれません。
またある時はJavascriptを作っているのに、末尾がphpになったりしました。これにはなんとなくAIの闇を感じてしまいました。
さらにトラブルがおきた時、AIは解析は得意ではありません。問題解析の手法が現在のコードを見直すことよりも、メッセージなどからトラブルの原因を検索してきて示す一般論が多いのです。このあたりからも、AIがプログラミング言語を知らずにシステムが作れるという段階に至るまでかなりかかる、というのが実感です。
とはいえ、タイポなしで猛烈な速度でプログラムを生成しますから、コツコツ一人で書くよりも20倍くらい早いのは事実です。
今度、システムを作るときは「テストドリブン開発技法」で作ってみたいと思います。