마감이 되기 7일전  마이크로 소프트웨어에 갑작스런 기고 요청이 들어왔습니다.   슈퍼 개발자의 꿈이라는 글이였습니다.

하지만 전 고수도 아니고, 아주 생산성이 뛰어난 개발자도 아니라서 많이 고심을 했습니다. 부족하지만 어떤 글을 적어야 후배 개발자들에게 도움이 될까?

결국 제가 지금까지 블로깅 한 글들과 저의 경험을 덧 붙여 이번에 기고를 했습니다.  미리 포스팅한 글들을 짜집기 한거라고 혼내시는 분도 있겠지만, 저의 블로그를 모르시는 분들에게 몇일안에 갑작스러운 글을 만드는 것 보다는 평상시 제가 아껴 쓴 좋은 글들을 대접해드리고 싶어서 였습니다.

사람의 네가지 종류와 꿈에 대한 이야기들이 더 추가되었으니, 너그러이 이해해 주시길 바랍니다.

이 땅에서의 하루하루 삶이 너무나도 익숙해져 버려 하늘은 이미 너무 낯선 곳이 되어 버렸다. 하지만 나에게는 날개가 있지 않은가? 갈매기의 꿈이 있지 않은가? 그래, 그래 내 영혼 가득 푸르른 햇살로 가득 채워질 자유의 그 날까지 땅을 박차고 하늘을 향해, 더 높이, 더 멀리 치열한 날갯짓을 하자. 나에게도 꿈이 있기 때문이다. -갈매기의 꿈-

손 영 수 indigoguru@gmail.com | 아직 아키텍트는 아니지만, 훌륭한 아키텍트를 꿈꾸며 부지런히 살고 있는 이 땅의 개발자이다. 데브피아 소프트웨어공학 스터디인 Eva팀을 5년째 이끌고 있으며 이 땅의 개발자들을 위해 팀원들과 함께 한 스터디 결과물을 무료로 http://www.evacast.net을 통해 공유하고 있다. 부족한 실력이지만 지식을 나눌 때는 누구보다 ‘부자’라는 자부심을 가지고 지식 나눔에 힘쓰고 있다. Pattern 전도사를 꿈꾸고 있으며 PLoP와 같은 Pattern 학회를 국내에 만들기 위해 힘 쏟고 있다.

필자는 스타 개발자도 아니며 고수도 아니다. 다만 이 길을 먼저 걸어간 선배로서, 후배 개발자들에게 도움이 될 만한 몇 가지 메시지를 전달하고자 한다.
필자는 본업을 가지고 있으면서 무료 세미나에 스피커로 활동한 지가 어언 8년이 다 되어 간다. 항상 신기술, 변화의 중심에 서 있기 위해 노력했지만 많은 시간이 지난 후 과거를 되돌아보니 지나치게 신기술만 바라보는 바보 같은 생활을 한 건 아닌가라는 걱정이 생기기도 한다.

당장 하고 싶은 재미난 흥미 위주의 공부와 스터디를 해왔고 이것들이 나쁜 것들은 아니지만, 조금 더 균형 잡힌 시선으로 기술과 현실을 이해하는 것이 매우 중요하다는 것을 강조하고 싶다. 아울러 아직 꿈을 잃지 말라는 얘기도 함께….

벤더 종속적인 IT 지식들
우리는 대부분의 IT 지식을 세미나나 책을 통해 얻고 있다. 하지만 자세히 보면 이 책과 세미나에는 어떤 이의 의견과 철학이 고스란히 담겨 있다. 물론 이것이 하나의 철학이 되어 굳혀진 경우를 종종 보지만, 그 이면에는 진실을 숨기고 너무나 상업적인 얘기들로 혼란스럽게 만드는 경우도 적지 않다. 우리가 흔히 접할 수 있는 IT 벤더의 세미나들은 대부분 이렇다. 다른 회사의 제품을 먼저 보여주고 그 몇 백 줄에 해당하는 코딩을 마치 자사의 제품을 쓰면 단 몇 줄만으로 간단하게 구현할 수 있다고 홍보하거나 플랫폼의 철학에 맞춰 이것을 잘하면 마치 자신이 뛰어난 프로그래머가 될 수 있는 것처럼 환상을 심어주기도 한다.

