프로그래머(programmer)와 개발자(developer)는 비슷하지만 동의어가 아니다. 코딩을 통해서 컴퓨터에게 원하는 일을 시킬 수 있으면 모두 프로그래머지만, 학교 숙제를 하거나 취미로 코딩을 하는 사람까지 개발자라고 부르지는 않는다. 회사에 다니지 않으면서 혼자 오픈소스 코드를 만들어내는 사람도 개발자가 아니다. 그는 프로그래머 혹은 해커에 가깝다.
개발자는 기업이나 큰 프로젝트에 속해서 다른 사람과 협업을 통해서 코드를 만들어낸다. 이러한 협업은 프로그래밍과 다른 차원의 원리와 원칙, 그리고 경험을 필요로 한다. 예컨대 프로그래머 혹은 해커를 강호를 혼자 떠돌며 칼을 쓰는 무사라고 한다면, 개발자는 거대한 군사 조직에 속한 정규군이다. 외톨이 무사에게 생명은 칼솜씨이고 정규군의 생명은 규칙과 규율이다.
코딩을 할 수 있는 인력풀을 이렇게 독자적인 프로그래머와 조직에 속한 개발자로 나누는 것은 이야기의 초점을 분명하게 하기 위해서다. 우리가 코딩이나 프로그래밍과 관련된 이야기를 할 때 생각하는 대상은 대개 프로그래머 일반이 아니라 개발자다. 이런 개발자들에게 요구되는 덕목은 다시 2개의 영역으로 나눌 수 있는데, 그것은 코딩 기술과 커뮤니케이션 능력이다. 필요한 구분이 이루어졌으니 본론을 이야기하자. 프로그래머에게 생명은 코딩 기술이고 개발자의 생명은 커뮤니케이션 능력이다.
이 말을 개발자의 코딩 실력은 중요하지 않다는 이야기로 이해하는 사람이 있다. 논리적 사고능력이 결핍된 반응이다. 정규군에 속해서 필요한 전투를 수행하려면 당연히 기본적인 체력과 무술 능력이 요구된다. 마찬가지로 개발자는 자기에게 주어지는 코딩 업무를 성공적으로 수행할 수 있는 능력을 가지고 있어야 한다. 그건 따로 이야기할 필요가 없는 기본이다.
그럼 개발자에게 생명에 해당하는 커뮤니케이션 능력은 무엇을 의미하는가. 그것이 무엇인지 설명하기 위해서 우선 무엇을 의미하지 않는지 살펴보는 게 도움이 된다.
- 다른 사람들 앞에서 준비한 슬라이드를 이용해서 발표하는 능력
- 논쟁이 벌어졌을 때 자기주장을 관철시키는 능력
- 고객을 설득해서 특정한 제품이나 서비스를 판매하는 능력
- 말을 아나운서처럼 또박또박 발음하는 능력
이런 능력은 개발자가 아닌 다른 종류의 직업을 가진 사람들에게 요구된다. 개발자가 이런 능력을 가지고 있으면 좋은 일이긴 하지만 개발이라는 본업과 관련이 없다. 여기에서 이야기하는 커뮤니케이션 능력은 이런 것이 아니라는 뜻이다. 개발자에게 생명인 커뮤니케이션 능력은 다음을 의미한다.
- 명확하지 많은 이야기 속에서 지엽적인 것을 걸러내고 본질을 파악하는 능력
- 복잡한 논리나 추상적인 개념을 상대방이 이해할 수 있게 설명하는 능력
- 타인의 감정을 이해하는 공감능력
이렇게 세 가지다. 하나씩 살펴보자. 우선 첫 번째인 본질에 접근하는 능력이다. 개발자 커뮤니티나 SNS에서 논쟁이 발생하는 일이 있다. 이럴 때 당사자는 물론 옆에서 구경하던 사람들이 반박과 재반박을 하며 논쟁을 끝없이 이어갈 때가 있다. 최초의 논점은 안드로메다 너머로 사라지고 수 천 수 만 갈래의 지엽적인 논쟁이 탄생한다. 그런 논쟁을 목격한 기억이 누구나 있을 것이다. 이런 시간낭비를 가능하게 만드는 엄청난 수준의 오독과 난독은 모두 커뮤니케이션 능력의 부재에서 비롯된다. 본질에 접근하는 능력이 결여되어 있기에 사소하거나 지엽적인 문제에 집중하며 감정을 소모한다.
둘째로 자기생각을 설명하는 능력이다. 이 능력이 부재하거나 결핍된 개발자가 현장에 놀라울 정도로 많다. 멀리 갈 것도 없이 가까운데서 예를 찾아보자. 프로젝트에 코드리뷰 절차를 도입해서 코드리뷰를 해보면, 자기가 30분 전에 완성한 코드의 흐름을 논리정연하게 설명하지 못하는 개발자가 많다. 내가 미국에서 오랫동안 개발을 하면서 경험한 바를 기준으로 (내 멋대로) 통계를 잡아보면, 뉴욕에 있는 개발자의 50%가 기준미달이다. 코드를 만들 수는 있어도 설명하지는 못하는 것이다. 언뜻 이해되지 않지만 현실이다.
끝으로 공감능력이다. 이 능력이 몹시 중요한 이유는, 개발자 중에서 코딩 실력이 뛰어나고, 본질을 파악하거나 자기 생각을 설명하는데 능숙한 사람이 남보다 빨리 승진을 해서 높은 자리에 올라갈 확률이 높기 때문이다. 이런 사람 중에서 절반은 불행하게도 공감능력이 결여되어 있다. 혹은 성공에 대한 욕망 때문에 공감능력이 억압되어 있다. 이런 사람 아래에서 일을 하면 정서적, 심리적으로 심각한 폭력에 시달린다. 공감의 부재는 폭력이기 때문이다. 코딩을 잘한다고 해서 조직을 맡기면 안 되는 이유다.
문제는 이런 사람은 스스로 자신의 결핍을 인지하지 못한다는 사실이다. 본질 접근 능력이나 설명 능력은 일을 하는 과정에서 부족한 점을 느끼는 경우가 많다. 하지만 정서적 공감 능력의 결핍은 스스로 인식이 되지 않는다. 그런 인식 자체가 공감 능력을 필요로 하기 때문이다. 이 글을 읽는 사람 중에서 자기가 이 부분과 관련이 있을지 모른다고 의심되는 사람은 직언을 할 수 있는 사람을 찾아가서 꼭 물어보기 바란다.
코딩 실력이 뛰어나지만 커뮤니케이션 능력이 부족한 사람과, 코딩 실력이 부족하지만 커뮤니케이션 능력이 뛰어난 사람이 있을 때 누구를 선택할 것인가라는 질문을 받으면 나는 언제나 망설임 없이 후자라고 대답한다. 사실 코딩을 잘하지만 커뮤니케이션이 형편없는 사람은 보았어도, 커뮤니케이션이 뛰어나면서 코딩을 못하는 사람은 본 적이 없기도 하다. 내가 자신 있게 개발자의 생명이 커뮤니케이션 능력이라고 말하는 이유다.
관련기사
- 인공지능, 문제는 바둑이 아니다2016.04.25
- 개발자를 위한 10가지 철학2016.04.25
- 개발자를 위한 아는 척 매뉴얼2016.04.25
- 해커의 길2016.04.25
그럼 이렇게 중요한 커뮤니케이션 능력은 어떻게 키울 수 있는 것일까. 독서다. 컴퓨터를 끄고, 전화를 내려놓고 호흡이 긴 독서를 해야 한다. 그리고 좋은 사람을 만나야 한다. 만나서 감정이 소모되거나 자기를 자기답게 만들어주지 않는 사람은 만날 필요가 없다. 인맥관리나 사회생활을 핑계로 대지 말라. 사람들을 만나지 않고 혼자 지내는 것이 자신의 삶을 훨씬 풍부하게 만들어줄 수도 있음을 깨달아야 한다. 그게 성숙의 의미다.
그리하여 독서와 좋은 사람이 정답이다. 개발자와 무관하거나 거리가 아주 먼 것처럼 들리겠지만 커뮤니케이션 능력을 키우는 비밀은 그 안에 다 들어있다. 인공지능이 사람의 코딩을 대체하는 날이 와도 커뮤니케이션은 대체할 수 없다. 공감은 시뮬레이션 되는 것이 아니기 때문이다.
*본 칼럼 내용은 본지 편집방향과 다를 수 있습니다.