문제 풀이 방법론 - 배경 논의

CLAUDE.md의 “문제 풀이 문서 규칙”이 나온 배경 논의 기록 (2026-07, Lab8 해설 작성 세션에서 확립). 방법론에 새로운 의문이 생기면 이 문서의 논거와 종합해서 수정할 것.

Q1. 수학 증명처럼 스펙에서 구현을 도출하는 해설지가 코딩에 적합한가?

결론: 적합함. Dijkstra의 program derivation, 불변식 기반 추론이라는 정립된 방법론이 존재함.

단, 수학 증명과 다른 점 하나:

  • 코드 도출은 순수 연역이 아니라 “제약으로 후보를 좁히기 + 남은 선택의 정당화”
  • 그래서 도출(스펙이 강제)과 선택(여러 답 중 정당화된 하나)을 구분 표기해야 함
    • 예: FIFO 접근 패턴은 규칙이 강제하는 도출, Queue 타입은 List+인덱스도 가능한 것 중의 선택

함정: 사후 합리화. 완성 코드를 역으로 정당화하면 논리가 다 맞아 보이지만 “왜 다른 대안이 아닌가”가 빠짐. 기각된 후보와 기각 이유를 남겨야 독자(미래의 나)가 사고 과정을 재현 가능.

Lab8에서의 실증 (2605solution.md)

  • 단조성 보조정리: “유효할 때까지 버리기”는 일지에 직감으로만 있었음. 재구성이 “poll이 안전한 근거”를 요구했고, “한번 invalid면 영원히 invalid”라는 단조성을 새로 증명해야 했음. 코드에도 일지에도 없던 것이 재구성에서 생산됨
  • 등호가 규칙을 인코딩: 켜기 조건 후보 t >= start vs t == start 중 규칙 3(“처음 고려할 때 과거면 켜지 않음”)이 전자를 기각 → 등호 하나가 규칙 3을 공짜로 인코딩, 별도 분기 불필요
  • 상태 저장의 강제성 증명: 규칙 3이 “처음 고려한 시점”이라는 이력 의존을 만들므로 on/off는 현재 틱만의 함수가 아님 → 계산 방식이 아니라 상태 저장 방식이 선택이 아닌 강제임이 증명됨

Q2. 도출은 고정된 N단계 절차인가?

결론: 아님. Lab8의 6단계는 이 문제에 맞춘 전개 결과. 일반 커널은 4질문:

  1. 정의 — 스펙 자연어의 애매함 제거 (용어→술어, 시간 모델 고정). 버그 대부분은 알고리듬이 아니라 정의의 애매함에서 나옴
  2. 상태 — 답이 입력만의 함수인가 이력의 함수인가 → 멤버 변수 목록이 결정됨
  3. 불변식 — 매 단위 작업 후 유지할 성질 하나 → 코드는 그걸 복구하는 최소 행동, 자료구조는 필요한 연산 집합에서 도출됨. 문제를 “N개 관리”에서 “1개 처리”로 축소하는 엔진
  4. 검산 — 조건 배타성, 경계, 스펙 예제 추적

보조정리는 단계가 아니라 도구. 소환 트리거: 파괴적 연산(삭제·덮어쓰기·전이)마다 “미래에 다시 필요 없음을 무엇이 보장하는가?”

주의점:

  • 발견의 순서 ≠ 서술의 순서: 실제 풀이는 질문들 사이를 왔다 갔다 함. 선형으로 안 풀려도 방법이 틀린 게 아님
  • 엄밀함 수위 조절: 규칙 명시형 스펙(랩, 알고리듬, 프로토콜)엔 4질문 전부, 탐색적 코드/CRUD엔 정의와 검산만

Q3. 재독 안 할 문서를 남기는 게 의미 있나?

결론: 가치의 대부분은 “남겨진 문서”가 아니라 “쓰는 행위”에 있음.

  • 머릿속 추론은 빈틈이 있어도 넘어가짐. 산문으로 쓰는 순간 막히고, 그 막힘이 발견을 만듦 (수학 문제 풀이 노트와 동일 — 재독 안 하지만 실력 차이를 만듦)
  • “다시 읽을 것인가”로 재면 실망, “쓰면서 발견한 게 있는가”로 재면 명확
  • 멈출 타이밍 신호: 옮겨 적기만 하는 느낌 = 새로 알게 되는 게 없어짐

Q4. 그럼 재구성(해설지)보다 탐험 일지가 낫지 않나?

결론: 둘은 “재독용 포장 vs 날것”이 아니라 역할이 다른 두 단계.

  • 일지 = 풀면서 거의 공짜로 나오는 원재료 (직감을 기록)
  • 재구성 = 원재료에 “왜?”를 소급 적용하는 검증 패스 (직감의 근거를 요구)
  • 발견들(단조성 정리 등)은 일지가 아니라 재구성 단계에서 나왔음 — 일지만 쓰고 멈추면 검증기를 한 번도 안 돌리는 것
  • 재구성본의 독자는 미래의 내가 아니라 쓰고 있는 순간의 나 → 재독 가능성 0이어도 가치 유지
  • 일지가 지금 읽기 편한 건 맥락이 머리에 로드된 상태라서임. 시간이 지나면 막다른 길이 표시 없이 섞인 기록이 되어 재진입이 어려움

