ZAMM의 낭만적/고전적 이해를 빌려, 감각에서 출발해 컴퓨터와 소프트웨어를 바라보는 여러 층위를 대비하고, 사용자와 개발자 사이의 긴장을 산과 산길의 비유로 풀어내며 더 나은 소통과 설계의 방향을 제안한다.
게재일: 2024년 8월 22일
마지막 업데이트: 2025년 1월 2일
페드루스가 사용한 ‘고전적(classic)’과 ‘낭만적(romantic)’이라는 용어는 다음을 의미한다:
고전적 이해는 세계를 주로 기저의 형식 그 자체로 본다. 낭만적 이해는 세계를 주로 즉각적인 외양으로 본다.
나는 최근에 Zen and the Art of Motorcycle Maintenance를 읽고 있다. 컴퓨팅, 프로그래밍, 소프트웨어 개발과 관련된 주제로 여러 사람과 대화를 나누면서, 그 책에서 얻은 몇 가지 가르침이 우리 모두에게 도움이 되겠다는 생각이 들었다.
이 글은 숙련된 소프트웨어 엔지니어라면 경험으로부터 이미 직관적으로 알고 있는 것들을 좀 더 논리적으로 설명한다. ZAMM을 읽으면서 나는 그 직관을, 1001가지 상황과 예시를 줄줄이 늘어놓아 상대가 “아하!” 할 때까지 기다리지 않고도 남에게 전할 수 있는 방식으로 정리하는 법을 깨달았다.
낭만적/고전적 관점을 탐구하기 전에, 먼저 인간에 관한 한 가지를 이야기하자. 이는 이후의 분석을 돕는다. 처음엔 너무 원시적으로 느껴질 수 있지만, 계속 읽어 보길 권한다. 이런 표현이 편하다면, 우리는 일종의 제1원칙에서 출발하는 셈이다.
인간은 감각을 통해 환경을 처리한다. 여러 감각 체계가 정보를 수집하고, 그 정보는 신호로 변환되어 뇌에서 해석된다. 감각 체계의 민감도는 사람마다 다르다. 어떤 이는 시각을, 어떤 이는 청각을 더 선호한다. 누군가는 특정 감각을 사용할 수 없고, 누군가는 여러 감각의 정보를 섞어 세상을 더 풍부하게 해석한다. 하지만 누구나 감각을 쓴다.
감각의 관점에서 컴퓨터가 무엇인지 살펴보자. 완벽히 잘해내진 못하겠지만, 그 자체로 흥미로운 연습이다.
방금 한 것은 컴퓨터를 낭만적 이해로 바라보는 연습이다. 이는 환경을 즉각적으로 해석하는 이해 방식이다. 다시 말해, 감각에 가장 가까운 수준에서 컴퓨터를 본 것이다.
낭만적 이해에서 더 나아가기로 했다면, 각 물건을 더 자세히 들여다볼 수 있고, 자연스럽게 그것들을 더 작은 물건들로 나누기 시작할 것이다. 새로운 것들도 발견한다. 이제부터는 글의 집중도를 위해 이름을 조금 사용할 것이다. 이름에 대해서는 나중에 다시 이야기하겠다.
이것이 컴퓨터의 한 가지 밑바탕 형식이다. 다른 관점도 보자:
일부러 이해하기 조금 어렵게 썼다. 하나를 더 본 뒤 곧바로 요점을 말하겠다.
지금까지 한 일은 컴퓨터를 고전적 이해로 보는 것이었다. 이 관점은 낭만적 이해에서 출발할 수 있지만(첫 번째 연습처럼), 곧 감각에서 완전히 멀어져 논리적 형식 과 논리적 구조 그리고 우리가 “컴퓨터”라고 부를 수 있는, 상상 속의 거대한 것들로 들어간다. 컴퓨터는 낭만적 이해만큼이나 이러한 다른 형식들에 의해서도 정의된다.
두 번째 연습은 여전히 낭만적 관점과 어느 정도 연결돼 있었지만, 세 번째 연습은 완전히 감각에서 이탈했다. 우리는 소프트웨어를 감각할 수 없다! 볼 수도, 만질 수도, 들을 수도 없다… 소프트웨어는 전적으로 우리의 마음속 구성물이다. 굳이 “물리적 형태”를 찾자면, 어떤 장치의 트랜지스터에 저장된 전하나 자기적 패턴 정도겠지만, 우리는 그것들조차 감각할 수 없다.
이 모든 (말 그대로, 감각할 수 없는) 난센스를 이성적으로 다루기 위해, 고전적 사고가 사용하는 도구가 ‘표상’이다. 그리고 또 다른, 많은 짐을 대신 들어주는 도구가 ‘이름’이다.
두 번째와 세 번째 연습의 서술을 비교해 보자. 두 번째에서는 의도적으로 이름을 많이 쓰지 않으려 했다. 반면 세 번째에서는 아끼지 않았다. “코드”, “장치”, “운영체제”, “드라이버”, “소프트웨어”, “라이브러리”. 두 번째 연습의 설명이 훨씬 이해하기 어려웠던 주된 이유는 이름의 결핍이다. 그러나 세 번째 연습은, 그 이름들이 실제로 무엇을 뜻하는지 모르면 아예 이해할 수 없다.
소프트웨어 개발 과정 전반에는 소프트웨어 개발자와 사용자, 그리고 고객 지원, 제품 관리자, 기술 문서 작성자, UI/UX 디자이너, 심지어 임원들까지 모든 중간자 사이에 많은 긴장이 존재한다. 이 긴장은 소프트웨어가 개발되는 동안에도, “출시”되었지만 어느 쪽의 기대에도 못 미칠 때도, 고장 날 때도, 제거될 때도, 심지어 제대로 작동할 때도 나타난다.
이 긴장은 종종 “다른 사람들이 소프트웨어를 전혀 이해하지 못한다”는 개발자들의 실망으로 관찰된다.
이 긴장을 분석하려면, 소프트웨어 개발자는 고전적 사고의 바다에 빠져 있고, 사용자는 컴퓨터와 소프트웨어를 낭만적으로 이해하는 데 가장 가까운 인간이라는 점을 이해해야 한다. 다른 모든 중간자는 그 둘 사이의 선위 어딘가에 있다.
얼마 전 레딧에서 오래된 이야기를 읽었다. 어떤 사람이 컴퓨터가 제대로 작동하지 않는다고 컴퓨터 가게에 전화를 걸었다. 가게의 기술자는 전형적인 “꺼졌다 켜 보셨나요”를 시도했지만 아무 소용이 없었고, 결국 그 사람에게 컴퓨터를 가게로 가져오라고 했다. 그 사람은(몇 년 전 이야기라) 엄청 무거운 컴퓨터를 들고 버스를 몇 번 갈아타고 가게에 왔는데, 가져온 건 이것 하나뿐이었다. 그리고 그 사람을 제외한 모두가 박장대소했다.
웃긴 이야기지만, 내가 말하고자 하는 바를 잘 보여준다. 사용자는 우리가 소프트웨어를 감각하는 것에 가장 가까운 존재다. 여기서 사용자 는 일반명사다. 어떤 소프트웨어가 하는 일을 전혀 모르는 동료 개발자조차 사용자일 수 있다.
그 긴장을 설명하는 단서 하나는 “전혀 감이 없다”라는 말이다. 소프트웨어를 고전적으로 이해하지 못하면, 우리에게 남는 것은 오직 감각뿐이다.
또 다른 단서는 컴퓨터의 세 가지 형식을 보여 주었던 세 가지 연습에서 온다. 고전적 이해의 관점에서 소프트웨어를 “보는” 방법은 너무도 많아서, 그 산에는 온갖 길이 나 있다. 그중 각각의 길은 고전적 관점으로 본 소프트웨어의 서로 다른 한 단면이다.
그 단서들을 합쳐 보면, 소프트웨어와 사용자 사이에 긴장이 생기는 것이 분명해진다. 소프트웨어는 낭만적 세계에서 너무 멀리 떨어져 버렸고, 그중 일부를 이해하려 해도 그 산길을 여러 해에 걸쳐 탐색해야 한다.
심지어 소프트웨어 개발자들도 모든 길을 다 가 본 것은 아니며, 그들 스스로 새로운 길을 개척하는 경우가 많다. 그런데도 그들은 산 아래에 있는 다른 이들을 내려다보며, 길이 너무 가파르다 보니 어디로 가야 할지 모르는 사람들을 본다. 개발자들은 정상으로 가는 길이 자명하다고 생각하고, 남들도 똑같이 하길 기대한다. 그 지점에서 긴장이 생긴다.
하지만 노력만으로는 사람들을 더 높은 곳으로 데려올 수 없다. 자칫하면 높이가 전혀 변하지 않는, 산의 다른 면으로 이어지는 길만 따라가게 될 확률이 크다.
검색 기능을 만드는 팀을 상상해 보자. 가장 기본적인 형태는 사용자가 찾고 싶은 것을 입력할 수 있는 검색 상자가 있고, 입력이 끝나면 결과가 제시되는 것이다. 결과가 없을 때는 결과가 없다는 메시지를 보여 준다.
이 기본 형태는 보통 하나의 API 엔드포인트로 구현되며, 검색에 시간이 조금 걸려도 괜찮다(예: 0.2초에서 1초 사이).
하지만 사용자 경험은 그다지 좋지 않다. 그 이유는 사용자가 소프트웨어를 감각하는 데 가장 가까운 존재라는 점과 연결돼 있다.
아마 이후에 소프트웨어 엔지니어와 팀의 다른 구성원(디자이너, 제품 관리자, 혹은 사용자) 사이에 오갈 대화를 굳이 상상해 달라고 하지 않아도 될 것이다. 대부분의 사람이 이미 비슷한 일을 겪어 봤을 테니.
처음에는 문제의 존재 자체를 부정하는 경우가 많다. 소프트웨어 엔지니어에게는, 검색 결과가 없다는 건 검색어에 오타가 있을 가능성을 시사한다는 게 너무나 자명하다. 그들은 산속의 길을 본다. 그 길을 자신들이 만들었기 때문이다. 어디에서 시작해 어디로 이어지는지 안다. 이것이 한쪽 끝의 긴장이다.
하지만 다른 쪽에서도 긴장이 온다. 다른 구성원들의 코멘트와 요청에서다.
“어떤 단어에 오타가 있으면, 사용자에게 ‘혹시 <올바른 단어>를 의미하셨나요?’라는 다른 메시지를 보여주면 되잖아요.”
“사용자가 글자를 하나 칠 때마다 가능한 검색어 또는 결과를 보여주자고요. 굳이 전체 쿼리를 다 입력할 때까지 기다릴 필요 없죠.”
효과를 위해 위 문장에 “그냥”을 붙였지만, 없더라도 긴장은 여전하다. 이는 고전적 이해의 부족에서 온다.
“엔지니어가 ‘결과가 없습니다’ 메시지를 붙이는 데 몇 분밖에 안 걸렸는데, 왜 ‘올바른 단어를 묻는’ 메시지를 넣는 데는 훨씬 오래 걸린다고 하는 거죠?”
“사용자가 글자를 칠 때마다 결과를 보여줘야 한다고 하니 왜 호들갑이죠? 좀 더 빠르게 만들 수 없는 건가요?”
전체 그림을 보면, 산 위쪽에 있는 사람들이 아래 사람들에게 그곳으로 올라오라 하고, 산 아래쪽에 있는 사람들은 위쪽 사람들이 다른 경로를 찾아 달라고 한다. 단순한 예시이긴 하지만, 사람들 사이의 거의 모든 상호작용에서 이런 미묘한 긴장이 모습을 달리해 나타난다.
순수한 고전적 사고의 관점에서 최고의 결과는, 산 아래에 있는 사람들이 더 잘 보이도록 산을 올라오게 돕는 것이다. 일이 이렇게 풀리면 만족감이 크다. 사람들은 새로 얻은 지식으로 힘을 얻고 자신감이 붙는다. 하지만 현실적으로는 비효율적이라 자주 함정이 된다. 산을 오르려면 노력, 의지, 시간이 필요하고, 대부분의 사람은 그중 하나 이상이 부족하다.
그래서 우리는 여전히 좋은 결과이면서 성공 확률이 훨씬 높은 방식을 택할 수 있다. 가능한 한 가장 낮은 곳에서 그들을 만나는 것이다. 때로는 그들이 있는 곳보다 한 단계 더 내려가, 더 깊은 이해를 요구하지 않으면서도 그들이 이해할 수 있는 말로 이야기하기 위해 필요한 지식을 쌓아야 한다. 결국 우리 모두 감각이 어떤 것인지 안다. 최악의 경우, 감각에서부터 시작할 수 있다.
공통의 층위에 도달하면, 그들과 함께 위를 올려다보며 산을 보게 한다. 길을 보여 줄 필요는 없다. 산을 보여 주기만 하면 된다.
실무적으로, 이는 엔지니어가 다른 구성원들과 그들이 이해할 수 있는 방식으로 소통해야 함을 뜻한다.
어떤 엔지니어는 이걸 좋아하지 않는다. 그들에게 스릴은 산을 오르는 데 있기 때문이다. 하지만 일은 그보다 훨씬 많은 것을 포괄한다는 사실을 아직 배우지 못했을 뿐이다.
또 어떤 이들은 그동안 산을 오르느라 들인 노력을 생각하면, 이런 일을 하는 것이 모욕처럼 느껴진다. 그런 이들은 지금 자신이 있는 산만 보지 말고 시야를 넓혀 다른 산들도 보아야 한다. 자신이 산 위에 있다는 사실조차 아직 모를 수도 있다.
이 글 전체는 사람들이 자주 되뇌는 문장을 길게 풀어 쓴 버전이다. 사용자에 대한 공감을 가져라, 다른 구성원과는 쉬운 말로 소통하라, 다른 이들이 더 나은 결정을 내릴 수 있도록 더 자세히 설명해 힘을 실어 주어라, 등등. 우리는 이런 것들을 ‘지혜’로 포장하고, 사람들이 그 의미를 실제로 이해하도록 예시나 실제 상황을 곁들인다. 여기에 낭만적 사고가 많이 들어 있다.
내가 ZAMM을 좋아하는 이유는, 그런 예시와 상황 속에서 무슨 일이 더 깊이 일어나는지 이해할 수 있는 도구를 제공하기 때문이다. 패턴을 보기 시작하면, 이전에 겪어 보지 못한 상황에서도 이를 식별하기 쉬워진다. 이는 누적되는 학습이며, 우리가 의지할 수 있는 학습이다.
이제, 처음 그 연습으로 돌아가 컴퓨터 주변기기가 전부 무선이라고 상상해 보자. 감각으로 부품들을 구별할 수 없다면, 시스템의 더 나은 그림을 어떻게 그리기 시작할 수 있을까? 과학적으로 접근하지 않으면 불가능하다고 생각한다. 대부분의 사람에게 그 시스템은 여전히 마법처럼 느껴질 것이다. 마법과 구분되지 않는다.
소프트웨어는 감각적 토대가 없기 때문에, 사전 지식 없이 접근하는 사람들이 느끼는 감정이 딱 그렇다. 구성 요소를 감각으로 식별할 수 없다면, 어떻게 더 배우기를 기대할 수 있을까? 소프트웨어는 대부분의 사람에게 마법의 왕국에 머물 것이다.
그리고 무엇이 더 걱정스러운지 모르겠다 — 대부분의 사람이 마법을 다루는 데 별로 불편함을 느끼지 않는다는 사실인지, 우리가 그것을 더더욱 마법으로 만들고 있다는 사실인지.
우리는 정기적으로 그 산들 자체, 특히 소프트웨어와 컴퓨팅의 산을 바라보고 접근성을 분석해야 한다. 우리가 그 산에 만들어 놓은 길들은 매우 좁고, 하단의 가지도 거의 없다. 그 산은 초심자에게 친절하지 않지만, 모두의 삶 속에 존재한다. 커다랗고, 수수께끼 같고.
사람들이 이 산을 즐기려면, 우리는 더 많은 길, 더 나은 길을 만들지 않았고, 전망대도 너무 높은 곳에 지어 버렸기 때문에 대부분 극단적으로 높은 곳까지 올라야 한다. 우리는 이보다 잘할 수 있다. 이미 만들어 둔 어떤 길을 포기해야 할 수도 있겠지만, 어차피 그 길들은 불안정하고 위험하다. 시선을 돌리면 훨씬 더 좋은 땅이 있다.