본문 바로가기

개발이야기

소프트 스킬 | 1 ~ 10장 정리

책 중요 문장 정리.

 

백종원씨가 예전에 TV에서 음식 장사가 성공하려며 "맛이 30 퍼센트,나머지가 70퍼센트"라는 말을 한 적이 있다. 맛은 있는데 손님이 많지 않은 식당이나 손님은 많은데 그리 맛이 뛰어나지 않은 식당을 경험한 적이 있을 것이다.

 

개발자 세계에서도 비슷한 원칙이 적용된다. 많은 개발자가 처음 사회생활을 시작할 때 개발자 세계에서는 실력만 갖추면 될 거라고 착각한다. 많은 시행착오를 겪은 저자는 지금에 이르러서는 실력의 비중이 생각보다 크지 않다는 사실을 깨달았다고 한다. 여전히 가장 중요한 요소라고 생각하지만, 실력만 좇다보면 더 큰 부분을 놓칠수 있다는 것이다.

 

이 책의 저자는 그 큰 부분을 가르켜 "소프트 스킬"이라고 했다. 소프트 스킬은 핵심 업무 능력을 의미하는 "하드 스킬"과 대조되는, 대인 관계, 언어 습관, 커뮤니케이션, 리더십과 같은 기술을 의미한다. 개발자에게는 대체로 생소하거나 어려운 분야이다. 

소프트웨어 개발자의 삶, 새로운 시각으로 바라보라

좋은 소프트웨어 개발자란 코딩, 문제해결, 단위 테스트 작성을 능숙하게 하는 사람이 아니다.

좋은 소프트웨어 개발자는 자신의 경력을 관리하고 목표를 성취하며 삶을 즐기면서 살아가는 사람이다.

 

소프트웨어 개발자의 삶은 코드 작성 그 이상의 것이 존재한다고 생각한다. 

더 좋은 개발자가 되고 싶다면, 아니 어떤 분야에서든 훌륭해지고 싶다면 삶의 일부 영역에 집중하지 말고 삶을 전체적으로 바라보아야한다.

 

이 책에서는 크게 네가지  경력, 신체, 정신, 영혼 네가지 주제를 다룬다.

 

소프트웨어 개발자의 삶에서 학습은 매우 중요하다. 소프트웨어 개발자나 IT 전문가라면 대체로 학습을 게을리 할 수 없다. 공부하는 방법, 더 정확히 이야기하면 독학하는 방법을 꼭 익혀야한다.

 

자신의 경력을 적극적으로 관리하는 소프트웨어 개발자는 쉽게 찾아볼 수 없다. 하지만 성공한 개발자치고 단순히 운이 좋아서 성공한 이는 없다. 목표를 설정하고 이를 달성하기 위해 계획을 세워 꾸준히 지키는 이가 성공한다. 소프트웨어 개발 업계는 경쟁이 치열해서 이력서를 깔끔하게 만들고 닥치는 대로 일을 맡는 정도로는 성공을 보장할 수 없다. 어떤 행동을 언제 취할지, 또 어떠한 계획을 어떻게 진행할지 신중하게 생각하고 결정하는 습관을 길러야 한다.

 

다른 이들과 달리 멋지게 시작하라

가장 심각한 실수는 자신의 경력을 사업처럼 생각하지 않는 것이다. 착각하지 마라. 생계를 위해 코드를 작성하는 사람은 중세 시대 대장간에서 일하는 대장장이와 똑같다.

 

소프트웨어 개발자 입장에서는 자신의 경력을 사업으로 보아야 한다. 사업을 한다고 생각하면 결정도 사업가답게 할 수 있다. 성과와 상관없이 일정한 급여를 정기적으로 받다보면 회사원이라는 정체성에 갇히기 십상이다. 회사에 소속되어 일하더라도 자신의 정체성이나 경력은 조직에서 주어진 역할과 별개로 존재한다고 생각해야한다.

 

고용주를 당신이 운영 중인 소프트웨어 개발사의 고객이라고 생각하라. 고객이 한 명 뿐이고 그 고객이 수익 전부를 책임져주는 상황이라고 해도 자신이 사업을 하고 있다고 생각하면 무력감과 의존성에서 벗어나 자치권과 자주성을 지킬 수 있다. 

 

