문학적 프로그래밍(literate programming)은 프로그램의 설명과 코드를 함께 조직해 사람이 읽고 이해할 수 있는 문서로 만드는 방법론이다. [[도널드 커누스]]는 프로그램을 컴퓨터에 대한 명령뿐 아니라 사람에게 전달하는 글로 다루자고 제안했다. 단순히 주석을 많이 쓰거나 변수 이름을 아름답게 고르는 일로 한정되지 않는다. 설명의 흐름과 코드 조각의 관계를 조직하고, 그 자료에서 실행에 필요한 코드와 읽기 위한 문서를 만들어내는 방식이 중요하다. [[코딩을 글쓰기로 배우기]]가 표현과 학습의 연결을 살핀다면, 이 개념은 설명과 실행물을 함께 유지하는 구체적인 작성 방법을 다룬다. 커누스와 실비오 레비(Silvio Levy)의 CWEB에서는 하나의 원본 파일을 CTANGLE로 처리해 컴파일할 C 코드를 얻고, CWEAVE로 처리해 [[TeX]] 문서를 얻는다. 같은 자료에서 두 결과를 만드는 구조라서 설명을 별도 안내문으로만 관리하는 방식과 비교할 수 있다. - 숫자 목록을 정렬할 규칙부터 말로 설명해보자. - 각 판단에 필요한 코드를 곁에 붙이자. [[설명 옆에 놓는 코드]]를 작게 만드는 연습이다. 도구를 사용하지 않은 이런 연습은 방법의 일부를 익히는 제안이며, 설명과 코드의 동기화를 자동으로 보장하지는 않는다. [[코드와 설명의 불일치]]는 프로그램을 고친 뒤 무엇을 함께 확인해야 하는지 다룰 다음 주제다. - [커누스, Literate Programming](https://www-cs-faculty.stanford.edu/~knuth/lp.html) - [커누스와 레비, CWEB 안내](https://www-cs-faculty.stanford.edu/~knuth/cweb.html) #개념 #프로그래밍 #글쓰기 #교육