2012년 8월 6일 월요일

소프트웨어 개발자의 나아갈 길

소프트웨어 개발자의 경력이 제대로 보장 받지 못하는 가장 큰 이유는 회사, 사회, 문화의 문제 때문이다. 그렇다고 개발자 된 입장에서 회사가 바뀌고 사회가 바뀌기만을 기다릴 수는 없다. 이는 마치 닭과 달걀의 관계처럼 누가 먼저인지 알기 어렵다. 어느 한쪽이 먼저 깨끗하게 해결되면 자연스럽게 전체가 해결되지만 그걸 기대하기는 현실적으로 어렵다. 경영자도 회사가 살아남고 경쟁력을 키우기 위해서는 바뀌어야 하지만 개발자도 뭔가 대책을 수립해야 한다.

주변에 좋은 롤모델이 없는 개발자들은 자신의 개발자로서의 경력을 보장 받고 더 뛰어난 개발자가 되기 위해서 어떻게 해야 하는지 알아내기가 정말 어렵다. 그냥 상황이 주어진 대로 열심히 할 뿐이다. 그러다 보면 정치적으로 밀리고 실력에서도 뒤쳐져서 최악의 상황이 되곤 한다. 단지 열심히 밤새워 일했을 뿐이데 결과는 그리 좋지 않고 미래는 더움 암울하다.

그렇다면 쉽지 않은 일이지만 개발자가 어떻게 해야 하는지 알아보자. 물론, 소프트웨어 개발자의 종류가 너무 많고 OS Kernel 개발자 등 특수분야의 개발자들은 특성이 매우 독특해서 여기에 해당이 되지 않을 수도 있지만, 대부분의 개발자에게는 해당하는 얘기일 것이다.

첫째, 관리와 개발 일을 분리하라.

관리자가 될 것이 아니라면 관리 일은 아무리 열심히 해도 개발자 경력에 별 도움이 안된다. 하지만 회사의 사정상 싫어도 관리 일을 떠맡을 수 밖에 없는 경우가 있다. 그런 경우에도 본인의 정체성을 명확히 해야 한다. 개발과 관리 일을 섞어서 하지 말고 구분해야 한다. 즉, 자신이 하고 있는 일 중에서 어떤 일이 관리고 어떤 일이 개발인지를 구분해야 한다. 물론 모호한 경우도 있다. 여기서 개발이 주업이고 관리는 부업임을 명확히 해야 하고, 언제든지 관리 일은 버릴 수 있도록 준비를 해야 한다.

경영자에게도 개발자가 관리일 때문에 부담이 되고 효과적이지 않다는 것을 알려라. 많은 경영자들이 그 사실을 잘 모르고 있기 때문에 자주 세뇌를 시켜야 한다. 그럼으로써 관리 일은 점점 최소화를 시켜나가야 한다.

보고서 작성, 경영회의 참석, 팀원 관리, 일정관리, 고객 접점 업무 등은 거의 관리 일이므로 최소화 노력을 해야 한다.

둘째, 경력과 수준에 맞는 일을 해라.

경력이 많아지면 그게 걸맞는 수준의 일들을 해야 한다. 경력이 늘어가도 똑같은 일을 그저 더 빠르고 능숙하게 하고 있다면 밥값을 못하고 있을 가능성이 높다. 그런 상태라면 개발자 경력을 오래 보장 받기는 어렵다. 결국 도태될 것이다.

경력이 늘어갈수록 누구나 할 수 있는 일들은 후배에게 물려 주어야 한다. 그리고는 설계, 분석 업무의 비중을 높이고 회사의 기술 전략에 신경을 써야 한다. 경력이 더욱 늘어갈수록 자신의 팀 뿐만 아니라 타팀, 더 나아가서 회사 전체의 프로젝트에 기여를 해야 한다.

그러기 위해서 문서화는 필수다. 개발 내용이 문서로 적혀 있어야 서로 리뷰가 가능하고 타팀의 프로젝트도 검토를 해서 나의 전문지식을 불어 넣을 수가 있다. 물론 내 프로젝트도 문서화를 해야 다른 사람들의 도움을 받을 수 있다. 문서화 되지 않은 내용은 뇌를 꺼내서 리뷰할 수는 없다. 아무리 빨리 개발한다고 해도 리뷰 없이 개발되는 프로젝트는 주먹구구로 개발이 되는 것이고 아주 작은 프로젝트이거나 아주 재수가 좋은 경우를 빼고는 폭탄을 안고 있는 것과 같다. 이런 주먹구구식 개발은 대부분 첫번째 프로젝트부터 더 오래 걸리고, 시간이 지날수록 점점 비효율적으로 된다.