머슴과 같은 태도를 버리고 사업가의 태도를 갖추는 것이야말로 경력 관리의 출발점이다. 이렇게 태도만바꾸어도 경력을 보는 관점이 달라져서 경력 관리의 필요성을 인식하고 행동하게 된다.

 

사업이 성공하는데 필요한 구성을 짚고 넘어가자. 우선 제품이나 서비스가 있어야 한다. 제품이나 서비스가 없으면 판매할 거리가 없는 것이므로 이익을 얻을 방법도 없다. 당신이 제공하는 서비스를 사업으로 생각하면 경력을 보는 관점이 완전히 바뀐다. 회사는 자신의 제품을 꾸준히 수정하고 개선한다. 당신도 그렇게 해야한다. 당신이 소프트웨어 개발자로서 제공하는 서비스는 유형의 가치를 지닌다. 그리고 당신은 그 가치가 정확히 무엇인지, 그 가치가 다른 수많은 소프트웨어 개발자가 제공하는 가치와 어떻게 다른지 설명할 수 있어야한다. 

 

소프트웨어 개발자 대부분은 자신이 사업가라고 생각하지 않는다. 그래서 화려한 효과 없이 아주 조용히 등장한다. 하지만 당신은 달라야 한다. 

 

- 어떤 서비스를 제공할지, 그 서비스를 어떻게 마케팅할지 고민하라.

- 서비스 개선 방법을 고민하라.

- 소수의 특정 유형 고객에게 필요한 특수 서비스를 제공하는 전문가가 돼라. 일자리가 필요할 때는 일단 고객 한명만 확보해도 충분하다.

 

자신이 만든 서비스를 널리 알리고 고객을 찾을 수 있는 최적의 방법이 무엇인지 고민해라. 한 번 작성한 이력서를 여러 회사나 인사 담당자에게 그대로 돌리는 개발자가 많다. 자신이 사업을 한다면 이 방법이 잠재 고객을 찾는 가장 좋은, 유일한 방법이라고 생각할까? 당연히 답은 "아니요"일 것이다. 성공한 회사는 고객을 일일이 따라다니지 않고 고객이 자발적으로 제품이나 서비스를 사게 만든다.

 

고객을 모을 수 있는 가장 좋은 방법은 무엇인가? 당신의 서비스를 고객에게 어떻게 설명하겠는가? 이 간단한 질문에 답할 수 있다면 경력을 멋지게 시작할 수 있을 것이다. 

 

목표를 설정하고 미래에 대비하라

세상에 똑같은 사람은 없다. 사람이 다 다르듯이 나보다 더 많은 목표를 세운 사람도, 더 적은 목표를 세운 사람도 있다. 중요한 것은 목표 중 단 하나라도 이루려면 그 목표를 정확히 이해해야 한다는 사실이다. 물론 말보다 실천이 어렵다. 대부분 자신의 목표, 혹은 성취하고자 하는 대상이 무엇인지 구체적으로 자각하지 못한 채 표류한다. 소프트웨어 개발자도 예외는 아니다. 이런 상태는 인간의 본성에 가깝다. 어디에 집중하며 살아갈지 생각하지 않으므로 목적지나 나아갈 방향을 모른다. 

 

먼저 큰 목표를 설정하고, 거기에 이르기까지 밟아갈 작은 목표를 세우자. 큰 목표는 보통 구체적이지 않다. 먼 미래에 성취할 큰 목표가 아주 구체적일 필요는 없다. 단 방향을 제시할 정도는 되어야 한다. 작은 목표는 꾸준히 노력해 큰 목표에 이를 수 있도록 의욕을 복돋워준다. 작은 목표 없이 큰 목표만 세워두면 문제가 발생해도 바로잡을 시간이 없다. 작은 목표는 수시로 동기를 부여하는 보상 장치 역할도 한다. 매일, 매주 자그마한 성공을 경험하면 계속 성장하는 느낌이 들기 때문에 자부심을 품고 꾸준히 노력할 수 있다. 작은 목표는 큰 목표에 비해 버겁다는 느낌도 덜하다. 

 

