프로그래밍으로 예술을 한다와 프로그래밍은 예술이다

극동잡기단 글 백업(east.senza.co.kr).

아래 글에서 그래픽 기반 프로그래밍 언어들을 몇 가지 소개했는데, 이 글을 쓰다보니까 '프로그래밍은 예술이다'라는 말을 몇 가지 층위로 나눠볼 수 있지 않을까 하는 생각이 들었다. 컴퓨터를 정의하는 많은 표현 중에 내가 가장 좋아하는 건 입력과 처리, 그리고 출력이다. 정확히 이 관점에서 프로그래밍이 예술이라는 말을 분류해볼 수 있다.

우선 그래픽 기반 프로그래밍 언어란, 출력 부분이 예술인 경우에 해당한다. 실제로 액션스크립트나 자바스크립트 같은 언어는 일부에서는 꾸준한 인기를 누렸지만 컴퓨터 공학이라는 전공에 빗대어 볼 때는 상당히 무시당했다고 할 수 있을지도 모르겠다. 컴퓨터 과학에 빗대어 뭔가 대단한 주제가 있는 것도 아니요, 게다가 스크립트 언어의 특성상 사람들은 이 언어들을 아주 자유분방하게 사용해왔다는 것도 문제다. 이게 특히나 순차처리에서 절차지향 , 그리고 이젠 객체지향이라는 패러다임으로 달려나가고 있는 프로그래밍 언어의 시각에서 본다면, 발코딩이 가능하다는 것만으로 이미 이 최악의 언어인 셈이다. 특히나 자바스크립트는 사용하는 사람이 오해하고 있고, 사용하지 않는 프로그래머들이 오해하고 있는 대표적인 언어로 얘기되곤 한다. 하지만 내 생각에 그건 잘못된 얘기라고 생각한다. 적어도 사용하고 있는 사람들이 오해하고 있다고 하는 건 나쁜 표현이다. 자바스크립트는 프로그래밍 언어로서 얼마나 훌륭한지가 사용자들에게 중요한 건 아니었다. 자바스크립트나 액션스크립트가 정말로 사람들에게 어필했던 부분은 얼마나 훌륭한 프로그래밍을 할 수 있는지가 아니라, 이 도구를 이용해 내가 무엇을 표현할 수 있는지였다고 할 수 있다. 그리고 바로 그 점에 있어서 훌륭했다. 오해 받아온 언어가 아니라, 그렇게 사용되는 게 가장 좋았던 걸지도 모른다는 거다. 프로그래밍과 전혀 관계없는 사람들이 관심을 가지는 게 대부분의 경우 출력 부분이 예술인 언어들인 것도 주목할만 하다. 그런 면에서 이 언어들은 좀 더 다른 기준으로 평가받아야할지도 모른다. 예술이라는 말이 좀 거창할지도 모르겠는데 그냥 표현 수단을 의미한다. 그래픽 언어는 아니지만 동적 html 생성을 주 목적으로 삼았던 php도 그렇고 자바스크립트도 그렇고, 액션스크립트도 그랬던 거 같다.

"플래시는 움직임을 표현하는 도구입니다"

이 말은 플래시를 일주일 정도만 공부한 사람이라면, 아니 플래시를 공부해야겠다고 마음먹은 사람조차도 알고있는 너무나도 당연한 말입니다. 하지만 많은 사람들이 특히 플래시를 1년 이상 공부한 사람들 중 상당부분이 이러한 정의를 잊어버리고 다른 부분에 자신의 역량을 집중하는 것 같습니다. 플래시가 다른 미들웨어와 연동이 되면서 마치 플래시와 DB를 연동할 수 있는 사람이 플래시를 잘하는 사람으로 인식되어 움직임을 무시한 채 연동에 관련된 것들만 공부하는 사람들이 늘어나고 있고, 플래시 액션스크립트를 프로그램으로만 인식한 채 객체지향(OOP)의 깊숙한 개념들을 공부하는데 많은 시간을 투자하는 사람이 늘고 있습니다. 신명용1

그러고 보면 존 마에다 씨도 자신의 저서에서 비슷한 얘기를 하셨다.

As I watched the instructor teach the finer points of object-oriented programming and bit masking of 24-bit color values, I quickly became lost in all the gibberish. I asked the instructor why he taught the subject this way. His quick answer was, "I teach it the right way, not watered down in any sense." I immiediately came to the conclusion that I'd rather teach it wrong way.