특히 학생이나 초보 프로그래머들은 이러한 것들을 보고 그 회사의 플랫폼이나 정책을 마치 자기 것인 양 여기는 경우가 흔하다. 하지만 이들에게는 새로운 프로그래밍 언어나 기술에 열광하기보다는 다양한 알고리즘과 패턴 등을 공부함으로써 시스템 내부적인 얘기들을 파악하고 자신만의 프레임워크를 만들거나 경험을 쌓는 꾸준한 노력과 행동들이 요구된다.

과거를 돌아보면
기술이 매우 빠른 속도로 발전하는 것처럼 보이지만 자세히 보면 그리 빠르지 않다. 지금의 WPF 역시 XSU에서 많은 아이디어를 가져왔고, Web Service가 꿈꾸는 SOA의 많은 아이디어 역시 CORBA에서 그대로 가져오거나 조금 더 현실적으로 변화시켰다.

<그림 1>에 제시된 수많은 기술들 역시 매우 깊은 상관관계를 가진다.

– Java의 VM 기술을 흡수한 .NET CLR
– JSP의 컴파일 방식을 흡수한 ASP.NET
– .NET Web Service의 개념을 흡수한 Java Web Service
– .NET의 연결/비연결 지향적인 DataSet을 흡수한 Java 기술

이렇게 저마다 최고라던 벤더의 기술들은 서로에게 끊임없는 영향을 미치며 발전하고 있으며, 큰 흐름은 더디게 바뀌어 나간다. 매우 작은 함수나 하나의 객체가 우리의 현실에 필요하지만, 그러한 조그만 현실에서 갇힌 채 살다보면 우리에게 남는 것은 하나의 부품이라는 ID(사번, 하나의 제품의 일부 모듈 개발)일 뿐이다.

우리에게 조금 더 필요한 건
우리는 조금 더 큰 시선을 가질 필요가 있다. 이제 다양한 기술들을 넓은 시선으로 비판적으로 바라보아야 할 것이며, 다음 세대의 프로그래머들이 더 나은 토양에서 일할 수 있도록 진실한 애기들을 나눠줘야 할 때이다.

플랫폼의 새로운 버전이 등장하면, 또 다시 모든 것을 새롭게 배워야 하는 기술 종속적인 프로그래머가 아니라 혁신적이고 창의적인 제품을 만드는 주역이 되는 그런 기술적인 장인이 되기 위해 한걸음씩 준비해야 한다. 실례로 이 시스템이 잘 설계되었는지, 그렇지 않은지를 판단하기 위해 여러 가지 평가 프로세스를 도입했지만 그 평가 결과를 이용해 어느 것이 더 나은 모델이고 어떻게 개선해야 되는지 방향을 제시하는 사람은 없다. 이 얼마나 안타까운 현실인가? 기술과 트렌드에 민감해 정작 중요한 부분들을 많이 놓치는 것 같다.

실례로 필자는 ‘패턴을 이용한 웹서버 만들기’라는 주제를 가지고 강의할 때, 단순히 제품의 사용이 아닌 상황에 맞는 웹서버를 만들기 위한 설계 전략과 실험, 그리고 온전히 소스 코드도 공유하는 저자의 헌신적인 지식 공유를 보고 10년이 지난 논문임에도 불구하고 많은 감동을 느낄 수 있었다. 이러한 기술들이 널리 퍼지고 우리나라 개발자들에게 많이 알려져야 더 발전할 수 있는 토양이 생기는 게 아닐까?

고객의 가치를 우선시 생각하는 기술

개발자 여러분에게 묻고 싶다. 홈네트워킹 시스템과 김치 냉장고 가운데 어느 것이 가치가 클까? 그리고 이 질문을 주부에게 한다면 어떠한 대답이 나올까? 일단 개발자 대다수는 홈네트워킹 시스템이 가치가 크다고 생각하지만, 주부 입장에서는 김치 냉장고의 가치가 홈네트워킹보다 더 크다.