Q5. 목적 재정의 — 풀면서 문서화하고 습관을 교정하고 싶다

Lab8은 예외적으로 풀고 나서 소급 작성한 케이스. 실제 목표는 풀면서 과정을 문서화 → 사고 습관 교정 피드백 루프.

결론: 3층 구조.

  1. 탐험 일지 (풀면서, 주 산출물): 습관은 결론이 아니라 결정 지점에서 드러남 → 검증 전 예측+이유, 막힌 지점과 뚫린 계기, 선택의 당시 이유를 기록. 다듬지 않음 (다듬으면 기록 오염 + 사고 방해)
  2. 재구성 도출 (풀고 나서, 리뷰 도구): 문서가 아니라 검증 운동. 일지의 실제 경로와 도출의 논리 경로의 diff = 습관 버그
    • 예: 일지의 “버리면 되겠다”(직감) vs 도출의 단조성 요구 → 습관 항목 “파괴적 연산의 안전성을 직감으로 통과시킴”
  3. 습관 로그 (habit-log.md, 누적): 유일한 재독 문서. 다음 문제 시작 전에 읽음. 반복 등장 = 진짜 습관, 재발 없으면 삭제. 한 문제의 관찰은 사건이지 습관이 아님 — 누적돼야 교정됨

Q6. 답을 아는 상태의 재구성이 순환논증 아닌가?

“결국 푼 결과를 추적하면서 가장 빠른 논리 경로를 찾는 것 아닌가?”라는 의문.

결론: 재구성은 경로 최적화가 아니라 정당화 감사(audit). 순환이 아닌 이유는 정당화의 방향과 실패 가능성.

  • 각 단계의 근거는 “내 코드가 이러니까”가 아니라 “스펙의 이 문장이 강제하니까” — 검증 대상은 스펙, 내 풀이는 피고인
  • 감사는 실패할 수 있음: 정당화 안 되는 단계에서 막히고, 그 막힘이 (1) 코드가 틀림 (2) 우연히 맞음 (3) 스펙 애매함을 무의식 통과 중 하나를 드러냄. 실패 가능한 절차는 순환이 아님
  • 수학도 동일: 증명의 발견은 엉망, 증명의 기술은 답을 안 다음. 그래도 증명 쓰기가 검증인 이유 = 쓰다가 구멍이 실제로 발견되기 때문
  • Lab8 실증: 단조성 정리는 답에서 읽어낸 게 아니라 답이 요구하는 빚을 새로 갚은 것. 유효성이 단조가 아닌 스펙이었다면 증명이 실패하고 poll이 버그임이 드러났을 것

사후 확신 편향(“답을 알면 모든 게 필연처럼 보임”)에 대한 방어 규율:

  • 모든 단계에 스펙 인용 요구, 못 대면 “선택”으로 강등하고 대안 나열
  • 갈림길마다 기각된 대안을 실제로 생성 — 대안이 왜 죽는지 말 못 하면 합리화임
  • 충돌 시 코드가 짐 (코드에 맞춰 논리를 구부리면 감사가 분식이 됨)

산출물은 “예쁜 경로”가 아니라 강제된 수 / 자유 선택 / 무허가 통과의 지도. 무허가 통과 지점이 습관 로그의 원재료.

Q7. 풀다가 막혀서 LLM/외부에서 답을 얻으면?

결론: 시스템이 깨지지 않음. 장부 기입 방식만 달라짐 — 빌린 걸음은 빌렸다고 적고, 감사에서 빚을 갚음.

  1. 묻기 전 스냅샷: 시도한 것 · 최선의 추측과 이유 · 막힌 지점을 먼저 일지에 기록. 답을 받으면 “어디까지 알았는지” 경계가 사후 편향으로 지워지므로 사전 기록이 필수
  2. 감사 면제 없음: 빌린 단계도 스펙에서 직접 재도출해야 함
    • 재도출 성공 = 빚이 소유로 전환 (그때 비로소 획득)
    • 외부 답은 정답이 아니라 출처 달린 가설 — LLM 오답/다른 해석을 감사가 걸러냄
  3. 막힌 원인 분류가 습관 로그 입력:
    • 지식 갭 (몰랐던 개념/API) → 습관 아님, ANKI행
    • 도구 미사용 (예제 손추적 안 함, 스펙 재독 안 함) → 습관 버그
    • 정의 애매함 방치 (4질문의 1번 건너뜀) → 습관 버그
    • 리뷰 때 “묻지 않았어도 무엇이 뚫어줬을까?”를 함께 물으면 분류가 쉬움
  4. 실용 팁: 정답 대신 단계적 힌트(“놓친 스펙 문장만”) 요청 — 나머지 경로가 내 걸음으로 남음. 단 도덕률이 아니라 효율 문제, 답을 통째로 받아도 감사가 있는 한 시스템은 작동함

산출물 위치

  • 규칙(운영 지침): pocu-note/COMP2500/CLAUDE.md의 “문제 풀이 문서 규칙” 섹션
  • 습관 로그: pocu-note/COMP2500/habit-log.md (첫 항목 후보: “파괴적 연산의 안전성을 직감으로 통과시킴” — Lab8)
  • 도출 적용 예시: pocu-note/COMP2500/902-lab/902-007-lab8/2605solution.md의 “onTick 알고리듬 도출” 절