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