Interpreting Compiler

새로운 외국어

by

웃기는 얘기일지도 모르겠지만, 자바스크립트라는 게 어떤 건지 처음 배우면서 들었던 생각은 '아, 자바스크립트로 기사를 써보고 싶다'는 것이었다. 1월에 '작심삼일'이란 사흘짜리 입문자용 코딩 강좌를 듣던 때였다. 기억에 남았던 한 문장이 있다. 조건문과 반복문, 그리고 함수에 관한 얘기였다.

"조건문은 프로그램을 똑똑하게 만들어주고, 반복문은 강력하게, 함수는 경제적으로 하도록 도와준다."

하나의 프로그램은 기본적으로 조건문과 반복문과 함수로 구성된다. 물론 변수도 정의돼야 하고, 나중에 쉽게 파악하기 위해 주석도 달아야 하는 등 갖가지 다른 요소들이 포함되긴 하지만 그건 모두 부차적이다. 마치 우리의 대화가 '주어와 서술어'로 구성되고 나머지 모두가 다 부차적인 것처럼.

프로그래밍은 기계와 인간 사이의 대화다. 주어는 필요없다. 어차피 내가 하는 말을 기계가 듣는 관계라서다. 이 대화에선 다른 사람의 말을 옮기는 경우가 없다. 심지어 남의 코드를 베껴다 붙여넣는다 해도 그건 기계 입장에서 볼 땐 논리적으로 나의 발화(發話)다. 따라서 이런 대화에선 일반적인 사람 사이의 대화처럼 주어의 의미가 없다. 내가 할까, 네가 할까, 남이 할까 대신 "몽땅 다 네가 하는데 이렇게 해라"는 식이라서 서술어가 복잡해진다. 특정 조건을 판단해서 움직이고, 필요하면 반복해서 움직이며, 복잡한 일은 함수로 따로 만들라는 것이다. 그러니까 우리의 삶에서 '나를 사랑해주는 사람이 나타난다면 나는 매일 아침 그 사람에게 노른자를 반숙으로 익힌 계란후라이를 부쳐줄거야'라는 대화가 있다고 가정해보자.

1. '널 사랑해주는 사람이 나타난다'는 조건이 참인지 거짓인지 구분해서(조건문) 2. 거짓이면 다시 1로 돌아가고, 참이면 '계란후라이 부치기'라는 함수를 실행(함수), 3. 2 함수를 실행한 뒤 다시 1 조건으로 돌아가서 그 사람의 사랑이 지속되는 한 2를 매일 아침 반복 실행(반복문)

무미건조하고, 문장도 아니지만 이게 if와 function과 for/while 등의 짧은 명령어 몇 개로 만들어낼 수 있는 컴퓨터의 언어고 '코드'의 기본이다. 그리고 여기엔 다른 해석의 여지가 없다. 문제가 생긴다면 코드를 짠 코더의 실수일 뿐, 기계는 입력받은 그대로를 실행할 뿐이다.  그러니까 사람 사이의 언어와는 달리 사람과 기계 사이의 대화에는 오해가 없다. 다만 발화자가 처음에 제대로 말을 못 했을 뿐이다. 컴퓨터란 일반적인 시각에서 보면 시종같지만, 자기가 듣고 싶은 방식대로만 세상 모든 걸 알아듣고 이해한다는 점에서 보면 사실 인간이 기계의 시종일는지도 모른다.

얼마 전에 기자협회보에 비슷한 내용의 칼럼을 썼다.(그리고 엉망이지만, 자바스크립트도 썼다.) 주제는 기자들도 코드가 뭔지 공부하자는 뜻이었지만 사실은 기계가 이해하는 세상과 그 언어에 익숙한 사람들의 세상을 이해하지 못한 상태에서 기술이 지배하는 세상을 살아간다는 게 쉽지 않을 뿐더러, 아마도 위험할지도 모른다는 얘기가 하고 싶었다.

자동차를 운전한다는 건 완전히 새로운 기능이었지만 이제 현대사회를 살아가는 사람들이 갖춰야 할 최소한의 교양이 됐다. 남한 같은 개방 사회에서는 알파벳을 읽을 줄 알고 간단한 영어 몇 마디 정도 하는 게 사회적으로 요구되는 기능이 됐다. 이제 산업이 고도화된 국가에서는 코드를 이해하는 능력도 운전이나 영어 같은 기능이 되는 게 아닐까?

[youtube http://www.youtube.com/watch?v=dU1xS07N-FA]

처음 운전을 배울 땐 굉장히 어렵다. 나도 면허시험장에서 1단으로 시속 10km를 내는 자동차를 처음 몰 때 그 '속도감'에 두려워 했던 기억이 난다. 하지만 지금은 규정속도를 훨씬 넘는 운전도 가끔 한다. 실력에 대한 과신이 오히려 문제가 될 정도로. 코드도 다르지 않을 것 같다. 난 마이클 슈마허가 아니지만 차를 몰고 이동의 자유를 누린다. 영어를 네이티브로 하는 미국인이나 영국인도 아니지만 영어를 이용해 일도 하고 여행도 다닌다. 코드를 배운다는 것도 마찬가지가 아닐까 싶다. 마이클 슈마허나 네이티브 스피커가 되지 않는다고 해도, 그러니까 우리가 마크 저커버그나 빌 게이츠가 되지 않는다고 해도 코드를 배워두면 우리가 일상적으로 사용하는 앱과 인터넷 서비스의 기본 원리가 보이게 된다. 남의 손을 빌리지 않고도 간단한 문제는 해결하게 된다는 뜻이다. 또 내 반복 작업을 해결해 줄 소프트웨어적 도구를 만들어 단순 반복작업의 덫에서 벗어날 수도 있다. 프로그램의 원리만 알면 굳이 자바스크립트나 파이썬 같은 언어로 '완성된 프로그램'을 만들지 않더라도 여러 소프트웨어 도구를 쉽게 이해해 사용하면서 시간을 아낄 수 있다.

싫은 일은 기계에게 맡기고, 좋아하는 일만 사람들이 하며 살기도 바쁜 세상이다. 새로운 세상에서 쓰는 외국어 공부를 소홀히 해서 늘 통역만 부르고 살 수는 없는 노릇 아닐까. 통역은 비싸기도 하지만, 때로 부정확하기도 하고, 무엇보다 삶의 재미를 갉아먹는다.