개발자의 의사소통 능력은 코딩실력보다 중요하다. 이미 여러 번 했던 이야기다.'개발자의 생명은 커뮤니케이션'이라는 칼럼에서 개발자의 의사소통이 정확히 무엇을 의미하는지도 설명했다. 이번 글은 그 내용의 확장판이다. 개발자가 좋은 의사소통을 하기 위해서 기억해야 하는 내용을 설명한다.
1. 어머니에게 말한다고 생각하라
개발자 10명 중에서 8명은 상대가 말을 들을 준비가 되었는지 헤아릴 줄 모른다. 자기 머리 속에 있는 생각을 상대방이 똑같이 하고 있을 거라고 착각한다. 자기 흥에 겨워 이야기하지만 듣는 사람에게는 의미없는 소음에 불과하다. 본론을 꺼내기 전에 반드시 기본적인 문맥과 개념을 설명하고, 상대가 이야기를 들을 준비가 되었는지 살피면서 자세한 이야기로 넘어가는 것이 커뮤니케이션의 기본이다.
상황이나 상대방에 따라 이야기의 형식과 내용을 달리하며 적절하게 말 할 수 있는 능력을 키우려면 자신의 이야기를 듣는 상대가 어머니라고 생각하면 좋다. 어머니에게 새로 작성한 코드의 내용이나 머릿속에 그득한 생각을 (기본적인 문맥과 개념에 대한 설명없이) 묘사할 수 있겠는가? 그렇게 하면 어머니는 그대의 등짝을 때릴 것이다. 듣는 사람을 부드럽게 자신이 원하는 대화의 문맥 속으로 끌어들이는 능력. 그것이 커뮤니케이션 능력의 핵심이다.
2. 구현과 인터페이스, 구체와 추상, 디테일과 개념을 분리하라
초, 중급 개발자는 종종 디테일의 늪에 빠진다. 자기 코드가 성취한 내용을 드러내고 싶은 욕망이 들끓기 때문에 누가 말을 걸면 준비과정 없이 디테일로 다이빙을 한다. 개념과 추상을 이용해서 대화하는 법을 익히지 못했기 때문에 자세한 구현(implementation)을 이용해서 말하고 설명한다. 디테일의 미로에 갇혀 헤매다 정작 해야할 말은 못하고 대화가 끝나는 경우가 많다. 고급 개발자로 발돋움 하기 위해서는 반드시 개념과 추상으로 말하는 법을 익혀야 한다.
3. 자기방어는 독약이다
개발자 10명 중에서 2~3명 정도가 이런 습관을 가지고 있다. 말을 걸면 무조건 자기방어를 한다. 질문의 의도와 아무 상관이 없다. 내가 질문한 목적은 프로젝트 관리 차원에서 궁금해서, 혹은 문제가 있으면 도와주고 싶어서 질문을 한 것인데, 필요한 대답은 하지 않고 자기에게 방해가 되었거나 될 지도 모르는 일을 끝없이 나열한다. 어쩌다 한 번이면 그런가 하고 넘어가지만, 말을 걸때마다 그러면 이상한 생각이 든다. 자기방어를 하지마라. 자기를 방어하기는 커녕 허접한 개발자로 보이게 하는 지름길이다.
4. 듣는 힘을 키워라
커뮤니케이션 능력의 80%는 상대의 말을 알아듣는 능력이다. 나머지 20%는 자기 생각을 상대가 이해할 수 있게 표현하는 능력이다. 초보 개발자일수록, 혹은 지위가 낮을수록 듣고 이해하는 능력이 중요할 것 같지만 사실은 정반대다. 시니어 개발자일수록, 그리고 회사에서의 지위가 높을수록 다른 사람의 말을 듣고 이해하는 능력이 생명이다. 그래서 지위가 높아지면서 말이 많아지는 사람은 작은 그릇이고, 지위가 높아지면서 말이 줄어드는 사람은 큰 그릇이다. 듣는 힘을 키워라. 많이 들을수록 더 높아진다.
5. 웅얼거리지 마라
웅얼거리는 사람이 있다. 단순히 스타일의 문제라고 말할 수 있지만, 스타일도 커뮤니케이션의 일부다. 개발자 컨퍼런스에 가면 참석자들이 흔히 투표용지나 앱을 이용해서 세션에 대한 평점을 매긴다. 연구에 의하면 세션에 대한 높은 평점과 가장 관련이 높은 요소는 기술적인 깊이나 인기있는 주제가 아니라 발표자의 발음과 태도다. 일상적인 대화에서도 마찬가지다. 말하는 사람은 웅얼거리는 것이 편할지 몰라도 듣는 사람은 고통스럽다. 웅얼거리지 마라. 웅얼거리는 습관을 극복하려는 노력을 기울이고 싶지 않으면 그냥 입을 다물어라.
6. 추상과 구체의 변증법
이벤트 소싱과 더불어 최근 개발자 사이에서 많은 관심을 끌고 있는 디자인 패턴인 CQRS의 창시자 그레그 영이 밝힌 일화다. 자기가 컨퍼런스에 스피커로 참가해서 처음 CQRS의 개념을 (그때는 아직 CQRS라는 이름이 붙지 않았다) 설명할 때 앞자리에 마틴 파울러나 도메인 주도 개발로 유명한 에릭 에반스 같은 대가들이 앉아 있었다. 강연이 끝나자 에릭 에반스가 다가와서 말했다. "네 프리젠테이션은 정말 엉망이었어." 1시간 동안 열심히 들었지만 무슨 말을 하는지 하나도 알아들을 수 없었다는 말을 덧붙였다. 그레그 영의 설명에 구체성이 결여되었기 때문이다.
앞에서 추상과 구체를 구분해야 한다고 말했지만, 새로운 개념을 설명할 때는 추상만으로 부족하다. 추상에서 구체로, 다시 구체에서 추상으로 범주를 반복해서 넘나드는 변증법이 필요하다. 구체의 영역으로 내려왔을 때 디테일의 늪에 빠지는 것은 곤란하지만, 그렇다고 해서 구체를 무시하고 추상만으로 이야기하는 것은 한계가 있다. 적절한 예와 비유, 그리고 개발자에게는 간단하게나마 코드를 보여주는 것이 필요하다.
7. 브리또의 역설
극도로 추상적인 개념인 모나드를 브리또 빵에 비유해서 설명하다가 폭망한 이야기는 업계의 전설이다. 자바스크립트의 거장인 더글라스 크록포드 같은 사람도 이런 저런 예를 들어 모나드를 설명하다가 스텝이 꼬이면서 망한 전력이 있다. 최근에 한빛에서 번역되어 나온 닐 포드의 '함수형 사고'도 비슷하다. 닐 포드가 함수형 패러다임을 설명하기 위해서 동원한 예가 오히려 이해를 가로막는다는 독자들의 불만이 적지 않다.
관련기사
- 대기업 개발자와 파우스트 박사2016.07.18
- 삼성전자의 소프트웨어 개발자 역량2016.07.18
- 개발자를 위한 바람직한 리더의 스타일2016.07.18
- 불안한 관리자를 위한 서바이벌 가이드2016.07.18
말하는 사람 자신이 특정한 기술에 대해서 이해하는 것과, 이해한 내용을 적절한 예를 동원해서 설명하는 것은 두 개의 독립적인 능력이다. 우리가 특정 기술을 잘 알기 위해서 노력과 훈련을 동원하는 것처럼, 좋은 설명을 위해 좋은 예를 동원하는 힘을 가지려면 그에 맞는 노력과 훈련이 필요하다. 기술을 이해했다고 해서 저절로 비유를 잘할 수 있는게 아니다. 두 개의 능력을 동일한 것으로 착각하는 사람 때문에 커뮤니케이션은 종종 붕괴된다.
지면 관계상 별도의 항목으로 다루지 못하지만 포함시키고 싶은 이야기가 많다. 솔직하라. 대화 상대와 진심으로 공명하라. 허언하지 마라. 등등. 이런 이야기는 개발자의 커뮤니케이션과 관련되었다기보다 커뮤니케이션 일반에 해당하는 항목이다. 아무리 강조해도 지나치지 않으므로 한 번 더 이야기하자. 개발자의 의사소통 능력은 코딩실력보다 중요하다. 코딩만 중요한 게 아니다. 우리 말로 말하고, 쓰고, 읽고, 듣는 것을 가벼이 여기지 마라. 좋은 개발자로 성장하기 위해서 반드시 기억해야 하는 명제다.
*본 칼럼 내용은 본지 편집방향과 다를 수 있습니다.