그런 주먹구구 환경에서는 개발자가 경력에 맞는 수준의 일을 할 수 없다.

셋째, 권력욕을 버려라.

상황에 따라서 매우 어려울 수 있다. 특히 대기업인 경우 더욱 그렇다. 조직에서 권력을 얻어야 제대로 대우를 받을 수 있다면 이를 뿌리치기는 어렵다. 이런 경우는 차라리 개발자로서의 경력은 포기하는 것이 나은 판단일지도 모른다. 개발자로서 계속 나아가겠다고 결심을 했다면 어쨌든 권력욕은 버려야 한다. 권력을 얻기 위한 거의 모든 행동은 개발 일과는 거의 관계가 없다. 방해만 될 뿐이다.

개발자는 권력보다는 뛰어난 기술력에서 자연스럽게 나오는 파워를 가져야 한다. 물론 조직 문화가 이를 받아들이지 않는 경우도 많이 봐왔기 때문에 쉽지 않은 일임을 잘 알고 있다. 그렇다고 권력을 쫓아서는 개발자의 길과는 멀어질 것이다.

넷째, 끊임 없이 코딩하라.

개발자는 30년을 일해도 감독, 코치가 아니라 선수다. 코딩에서 손을 놓으면 급속도로 개발자의 길과 멀어진다. 주변을 보면 관리나 좀 하고 코딩은 전혀 안하면서 여기저기 감 놔라 대추 놔라 훈수를 두는 무늬만 개발자가 매우 많다. 이들은 개발자가 아니고 개발자였을 때 쌓아 놓은 지식의 약발도 별로 오래 가지 않는다.

물론 경력이 늘어 갈수록 코딩 시간은 줄어들 것이다. 하지만 여전히 코딩은 계속 해야 한다.

다섯째, 새로운 기술을 익혀라.

개발자라면 좋아하는 기술 몇 가지만 평생 써먹기 어렵다. 꾸준히 새로운 기술을 익혀야 한다. 시간이 흐를수록 점점 더 많은 새로운 기술들이 나오고 있다. 이를 따라잡기는 보통 어려운 일이 아니다. 그래서 개발자들이 다른데 신경 쓸 시간이 어디 있겠는가? 그렇다고 모든 새로운 기술을 익히는 것은 불가능하다.

어떤 기술은 용어 정도만 익히기 위해서 10분 정도 투자를 하고, 어떤 기술은 1시간 정도 투자를 해서 뭔지 돌려봐야 하는 것도 있다. 또 어떤 기술은 하루를 투자해서 샘플을 만들어 봐야 하는 기술도 있다. 이를 잘 구분해서 적절하게 시간 투자를 해야 한다. 모든 기술을 다 마스터 할 필요는 없다. 나중에 필요할 때 언제든지 생각이 나게 하면 된다. 필요할 때 필요한 만큼 더 익히면 된다.

오랫동안 써왔던 기술만 고집하면 한계에 다다른다.

여섯째, 소프트웨어 개발 전문가로 포지셔닝을 하라.

본인의 정체성을 명확히 하라. 경영자가 본인을 소프트웨어 전문가로 믿도록 하라. 경영자가 기술 전략을 같이 의논하게 하고 기술 관련된 정책을 제대로 수립할 수 있도록 보좌하라. 만능인 것처럼 행세하는 것은 효과적이지도 않고 신뢰도 떨어진다. 개발이 아닌 일은 다른 사람들이 더 잘할 수 있다. 고객도 잘 알고, 영업도 알고, 전략도 잘 안다고 아무리 아는척 해봤자 밑천이 금방 드러난다. 제일 잘하는 개발로 승부를 하라. 이는 회사 내에서 누구도 넘보지 못한다.

애매한 만능맨보다는 개발 전문가의 위치가 회사 내에서 더욱 확고할 것이다. 구조 조정 시에도 관리자나 애매한 위치의 사람들은 자를 수 있어도 개발 전문가로 잘 포지셔닝하면 쉽게 자를 수 없다. 물론 제대로 생각이 박힌 경영자가 있는 경우에 그렇다.

일곱째, 후배들의 롤모델이 되어라.

세상은 결국 돌고 도는 것이다. 본인에게는 롤모델이 없어서 고생을 많이 했을 것이다. 하지만 후배들에게는 롤모델이 되어서 후배들이 그 고생을 하지 않도록 하라. 더 많은 시행착오를 겪겠지만 이는 선구자이기 때문이다. 선임 개발자가 어떤 식으로 일하는지 보여주고 기술력에서 오는 파워를 보여줘라. 이는 본인을 위해서도 더 일하기 좋은 개발환경을 만드는데 도움이 되는 일이다.

이 글은 Tech it에 기고한 글입니다.

댓글 2개: