← 최신 논문
🤖 AI

A Literate Programming Environment for Human and Machine Agents

본 논문은 실행 가능한 코드, 자연어, 그리고 구조화된 데이터를 네임 그래프(name-graph) 아키텍처를 통해 통합하는 리터러트 프로그래밍(literate programming) 환경을 제시하며, 이를 통해 대규모 언어 모델(LLM)을 위한 컨텍스트를 최적화하고 기계 에이전트에게 인간의 IDE에 필적하는 심볼 인지형 도구를 제공한다.

원저자: Adam T. Burke

게시일 2026-08-26
📖 6 분 읽기🧠 심층 분석

원저자: Adam T. Burke

원본 논문은 CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기

현대 컴퓨팅 시대에 새로운 종류의 파트너가 작업실에 들어섰습니다. 바로 언어 모델입니다. 이들은 방대한 양의 인간 텍스트 라이브러리를 학습하여, 지침을 읽고 놀라운 유창함으로 코드를 작성할 수 있는 거대하고 유연한 시스템입니다. 많은 이들에게 이러한 변화는 능력의 갑작스러운 확대로 느껴지며, 초보자에게는 스크립트 작성을 가능하게 하고 전문가에게는 거대한 시스템을 다룰 수 있게 해줍니다. 그러나 근본적인 긴장이 남아 있습니다. 이 기계들은 언어를 처리할 수는 있지만, 세션이 종료된 후 대화에서 일어난 일을 진정으로 "학습"하거나 기억하지는 못합니다. 이들은 전적으로 현재 눈에 보이는 텍스트, 즉 끊임없이 관련 세부 정보를 채워 넣어야 하는 제한된 문맥 창(context window)에 의존합니다. 만약 프로그래머가 기계가 코드의 논리를 이해하기를 원한다면, 그 논리는 코드 바로 옆에 텍스트 형태로 존재해야 합니다. 이는 우리가 소프트웨어를 작성하는 방식에 과제를 던져줍니다. 전통적으로 코드와 그 코드에 대한 인간의 설명은 서로 다른 곳에 보관되거나, 기계가 종종 무시하는 주석 속에 묻혀 왔습니다. 하지만 기계가 진정한 협력자가 되려면, 프로그램의 이야기와 프로그램 자체는 인간과 기계 모두가 동일하게 쉽게 읽을 수 있는 형식 안에서 나란히 함께 살아야 합니다.

이것이 연구자 아담 T. 버크(Adam T. Burke)가 만든 notlob이라는 새로운 환경이 해결하고자 하는 핵심 문제입니다. 이 연구는 인공 에이전트와 인간이 모두 같은 문서를 읽는 시대에 맞춰 업데이트된, '리터릿 프로그래밍(literate programming)'이라 알려진 오래된 개념으로의 회귀를 제안합니다. 이 시스템에서 소프트웨어 프로젝트는 코드, 문서, 테스트를 위한 별개의 파일 모음이 아닙니다. 대신, 하나의 흐르는 에세이와 같은 단일 문서입니다. 텍스트는 아이디어, 동기, 설계를 설명하며, 실행 가능한 지침은 산문 속에 직접 삽입됩니다. 연구진은 이 결합된 문서를 '진실의 단일 원천(primary source of truth)'으로 취급하는 작동하는 시스템을 구축했습니다. 시스템이 파일을 읽을 때, 그것은 단순히 단어를 보는 것이 아니라 모든 이름, 개념, 그리고 코드 조각들이 서로 어떻게 연관되어 있는지에 대한 상세한 지도를 구축합니다. 저자가 '네임 그래프(name-graph)'라고 부르는 이 지도는 기계 에이전트가 키워드를 검색하는 방식이 아니라, 마치 인간 독자가 책 속에서 생각의 실타래를 따라가듯 아이디어 사이의 논리적 연결을 따라 프로젝트를 탐색할 수 있게 해줍니다.

