말하기와 듣기 - 개발자로서 갖춰야할 기본 덕목

2017. 11. 18. 16:56 Posted by 아는 개발자

  대학교 1학년 이었던 것 같습니다. 학창시절 리눅스는 커녕 윈도우 커맨드 창 한번 두들겨 본 적이 없을 정도로 개발에 무관심 했던 저는 오로지 취업 안정성 하나만을 바라보고 컴퓨터 공학부에 입학 했습니다. 전공 선택의 목적이 컴퓨터에 대한 흥미나 학문의 대한 열망 보단 먹고 사는 문제를 해결하는 것이었고 당시 신문과 뉴스에선 대기업 개발자들의 희망 퇴직, 사오정 같은 고용불안정에 대한 기사를 쏟아냈기 때문에 자연스럽게 저의 학부 시절의 목표는 '뛰어난 개발자가 되어 이 직업으로 오래오래 먹고 사는 것'이 됐습니다. 다소 엉뚱하고 현실적인 목표를 세우면서도 철학적인 질문이 들었습니다. 뛰어난 개발자'란 어떤 사람을 일컫는 것일까요?


 참 속시원하게 답하기 힘든 질문인 것 같습니다. 도대체 어떤 기준으로 개발자들의 뛰어남을 측정 할 수 있을까요? 개발자 랭크를 매기는 사이트가 따로 있는것도 아닌데 말이죠. 이 질문에 대한 답변에 앞서 다른 직업 영역에서 정한 뛰어남의 기준을 생각해봅시다. 호날두와 메시 같은 축구선수들은 매우 객관적인 수치로 평가 받습니다. 공격수는 넣은 골의 수로, 공수를 조율하는 미드필더는 볼 점유율로, 수비수와 골키퍼는 실점 수로 판단 받습니다. 경기가 끝날 때마다 해설위원들이 선수별 개인 평점도 매겨줍니다. 해설 위원들 마다 선호하는 스타일이 있지만 대체로 공통된 의견으로 수렴됩니다. 의사와 변호사는 평점과 같은 객관적인 수치는 없지만 평가 척도는 명확합니다. 의사의 본 업무는 환자의 건강을 보살피고 약과 도구를 통해 병을 치료하는 일이고 변호사는 의뢰인의 법률적인 고민을 해결하는 일을 합니다. 물론 훌륭한 성품까지 지니면 더 좋겠지만 본업을 잘하는것 만으로도 뛰어난 의사 또는 변호사라고 평가하는 것에는 별다른 이견이 없을 것 같습니다. 


사진 1. 축덕들의 유명한 떡밥인 메시vs호날두 입니다. 스탯 상으론 메시가 좀더 앞서는것 같네요(2015년기준)


  모든 직업 마다 자신이 현재 하고 있는 일을 잘하는 사람을 뛰어난 사람을 평가 할 수 있는 것 같습니다. 개발자도 동일한 기준을 적용해 봅시다. 개발자는 개발을 하는 사람이니 개발을 잘하는 사람이 뛰어나다고 할 수 있겠지요?. 그리고 개발을 잘한다는 것의 기준은 다양한 기술 지식을 겸비하며 다른 사람들이 해결하지 못한 기술적인 어려움들을 척척 풀어내는 사람을 뛰어난 개발자라고 명할 수 있을 것 같습니다. 학부시절엔 이 기준에 맞춰 뛰어남을 평가 했던 것 같습니다. MacOS와 비교했을 때 윈도우가 얼마나 볼품없는 운영체제인지를 설명하던 친구가 새삼 대단해 보였고(지금 생각해보면 터무니없는 근거들 이었습니다) 학점은 바닥이었지만 알고리즘 대회에서 우수한 성적을 거두고 목에 힘주고 다니는 친구들이 부러웠습니다. 이런 친구들이 장차 뛰어난 개발자가 될 것이라고 생각했습니다.


 그런데 막상 실무에 들어가면 개발을 잘한다는 것의 기준이 매우 모호해집니다. 의사와 변호사와 다르게 개발자는 개인의 역량이 미치는 크기가 다소 제한적이기 때문입니다. 물론 혼자 일하는 경우나 소수 팀에선(2-3명) 영향력이 크겠으나 중규모 팀(5명 이상)에서 부터는 미미해집니다. 이유는 간단합니다. 혼자서 모든 일을 할 수 없기 때문입니다. 팀원의 수가 늘어나면서 프로젝트의 스케일은 커지게 되고 필요한 도메인 지식은 깊고 넓어집니다. 인간의 뇌가 아무리 무한한 능력을 지니고 있다곤 하지만 이 모든걸 혼자 습득하고 기술적 난제들을 해결하긴 쉽지 않습니다.


  실무에서 맞서게 되는 기술적인 문제는 교과서의 범위내에서 출제되는 수능 시험 문제와 다릅니다. 그쪽 방면의 지식이 없어 어쩌면 쉽게 풀릴 수 있는 문제를 며칠 째 골골 싸매고 있을 수도 있고 쉽게 풀릴 것이라고 생각 했던 것이 전혀 예상하지 못했던 에러로 당황하게 될 수도 있습니다. 리눅스 오디오 드라이버를 개발하는 팀을 예로 들어 봅시다. 리눅스 오디오 드라이버를 개발하기 위해선 일단 오디오에 대해서 정확하게 알고 있는 개발자가 필요합니다. 개발하려는 드라이버가 리눅스 타입이니 리눅스에도 정통한 사람이면 좋겠지요? 하지만 여기서 끝이 아닙니다. 리눅스에서 진동수를 관리하는 메커니즘과 오디오 정보의 전달 방식에 대한 것도 빠삭해야 합니다. 이것 저것 다 고려하니 인터럽트도 알아야하고 DMA도 알아야 하게 됐습니다. 리눅스와 오디오만 알면 될 줄 알았는데 예상외로 공부 할 것이 많습니다. 혼자 하기엔 벅찬 양입니다


