대한민국 개발자로 산다는 것
인간은 자신의 삶이 부조리하지 않다고 스스로 설득하면서 생을 보내는 동물이다.
-알베르 카뮈
이 바닥에는 다시 발 들이고 싶지 않네요.
함께 일하던 여자 선배가 회사를 떠나면서 내게 한 마지막 인사말이다. 같은 프로젝트에서 후배인 나를 살뜰히 챙겨주던 선배는 약학대학으로 진로를 결정한 뒤, 그렇게 회사를 떠났다. 그 후로도 금융권으로 진로를 옮긴 동기, 영원한 '을'이 싫어 '갑' 회사로 이직한 선배, 프로젝트 중간에 이건 아닌 것 같다며 대학원에 진학한 후배까지. 너무도 열악한 환경에 실망을 거듭하면서도 견디다 못해 개발자의 길을 그만뒀다.
나는 그들에 비하면 꿋꿋하게 살아남은 사람이다. 아니, 어쩔 수 없이 떠나지 못해 남아있는 사람이다. 하지만 40대가 가까워지면서 먼저 떠나간 사람들이 잘한 결정이었음을, 그들의 용기 있는 행동이 부럽고 한편으론 그때 난 왜 결정을 내리지 못했을까 후회스럽기도 하다. 난 언제까지 개발자를 할 수 있을까? 이 나이에 그만두면 개발자가 아닌 다른 무슨 일을 할 수 있을까? 부쩍 커버린 아이들을 보며 지나간 세월이 주마등처럼 스쳐간다.
대한민국 소프트웨어 생태계를 막장 노가다로 표현하는 사람들이 많다. 내 경험에 비춰봐도 이 말을 굳이 부인하고 싶지는 않다. 실제 우리나라 IT 서비스 분야는 상당 부분 건축 분야의 공정과 용어, 산출물 등을 차용해 와서 그런지 건축의 문화가 잔존한다. 건축에서 납기를 맞추기 위해 노동력을 쏟아붓듯, 소프트웨어 산업 역시 부족한 일정을 맞추기 위해 초과근무는 말할 것 없고, 인력을 대거 투입해서 당면한 문제를 해결하려고 한다.
주위 개발자들과 대화하다 보면 비전이 없다는 소리를 자주 듣는다. 세상은 앞으로 '소프트웨어가 중심이다', '소프트웨어가 점차 하드웨어를 대체한다', '소프트웨어가 미래다'라고 강조하고 있는데, 실제로 체감하는 개발자들의 일상은 왜 이리도 고달픈지, 왜 10년 전과 비교해서 나아진 게 없는 건지, 우리들의 미래는 왜 이리도 불투명한 건지. 세상이 말하는 소프트웨어의 밝은 미래와는 동떨어진 개발자들의 미래를 걱정하는 소리가 내 귓전에 끊이지 않는다.
사람과 마찬가지로 소프트웨어에도 탄생에서 소멸까지 이어지는
생명주기(Life Cycle)가 있다.
생명주기는 소프트웨어 개발의 기본 골격이 되어 단계별로 진행 상황을 파악하고 산출물을 준비하기 쉽게 도와준다. 가령 분석 단계는 해당 단계에서 해야 할 일과 정의된 문서를 챙기고, 공동의 목표를 위해 고객과의 합의점에 도달하는 데 이바지한다. 나는 개발자의 삶 또한 정형화된 소프트웨어 생명주기처럼 잘 짜여 있다고 생각한다. 시스템이 폐기되기 전까지 생명주기를 무한히 반복하듯, 개발자의 일상 또한 거기에 맞춰져 사이클을 되풀이한다.
실제로 내가 경험한 소프트웨어 생태계의 고질적 문제점은 새로운 프로젝트를 진행할 때마다 비슷한 문제를 겪어야 한다는 것이다. 요구사항을 정의하는 단계에서는 지속적으로 요구사항이 추가되거나 고객의 요청이 끊임없이 변화해 프로젝트 내내 일정에 쫓기게 된다.
계획 단계에서는 계획을 수립하는 관리자들이 대부분 제대로 된 교육을 받지 않은 상태로 직급이 차서 관리자가 된 개발자들이다 보니 충분한 검토 없이 바로 개발을 진행하는 경우가 많다. 그 결과 재개발을 해야 하는 경우까지 발생한다. 또한, 구현 단계에서는 충분치 않은 개발 기간으로 품질이 떨어지는 코드를 양산하고, 테스트는 전문인력이 아닌 지금 당장 코딩을 하지 않는 유휴 인력이나 신입 인력이 진행하기가 부지기수며 그나마도 시간적 여유가 없으면 대충 해도 되는 것쯤으로 천대받는다. 상황이 이렇다 보니 실제 구현된 시스템을 인수해 운영하는 쪽에서는 유지보수에 막대한 시간을 들여야 하고 악순환은 생명주기 안에서 끊임없이 반복된다.
이러한 일련의 과정은 개발자로서의 생활에 회의감이 들게 했다. 또한 반복적인 일상이 되풀이될수록 나는 내 인생을 살고 싶다는 강렬한 욕구에 사로잡혔다. 무수한 시간 동안 회귀하던 주기 안에서 나만의 생명주기에 따르고 싶었다.
가만히 보면 우리 주변에 놓인 대부분의 것들은 각자의 생명주기를 가진다. 제조 분야의 시스템을 구축하다 보면 제품은 도입, 성장, 성숙, 쇠퇴라는 제품 생명주기(Product Life Cycle)를 따른다는 사실을 알게 된다. 그리고 실제 특정 제품이 현재 어느 단계에 있는가를 보고 마케팅 전략을 세우고 신제품 출시를 결정한다.
사람의 생명주기는 어떤가? 순수한 어린아이가 야망을 품은 청년이 되고, 이내 현실의 한계에 부딪혀 주저앉은 장년이 되고, 결국 노인이 되는 것이 일반적인 인간의 생명주기다. 싫든 좋든 우리의 선택과는 무관하게 탄생과 함께 인생의 시계는 흐르며 죽음의 순간에 멈춰 선다. 다만 우리가 선택할 수 있는 것은 진부한 인생의 사이클을 그대로 답습할 것인가 아니면 나만의 새로운 인생의 사이클을 만들 것인가이다.
나는 이따금 인간이 밥만으로는 살 수 없다는 것을 뼈저리게 느낀다. 그리고 이내 가슴 뛰는 새로운 모험을 하고 싶다는 열망에 사로잡히곤 한다. 단조로웠던 개발자로서의 생명주기에서 나만이 할 수 있는 무언가를 찾는 일은 나를 새롭게 창조하는 과정이 될 수 있다는, 내 인생이 무의미하지 않다는 희망의 씨앗을 심어줬다. 누구보다도 평범하다는 것은 달리 말해 특별해질 수 있음을 의미한다. 대한민국의 한 평범한 개발자가 비범함을 발견하고 자신의 인생을 설계한다는 생각만으로도 눈시울이 붉어진다. 나는 오늘 나만의 특별한 개발자 생명주기(Developer Life Cycle)를 그려본다.