바로 이런 가치의 중요성을 우리 개발자들은 너무 간과하고 기술에만 얽매여 있지는 않은가? 기술은 단지 총을 쏘는 방아쇠일 뿐, 나머지는 다른 것에 의해 결정된다고 한다. 우리가 만든 소프트웨어가 성공하기 위해서는 자금 펀딩을 비롯해 협의, 영업 등 많은 요소들이 뒷받침되어야 하는데, 무엇보다 그걸 사용한 고객에게 새로운 가치를 창출해 줄 수 있는지가 가장 중요할 것이다.

정확한 기술 파악과 추상화의 힘을 가져라
큰일을 잘 나누어 추상화시키는 능력은 필수이다. 훌륭한 개발자라면 y = f(x)에 입각해서 인풋(input)과 아웃풋(output)만 있으면 시스템을 설계할 수 있는 능력이 요구된다. 복잡한 하나의 시스템도 추상화를 통해 계속 쪼개어 잘 정리된 기능으로 구분할 수 있어야 하며, 단순히 시스템 설계의 목적이 아니라 정치, 이해 당사자들의 요구에 의해 적절히 분할될 수 있는 능력이 필요하다.

누구나 만족할 만한 시스템 구축, 즉 고객의 요구에 따라 기능을 분할해 제공해야 함을 의미하며 이건 최적의 설계보다 어찌 보면 더 어려운 일을 만들기도 한다.

모래성에 막대기를 세워라!
더 이상 회사가 정년을 보장해 주는 것도 아니고 우리의 경력을 관리해 주지도 않는다. 결국 자신의 경력을 자기 자신이 관리하고 알리면서 개인 브랜드를 구축해야 한다. 한 분야의 전문가가 되기 위해서는 다른 분야도 두루 두루 같이 공부해야 한다. 어렸을 때 혹시 모래를 동그랗게 모아 막대기를 꽂고, 모래를 조금씩 빼는 놀이를 하지 않았는가? 모래가 서서히 없어지면 막대기는 입김으로도 쉽게 무너진다. 하나의 막대기를 탄탄히 세우기 위해서는 넓게 모래를 쌓아야 한다. 이처럼 다른 분야의 지식들이 더해졌을 때, 비로소 시너지 효과를 내어 더 튼튼하게 막대기(분야)를 세울 수 있다. 주위의 모래를 자기가 직접 쌓을 수 있겠지만 이것 역시 한계가 있다. 다른 이와 팀을 이뤄 서로의 부족함을 상쇄시키면서 구축하는 것이 중요하다. 바로 그 해답은 팀플레이에 있다.

기러기에게 배우는 팀플레이의 중요성
기러기가 V 자로 날아가는 것은 아주 머나먼 곳으로 여행하기 위한 기러기들만의 아름다운 팀플레이이다. 한 마리의 기러기가 선두에 서서 날고 그 뒤에 다른 기러기들이 차례로 붙어 날아간다. 상승 기류를 최대한 이용하기 위해서다.

제일 앞에 날아가는 선두 기러기는 힘들지만, 그 뒤에 있는 기러기는 상승 기류를 이용해 아주 적은 힘으로 날아갈 수 있기 때문이다. 그리고 주기적으로 선두 자리를 바꾸며 서로의 힘을 분배하므로 멀리 비행할 수 있는 것이다. ‘혼자 가면 빨리 갈 수는 있지만 멀리 가려면 함께 가야 한다’는 격언이 딱 들어맞는 경우이다. 또한 기러기들은 끊임없이 소리를 지르며 날아가는데 그 이유는 크게 두 가지이다.

  • 하나는 서로간의 응원 메시지이다. ‘힘내! 힘내! 우리는 더 멀리 날아갈 수 있어!’
  • 또 하나는 자기의 위치를 알리는 것이다. ‘나는 지금 잘 날아가고 있어! 난 잘 따라가고 있어!’

