영화 매트릭스에서 각성한 네오가 매트릭스 세계를 볼 때 코드로 보이는 장면이 있다. 나는 이 장면이 참 잘 만들어졌다고 생각하는데, 코드에 익숙해지면 네오처럼 코드만 봐도 만들어질 디자인이 보인다.
나는 디자이너이자 개발자이다. 즉, 하이브리드형 작업자인데, 개발에는 지난 5년간 Flash를 사용해서 인터랙티브한 웹사이트를 만들었다. 지금은 HTML5와 Javascript를 주로 사용하는 Google의 Senior UX Engineer로 일하고 있다. Flash 개발자에서 쉽게 HTML5/Javascript 개발자로 바뀔 수 있었던 것에는 내가 가진 작업 철학이 큰 도움이 되었다.
고등학교를 졸업할 당시 나의 희망직업은 영화의 미니어처 등에 쓰이는 모형을 만드는 장인이었다. 그때 내 재능에 대해 진지하게 스스로 반문을 해본 적이 있다. 모형을 만드는 장인이 되려면 처음부터 모형을 직접 빚어내고 완성을 해야 한다고 생각했는데 나는 그러지 못했다. 내 실력은 이미 만들어진 모형을 사서 조립하고 색칠하는 수준밖에 되지 않는다는 것을 깨달았다. 즉, 취미로는 훌륭할지 몰라도 직업이라고 말하기에는 부족했다. 내가 그 분야의 진짜가 되기 위해선 본질이 되는 작업이 가능해야 한다고 생각했다. 개발의 본질은 개발코드를 사용해 구조를 설계하고 움직임을 만드는 일이다. 코드에 대한 이해가 없이 툴(Tool)이나 라이브러리(Library)만을 사용해 결과물을 만드는 것은 시중에서 모형을 사다가 조립하고 색칠만 하는 취미 정도의 수준과 다르지 않다는 생각이었다.
Flash는 누구나 모션을 만들 수 있도록 타임라인 기반의 오소링 툴(Authoring Tool)을 제공하고 있다. 이 툴을 이용하면 코드를 몰라도 손쉽게 애니메이션을 만드는 게 가능하다. 이것이 개발 코드에 서툰 디자이너들에게도 Flash가 인기 있었던 이유 중 하나였다. 그래서 많은 작업자가 Flash의 편리한 기능인 툴을 사용해 버튼의 움직임이나 세밀한 모션 등을 만들었다. 모두가 편리한 방법을 찾을 때 나는 어렵고 시간이 걸려도 개발 코드만을 이용해서 움직임을 만들려고 노력했었다. Flash라는 프로그램의 특정 기능에 의지하지 말고 개발의 본질인 ‘코드’를 이해해야 한다고 생각해서였다. 그렇게 쌓인 ‘코드 애니메이션’의 노하우는 오소링 툴이 없는 HTML 작업에서도 쉽게 JavaScript를 이용해서 인터랙티브한 결과물을 만들 수 있는 바탕이 되었다.
라이브러리도 마찬가지 부분이다. 라이브러리는 '개발에 필요한 특정 기능을 미리 구현해둔 소스 파일'로 잘 사용하면 개발 시간을 단축할 수 있는 유용한 도구이다. 하지만 코드에 대한 이해 없이 라이브러리에만 의존하는 것은 피해야 한다. 하지 않는 것과 할 수 없는 것엔 큰 차이가 있다. 라이브러리를 사용하는 것이 문제가 되진 않는다. 문제는 라이브러리를 사용해 만들어진 결과물이 자신의 실력이라고 생각하는 경우이다. 그때 본인의 실력에 대해 거짓말을 하게 되는데, 컬렉터(Collector)가 되기 쉽다. 컬렉터란, 실력을 쌓는 데 시간을 쓰기보단 라이브러리를 수집하는데 더 많은 시간을 보내는 사람들을 말한다. 이런 습관은 처음엔 괜찮을지 몰라도 시간이 지날수록 자신을 옭아매는 덫이 된다.
본질에 대한 나의 작업 철학은 구글에서도 빛을 발했다. 처음 구글에서 했던 작업은 더 나은 구글 웹사이트를 위해 프로토타입을 만드는 일이었다. 보통은 프로토타입 작업을 위해 편리한 프로토타이핑 툴이나 다른 사람이 만들어둔 라이브러리를 사용한다. 하지만 나는 어떤 툴이나 라이브러리를 사용하지 않고 네이티브 언어인 JavaScript 코드만으로 프로토타입을 만들었다. 이미 누군가 만들어둔 코드를 사용하는 것이 아니라 각각의 디자인에 최적화된 코드를 만들어서 성능을 높였다. 결과적으로는 이런 나의 작업 철학이 모바일에서 부드러운 움직임을 위한 해결책을 생각해내는 원천이 되었고, 2014년 구글 I/O에 소개되기도 했다.
요즘 많은 사람들이 개발을 배울 때 프로토타이핑 툴로 시작을 한다. 처음 시작을 쉬운 도구를 사용하는 것은 좋은 방법이지만, 거기서 멈추면 더 이상 발전을 할 수 없다. 어느 정도 개발에 익숙해지면 그 후에는 툴이 아닌 코드를 사용해서 작업을 만들기를 바란다. 툴이나 라이브러리는 분명 편리한 점이 많지만, 실질적인 코드에 대한 이해가 낮아지고, 툴에서 제공하는 한정된 기능만을 사용할 수 있다는 단점이 있다. 툴의 기능이 아무리 뛰어나고 그것을 100% 이해하고 사용한다고 해도 한계가 있다. 툴이나 라이브러리도 결국에는 코드로 만들어진 것들이다. 어려워도 툴의 도움 없이 개발의 본질인 코드를 이해하고 사용한다면 더 넓은 시야를 가질 수 있고, 다른 개발 언어로의 전환도 쉽게 할 수 있다.
인터랙티브 디벨로퍼 중에서
코드로 만드는 애니메이션에 대한 요청이 많아서 책으로 쓰고 있는데, 글을 쓴다는 것은 수명을 갉아먹는 일이라는 걸 새삼 다시 느끼고 있다.