- 시간을 내서 큰 목표를 최소 하나 이상 기록하라.

- 큰 목표를 다음과 같이 작은 목표로 나눠라.(월간, 주간, 일간)

- 큰 목표를 매일 생각할 수 있도록 항상 보이는 장소에 붙여두라.

 

소프트 스킬은 생각보다 중요하다

한때 나는 소프트웨어 개발자의 일은 코드를 작성하는게 전부라고 생각했다. 아마 나 말고도 이러한 착각을 하는 사람이 많을 것이다. 알고 보면 개발자도 컴퓨터를 대하는 시간보다 사람을 대하는 시간이 더 길다. 업무 회의에서도 사람들을 만난다. 진행중인 작업에서 문제가 발생했을 때도 동료화 대화하며 해결착을 찾는다. 혼자 앉아서 코드를 작성할 때도 사람과 전혀 연관이 없다고 보기는 어렵다. 코드를 작성할 때 참고하는 요구 사항도 사람이 주기 때문이다. 

 

존중하라. 사람은 누구나 자신이 중요한 존재로 여기지길 바란다는 사실을 기억하라. 대인 관계에서 가장 중요하게 생각해야 할 원칙이다. 존중받고 싶다는 바람은 인간이라면 누구에게나 있는 기본적인 욕망이다. 그리고 이러한 바람은 무언가 성취하고자 하는 가장 근본적인 동기이기도 하다. 자신의 아이디어를 내세우기 위해 동료의 아이디어를 깎아내리는 실수는 누구나 쉽게 저지른다. 하지만 이 또한 상대를 무시한다는 인상을 주므로 상대가 역으로 당신의 의견을 무시할 가능성이 크다. 상대가 당신의 아이디어를 수용하고 그 가치를 인정하게 하려면 당신이 먼저 상대를 존중해야 한다. 자존심을 무너뜨린 상대의 마음은 절대 얻을 수 없다.

 

칭찬하라. 사람들에게서 최선의 성과나 긍정적인 변화를 이끌어내길 원한다면 하고 싶은 말을 전부 내뱉지 말고 응원의 말만 하는 법을 배워야한다. 동기를 부여하고 열의를 복둗우려면 비판하지 말고 칭찬하라.

 

상대의 입장에서 생각하라. 대인 관계를 성공적으로 구축하려면 자신이 원하는 것에 집중하지 말고 상대에게 중요한 것, 상대가 원하는 것을 생각하라. 당신이 이런 태도를 갖추면 상대는 당신이 무시하거나 비판한다고 오해하지 않는다. 그러면 상대가 마음을 열고 당신의 아이디어를 존중해줄 가능성이 커진다. 동료나 상사와 대화할 때 당신 자신보다 상대에게 집중하라. 그들의 관점으로 세상을 바라보라. 당신 차례가 돌아오면 당신이 원하는 바를 상대에게 와 닿는 방식으로 표현하라. 

 

논쟁을 피하라. 소프트웨어 개발자들은 평소 논리적으로 생각하는 편이다. 그래서 개발자가 아닌 살마도 당연히 자기처럼 논리적으로 사고할 거라고 생각하는 경향이 있다. 뿐만 아니라 확고한 논리를 제시하기만 하면 상대가 자신의 사고 방식을 받아들일 거라고 착각하기까지 한다. 

 

면접의 달인이 되자

다음 시나리오를 상상해보라. 면접장에 들어가서 면접관과 악수를 나누자  면접관이 당신을 알아보고 밝은 얼굴로 이렇게 말한다. "아, 누구신지 알겠네요. 블로그에서 사진으로 뵈었어요. 블로그에 올리신 글 잘 봤습니다." 이렇게 면접을 시작했다면 그 회사에 취직할 가능성이 어느정도일까? 이쯤에서 그러면 좋기야 하겠지만 내 블로그는 인기가 없어 면접관이 봤을리 없다.라고 생각하는 사람도 있을 것이다. 면접관이 당신의 블로그를 보았느냐 보지 못했느냐는 논점에서 벗어난다. 통념에서 벗어나 면접과 직접 관련이 없는 온갖 요소가 채용에 중요한 영향을 미친다는 사실을 말하려는 것이다. 

 