이는 마치 조직에서 서로를 응원하고 격려하는 것뿐만 아니라 현재 자신이 처한 문제나 상황을 외부에 알려 미리 해결하도록 유도하는 자세로 비유할 수 있다.

아울러 필자가 가장 인상 깊었던 기러기의 행동은 바로 낙오자에 대한 배려였다. 머나먼 비행을 하다가 부상자나 낙오자가 발생하면 항상 3~4 마리의 기러기들이 함께 남아서 곁을 지켜준다. 그 낙오된 한 마리가 다시 날 수 있을 때까지 그들을 챙겨주고 보호해 주며 힘을 되찾으면 같이 나는 것이다.

이처럼 서로를 믿는 팀원들이 있다면 그 누구에게도 이길 수 있다. 아무리 똑똑한 천재라도 한마음으로 서로의 단점을 보완해 주는 팀플레이를 이길 수 없는 것이다. 그렇기 때문에 같은 꿈을 향해 걸어 나가는 이들을 모아 팀을 만들고 함께 길을 걷는 것이 중요하다.

이상적인 팀과 팀원이란 존재하지 않는다
하지만 팀을 이뤄 일을 하다 보면 생각지 못한 여러 가지 부정적인 일들이 일어난다. 필자의 경우도 마찬가지로 열심히 만든 결과물을 다른 사람이 훔쳐간 적도 있었고 몰래 필자의 프로그램을 빼돌려 자기의 목적과 이익을 위해 사용하는 사람도 있었다. 그리고 필자가 부족한 기술을 채우기 위해 굴욕적인 협상을 한 적도 있다. 어떻게 보면 이것은 팀플레이의 차가운 현실일지도 모른다. 필자의 지인 가운데 어학원, 여행사, 홈페이지 제작업체 등의 사장으로 성공한 이가 있다. 그는 사회생활을 하며 점차 사람에 대한 신뢰가 사라져 가던 필자에게 다음과 같은 조언을 해줬다.

“세상에는 크게 네 종류의 사람이 있다. 첫째는 나도 살리고 너도 살리는 사람, 둘째는 자신의 일만 아주 클리어하게 잘 해결하는 사람(소위 개인주의라고도 한다), 셋째는 남의 것을 빼앗아 자신이 사는 사람(우리가 말하는 모사가 또는 나쁜 상사 정도), 넷째는 너도 죽고 나도 죽는 사람이다. 난 사업을 하면서 서로에게 도움이 되는 첫 번째 타입의 사람을 한 번도 만난 적이 없다. 어떠한 계약을 맺어도 자기가 원하는 것을 얻기 위해서는 뭔가를 내줘야 하는 것이 이 바닥의 현실이지. 서로의 이익이 주는 것보다 많다면 계약은 성사되는 것이지. 그게 현실이란다. 자신이 맡은 일을 아주 클리어하게 해결하는 사람(두 번째 타입)만 만나도 매우 행복하다는 것을 알아야 한다.”

그는 (나에게 어떤 도움을 주지 않아도) 자신이 맡은 일을 어떻게든 완수하고 해결하는 사람(파트너)만 있어도 성공할 수 있다고 조언했다. 어렸을 때부터 교회를 다녀서일까? 세상을 너무 아름답게 보아온 순진한 필자의 모습을 다시금 생각할 수 있었다. 만약 여러분이 세 번째 타입의 사람, 즉 다른 이가 노력한 결과를 훔쳐 자기 것으로 만드는 사람들을 만난다면 어떻게 할 것인가?

제일 어려운 점은 이러한 문제를 외부에 알리게 되면 적절한 조치가 취해져야 하는데 우리나라에서는 결국 둘 다 똑같은 사람으로 간주하는 분위기가 있어 매우 골치 아프게 된다. 좋은 것이 좋은 거고 안 좋은 것은 덮어 두자는 분위기가 지배적이기 때문일까? 필자 역시 이러한 분위기에 많이 편승한 것도 사실이다. 이런 세 번째 타입의 사람들로부터 받은 상처에 대해 여러 가지 얘기를 나누었는데, 그 과정에서 다음과 같은 조언도 들을 수 있었다.

