ディスカッション (11件)
一人で黙々と悩むよりも、誰かに対して思考を口に出しながら考える「アウトプット思考」がなぜ圧倒的に効率的なのか?その理由を解説します。複雑なバグや設計の壁にぶつかったとき、声に出して説明するだけで解決策が見つかるのは、単なる気のせいではありません。これは「ラバーダック・デバッグ」の効果をさらに進化させたものです。エンジニアの生産性を劇的に向上させる、対話を通じた問題解決の極意を紐解きます。
うわー、アインシュタインが特殊相対性理論の論文で、同僚のミケーレ・ベッソに感謝を述べていたのを思い出すね。スイス特許庁の同僚で、理論の議論を手伝ってもらったんだ。論文の最後に書いてあるよ: https://www.fourmilab.ch/etexts/einstein/specrel/specrel.pdf
2017年当時はまだLLMが自力で動くコードを書けるほどの性能じゃなかったけど、少なくともラバーダック・デバッグの助けになるようなチャットボットを作ろうとしてたんだ。残念ながら技術が追いついてなくて、ラバーダック・デバッグという言葉自体を知らないエンジニアも多かった。RIP Duckly。リビングで1080tiを2枚使ってStackOverflowのコーパスでLLMを学習させようとしてたのは、今思うといい思い出だよ。
1999年にWeb開発の仕事を始めた頃は、O’reillyと「for dummies」シリーズがコードのバイブルだったな。駆け出しのエンジニアだった自分は、しょっちゅう先輩のダンに質問しに行ってたよ。ダンに話しかけに行く途中で、質問をどう説明しようか考えてるうちに自分で答えや次のステップを思いつくことがよくあったんだ。しまいには、ダンがこっちに向かってくる自分を見ると背を向けて「自己解決した?」って聞いてくるようになって、自分はデスクに戻りながら親指を立てて合図するっていうのがお決まりだったね。
アイデアを共有するのは良いことだけど、誰に対しても声に出して考えるのが有効なわけじゃないかも。アジア系アメリカ人にとっては、声に出すより黙って考える方が合っているという調査もあるみたいだしね。https://www.psychologytoday.com/us/blog/sex-murder-and-the-meaning-life/201801/does-thinking-out-loud-help-your-performance-or-hinder
誰かが聞いてるとか反応してくれるとかはあまり関係ないと思うよ。要はこれに尽きるんじゃないかな。「漠然とした印象としてしっくりきていた思考を、構造を持つ文章に落とし込まないといけない」っていう点。PGが言う「書くことで思考が整理される」のと似てるね。頭の中のふわっとした概念を、他人の批判に耐えうる形に強制的に出力させる作業なんだよ。ラバーダック・デバッグも同じで、言葉にする必要があるから明瞭化されるだけで、話すこと自体が重要じゃない。LLMへのプロンプト作成も同じで、指示が曖昧だとLLMは迷走するから、明確さを突きつけられることになる。結局、知的とされる人は、自分の内なる独白がラバーダックに説明するみたいにクリアなんじゃないかな。
本当にその通り!1. 話したり書いたりするには、相手が理解できるように思考を順序立てなきゃいけない。頭の中で考えてるだけじゃ、考えはまとまらないんだよ。2. 誰かに話したり書いたりすると、相手の反応が得られるし、論理的で社会的にも妥当な内容にするよう強制される。AIとのチャットや日記では、思考の洗練はそこまで進まないと思うな。
科学的な根拠はないけど、昔よくあったんだよね。仕事でどうしても解決できないことを家に持ち帰って妻に話してたんだけど、妻は専門知識がないのに、的を射たヒントや提案をくれるんだ。説明するためにこっちが必死に状況を噛み砕いて話してると、その過程で自然と解決策が見つかって、翌日会社で試す、みたいなのが定番だったよ。
もっと単純な話じゃないかな。誰かに問題を説明するってことは、基礎的なところから順を追って、相手が知らない前提条件を補足する必要があるからだよ。一人で考えてると、その基礎部分をすっ飛ばして、どこかで前提が間違ってることに気づけないことが多い。でも、すべてのステップを明示的に説明させられると、リスナーが何も言わなくても自分自身でミスや穴に気づけるんだ。下の子にはKhan Academyの問題を提出前に僕に説明させてるし、上の子はテストを出す前に「どう解いたか」を頭の中で構成する癖がついてる。いい習慣だよ。
ハインリヒ・フォン・クライストの『思考が言葉になる過程について』は、1805年のドイツの古典だけど、このテーマについて深く考えさせてくれる名著だよ。ずっと大事にしてる。https://franxfiction.com/on-the-gradual-fabrication-of-thoughts-during-speech/
話は少しずれるけど、ペアプログラミング(一緒に考えるという特殊なケース)について。プログラミングとは、アイデアをコンピュータ言語にシリアライズ(変換)する作業だよね。それを先に誰かに人間言語で伝えることで、頭の中の抽象的な思考クラウドよりもずっと具体的な形になる。効果的なペアプロができると、手法について議論したり、細部を話し合ったり、コーディングと監視を交互にしたりできる。それに、誰かがいると無駄な気晴らしを防げるのも大きいね。重要じゃないメッセージを読んだり、HNをチェックしたりしなくなるから(仕事中に他のプラットフォームを見る習慣はもうなくなったけどね)。