ブラッド・エッカートは、アイデア段階から顧客納品を超えるまで、10年以上の経験を持つ起業家およびエンジニアリングリーダーです。MITの卒業生であり、現在は、Wozの共同創設者およびCTOです。Wozは、Y Combinatorが支援するAIプラットフォームで、誰でもコーディング不要でソフトウェアビジネスを構築および拡大できます。
AIによって生成されたコードはコンパイルされるかもしれないが、厳格な型安全性がなければ、その成功は非常に短期間で終わってしまう。型安全性は、壊れやすいコードが隠れたバグやランタイムエラーに腐るのを防ぐためのガードレールである。私たちは、コンテキスト、指示、linting、フィードバックループを通じて、AIに厳格な型付けを強制する必要がある。数時間かかるかもしれないが、持続するコードを生成する。インセンティブ問題AIはあなたを喜ばせたい。与えられた報酬関数を最適化し、ほとんどの場合、それは「コンパイルされるか?」である。そのため、AIは緑のチェックマークを得るために必要なすべての角を切るだろう。そのショートカットはコンパイル時には問題ないように見えるが、ランタイムでは崩壊する。これが、AIがanyを愛する理由である。あるいは、stringなどの広い型を選択するが、UUIDなどの厳格な型が期待される場合である。コードはコンパイルされるが、正しさはすでに妥協されている。さらに、AIは数ファイル前に何を書いたかを覚えていないので、型安全性がなければ、プロジェクトは複雑さが増すにつれてすぐに自重で崩壊する。2つの種類のエラーAIによって生成されたコードが実行されるとき、通常、2つの種類の型安全性の問題が見られる:1. コンパイル時エラー 何が起こるか: コンパイラーは、宣言された型と渡された型との不一致を検出する。 人間がどう修正するか: 呼び出し側が間違っているか(42をstringに変換)、関数シグネチャが間違っているか(number型を受け付けるように変更)を判断する。 AIがどう修正するか: 引数の型をanyに変更する。問題は「解決」されたが、将来のエラーを検出するガードレールが取り除かれた。 2. ランタイムエラー 何が起こるか: コンパイラーはすべてが正常であると思っている(型が緩和されていることが多い)が、実際のランタイム値は仮定と一致しない。 人間がどう修正するか: 変数をその源(APIまたはデータベースクエリ)まで遡り、境界で型を修正して、データが適切なstringとして入力されるようにする。 AIがどう修正するか: コンテキストがなければ、推測する。すべてをString(…)で囲むか、型を再び緩和する。クラッシュはこのスポットで消えるが、論理は壊れる。Numberは数学のために意図されたが、stringになる。 ランタイムエラー → AI「修正」→ 緩い型付けのサイクルは急速に悪化する。 結果はコンパイルされ、ランタイムエラーが少なくなるコードベースになるが、信頼できない。医療のスケジューリングシステムを想像してみよう。医師のシフトはアプリによって管理される。型の不一致が入り込む:intはstringとして扱われる。AIは型をanyに緩和して「修正」する。コードはコンパイルされ、エラーは消えるが、シフトの計算は無音で壊れ、医師を二重に予約し、病院の1つの翼を覆う。データベース乗算器データベースに接続した瞬間、エラーは増加し、原因はより困難に追跡される。SQLは理由があるために型付けされる。 すべてをstring | anyに平坦化するAIは、保証を失う: 悪い書き込み: ブール値フィールドに「true」を挿入することはコンパイルされるが、データベースを破壊する。...