私がこれまで持っていた中で最高のラバーダック
Rubber Duck I've Ever Had (blog.blockingqueue.com)
要約
AIは、開発者にとって、当初は「ラバーダックデバッグ」のような思考整理のツールとして始まり、コードスニペットの参照先、スペルチェック、コード補完、行き詰まった際の助けへと進化しました。現在では、有用なコードを生成する能力も持ち合わせています。AIの活用は、特にジュニア開発者にとっては、問題解決のプロセスをスキップしてしまい、学習機会を失うリスクも伴います。シニア開発者はAIの出力を評価・修正できますが、ジュニア開発者はその能力が未熟なため、AIに依存しすぎると成長が阻害される可能性があります。AIはコード生成を加速させますが、システム設計やコードの保守・整理といった、より高次のタスクは依然として人間の責任です。
全文翻訳
私がこれまで持っていた中で最高のラバーダック
私にとって、AIは私がこれまで持っていた中で最高のラバーダックとして始まりました。その後、Stack Overflowの代わりにスニペットをコピーする場所、新しいクリップボードになりました。その後、最高のスペルチェックとコード補完になりました。行き詰まって次にどう進めば良いかわからないときに、私はそれに頼ります。
そして今、2026年、それは実際に有用なコードを書くことができます。
ラバーダック効果
それにはもう一つ素晴らしい点があります。Stack Overflowにも常にあったものです。問題について書き留めるだけで、AIが答える前に自分の頭の中で問題が明確になるため、大いに役立ちます。
先延ばしの克服
先延ばしにも大いに役立ちました。私は常に、まず最も簡単な方法で物事を機能させ、後で改善しようとします。しかし、時には簡単な方法が明らかではなく、小さな情報が欠けているだけで簡単なタスクをためらってしまうことがあります。ほとんどのルーチンなプログラミングタスクは以前に行われているため、AIにとっては、その簡単な、一般的な方法を見つけるのはかなり容易です。情報不足のために簡単なことで立ち往生する理由はありません。それはあなたを前進させ、そこから進むことができます。
ジュニアとシニア
ジュニアとしては、行き詰まったときにのみ使用すべきだと思います。そうでなければ、追いつくのが難しくなります。シニアとしては、良いコードがどのようなものかを知っているので、AIが逸脱したときにそれを見つけて修正できます。しかし、早期にAIに頼るジュニアは、そのステップをスキップします。彼らは、なぜそれが機能するのかを理解せずに、動作するコードを得ます。その基盤なしでは、彼らは良い出力と悪い出力を区別できないため、ただそれを信頼します。すべてのジュニアがこうするわけではありませんが、AIがフォールバックではなくデフォルトの最初の選択肢になった場合、ほとんどの人がそうすると思います。問題にまず苦労することが学習方法であり、苦労をスキップすることは、出てくるコードがうまく機能したとしても、学習をスキップすることになります。
AIが実行という点ではすでに非常に優れたジュニアであるため、企業がジュニアよりもシニアを多く採用するようになるだろうと信じています。
エントロピー
ある意味で、人生はエントロピーとの戦いであり、コードも同様です。コードをシンプルに保たずに触れるほど、それは劣化し、注意しないとAIはその劣化を加速させます。クラスが大きくなりすぎたとか、2つのモジュールが密結合しすぎているとか、AIは自分で教えてくれません。それはまだあなたの仕事です。リファクタリングは、あなたが戦い返す方法です。より大きなピースがどのように組み合わさるかを見て、それらを小さく保ちます。AIをうまく使えば、小さなイテレーションはテストが容易なため、リファクタリングは実際により安価になります。不注意に使えば、単にコードがはるかに速く乱雑になるだけです。
AIがあなたを誤解させる場所
それは小さなステップで最も効果を発揮します。あまりにも広い範囲を与えたり、コンテキストが少なすぎたりすると、AIは仮定でギャップを埋めます。それらの仮定のいくつかは合理的ですが、多くはそうではありません。それはコードを生成しすぎ、明らかなことを見落とし、単純化するのではなく追加し続けます。私は小さな変更を求めたのに、私が求めていなかった抽象化(新しい設定オプションや、私が持っていない問題を解決するためのヘルパークラスなど)が追加されたコードを受け取りました。私は、大きな飛躍を求めてそれがまとまることを期待するのではなく、段階的に構築し、コードを各ステップで理解できるようにすることを学びました。間違っている場合でも、役立つことがあります。悪い答えは、解決策がどのように見えるかを示すことによって、しばしば私を正しい方向へ導きます。
システム設計で変わったこと
AIが登場したことで、システム設計スキルが以前よりも少し重要になったと感じています。コードは今や生成しやすくなりました。何を構築すべきか、そしてピースがどのように組み合わさるべきかを知ることが、自動化されない部分です。私はシステムの全体的な形状を頭の中に保つようにしています。AIにコードをピースごとに生成させる場合、境界が曖昧になりやすいため、カップリングと凝集度を自分で監視する必要があります。
私が学んだこと
今日、私がAIとどのように仕事をしているかを見ると、私の実践的な学びはいくつかの習慣に集約されます。
第一に、変更は小さく段階的に行います。AIに良いコードがどのようなものかを明確に伝えます。余分な機能を追加せず、シンプルに保ち、純粋でテスト可能なメソッドを優先します。機能を構築する際、私はすでに機能しているコードを変更するのではなく、新しいコードを追加することを好み、それが機能したらリファクタリングします。
第二に、適切なセーフティネットを構築します。Playwrightのようなツールの使い方を知っていることは必須です。なぜなら、良いテストがあれば、生成されたコードを迅速に検証できるからです。本番システムで作業している場合は、AIがログにアクセスできるようにして、問題を直接デバッグできるようにしてください。また、大きな変更とその理由を文書化するマークダウンノートも保持しています。
第三に、積極的に単純化します。AIはコード生成に優れていますが、自分で後始末をすることはありません。コードが機能した後、システムを単純化するために時間をかけてください。そうでなければ、コードは静かに腐敗します。
最後に、実際に保持しているコードを理解していることを確認してください。機能する出力を受け入れて先に進むのは簡単ですが、その方法では学習しません。物事をゆっくり行うために時間をかけると、実際の経験、考え、アイデアが得られます。だからこそ、企業が単にスピードのためにAIを推進することに私は反対します。彼らはコードがどれだけ速く生成されるかを見ますが、真の理解はそのようには機能しません。Terence Taoは、AIと科学に関する短い講演でこれを指摘しました。あなたはより速く到着しますが、より少なく理解します。
スピードは今や安価ですが、良いソフトウェアには依然として注意が必要です。毎日システムの設計に投資し、構築しているものを理解するために時間をかけてください。