Planモードに入る前に:ポリアの『いかにして問題をとくか』を読む

AI要約

Claude Codeの並列実行で実装速度が上がり、ボトルネックが問題理解と計画立案に移動した体験から、ポリア『いかにして問題をとくか』を読み、その4段階の方法論がAI協働時代にも有効であることを論じている。

モチベーション

Claude Codeをcmuxで並列実行するようになってから2ヶ月が経ち、やりたいことにはほとんど手をつけたように思える。問題解決をする上での最大のボトルネックは問題を理解することになり、次のボトルネックは問題解決の具体的な計画を立てることになった。作業スピードが上がった分、スループットのボトルネックは上流に移動した形になる。

Planモードに入る以前の話をもっとうまくやりたいと思った。しかし、AIと対話しながら実装することは、ラクレットのように自分の知識を削りながら(知識は複製可能な資産であるため実際に削れることはないが)前に進むことである。AIを賢く使うためには、自分も賢くある必要がある。だから『いかにして問題をとくか』を読むことにした。

本の内容

『いかにして問題をとくか』はハンガリー出身のアメリカの数学者ジョージ・ポリアが1945年に出版した書籍で、数学の問題を解くための指南書として記述された。ポリアは冒頭で問題を解くための4段階を提示している。

  1. 問題を理解すること
  2. 計画をたてること
  3. 計画を実行すること
  4. 振り返ってみること

(コーディングの世界に限定された話では)実行と振り返りはClaude Codeが大部分を実行してくれる分、1と2がボトルネックになる。「未知のものは何か。与えられているもの(データ)は何か。条件は何か」——ポリアが「問題を理解すること」の最初に挙げる問いである。たとえばClaude Codeに「〇〇機能に対応したデータ収集の仕組みを作って」と指示するとき、自分はこの問いに答えられているだろうか。未知のものは何か——機能が作られた目的にあたるユーザーセグメントか、フロントエンド側のイベント形式か、あるいは想定されるユーザーの導線か。与えられているものは何か——プロダクト側のコードベースか、ビジネスサイドの要望か、TypeScriptの型定義で表されたイベントの定義か。条件は何か——データの発生から可視化までの許容されるリードタイムは?実装の期間は?。未知のものを明確にしないまま「よしなにやって」と投げると、AIは動くが的を外す。

ポリアは「計画をたてること」の段階で「似た問題ですでにといたことのある問題がここにある。それを使うことができないか。その結果を使うことができないか。その方法を使うことができないか」と問う。まさにClaude Codeに文脈を与えることだ。過去に似た実装をしたなら、コードを参照させる。同じアーキテクチャで別の機能を作ったなら、方法を踏襲させる。AIは文脈がなければゼロから推測するしかないが、以前の解き方の情報があれば解の精度を上げられる。

おわり

道具がペンからIDEになり、IDEからAIエージェントになっても、目標をはっきりしないうちにやたらに仕事に手をつけはじめたりする人間の弱点は変わらない。

われわれが問題をとくためにはまずそれをよく理解しなければならない。わからない問いには答えようがない。われわれは目標をはっきり見なければならない。目標を見失うなである。これは古い諺であって,ラテン語では《respice finem》である。こんなよい忠告があるにもかかわらず,多くの人々はこれに耳をかたむけずに目標をはっきりしないうちにやたらに考え,語り,あるいは仕事に手をつけはじめたりする。愚かなものははじめを見,賢いものは終りに注意を向ける。目標がはっきりしなければわれわれは落伍するより他はない。(p97)

AIでやるとそれっぽい動くものが出てくるようになった現代では、問題を理解していない状態でも完成品を出せるようになってしまった。真の問題解決のためには、Planモードに入る前に立ち止まって考えねばならない。