객체지향이나 24bit 컬러의 비트 마스킹을 가르치는 강사를 보았을 때 당황스러움을 느꼈다. 그 강사에게 왜 이 주제들을 이런 식으로 가르치느냐고 묻자 그는 "난 빠뜨리는 것 없이 올바르게 가르치고 있는 거예요"라고 답했다. 나는 곧바로 차라리 내가 잘못 가르치는 게 낫겠다고 결론지었다.2

하지만 지금은 갈수록 출력 영역을 통한 표현보다 프로그래밍 언어로서의 가치를 더 중시하고 있는 것 같다. 예를 들어 새로 나온 (이젠 이것도 오래된 것 같지만) 액션스크립트 3.0은 신명용 씨 이야기를 가볍게 뛰어넘어 객체지향에 이해없이는 제대로된 프로그래밍을 할 수 없다고 못 박고 있다. 어쨌든 프로그래밍으로 예술을 한다고 하면 보통 이 영역을 일컫는다.

그리고 정반대의 위치에 입력 부분이 예술인 경우가 있다. omoikane 님 코드 갤러리를 보면 어떤 부분인지 쉽게 이해할 수 있을 것 같다. 코드를 보면 알겠지만 이건 단순한 아스키 아트와는 조금 다르다. (아 맨 앞에 계신 건 어떤 과학의 초전자포 진히로인 우이하루 양이 아닌가.... +_+)

IOCCC, Obfuscated code, Anarchy Golf, Esoteric programming language.... 아마 내가 이런 단어들을 처음 들었던 건 아마도 강성훈 님 사이트였던 걸로 기억한다.

일반적으로 obfuscation이라는 단어는 어떤 것을 난해하게 한다는 의미로, 컴퓨터 프로그래밍에서 obfuscation은 코드를 최대한 해석 불가능하게, 그리고 코드 자체의 의미 말고도 다른 의미를 가질 수 있도록 만드는 일을 통틀어서 이르는 말입니다. 이 갤러리를 둘러 보시면서 obfuscation의 재미를 느끼실 수 있길 바랍니다. :)

문학 장르로 따지면 시라고 할 수 있을지도 모르겠다. IOCCC는 괴짜 프로그래머들의 백일장. 실용가치는 별로 없어보이지만, 코드 자체를 표현 수단으로 삼고있다. 이건 두 가지 관점으로 볼 수 있는데, 하나는 단순히 코드를 어렵게 만들겠다는 이유와, 또 하나는 코드로 무언가를 표현하기 위해서 코드의 가독성을 희생하는 거다. 출력결과가 이런 노력들을 더 재미있게도 하지만, 반드시 그게 가장 중요한 건 아니다. 그런 재미. 그런 예술.

그리고 마지막으로는 입력도 출력도 예술로 보는 경우가 있다. 이건 딱히 Obfuscated code(입력 부분이 예술)로 그래픽 프로그램(출력 부분이 예술)을 만들어낸다는 의미는 아니다. 논리 연산자 and가 아니라 '종합적으로'라는 맥락에서 그렇다. 예를 들어 The Art Of Computer Programming이라는 책이 알고리즘 책이었다는 걸 생각하면, 아인슈타인이 '나는 내가 세계를 이해한다는 게 가장 신기하다'라고 말했듯이 '과학이 예술이다'라는 시각에 가장 맞닿아 있을지도 모르겠다. 즉 프로그램 자체가 가지고 있는 논리적 완결성을 예술로 보는 셈이다. 그리고 소프트웨어 공학은 수많은 규모와 목적에 따른 논리적 완결성을 위한 적절한 작문법을 제시한다. 프로그래머에게 프로그래밍이 예술이라고 말하면 이게 가장 일반적인 걸지도 모르겠다. 그리고 정확히 그렇기 때문에 '프로그래밍으로 예술을 한다'는 한다는 표현을 아주 가볍게 빗겨나 버린다. 단순히 출력 영역 만의 표현성이란 프로그래밍이 예술로 승화되는데 중요한 요소는 아닌 셈이다. 여기엔 프로그래밍 언어가 기계와 사람이 아닌 컴퓨터 과학과 세계 사이의 의사소통 수단이라는 생각이 깔려있는 걸지도 모른다. 이런 부분이 꽤나 큰 세계관의 대립을 낳지 않나 하는 생각도 들기는 하지만...

아무리 예술적인 프로그래밍을 할 수 있는 프로그래머라도 프로그래밍으로 예술을 할 수 있는 거랑은 다르다. 물론 프로그래밍으로 예술을 한다고 해서 예술적인 프로그래밍을 할 수 있다는 것도 아니고... 그런 차이.


  1. 플래시 MX 액션스크립트 1, 473p, 신명용 저, 제우미디어 

  2. Design by Numbers 252p, John Maeda  


Who am I?