KTUGFaq

KTUG FAQ

로그인:
비밀번호:
가입
You cannot kill time without injuring eternity.
FrontPage › LiterateProgramming
lpcover.jpg

위 코드는 Knuth의 저서 Literate Programming 의 표지에 나와있는 코드입니다.

목차

1 문학적 프로그래밍 이란?
1.1 기원 및 소개
1.2 Knuth의 문학적 프로그래밍 강의
1.3 Knuth의 문학적 프로그래밍에 대한 애정
1.4 문학적 프로그래밍 관련 글
1.5 문학적 프로그래밍 관련 사이트
2 문학적 프로그래밍 시스템
2.1 LaTeX을 이용한 문학적 프로그래밍
2.1.1 noweb 을 이용하는 방법
2.1.2 CWEB 을 이용하는 방법
2.1.3 기타 자료
2.2 PlainTeX을 이용한 문학적 프로그래밍

1 문학적 프로그래밍 이란?

문학적 프로그래밍(literate programming)은 프로그래밍 방법론의 한 가지로, 프로그래밍을 할 때 컴퓨터로 컴파일 가능한 코드를 만드는 것보다 사람이 이해하기 쉬운 코드를 만드는 것에 중점을 두는 방법이다. 즉, 사람이 보고 이해할 수 있도록 문서를 만들듯이 프로그래밍을 하는 것이 목적이다. '마치 문학작품을 읽는 것처럼 프로그래밍을 읽을 수 있도록 만드는 것'이 목표이므로 '문학적 프로그래밍'이라는 이름을 지었다. (출처: [http]문학적 프로그래밍-위키백과)

1.1 기원 및 소개

문학적 프로그래밍은 우리에게 TeX의 저자로 알려진 Knuth가 만들어낸 프로그래밍의 새로운 패러다임입니다. Knuth가 이에 대한 개념을 구체화하기 시작한 것이 1980년대 초반이니까 2006년 현재로써는 '새로운'이란 단어가 좀 무색해 집니다. 하지만 현재까지도 그리 널리 이용되고 있지는 않으듯 싶습니다.

전산학에는 전산학의 노벨상이라 불리는 튜링상([http]A. M. Turing Award) 이 있습니다. 1974년 튜링상 수상자는 알고리즘의 분석과 프로그래밍 언어의 디자인 그리고, The art of computer programming 이라는 저서로 그 분야에 많은 공헌을 한 Knuth 였습니다.