“세 번째 타입의 사람은 너에게 발톱을 드러낸 사람이다. 하지만 그것은 벌의 침과 같다. 남의 것을 그렇게 빼앗아 버리면, 그 다음에는 다른 사람들이 그 주위에서 사라져 자연히 도태하게 된다. 따라서 그 부분에 대해서는 너무 민감하게 생각하지 마라. 그리고 다음에 그 사람을 다시 만나면 너에게 항상 커다란 마음의 짐을 지고 있으므로 비슷한 일을 다시는 만들지 못할 것이니 좋은 경험했다고 생각해라. 이런 사람 몇 명으로 인해 다른 사람을 믿지 못하는 것은 협업으로 얻을 수 있는 많은 이점을 잃게 한단다.”

이어서 다음과 같은 얘기도 들었다.

“어쩌면 가장 주의해야 하는 사람은 세 번째 타입이 아니라 네 번째 타입이야. 너 죽고 나 죽는 사람들. 중요한 것은 서로가 죽고 있다는 사실을 잘 모른다는 것이지. 대부분 인맥으로 발생되는 문제인데 지연과 학연이라는 인연 때문에 냉철한 판단을 하지 못해 발생한단다.”

아마 좋은 게 좋다는 문화로 인해 문제점을 그대로 가져가, 나중에 문제가 펑하고 터지는 그러한 경우를 말하는 것이다. 모든 일이 잘 될 거라는 낙관론을 가지고 팀플레이를 믿기보다는 팀원 간의 책임회피가 일어나지 않으며 전체 업무를 세세하게 뚫어보는 시선을 가지는 것이 중요하다.

그래도 팀플레이를 해야 하는 이유
예전에는 명의(名醫) 한명이 맥을 짚고 여기저기를 살펴보면서 어디가 나쁘고 어디가 좋은지를 알 수 있었지만 현대에 들어서는 혼자서 모든 병을 고치기란 불가능하다. 그래서 함부로 배를 가를(문제를 해결할) 수는 없다. 그만큼 소프트웨어가 복잡해졌기 때문에 명의에 해당하는 전문가 여러 명이 모여야만 문제를 해결할 수 있는 상황이다. 그럼 어떻게든 팀을 이끌어야 하는데 그 해답은 어디에 있을까? 필자는 그 해답을 이미 마소 2008년 9월호에 ‘팀 생산성을 높이기 위한 패턴 이야기’라는 주제로 기고한 바 있으며 필자의 블로그에도 그 내용이 올라와 있으니 참고하길 바란다. 현재 초보나 중급 개발자가 할 수 있는 것은 계속해서 인맥을 만드는 일이다. 지금 당장은 커뮤니티 활동을 통해 인맥을 쌓았다고 해서 크게 이익을 얻을 수는 없지만 나중에 때가 되면 다 큰 밑천이 될 것이다.

꿈을 잃지 말자!
필자는 다른 사람을 감동시킬 만한 멋진 소프트웨어를 만들고 싶은데 많은 회사들은 “적당히 만들어도 잘 돌아가고 잘 먹고 사는데…”라는 말로 개발자의 조그만 꿈까지 꺾고 있다. 물론 수당 없는 야근과 박봉이 크게 작용하는 것도 있겠지만…. 마치 『갈매기의 꿈』에서 나오는 조나단으로 시작했지만, 현실은 탑골 공원에서 살찐 비둘기로 우리를 만들어가고 있는 셈이다. 필자는 이런 상황에서도 꿈을 잃지 말라고 여러분에게 말하고 싶다.

