クランカーのコードを読んだ
I Read the Clankers' Code (fev.al)
要約
著者は、AI(クランカー)が生成したコードのレビューと責任を持つことの重要性を説いています。AIは高速で時に優れたコードを生成するものの、100%の信頼性はなく、予期せぬ問題を引き起こす可能性があるため、エンジニア自身がコードを理解し、責任を持つべきだと主張しています。
全文翻訳
クランカーのコードを読んだ
コードを見るべきではない、クランカーにやらせればいい
私の名前がPR(プルリクエスト)に付いている以上、問題が起きたら夜中に電話がかかってきます。それに、私はこの取り組みに加わったのは、コード自体が結構好きで、誰が何を書いたのかに関わらず、実際に見たいと思ったからです。だから、レビューします。
確かに、私が自分で使うだけのオモチャを作っていて、時間をかけたくない場合は、クランカーに自分でやらせるように頼むでしょう。そして、その結果として生じる、呪われた夢のような、私が依頼したことに対する混乱のルーブ・ゴールドバーグ的な山に、私の清らかで繊細な小さな手を突っ込むことは絶対にしません。
それ以外の全てについては、コードを見たいのです。
私はエンジニアリングの品質に大きな誇りを持っています[^5]。一般的に「私のクラフト」と呼ばれるものです。それは私のアイデンティティの一部です。シンプルさ、信頼性、セキュリティ、コスト、パフォーマンス、保守性などをバランスさせた解決策を見つけることです。本番環境で何かを壊すのは大嫌いです。それは個人的な失敗であり、恥を感じ、私の評判に汚いシミがついたようなものです。出荷したものが、機能しないものが、大嫌いです。そして、誰かのものが壊れて、私の大きくて醜い顔がそのPRに付いていて、その横に愚かな「👍 LGTM」が付いているのは大嫌いです。私がソフトウェアの一部を台無しにしたせいで誰かが起こされたら、私自身も眠れなくなります。それが最悪の気分です。
このアプローチは、クランカーが書いたコードを盲目的に信頼することとは相容れません。コードは95%の時間機能するかもしれません[1]。それはまともかもしれませんし、あなたがやったであろうことよりも優れているかもしれません。しかし、95%は100%ではありません。それは物事を見落とします。それは好奇心を持ちません。人間のように物事を学びません。立ち止まって尋ねません。それは限定されたコンテキストウィンドウを持っています。そのトレーニング全体はスコアを最大化することです。その唯一の目標はタスクを完了することです。訓練中の子犬のように、あなたが与えたプロンプトにいくらか似ている、半分噛み砕かれ、唾液でいっぱいの「もの」をあなたの足元に生産します。そして、それは幸せそうに尻尾を振り、キラキラした目であなたを見ます:「見て、やったよ、もう愛してくれる?」コードベースが大きくなるほど、ゴミを導入する可能性が高まります。そしてそれは累積し、その古い、より洗練されていない兄弟たちから生まれた恐怖の上に構築されます。
ああ、それはコードを速く書きます!私よりもずっと速く書きます。そして、多くの場合(レビュー後)、そのコードは私が自分でやったことよりも優れています。そして、それはごく短時間でそこに到達します。それは役立ちます。それはクールな「ツール」です。私は「それを使うな」と言っているわけではありません。私が言っているのは、PRにあなたの名前が付いていて、あなたがオンコールローテーションにいる限り、あなたはそれが構築したコードの所有者であり、それを読んで理解すべきだということです。
この段階で、私たちは皆、クランカーがユニークに爆発的で壮大な方法で台無しにした時の戦いの物語を持っています。あなたはそれを少し長く自由にさせておき、それは狂ってしまいました。生命維持装置レベルのコンポーネントを削除する最適化。「これを触るな」というコードが触られすぎてしまいました。無造作にインポートされたライブラリ。途中で発明される機能。パスするように変更された単体テスト。到達できないエッジケースをカバーするために追加された大量のコード。そしてコード。コードを見たことがありますか?加算だけで構築されたコード。何千、何千、何千ものタスク固有の単体テストが、間違った条件を100%網羅しています。既に14回実装された関数の再実装。いたるところに冗長性があります。コードの各行に無駄なコメントがあります。誰も読まないであろう、アレクサンドリア図書館に匹敵する不正確なドキュメント。そしてそれは壊れ、あなたはそれがなぜだと尋ね、それは4歳の子供が青い犬は確かに存在すると主張する確信を持って、意味をなさない根本原因分析の形をでっち上げます。
別のエージェントに最初のエージェントのコードをレビューするように依頼します:さらに多くのテスト。さらに多くのエッジケース。ヒッグス粒子がその瞬間にそのビットをフリップした場合に何が起こるか考えましたか?パフォーマンスを確認するように依頼します:あなたは完全に正しい、それを忘れていました、パフォーマンスを追加するためにコードを追加させてください。クランカーをコードベースで自由に歩かせると、それが起こります。それはしばしばそれほど劇的ではありません。しばしばそれはより単純な問題です。それは主に加算によって機能し、常に現在のタスクに限定されます:コードを追加させてください。もっとコードを書かせてください。ここにコード、そこにコード、どこにでもコード。それらすべてがゴミになります。そしてそれはそのゴミの上に構築されます。
しかし、あなたはもうコードの品質を気にしないですよね?クランカーだけがそれに触れるので、ですよね?私は気にします。なぜなら、私はコードをレビュー「しなければならない」からです、私がちょうど言ったように。コードが私がもはや理解できないホットメスになった場合、私はそれを適切に行うことはできません。コードの品質を落とすことはできません。
OK、しかしそれはユーザーの問題のように聞こえます:あなたはプロンプトが下手で、それをLLMに押し付けているのです。
しまった、あなたは非の打ちどころのない、一流の10倍エンジニアであり、間違いをしない、自分の仕事を二重にチェックする を追加するのを忘れました。クランカーとのこれらの問題のすべては、慎重に作成されたプロンプトの山でパッチできるかもしれません[2]。おそらく、それが将来開発者を差別化するものになるでしょう:それぞれが、自分のクランカーを最高のクランカーにする秘密のソースとスパイスのブレンドを持っています。私はただの古くて意地の悪い老人です。私は20年間コードの報酬を受け取ってきて、それにはかなり得意です。おそらく、その「ツール」を私のツールチェーンに挿入するために真剣な努力をしたと主張するのに十分な信用を得たでしょう、そして現時点での私の結論はこうです:それは数年間そこにあり、盲目的に信頼しない理由を私に与えてきました。
秘密のハーブとスパイスは、「エンジニアリング」に関しては役に立ちません。これらのツールから出てくるものの品質を強制するために、公式なプロセスと、証明され、繰り返し可能な制御メカニズムが必要です。これらはまだ存在しません。いつか現れるかもしれませんが、まだ現れていません[3]。それまで、私はそれを盲目的に投げ込むことはしません。もしあなたが自分自身をソフトウェア「エンジニア」と考えるなら、あなたも一分間考えるべきでしょう。
私の経験では、システムプロンプト、CLANKER.md の指示、繰り返し、他のモデルによるレビュー、脅迫、または心理的操作のいずれも、クランカーがその行動を確実に修正させることはできません。そしてそれが本当に私をイライラさせることです:その特に頑固なジュニア開発者が3回目の同じ間違いを犯したとき、あなたは一分間コーチングし、彼らが学ぶことを確認し、それは実際に彼らがレベルアップするのに役立ちます。クランカーは学びません。彼らは学ぶことができません、なぜなら基盤となるテクノロジーは学ぶことが「できない」からです[4]。あなたはコンテキストウィンドウに指示を注入することができます。あなたは幸運であれば、評価でそれらの指示を考慮し、コンテキストが少し成長し、あなたが言ったことを無視して、重みに焼き付けられたものを優先するでしょう。おそらくいつか改善されるでしょう。私たちはまだそこにいません。
好奇心と精査がいつ悪いことになったのでしょうか?もしあなたがクランカーが書いたコードの責任を取るように私に頼むなら、私はそのコードをレビューする必要があります。そして誰にも言わないでください、しかし時々私はそれを書くことさえあります。