
AIコーディングで、素人でも、ITが苦手な人でも、誰でもアプリやWebサービスが作れてしまう時代到来です。
もはやプログラムなんて覚えなくてもいいし、世の中かはプログラマーはいらなくなるんですかね〜。
なんていう会話があちらこちらから聞こえてきますが、現実はAIにプログラムを任せていると、とんでもないしっぺ返しをくらってしまいます。
という自分も、今では仕事でバリバリとAIにコーディングをやってもらっているんですが、その時に感じたAIが作るプログラムのクセというか、自分なりに感じたポイントをブログにまとめてみたいと思います。
言われた通りのハードコーディング
AIはとても素直なんですよ。
「素直すぎる」と言ってもいいかも。
例えば、
「ユーザーIDが1なら管理者と表示してください」
と指示すると、
if ($user_id == 1) {
echo "管理者";
}
と返してきます。
確かに言われた通りなんですよね。
間違ってはいない・・・
でも、現実のシステムでは、
管理者が増えるし、権限は追加されるし、データベース管理になるんですよ。
つまり、AIは、
今だけ動けばいいコードを全力で生成してくるパターンが多いです。
AIは
仕様書を守る優等生なんですけど、
仕様の裏側にある将来までは想像してくれません。
これは駆け出しエンジニアの人がよくやってしまう失敗にも似てるかもですね。
行き当たりばったりプログラム
AIに
追加機能を依頼すると面白いプログラミングを構築するんです。
最初。
function getPrice() {
}
次に、機能追加。
function getPrice($type) {
}
さらに、機能追加。
function getPrice($type, $campaign) {
}
もっと、機能追加。
function getPrice($type, $campaign, $userRank) {
}
そして、気が付くと・・・
function getPrice(
$type,
$campaign,
$userRank,
$coupon,
$specialFlag,
$season
)
こんな怪物モジュールが爆誕してしまいます。
AIは目の前の依頼には強いんですが、
「そろそろ設計を見直した方がいいのでは?」
という発想はあまり持っていない。
ときたま、こうして、リファクタリングや、設計の見直し、しっかりとしたテストの構築を、促さないといけません。
場当たり対応プログラム
あるシステムで、エラーが発生した時に、AIに聞いてみました。
すると、
try {
// 処理
} catch(Exception $e) {
// エラー処理
}
が追加される。
別のエラーが発生した。
またAIに聞く。
if (!empty($data)) {
}
さらにエラー。
if (isset($data['name'])) {
}
さらにエラー。
if ($data && isset($data['name'])) {
}
どんどん防御壁が増えていく。
最終的には、
if (
$data &&
is_array($data) &&
isset($data['name']) &&
!empty($data['name'])
) {
}
最終的に、こんな要塞みたいな状態になった・・・
もちろん動くんですよコレ。
でも、
なぜそのエラーが発生したのかという
根本原因は放置されたままでなんですよね。。
湿布を貼り続けて、とにかく痛み止めやその場の腫れを抑えればいいという治療法に似ている気がする。
ちゃんと動くけど汎用性がない
AIのコードで一番多いのが、マジでこれかもしれない。
例えばCSVの読み込みをAIに作らせてみたところ、
サンプルデータでは完璧に動くんですよ。
でも実際には、次のような問題点がありました。
・列順が違う
・空行がある
・文字コードが違う
・ヘッダー名が違う
コードを見てみると、
$name = $row[0];
$age = $row[1];
$mail = $row[2];
と書いてありました。
確かに動くんですが・・・
そのCSV専用機になっている。
プログラムで必要なのは、「汎用性」です。
単一のCSVだけで動くのであれば、自分の手で直接修正したほうがいいですからね。
このように、AIはテストケースには強いんですが、
運用現場のカオスにはまだまだ弱い状態なんです。
もちろん、今後AIが賢くなっていってこういうことがなくなって行く可能性もありますが、今現在はこのレベルという事を知らないと、仕事にならない。
全体構造を見通せないコーディング
実はこれが一番重要で、厳しい状態かもしれない・・・
AIは目の前の関数を書くのが得意で、
クラスも作れるし、
APIも作れる。
その上、SQLも書ける。
でも、
システム全体を眺めながら、
・この責務はどこに置くべきか
・この設計は半年後どうなるか
・他の機能との整合性はどうか
ここまで考えるのは苦手なんですよね。
例えるなら、「レンガを積むのは上手い職人」
でも、「建築家ではない」です。
設計図が曖昧なまま作り始めると、
立派なレンガの山が出来上がる。
AIは、優秀な駆け出しエンジニア?!
これまでAIをいじっていて思うことは、
プログラミングを覚えたての頃の自分と同じ感じがする。
・言われた通りに作る
・とりあえず動かす
・エラーを潰す
・機能を足す
・後のことは考えない
プログラマーは経験を積むにつれて、「どう作るか」ではなく、「どう壊れないように作るか」を考えるようになる。
そしてさらに経験を積むと、「そもそもこの設計でいいのか」を考えるようになるハズです。
AIは今、ちょうど優秀な若手エンジニアくらいの位置にいるような気がするんですよね。
あとがき
AIが書いたコードを見ると、たまにツッコミを入れたくなる。
「いや、それ今は動くけど来年泣くぞ」
「そのif文、本当に必要か?」
「設計から考え直した方が早くないか?」
しかし、そのツッコミは過去の自分のgithubコードにもそのまま言えるのも確かです。
AIのコードをレビューしているつもりが、実は
昔の自分をレビューしているのかもしれない。
そう考えると、AIは便利な開発ツールであると同時に、
エンジニアとしての成長を映し出す鏡なのかもしれない。
もしかして、AIは、「自分を見直すために、人間を試しているのかもしれない」と考えるのは、自分だけなのか??
0 件のコメント:
コメントを投稿