사진 2. 마크 저커버그 혼자선 페이스북의 모든 기능을 만들 순 없었을 것입니다.


 결국 개발할때는 내가 모르는 것을 아는 사람과 같이 일해야 합니다. 이러면서 대두되는 것이 개발과는 전혀 무관 할 것 같았던 말하기와 듣는 능력입니다. 우리의 약점이기도 하지요? 실무에서 개발하게 되면 다른 사람이 물어보는 것을 설명해주기도 하고 내가 어떤 것을 모르는 것을 질문하기도 해야 합니다. 그런데 참 쉬워보이는게 예상외로 무척 어렵습니다. 내 머릿속에선 이미 완벽한 메커니즘이 잡혀있는데 이걸 옆에 있는 사람에게 설명하자니 뭐 부터 말해야 할지 감이 오지 않습니다. 들을 때도 속이 타긴 마찬가지입니다. 동료는 전문적인 용어를 쏟아내면서 말하는데 내겐 생소한 단어들입니다. 5분 넘게 대화했는데 머릿속에 남는건 없습니다. 이해가 되지 않아 다시 찾아갑니다. 이제 슬슬 짜증나는 티를 내기 시작합니다. 끝내 이해는 했지만 자존심이 상합니다.


사진 3. 사실 말하고 듣는건 모두 초등학교때 배웠던 내용입니다


  '말 할때는 청자의 입장을 고려해서 말하고 들을 때는 상대방의 말을 끝까지 집중해서 들어야 한다'고 배웠습니다만 개발팀에선 잘 이뤄지지 않고 있습니다. 개발자 특유의 아집 때문인지 남들이 모르는 지식을 전달이 아니라 뽐내고 싶어하기도 하고 상대방의 발언 중에 잘못된 것이 있으면 발언자에게 망신을 주면서까지 잡아내기도 합니다. 망신을 준 사람이 아무리 기술적 깊이가 뛰어난다고 해도 그 사람과는 아무도 같이 일하고 싶어하지 않게 됩니다. 이런 사람이 한사람이라도 있으면 팀내 전체 분위기가 흐트러집니다. 결과적으로 팀원들의 개인별 역량은 출중할지도 모르지만 팀의 역량은 그 합이 아니라 그 이하가 되버리고 말겁니다. 


 아직 어떤 사람을 뛰어난 개발자라고 말할 수 있을지는 모르겠습니다. 하지만 기술적 난제를 척척 해결하고 도메인 지식이 깊고 넓더라도 말하기와 듣는 능력이 부족한 사람을 뛰어난 개발자라고 할 순 없을 것 같습니다. 개발은 혼자 할 수 있는 일이 아닙니다. 운동경기만큼 팀플레이가 중요한 일입니다. 나 혼자 잘났다고 다른 팀원을 밟고 올라서려 한다면 개인플레이로 팀을 망치는 선수일 뿐입니다. 혼자선 즐거울 수 있지만 결코 팀에는 도움이 되지 못하는 개발자이지요. 뛰어난 개발자가 되기에 앞서 과연 나는 팀에 도움이 되는 개발자인지 고민해볼 필요가 있지 않을까요?


사진 1. 메시vs호날두 끝나지 않은 전쟁 http://news.donga.com/3/05/20150509/71146083/1


728x90