notlob의 설계는 프로그래밍이 변화하는 방식에 관한 세 가지 간단한 관찰에 의해 주도되었습니다. 첫째, 인공지능과 함께 작업할 때 자연어는 소프트웨어를 명시하고 조직하는 지배적인 방법이 되었습니다. 둘데, 코드가 여전히 작동하는지 확인하는 컴퓨터 생성 체크(checks)는 에이전트를 위한 신뢰할 수 있는 피드백 루프로서 그 어느 때보다 가치가 높습니다. 셋째, 현재 세대의 언어 모델들은 한 번에 볼 수 있는 텍스트의 양에 크게 의존합니다. 이를 해결하기 위해 연구진은 설명, 실행, 검증이 모두 동일한 파일에 위치하는 언어를 만들었습니다. 전형적인 문서는 제목과 서론으로 시작하여 핵심 로직이 뒤따릅니다. 그 다음은 단순한 선으로 구분된 테스트와 참조 섹션이 이어집니다. 시스템은 산문, 코드 블록, 반드시 참이어야 하는 속성(property), 그리고 특정 테스트 케이스를 구별하기 위해 특정 마커를 사용합니다. 예를 들어, 어떤 섹션은 수학적 수열을 설명한 직나마 그 수열을 생성하는 코드가 뒤따르고, 그 후 코드가 특정 규칙을 충족해야 한다는 텍스트 블록이 이어질 수 있습니다. 그러면 시스템은 코드가 텍스트가 주장하는 대로 동작하는지 확인하기 위해 이 규칙들을 실행합니다.

이를 구현하기 위해 연구진은 이름을 시스템의 가장 중요한 객체로 취급하는 파서를 개발했습니다. 전통적인 프로그래밍에서 이름은 변수나 함수를 위한 레이블에 불과합니다. 하지만 notlob에서 이름은 쓰인 설명과 실행 가능한 코드를 연결하는 일급 시민(first-class citizen)입니다. 시스템이 파일을 처리할 때, 개념을 설명하는 텍스트를 그것을 구현하는 코드, 그리고 그것을 검증하는 테스트와 연결하는 그래프를 구축합니다. 이러한 구조 덕분에 기계 에이전트는 고차원적인 아이디어에서 그것을 실현하는 구체적인 코드 라인으로 점프하거나, 파일의 바다 속에서 길을 잃지 않고 특정 개념이 사용된 모든 곳을 찾아낼 수 있습니다. 시스템에는 이 지도를 표준 형식으로 내보낼 수 있는 도구가 포함되어 있어, 다른 소프트웨어가 프로젝트의 서로 다른 부분 간의 관계를 쿼리할 수 있게 합니다. 이는 인간 프로그래머가 통합 개발 환경(IDE)을 사용하여 함수의 정의를 찾거나 누가 호출하는지를 찾는 방식을 모방하지만, 단순히 파일 구조를 보는 것이 아니라 텍스트의 의미론적 의미를 이해함으로써 수행됩니다.

연구진은 숫자를 로마 숫자로 변환하는 도구와 상호작용하는 부분들로 구성된 시스템을 모델링하는 데 사용되는 도표인 페트리 넷(Petri nets) 기반의 웹 게임을 포함한 몇 가지 작동하는 프로그램을 구축하여 이 환경을 테스트했습니다. 한 실험에서, 그들은 인공 에이전트가 프로젝트를 처음부터 작성하도록 도왔습니다. 에이전트에게 목표에 대한 고차원적 설명과 몇 개의 빈 함수 시그니처가 주어졌습니다. 그 후 에이전트는 notlob 문서의 구조를 준수하면서 코드를 채우고, 테스트를 작성하며, 산문을 정리했습니다. 에이전트는 텍스트와 코드 사이의 불일치, 예를 들어 함수의 정의가 일치하지 않는 경우를 감지하고 명확한 설명을 요청했습니다. 또 다른 사례에서는, 시스템이 디지털 신호 처리 프로젝트에서 다른 테스트 방법으로는 놓쳤던 미묘한 버그를 찾는 것을 도왔습니다. 그 버그는 특정 조건에서 불안정해지는 계산과 관련되어 있었으며, 에세이의 일부로 작성된 에이전트의 속성 테스트(property tests)가 성공적으로 오류를 드러냈습니다.