간단히 말해 면접을 통과하는 가장 빠른 방법은 면접관이 당신을 좋아하게 만드는 것이다. 여러가지 방법이 있지만 그 중에는 면접을 보기 전에 해둘 수 있는 방법도 있다.

 

고용은 개인적인 추천을 통해 이루어지는 경우가 많다. 지원할 자리에 추천을 받아 지원할 수 있는지부터 확인하라. 추천으로 면접을 보는 사람은 추천인의 신용을 빌려오기 때문에 자연히 면접관이 더 좋게 본다. 추천인에 대한 평판, 면접관이 추천인과 맺고 있는 관계가 면접 대상자에게까지 확장된다. 호감과 신뢰감이 있는 사람의 추천을 받은 사람이므로 면접관은 긍정적인 마음으로 면접장에 들어온다. 

 

근무 형태를 선택하라

직원: 직원으로 일하는 것의 최고의 장점은 역시 안정성이다. 직원으로 일하는 것은 다른 근무 형태에 비해 편하다. 책임 범위가 좁고, 근무하는 방식도 어느 정도 정해져 있다. 월급을 ㅂ다기 위해 어떤 일을 해야할지 자신이 직접 정할 필요도 없다. 단점은 자신이 할 일을 마음대로 고르지 못하고 때로 싫어하는 일을 해야하고, 근무 시간이나 근무 요일 같은 일정도 다른 사람과 맞춰야 한다. 또한 수입이 미리 정해진다는 말은 어느 정도 한계가 있다는 뜻도 된다. 

 

프리랜서: 시간을 자율적으로 쓸 수 있고, 능력이 되는 한 원하는 일을 고를 자유가 있다. 프리랜서로 일해서 가장 좋은 점은 수익 잠재력이 높다는 것이다. 

 

소프트웨어 개발자 초년생일 때는 직원으로 일하는게 적절하다. 위험이 가장 적고 경험이 없이도 진입할 수 있기 때문이다. 직원으로 일하는 것은 수습생과 비슷하다. 나중에 독립할 마음이 있는 사람도 처음에는 직원으로 시작해서 능력을 키워나가면 좋다. 하지만 일을 시작한지 얼마 되지 않아 프리랜서 일이나 사업할 기회가 생겼다면? 스스로도 위험을 감수할 마음이 있다면? 조금이라도 어릴 때 불가피한 실패나 실수를 미리 겪고 빨리 자리를 잡는 것도 괜찮다. 선택은 당신의 몫이다. 어떤 길을 선택하든 나중에 진로를 전환할 수 있다. 

 

전문성을 갖춰라

전문 분야가 분명하지 않은 소프트웨어 개발자가 많다. 소프트웨어 개발자는 대부분 전문 분야를 자기가 사용하는 프로그래밍 언어로 정의하곤한다. "저는 C# 개발자입니다." 혹은 "저는 자바 개발자입니다."라는 말을 자주 들었을 것이다. 이러한 정의는 범위가 너무 넓다. 프로그래밍 언어만으로 당신이 어떤 개발자인지, 실제 어떤 일을 할 수 있는지 상대방이 제대로 알 수 없다. 일할 때 쓰는 도구가 무엇인지 알려줄 뿐이다.

 

어떤 분야를 골라도 좋으니 한 분야의 전문가가 돼라. 전문성의 정도는 시장의 크기에 따라 달라진다. 최대한 구체적이고 명확하게 하라. 그럴수록 특정 시장 내에서 수요가 높아질 것이다. 전문 분야는 필요할 때 얼마든지 바꿀 수 있으니 걱정하지 마라.

 

다양한 상황에 적응할 능력을 키우되 눈에 띄는 전문 분야를 갖추도록 하라. 두 가지 능력 중 하나를 택해야 한다면 한 분야에서 전문성을 키우는 일부터 시작해서 나중에 다른 분야까지 확장하는게 현명하다.

 

궁합이 잘 맞는 회사를 선택하라

