5 ポイント 投稿者 GN⁺ 2026-01-24 | 1件のコメント | WhatsAppで共有
  • AIコーディングツール(ジーニー)に 「Kent Beckのようにコードを書いて」 というペルソナプロンプトを追加するとコード品質が改善するかを実験した結果、テストスタイルと変数命名は改善されたが、アーキテクチャ設計 は変わらなかった
  • Ropeデータ構造 を実装するプロジェクトを通じて、ペルソナプロンプトと設計制約条件の効果を比較検証
  • ペルソナは ミクロな行動(テスト方式、ネーミング)を改善し、明示的な制約条件は マクロなアーキテクチャ(クラス階層構造)を決定
  • 4グループの実験結果では、ペルソナと制約条件を 組み合わせたプロンプト が最も良い結果を示した
  • Rich Suttonの "The Bitter Lesson" を引用し、人間の専門性をエンコードするより 計算資源を活用 するほうが効果的であることを示唆

現在のAIコーディングツールの段階

  • 現在のAIコーディングツール(ジーニー)は 「馬のいらない馬車」 の段階にあたる
  • あらゆる技術革新は、まず既存の枠組みで理解され、その後に根本的な変化が認識される
    • 馬のいらない馬車 → 自動車
    • 無線電信 → ラジオ
    • 電子メール → メッセージング
  • 新しい技術の 二次的効果、強化ループと抑制ループを理解するには、十分に長く使う必要がある

実験:Ropeデータ構造

  • Ropeデータ構造 は、非常に長い文字列で途中の文字削除を効率的に行うための構造
  • 単純な方式では右側の文字をすべて移動させる必要があり、O(n) の時間がかかる
  • Rope構造では substringオブジェクトconcatenationオブジェクト を使い、削除を 定数時間 で処理
    • 削除時に3つのオブジェクトを割り当て
    • 探索はO(演算回数)だが、文字列長より小さく、定期的な圧縮も可能

実験の進行過程

Phase 1: ペルソナ("Code like Kent Beck")

  • "Code like Kent Beck" プロンプトを追加したときにコード品質が改善するかを検証
  • 結果: コードスタイルの改善を確認
    • 変数名が改善
    • テスト戦略が モノリシックなスクリプトからモジュール化された単体テスト(TDD方式) へと転換
  • 予想外の発見: アーキテクチャは変わらない
    • 標準的な二分木でRopeを実装
    • Kent Beckが使う Compositeパターン は無視された

Phase 2: 設計ガイドの追加

  • Controlグループのコードは冗長すぎて、トークン上限超過 により構文エラーが発生
    • トークン上限を増やして解決
    • 「より多くのコンピューティング」が単純な解決策になり得る
  • プロンプトに 明示的な制約条件 を追加
    • Compositeパターンを使う
    • 「振る舞いを小さく特化したクラスに分離する」
  • 結果: 想定どおりの設計を実装
    • SubstringConcatenation の分離クラス
    • 単一クラスよりシンプルな構造
    • 実際にはさらに単純な設計に到達:Null Object(EmptyString)やネイティブ文字列ラッパーなしで、Substring 0..size として処理

Phase 3: 4グループに分けた実験

  • どの介入が効果を生んだのかを確認するため、交差実験を設計
    1. Control: 標準アシスタント
    2. Kent Beck: ペルソナのみ適用
    3. Composite: アーキテクチャ制約のみ適用
    4. Combined: ペルソナ + 制約条件

実験の結論

  • 2x2マトリクス効果 を確認
    1. ペルソナはミクロな行動を決める: 「Kent Beck」プロンプトは テストスタイルネーミング を安定して改善したが、構造的な意思決定には影響しなかった
    2. 制約条件はマクロなアーキテクチャを決める: 「Composite Pattern」プロンプトは クラス階層構造 を強制し、ペルソナがなくても細分化された設計を生成した
    3. 組み合わせが最善: Combinedグループは正しいアーキテクチャ(Composite)と正しい開発習慣(TDD/Unit Tests)の両方を提供した

The Bitter Lessonの適用

  • 隠れた目標: ジーニーが 機能と将来のバランス を取りながら、より良い開発を行えるようにすること
  • 試した方法: 慎重なプロンプティング、ジーニーの提案変更を注意深くレビューすること、より小さい/大きいステップなど
  • Rich Suttonの "The Bitter Lesson" を引用
    • 70年にわたるAI研究が示す教訓: 人間の専門性をエンコードするより計算資源を活用すること のほうが良い結果をもたらす
    • スタイルをエンコードしようとしたこと自体が、誰もが犯す 同じ過ち だった

計算活用による効果的な開発スタイルの提案

  • 数多くのリポジトリのひどいコードスタイルをコピーする 拙いコーディングジーニー に縛られる必要はない
  • 計算活用の方法 を提案
    1. 大規模リポジトリを選ぶ
    2. 100万のジーニーが次の機能を実装するが、各ジーニーが 整理方法と整理量をそれぞれ異なる形で選択 する
    3. 最も低いコスト(時間、トークン、電力、費用など)で機能追加に成功したジーニーを選ぶ
    4. 多くのジーニー、多くの機能、多くのリポジトリでこれを繰り返す
  • 一見するとコーディングを「無駄遣い」しているように見えるが、実際にはそうではない
  • Jessica Kerrはこれを "Design Contest" と呼んでいる

1件のコメント

 
kallare 2026-01-25

では、ジェフ・ディーンのようにコーディングしろと言ったら、果たして……?!