‘Dream’이라는 단어의 어원을 찾아보면 ‘Draw’ 즉 끌어 주다라는 의미가 있다. 꿈을 잃게 되면 여러분의 목적도 사라지고 지치게 된다. 여러분의 꿈은 무엇인가? 꿈을 찾아 멘토나 주위의 선배들에게 조언을 구하고 롤 모델을 찾아보길 바란다. 어딘가 달려갈 수 있는 목적의식이 생길 것이다. 그 후에 꿈을 찾거나 이미 꿈을 가지고 이루고자 하는 독자들은 이어서 소개할 꿈을 이루는 8가지 법칙을 보며 하루하루 꾸준히 걸어 보자.

– ‘나도 할 수 있다’는 생각으로 새롭게 시작하라
당신에게 무궁무진한 잠재력이 있다는 것을 기억하자. 신이 준 잠재력의 5%만 사용해도 천재가 된다.

– 당신의 목표를 마음의 소원과 일치시켜라
막연한 욕망은 소원이 아니다. 소원을 분명하게 확인하고 총력 투구하라.

– 부정적인 생각을 버려라
“나는 안 돼” “할 수 없어” “나 같은 게 뭘”이라는 소리가 들려오거든 “이전의 나는 무능했지만 이제는 달라져 새사람이 되었다”고 응답하자.

– 긍정적인 말을 매일 반복하라
“나는 성장하고 있다” “나도 성공할 수 있다” “해낼 수 있고말고”라고 다짐하자. 말은 힘과 용기를 더하는 영양소이다.

– 대가를 지불하라
진정한 성공은 땀과 수고를 통해서만 완성된다. 심는 대로 거두는 법이다.

– 어려움이 닥쳐도 낙심하거나 포기하지 말라
일곱 번 넘어져도 여덟 번 일어선다는 용기와 신념을 가지자.

– 모든 일에 감사하라
실패는 실패가 아니라 성공의 밑거름이라고 생각하자.

– 큰 꿈을 가져라
꿈꾸는 데에는 수고도 돈도 필요치 않다

참고자료

1.   한국어 강의 – JAWS: 패턴을 이용한 웹서버 만들기, 손영수, http://www.evacast.net
2. 『생산성을 높이는 패턴이야기』, 손영수, 마이크로소프트웨어 2008년 9월호
3. 『SOA와 WCF』, David Chapell, Microsoft Architect Forum 2007

Join the conversation! 8 Comments

  1. 첫번째 타입의 사람도 처음부터 그렇게 해야겠다고 깨달음을 얻은 건 아닐꺼에요. 사람은 발전하는거니까… 믿고 돕다보면 기술적으로도, 인간적으로도 성장하는 거겠죠. 정말 좋은 글입니다! ^^

    응답
  2. 좋은 글 잘 읽었습니다. ^^
    아직 시작 단계인 3년차 좀더 노력해야할듯 하네요…

    응답
  3. 현수님>>

    도움이 되었다니 다행이네요 ^^
    서로 돕고 사는 아름다운 세상이 어서 왔으면 합니다.

    응답
  4. 맹금이 님>>

    힘내시고, 우리 모두 홧팅하자구요 ^^

    응답
  5. 4 종류의 사람… 저번에 말씀해주신 이야기군요!
    항상 알면서도 그래도 1번 타입과 같은 사람을 바라게 되네요 ㅎㅎㅎ
    항상 좋은 조언과 충고 감사합니다 영수 형님!

    응답
  6. 하이 리원군>>

    그래 현실을 조금씩 알다보면,
    좀더 세상사는 방법을 알게 될거야.

    힘내고 잘지내라. 인턴 축하해. 홧팅 ^^

    응답
  7. 안녕하세요~ 최용준입니다.
    오~ 블러그에도 올리셨군요~ ^__^
    좋은 글 및 조언 정말 감사합니다.

    응답
  8. 용준님>>
    안녕하세요 용준님.
    저도 아직 많이 부족한 개발자인데, 좋게 글을 봐주셔서 감사합니다.

    조금더 지식을 나누라는 말로 알고, 더욱 나눔에 힘쓰도록 하겠습니다. 감사합니다. ^^

    응답

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중

This site uses Akismet to reduce spam. Learn how your comment data is processed.

카테고리

Articles, My Activity, My Thinking

태그

, , , , , ,