지난 몇 주 동안 인터뷰를 진행하면서, 저는 종종 “생각하는 과정을 소리 내어 설명해 주세요. 그래야 제가 당신의 생각을 따라갈 수 있어요”라는 말로 대화를 시작합니다. 이는 주로 제가 마음을 읽는 능력이 없기 때문이지만, 지원자들이 당황해서 말을 잇지 못하는 상황을 방지하는 데도 도움이 됩니다. 하지만 이것은 매우 ‘인터뷰적인’ 기술이라서 인위적이고 실제 개발 과정과는 거리가 있습니다.
제가 하고 있는 또 다른 활동은 The Witness라는 게임을 하는 것입니다. 이 게임은 2016년에 출시된 퍼즐 게임으로, 점점 복잡해지는 숨겨진 규칙을 가진 미로를 푸는 것에 초점을 맞추고 있습니다. 이 게임은 흥미롭지 않은 전개와 음악이나 재미있는 대화가 없고, 스토리도 없습니다. 처음에는 저도 이 게임이 꽤 지루하다고 느꼈습니다. 대부분의 시간을 가능성과 조합론(combinatorics)과 씨름하며 보내야 했기 때문입니다. 진전이 없을 때는 매우 좌절감을 느끼기도 합니다.
하지만 인터뷰에서 받은 영감을 받아, 저는 제 자신의 사고 과정을 스스로에게 소리 내어 설명하기 시작했습니다. 저는 좀 미친 사람처럼 보일 수도 있지만, 저는 그저 청중이 한 명인 스트리머라고 자신에게 말합니다. 그리고 놀랍게도, 이것이 정말 잘 작동하고 있습니다. 이 방법은 게임을 더 활기차고 역동적으로 만들 뿐만 아니라, 제가 퍼즐을 푸는 데 훨씬 효과적이라는 것을 발견했습니다.
저는 처음에 이 현상에 당황했습니다. 상식적으로 생각하면, 저는 제 생각을 생각하는 속도나 정확도로 소리 내어 표현할 수는 없다고 생각했기 때문입니다. 특히 추론의 대부분이 기하학적인 퍼즐 게임에서는 말로 설명하기가 어렵습니다. 우리는 대규모 언어 모델(LLMs)이 이러한 종류의 추론에서 이점을 얻는다는 것을 알고 있지만, 이는 아키텍처적 한계(architectural limitation) 때문입니다. 즉, LLM은 이전 생각을 반복적으로 개선할 수 없으며, 진정한 재귀(recursion)를 얻으려면 토큰을 출력해야만 합니다.
하지만 문득 **러버덕 디버깅(rubber duck debugging)**이 생각났습니다. 소프트웨어 엔지니어링에서 자신의 문제를 다른 사람에게 설명하는 것은 종종 유용합니다. 하지만 누구에게 설명하느냐는 과정에서 그다지 중요한 부분이 아닙니다. 고무 오리일 수도 있습니다. 이 방법의 가치는 자신이 명시하지 않은 모든 가정(unstated assumptions)을 평가하도록 강제하고, 생각들을 우선순위와 의존도에 따라 선형적으로 정렬하며, 좋은 추상화(abstractions)를 찾는 데 있습니다.
이것들은 실시간 문제 해결에도 유용한 기술입니다. 저는 이 특정 사용 사례에 몇 가지 추가적인 이점이 있다고 생각합니다:
- 순전히 직관을 쌓는 것에 의존하는 대신 명명된 형식적 규칙과 개념을 확립하도록 강제합니다. 즉, 퍼즐이 명시적으로 요구하도록 설계된 시스템 2(System II)를 활성화하게 합니다.
- 임의적인 선택을 할 때 이를 인식하도록 강제합니다. 백트래킹(backtracking)이나 가능성 공간(possibility space)을 철저하게 탐색하는 데 유용합니다.
- 저는 이것이 에코 기억(echoic memory)을 사용하여 작업 기억(working memory)을 약간 증강할 수 있게 한다고 생각합니다.
- 제가 실수로 호손 효과(Hawthorne effect)를 유발했을 수도 있습니다.
실제로 이 기법이 적당한 이점을 가진다는 좋은 증거가 있다는 것이 밝혀졌습니다. 예를 들어, 이 메타 연구(meta-study) (참여자 n=6000명)가 있습니다. 저는 앞으로 더 많은 상황에서 확실히 이것을 시도해 볼 생각입니다.