스타트업 직원들은 보통 일인 다역을 맡는다. 개발자라 해도 코딩 외에 다른 일을 추가로 할 가능성이 크다. 직원 수가 적어 역할 분담이 제대로 되지 않으므로 여러가지 일을 해야한다. 코딩하려고 들어간 회사에서 서버 구축이나 테스트까지 도와주고 싶지 않다면 이러한 환경이 잘 맞지 않을 수 있다. 하지만 반대로 활기 넘치는 분위기와 도전을 좋아하는 사람이라면 큰 호감을 느낄 것이다. 

 

자신에게 어떤 업무 환경, 어떤 회사 문화가 맞을지는 스스로 결정해야한다. 일을 맡기 전에 그 회사에서 이미 일하고 있는 개발자와 이야기해보면 입사후 생활에 관해 현실적인 조언을 들을 수 있을 것이다. 

 

승진하기

회사 유형을 막론하고 승진하려면 책임 범위가 넓어져야 한다. 돈은 항상 책임의 뒤를 따른다. 책임 범위를 늘릴 기회는 절대로 놓치지 마라

그럴 기회가 없어서 스스로 기회를 만들어야한다면 어떻게 할까? 살다보면 신설 부서나 새로운 프로젝트를 직접 만들어야하는 때도 있다. 어떤 회사에서든 당신의 재능으로 개선할 여지를 찾아낼 수 있다. 대신 열심히 찾아야 할 수는 있으니 잘 찾아보길 바란다.

 

도움이 필요한 사람을 도와주라. 자신의 문제 외에 다른 이들의 문제까지 함께 부딪쳐 해결하다보면 그 과정에서 많은 것을 배울 뿐 아니라 시간이 지날수록 팀의 해결사라는 평판을 얻는다. 

 

- 지금까지 등한시되어 온 문제 중 하나를 골라 당신이 책임지고 이끌어갈 만한 프로젝트로 만들어라.

- 신입 팀원이 업무에 적응할 때까지 도와주는 역할을 맡아라.

- 업무 절차를 기록하고, 이러한 문서를 항상 최신 정보로 채워두는 역할을 맡아라.

- 누구나 피하려 하지만 당신이 맡아서 더 수월하게 하거나 자동화할 수 있는 일이 있는지 찾아보라. 

 

 

당신이 팀에서 가장 똑똑하고 가장 열심히 하는 최고의 개발자라고 해도 당신이 이룬 성과를 아무도 모른다면 아무 의미가 없다. 당신이 세운 업적을 상사에게 알릴 방법이 없다면 모든 노력이 물거품이 되고 만다. 새로운 직장에 가면 나는 내가 종일 머무른 장소와 한 일을 꼭 기록한다. 그리고 이렇게 모은 정보를 요약해서 매주 금요일 상사에게 제출한다. 나는 이 문서를 주간 보고서라고 불렀다. 보고서를 처음 제출할 때, 상사가 더 편하게 일할 수 있도록 매주 이 보고서를 제출하겠다는 말을 덧붙였다.

 

상사는 보고서를 통해 내 활동을 꾸준히 확인할 수 있었다. 나는 노골적으로 자랑하지 않아도 그 주에 내가 무엇을 성취했는지 이야기할 수 있어 좋았다. 어떤 일을 했는지 드러낼 수 있는 훌륭한 방법이었다. 상사는 내가 하는 일을 잘 알고 있는 데 반해 다른 개발자가 하는 일을 잘 모른다는 이유로 내 생산성이 동료들보다 훨씬 더 높다고 생각하기도 했다.또한, 주간 보고서는 평가 기간에 참고할 좋은 자료가 되었다. 

 

주간 보고서 외에도 조직에서 자신의 업적을 드러낼 방법은 많다. 팀이 다뤄야 하는 주제나 문제에 대해 발표하는 것도 무척 좋다. 점심시간을 활용해 가벼운 주제를 공부하는 '런치 앤드 런'시간을 제안하는 것도 좋은 방법이다. '런치 앤드 런' 시간에  발표를 맡으면 열심히 일하고 있다는 사실이 잘 드러날 뿐 아니라 특정 분야에 대해 많이 안다는 사실을 보여줄 수 있다. 게다가 발표를 준비하면서 해당 주제를 제대로 공부 할 수 있다. 나는 개인적으로 이정도 부담이 있을 때 공부가 무척 잘된다고 느꼈다.

 

