1P by neo 2시간전 | ★ favorite | 댓글과 토론
  • AI 코딩 도구(지니)에게 "Kent Beck처럼 코딩해" 라는 페르소나 프롬프트를 추가하면 코드 품질이 개선되는지 실험한 결과, 테스트 스타일과 변수 명명은 개선되었으나 아키텍처 설계는 변하지 않음
  • Rope 데이터 구조를 구현하는 프로젝트를 통해 페르소나 프롬프트와 설계 제약 조건의 효과를 비교 검증
  • 페르소나는 마이크로 행동(테스트 방식, 네이밍)을 개선하고, 명시적 제약 조건은 매크로 아키텍처(클래스 계층 구조)를 결정
  • 4개 그룹 실험 결과, 페르소나와 제약 조건을 결합한 프롬프트가 가장 좋은 결과 도출
  • Rich Sutton의 "The Bitter Lesson" 을 인용하며, 인간 전문성을 인코딩하기보다 계산 자원을 활용하는 방식이 더 효과적임을 시사

현재 AI 코딩 도구의 단계

  • 현재 AI 코딩 도구(지니)는 "말 없는 마차" 단계에 해당
  • 모든 기술 혁신은 기존 프레임으로 먼저 이해한 후, 근본적 변화를 인식하게 됨
    • 말 없는 마차 → 자동차
    • 무선 전신 → 라디오
    • 전자 메일 → 메시징
  • 새로운 기술의 2차 효과, 강화 및 억제 루프를 이해하려면 충분히 오래 사용해야 함

실험: 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. 백만 개의 지니가 다음 기능을 구현하되, 각 지니가 정리 방법과 정리량을 다르게 선택
    3. 가장 낮은 비용(시간, 토큰, 전기, 비용 등)으로 기능 추가에 성공한 지니 선택
    4. 많은 지니, 많은 기능, 많은 저장소에서 반복
  • 코딩을 "낭비"하는 것처럼 보이지만 실제로는 그렇지 않음
  • Jessica Kerr는 이를 "Design Contest" 라고 부름