관례(?)로써 그 해 튜링상을 받은 사람은 ACM Turing Award Lecture라는 이름으로 강의를 하게 되어 있는데, 1974년 그 강의의 제목은 Computer Programming as an Art(새로운 첨부 "knuth-turingaward.pdf)였습니다"파일 업로드. Knuth는 여기서 컴퓨터 프로그래밍을 단순한 기술이 아닌 음악, 미술, 문학과 같은 종류의 하나의 예술 활동이라고 강조하고 있습니다. 그리고 결론부에는 컴퓨터 프로그래머 자신이 예술가라는 인식을 가지고 프로그래밍 작업에 임하면, 프로그래밍이 더욱 즐겁고, 그 결과 또한 더욱 좋을 것이라고 말합니다.

To summarize: We have seen that computer programming is an art, because it applies accumulated knowledge to the world, because it requires skill and ingenuity, and especially because it produces objects of beauty. A programmer who subconsciously views himself as an artist will enjoy what he does and will do it better. Therefore we can be glad that people who lecture at computer conferences speak about the state of the Art.

문학적 프로그래밍은 이렇게 시작했나봅니다. 컴퓨터 프로그래밍을 예술로 보는 대가로 부터 말입니다. 위의 강의를 시작으로 눈에 보이는 본격적인 문학적 프로그래밍의 시작 또한 Knuth의 논문 Literate Programming (@knuthweb.pdf (257.24 KB) ) 에서 시작합니다. 이 논문에서 Knuth는 더이상 컴퓨터를 위해 프로그래밍을 하는 시대는 지났다고 말합니다. 사람을 위한 프로그래밍을 하자고 합니다. 물론 프로그래밍이라는 것이 컴퓨터에 일을 시키기 위한 명령들의 집합이지만, 이것에 연연하여 너무 컴퓨터에만 초점을 맞추지 말고, 사람들에게 눈을 돌리자는 것이지요. 컴퓨터 프로그래밍의 르네상스 시대가 온 것이지요.

이 논문에서 역시 일관되게 컴퓨터 프로그래밍을 문학 작품(works of literature) 으로 간주하고, 재미있는 말인 Literate Programming 이란 말을만들어 냈습니다. Knuth는 문학적 프로그래밍을 단순한 말장난에 그치는 것을 싫어해서 WEB이라는 시스템을 만들어 냈습니다. TeX이 WEB 시스템으로 만들어졌다는 것은 잘 알려진 사실이지요.

I believe that the time is ripe for significantly better documentation of programs, and that we can best achieve this by considering programs to be works of literature. Hence, my title: Literate Programming. Let us change our traditional attitude to the construction of programs: Instead of imagining that our main task is to instruct a computer what to do, let us concentrate rather on explaining to human beings what we want a computer to do.

  • WEB 으로 작성된 TeX 소스: [http]tex.web
    컴퓨터 프로그래밍을 본격적으로 익히고자 하는 사람들은 반드시 읽어봐야 한다고 합니다. TeX에 익숙해지면 한번 도전해 보고자 합니다.
  • 관심있는 분을 위하여: pdf 파일을 만들어내는 과정을 다음과 같습니다. 위의 tex.web을 다운받으시고,
    % weave tex.web      <-- tex.web 파일에서 tex.tex 파일을 얻습니다.
    % tex tex.tex        <-- tex이 세번이나 쓰였네요. 
    % dvipdfmx tex.dvi
    
    위처럼 하여 만들어 진 책이 바로 Knuth의 저서 Computers & Typesetting 시리즈의 Volume B인 TeX: The Program 입니다.

  • 참고: 윈도우즈에서 MiKTeX을 이용하시는 분은 KTUGContrib:3247 (by 도은이아빠) 을 참고 하면 됩니다.

  • 1.2 Knuth의 문학적 프로그래밍 강의

    Knuth는 1987년 10~12월에 스탠포드대학에서 Mathematical Writing이란 제목으로 강의를 하였습니다. 그 중 일부가 문학적 프로그래밍에 관한 내용입니다. 영어가 짧아서 다 알아듣지는 못하는데, 한가지 다행인 점은 강의 제목과 동일한 Mathematical Writing 이란 책이 있는데, 그 책은 이 강의를 수강한 학생들과 Knuth가 만든 책으로 "강의 노트"적인 성격이 짙습니다. 이에 그 책에서 해당 강의 부분을 올립니다. 동영상 시청에 많은 도움이 되리라 봅니다.

    1.3 Knuth의 문학적 프로그래밍에 대한 애정

    [http]TUGboat Volume 26 (2005), No.3[http]Interview with Donald E. Knuth라는 제목으로 Knuth의 인터뷰 기사가 실렸습니다. 이 기사에서 TeX을 만들기 위해서 어떤 툴을 사용했는가라는 질문에대한 그의 대답에서 Knuth의 문학적 프로그래밍에 대한 사랑을 엿볼 수 있는 부분이 있기에 옮겨 봅니다.

    "The tools I used were home grown and became known as Literate Programming. I am enormously biased about Literate Programming, which is surely the greatest thing since sliced bread. I continue to use it to write programs almost every day, and it helps me get efficient, robust, maintainable code much more successfully than any other way I know. Of course, I realize that other people might find other approaches more to their liking; but wow, I love the tools I’ve got now. I couldn’t have written difficult programs like the MMIX meta-simulator at all if I hadn’t had Literate Programming; the task would have been too difficult."

    1.4 문학적 프로그래밍 관련 글

    • @fine_art_programming.pdf (54.54 KB) : [http]Free Software Magazine Issue 6에 실린 글로써, Free software와 문학적 프로그래밍의 미래에 대한 글입니다. 읽어볼 만합니다. (참고로 저자 Matt Barton은 St. Cloud State University in Minnesota의 영문학 교수라고 합니다.)

    2 문학적 프로그래밍 시스템

    문학적 프로그래밍은 프로그램 소스와 그에 대한 문서화 작업을 동시에 하는 것이다. 따라서 문학적 프로그램의 소스는 크게 프로그래밍 부분과 문서화 부분으로 나뉘어진다. 프로그래밍 부분은 프로그래밍 언어에 따라 다르지만, 문서화 부분은 기본적으로 LaTeX 혹은 plain TeX을 이용한다. 따라서 문서화 부분에 어떤 TeX을 사용하느냐에 따라 나뉠 수 있겠다.

    2.1 LaTeX을 이용한 문학적 프로그래밍

    WEB/CWEB 은 기본적으로 TeX 을 사용하도록 설계되어 있지만 여러가지 방법을 이용해서 LaTeX 에서 사용할 수 있다. 크게 다음의 두가지 방법이 있다.
    • noweb을 이용하는 방법
    • CWEB을 이용하는 방법

    2.1.1 noweb 을 이용하는 방법

    nowebLaTeX 을 이용할 수 있도록, 또 여러가지 프로그래밍 언어를 사용할 수 있도록 변경한, WEB 이다. 실제로 LaTeX 을 사용하기 위해서는 noweb 을 사용하는 것이 정답이라고 볼 수 있다.
    • 장점 : 스타일 파일만을 제공함으로서 기존의 클래스들과 혼용하여 사용하는 것이 가능하다. 여러가지 프로그래밍 언어를 제공한다.
    • 단점 : nawk 등 다른 유틸리티를 사용하여 소스를 컴파일 하게 되므로 직관적이지 않은 설치과정이 필요하다. 기존의 CWEB 언어와는 조금 다르다.

    2.1.2 CWEB 을 이용하는 방법

    CWEB은 LaTeX을 이용한 방법도 있지만, LaTeX을 이용하려면, noweb을 권장한다.

    CWEB으로 작성된 w 파일을 기반으로 한다. cweb.cls 라고 하는 클래스 파일이 있으므로 이를 이용하게 된다.
    • 장점 : 기존의 w 파일들을 몇가지 변경함으로서 LaTeX 상에서 사용이 가능하다.
    • 단점 : 클래스 파일만을 제공함으로서 본격적인 확장이 거의 불가능 하다. 예를 들어서 메모아와 같이 사용하기 위해서는 클래스 파일인 cweb.cls 를 .sty 파일로 변경해야 하는데, 이 노력은 거의 무의미 하다고 생각이 된다.

    2.1.3 기타 자료

    LaTeX에서 CWEB 프로그래밍을 위한 방법이 설명되어 있다.

    2.2 PlainTeX을 이용한 문학적 프로그래밍

    • CWEB
    • CTWILL: 주로 책을 만드는 경우에 이용된다.
    • [http]Rambutan: 프로그래밍 언어로 Java를 사용한다는 것만 빼면 CWEB과 모든 것이 동일하다.
      • javaweave(CWEB의 cweave에 해당) 출력 포멧이 CWEB과 똑같다.
      • 하지만 한글과 북마크가 안된다.
      • Java 프로그래밍을 이용하여 문학적 프로그래밍을 할 때는 noweb을 추천한다.

    ^
    Valid XHTML 1.0! Valid CSS! powered by MoniWiki
    last modified 2006-07-17 12:03:48
    Processing time 0.0574 sec