- 코드와 자연어 설명을 하나의 서술로 엮는 문학적 프로그래밍(Literate Programming) 은 코드와 설명 두 가지를 병행 유지해야 하는 부담 때문에 널리 쓰이지 못했으나, AI 코딩 에이전트가 이 핵심 노동을 제거할 수 있음
- Emacs Org Mode의
org-babel을 통해 다중 언어 문학적 프로그래밍이 가능하지만, 대규모 프로젝트에서는 소스 코드 추출(tangling) 과정의 번거로움이 한계 - 에이전트에게 Org 파일 기반 런북(runbook) 작성을 지시하면, 설명으로 의도를 풀어쓰고 코드 블록을 대화형으로 실행하며 결과를 문서에 저장하는 워크플로우가 가능
- 에이전트가 설명·코드 간 동기화와 tangling을 자동 처리하므로, 코드 변경 시 설명을 다시 쓰는 수고가 사라지며, LLM이 가장 잘하는 번역·요약 능력을 활용
- 엔지니어의 역할이 코드 작성에서 코드 읽기 중심으로 전환되는 흐름에서, 에이전트가 유지하는 서술형 코드베이스의 실용성이 핵심 질문으로 부상
문학적 프로그래밍의 개념과 한계
- 문학적 프로그래밍(Literate Programming) 은 코드와 자연어 설명을 섞어, 사전 지식 없는 독자도 코드베이스를 하나의 서술로 읽고 작동 방식을 이해할 수 있도록 하는 아이디어
- 매력적인 개념이지만, 실제로는 코드 자체와 설명이라는 두 개의 병렬 서술을 유지해야 하는 부담이 발생하며, 이것이 채택을 제한한 근본 원인
- 실무에서 가장 흔한 형태는 데이터 과학 커뮤니티의 Jupyter 노트북으로, 설명과 계산, 결과가 웹 브라우저에서 함께 표시
Emacs Org Mode와 문학적 프로그래밍
- Emacs Org Mode는
org-babel패키지를 통해 다중 언어 문학적 프로그래밍을 지원하며, 임의의 언어를 실행하고 결과를 문서에 캡처 가능- 다만 이 방식은 소수의 열성 사용자에게만 남아 있는 니치 패턴
- 대규모 소프트웨어 프로젝트에서 Org 파일을 소스의 진본(source of truth)으로 사용하면, 소스 코드가 사실상 컴파일된 출력물이 되며, 매 편집 후 코드를 추출("tangle")해서 목적지에 배치해야 함
- 자동화 가능하지만, 사용자나 에이전트가 실제 소스를 편집한 후 다음 tangle 시 덮어쓰기되는 문제가 발생하기 쉬움
에이전트 이전의 활용 패턴
- 개인 설정 관리(bookkeeping personal configuration)에 문학적 프로그래밍을 사용하는 데 충분한 성과가 있어 LLM 등장 이전에도 이 아이디어를 포기하지 않았음
- 수동 테스트와 노트 작성에 Org Mode를 활용하는 패턴: 명령줄 대신 에디터에서 명령을 작성·실행하고, 각 단계가 올바를 때까지 편집한 뒤 결과를 제자리에 저장
- "노트 작성과 테스트 실행을 결합하면, 테스트 완료 시 노트가 무료로 생성됨"
에이전트와 함께하는 새로운 워크플로우
- Claude, Kimi 등 코딩 에이전트들은 Org Mode 문법을 잘 이해하며, Org는 관대한 마크업 언어라 LLM이 매우 잘 다룸
- Org Mode의 방대한 문법이 인간에게는 단점이지만, 언어 모델에게는 문제가 되지 않음
- 기능 테스트 시 에이전트에게 Org 런북 작성을 요청하면:
- 설명이 각 단계의 의도에 대한 모델의 성찰을 담음
- 코드 블록은 검토 후 하나씩 또는 전체를 스크립트처럼 대화형 실행 가능
- 결과가 코드 아래에 Jupyter 노트북처럼 저장
- 설명을 편집하고 모델에게 코드 업데이트를 요청하거나, 코드를 편집하고 모델이 설명에 의미를 반영하거나, 에이전트가 양쪽을 동시에 변경 가능
- 병렬 서술 유지 문제가 사라짐
에이전트가 제거하는 핵심 노동
- 에이전트에게 tangling 처리를 맡기면 코드 추출 문제도 해소
-
AGENTS.md파일로 에이전트에게 Org Mode 파일을 소스의 진본으로 취급하고, 항상 설명을 작성하며, 실행 전에 tangle하도록 지시 가능- 에이전트는 이 모든 작업에 능숙하며, 코드 수정 후 설명을 다시 쓰는 것에 결코 지치지 않음
- 문학적 프로그래밍이 널리 쓰이지 않는 근본적 추가 노동을 에이전트가 제거하며, 이는 LLM이 가장 잘하는 번역과 요약 능력을 활용하는 것
기대되는 이점
- 코드베이스를 다양한 포맷으로 내보내기(export) 하여 편하게 읽을 수 있음
- 엔지니어의 주요 역할이 작성에서 읽기로 전환되고 있다면 특히 중요
- 데이터로 뒷받침되지는 않지만, 각 코드 블록의 의도를 설명하는 서술이 코드와 함께 컨텍스트에 나타나므로 생성되는 코드의 품질도 향상될 가능성 추정
- 현재까지 대규모·본격적 코드베이스에서는 시도하지 못했으며, 테스트와 수동 프로세스 문서화 워크플로우에서 활용 중
Org Mode의 한계와 대안
- Org 포맷이 Emacs와 밀접하게 통합되어 있어 제약 요인이며, Org가 Emacs 밖으로 나와야 한다는 오래된 소신
- Markdown을 대안으로 추천하고 싶으나, Markdown에는 메타데이터 포함 기능이 부족
- Org Mode의 Properties 개념은 문서를 Emacs Lisp로 프로그래밍적으로 조작 가능하게 하며, 이제 LLM이 해당 문서 전용 맞춤 기능을 file variables 섹션에 Emacs Lisp로 작성해줌
- Markdown에는 코드 블록의 실행 세부 사항(실행 위치, 원격 머신 등)을 지정하는 Org Mode의 header arguments 같은 기능이 없음
- 흥분을 주는 것은 Emacs의 구체적 구현이 아니라 아이디어 자체
핵심 질문
- "에이전트를 통해, 서술처럼 읽을 수 있는 대규모 코드베이스를 갖추고 코드 변경과 설명이 동기화되는 상태를 지칠 줄 모르는 기계가 유지하는 것이 실용적이 될 수 있는가?"