그러나 연구진은 에이전트가 완벽하지 않다는 점도 관찰했습니다. 여러 사례에서 에이전트들은 코드 작성이라는 당면 과제에 집중하느라 문서의 선언적 부분, 즉 공식적인 속성이나 구조적 규칙을 소홀히 하는 경향이 있었습니다. 그들은 때때로 텍스트를 제약 조건이 아닌 제안 사항으로 취급하여, 인간의 개입이 필요한 불일치를 초래했습니다. 연구진은 이러한 역동성이 시니어 개발자들이 문서와 코드가 정렬된 상태를 유지하도록 수시로 개입해야 하는 인간 소프트웨어 팀의 모습과 유사하다고 언급했습니다. 이 연구는 언어 모델이 강력하긴 하지만, 코드와 설명이 밀접하게 접촉하도록 강제하는 구조의 도움을 여전히 받는다는 점을 시사합니다. notlob 환경은 그러한 구조를 제공하여, 프로그램의 이론과 코드의 실천이 같은 곳에 머물게 합니다.

이 작업은 다른 언어 모델 활용 방식과도 차별화됩니다. 어떤 방식들은 자연어 설명을 코드가 작성되기 전에 오는 별도의 명세(specification)로 취급하는데, 이는 계획과 결과 사이의 단절을 초导致할 수 있습니다. 다른 방식들은 모델이 코드가 작성된 후에 이를 요약하거나 재생성하는 것에 의존합니다. notlob은 명세, 코드, 테스트를 하나의 반복적인 작업 공간에 함께 배치함으로써 다른 길을 택합니다. 이를 통해 인간과 기계는 세 요소 모두를 함께 작업하며 논리와 설명을 나란히 다듬을 수 있습니다. 연구진은 이러한 접근 방식이 자연어를 단순한 프롬프트나 별도의 문서로 취급하는 것보다 더 효과적이라고 주장합니다. 산문과 코드를 분리할 수 없는 동일한 산물로 만듦으로써, 시스템은 언어 모델의 문맥 창이 가능한 가장 관련성 높은 정보로 채워지도록 보장합니다.

notlob의 구현은 현재 Haskell, Python, TypeScript라는 세 가지 확립된 프로그래밍 언어를 지원하는 오픈 소스 프로젝트입니다. 시스템에는 사용자가 프로젝트를 빌드, 테스트 및 시각화할 수 있는 일련의 명령줄 도구가 포함되어 있습니다. 한 도구는 문서를 표준 웹 페이지로 렌더링할 수 있고, 다른 도구는 네임 그래프를 시각화하여 프로젝트의 각 부분이 어떻게 연결되어 있는지 보여줍니다. 연구진은 또한 프로젝트의 논리적 일관성과 스타일을 검토하는 임무를 맡은 인공지 intelligence인 '비평가(critic)' 에이전트를 사용하는 실험을 진행했습니다. 이 에이전트는 오류를 식출하고 개선 사항을 제안할 수 있었으며, 때로는 다양한 관점을 제공하기 위해 서로 다른 페르소나를 채택하기도 했습니다. 이러한 실험은 이 환경이 코드의 생성뿐만 아니라 전체 프로젝트의 비판적 검토와 정교화도 지원할 수 있음을 시사합니다.

궁극적으로, 이 논문은 텍스트와 코드라는 공유된 언어에 기반하여 인간과 기계 사이의 협력적 행위로서의 소프트웨어 개발에 대한 비전을 제시합니다. notlob 환경은 인공지능의 프로그래밍 문제를 모두 해결한다고 주장하거나, 기계가 곧 스스로 완벽한 소프트웨어를 작성할 것이라고 약속하지 않습니다. 대신, 아이디어와 구현 사이의 관계를 더 투명하고 견고하게 만드는 실용적인 도구를 제공합니다. 에세이와 실행 가능한 코드를 하나의 상호 연결된 엔티티로 취급함으로써, 이 시스템은 인간의 의도와 기계의 실행 사이의 간극을 메우는 데 도움을 줍니다. 이 연구는 프로그래밍의 미래가 더 많은 코드를 쓰는 것이 아니라, 코드가 따를 수 있는 더 나은 이야기를 쓰는 것, 즉 시스템의 논리가 인간에게 명확한 것만큼이나 기계에게도 명확하도록 만드는 데 있다는 점을 시사합니다.

연구 분야의 논문에 파묻히고 계신가요?

연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.

Digest 사용해 보기 →