어떤 방법으로든 새로운 것을 배우고 기술 수준을 높이는게 중요하다. 자기 계발을 위해 끊임없이 노력하고 있다는 것을 드러내줄 자격증을 찾아보거나 교육 과정에 등록하라. 

 

아이디어가 실현되지 못하는 이유, 혹은 문제 해결이 어려운 이유를 이야기하는 사람은 어느 조직에나 많다. 그런 사람은 원래 어디에나 많다. 당신은 그런 역을 맡지마라. 어떤 문제든 해결책을 제시하는 사람, 또 그 해결책을 실행할 수 있는 사람이 돼라. 

 

어떤 회사든 장애물을 쉽게 극복하는 사람이 환영받는다. 해결사라는 평판을 얻으면 승진이 보장된다. 

가치있는 사람인척하기보다 실제 가치 있는 사람이 되도록 기초를 튼튼하게 다지는 것이 좋다.

 

전문가 되기

내가 좋아하는 책 "최고의 나를 꺼내라"에서 저자 스티븐 프레스필드는 전문가와 비전문가 차이를 다음과 같이 설명했다.

 

전문가가 된다는 건 사고방식의 전환을 의미한다. 두려움, 게으름, 미루는 버릇, 자기 회의 등에 휘둘리는 일은 비전문가처럼 생각할 때 발생한다. 비전문가는 약속을 어긴다. 비전문가는 포기한다. 비전문가는 역경에 굴복한다. 전문가가 생각하는 방식은 이와 다르다. 전문가는 약속을 지키고 자신이 맡은 일을 완수하여 무슨일이 있어도 절대 포기하지 않는다.

 

간단히 말해 전문가는 맡은 일과 경력을 진지하게 생각하는 사람이다. 때로 옳다고 생각하는 바를 실천하기 위해 손해를 감수하고 어려운 결정을 내릴 용기가 있는 사람이다.

 

전문가가 되려면 좋은 습관부터 길러라. 매일 별 고민없이 습관에 따라 비슷한 패턴으로 움직인다. 인생을 바꾸려면 먼저 습관을 바꿔야 한다. 물론 말처럼 쉬운 일은 아니다. 나쁜 습관은 고치기 어렵고 새로운 습관은 쉽게 길러지지 않는다.

 

소프트웨어 개발자는 기술적으로, 윤리적으로 어려운 문제에 자주 부딪힌다. 전문가가 되고 싶다면 이 두가지 면을 모두 고려해서 옳은 선택을 해야한다. 보통 기술 문제는 윤리 문제에 비해 더 객관적이므로 해결 방안이 여러개 있을 때 최선의 안을 고르는 것도 쉬운 편이다. 하지만 윤리 문제는 때로는 정답이 없다. 간혹 명확한 답을 내지 못할 때도 있다. 전문가는 필요할 때 "아니요"라고 말할 줄 알아야한다. 상대가 고용주라고 하더라도 말이다. 밥 마틴은 전문가라면 어떤 희생을 감수하더라도, 설사 해고되는 일이 있더라도 넘지 말아야할 선이 있다고 이야기한다. 눈앞의 득실만 따져보면 잃는 게 많은 것처럼 보인다. 하지만 장기적으로는 꾸준히 옳은 쪽을 선택할 때 더 많은 것을 얻는다.

 

전문가는 자기가 만드는 결과물의 품질을 높이기 위해 항상 노력해야한다. 처음부터 원하는 수준을 낼 수 없더라도 꾸준히 노력하다보면 자기가 설정한 목표에 도달하는 날이 온다.

그런데 자기가 원하는 수준에 이를 수 없다는 생각이 들 때, 많은 사람이 난관을 헤쳐나가는 쪽보다 목표를 낮추는 선택을 한다는게 문제다. 

자신이 설정한 높은 기준해 도달해 전문가로 인정을 받으려면 자신의 기술 수준을 잘 알고 이를 향상하도록 계속 노력해야한다. 일하는데 도움이 되는 새로운 무엇을 배우기 위해 늘 노력하라. 적당히 만족하는 나쁜 습관에서 벗어나 항상 발전을 꾀하라.