literate-programming

6 posts

CI가 당신 없이 tangle할 수 있을 때까지 당신의 리터레이트 프로그램은 고장난 것이다

Literate programming은 단일 진실 공급원을 약속하지만, 수동 weave와 tangle 단계가 CI/CD 파이프라인을 망친다. Markdown 파일이 정규 소스로 남도록 추출과 문서 생성을 자동화하는 방법을 소개한다.

빌드 파이프라인이 터미널을 열고 을 입력하지 않으면 실행될 수 없다면, 당신은 리터레이트 프로그램을 가지고 있지 않다. 컴파일러가 달린 일기장을 가지고 있는 것이다. 리터레이트 프로그래밍의 전체 목적은 산문과 코드가 단일 진실 공급원을 공유하는 것이다. Markdown 파일이…

코드를 먼저 LLM에 설명하자 버그율이 85% 줄었다

30일 동안 LLM에 코드를 요청하기 전에 설계 설명을 작성했다. 그 결과는 내가 rubber-ducking을 바라보는 방식을 바꿔 놓았다.

대부분의 개발자는 LLM을 거꾸로 사용한다. 다섯 단어로 원하는 것을 설명하고, 200줄의 코드를 받은 뒤, 다음 한 시간은 모델이 내린 가정을 디버깅하는 데 쓴다. 나는 반대 workflow를 3개월간 실행했다. 한 줄의 코드도 요청하기 전에 완전한 설계 설명을 작성하는 것이다.…

테스트, 코드, 산문을 하나의 Markdown 파일에 담아 문서에 코드를 복사하는 것을 그만뒀다

Literate programming은 Markdown 파일을 single source of truth로 삼아 문서, 테스트, 구현체를 동기화 상태로 유지한다. Python 30줄로 구현하는 방법을 소개한다.

당신의 문서, 테스트, 코드는 동일한 이야기를 제대로 전달하지 못하는 세 개의 파일이다. 소스의 함수 시그니처를 업데이트한다. README 예제를 잊는다. 일주일 후, 신입 사원이 오래된 스니펫을 프로덕션에 복사한다. 테스트 파일은 여전히 예전 동작을 예상 결과로 인코딩하고 있다.…

당신의 Claude 스레드는 이미 문서입니다. 단 12시간 뒤에 사라질 뿐이죠.

LLM 대화에는 의도, 거부된 대안, 그리고 작동하는 코드가 담겨 있습니다. 이것이 바로 문서가 되어야 할 것입니다. 다음은 일회성 채팅을 내러티브를 잃지 않고 지속 가능하고 검색 가능한 문서로 전환하는 방법입니다.

당신은 Claude와 45분을 들여 재시도 회로를 설계했다. 실패 모드를 설명하고, 계단식 압력을 숨기기 때문에 지수 백오프를 거부한 뒤, jitter가 포함된 token-bucket rate limiting으로 결정하고 작동하는 구현을 생성했다. 설명은 명확했고, 추론은 타당했으며,…

텍스트 에디터는 잘못된 코드를 쓰게 한다. 트리 에디터는 그렇지 않을 것이다.

모든 컴파일러는 코드를 트리로 보지만, 에디터는 원시 텍스트를 편집하게 한다. 구조화 편집이 실제로 어떤 모습인지, 왜 보편화되지 않았는지, 그리고 도구를 바꾸지 않고 그 이점을 얻는 방법을 설명한다.

모든 프로그래밍 언어에는 공식 문법이 있다. 컴파일러는 이를 읽고 parse tree를 구축하며, 맞지 않는 것은 모두 거부한다. 에디터는 문법을 완전히 무시하고 사용자가 원하는 대로 입력할 수 있게 한다. 이 괴리는 놀랄 만큼 많은 마찰의 원인이다. Autocomplete는 문맥상…

Donald Knuth는 프로그램을 문학처럼 읽히길 원했다. 컴파일러는 다른 생각이 있었다.

Literate programming은 코드를 먼저 인간을 위해, 그 다음 기계를 위해 작성해야 한다고 약속했다. 40년이 지난 지금, 거의 아무도 그렇게 쓰지 않는다. 소프트웨어 문서화에서 가장 우아한 아이디어가 우리의 작업 방식을 바꾸지 못한 이유는 다음과 같다.

1984년, Donald Knuth는 급진적인 전환을 제안하는 논문을 발표했다. 프로그램은 컴파일러를 위해 작성되고 인간을 위해 주석을 다는 것이 아니라, 인간을 위한 문학으로 작성되어야 하며, 컴파일러는 그로부터 실행 가능한 부분을 추출해야 한다. 그는 이를 literate…