2021년 5월 26일 수요일

당신은 소프트웨어 엔지니어가 아니다

 

한국에서 소프트웨어의 본질에 대해서 얘기하다 보면 소 귀에 경읽기와 같아 하고 싶지 않지만 가끔가다 얘기하고 싶게 만드는 자극적인 이벤트가 생긴다. 그런 이벤트는 둘 중의 하나인데 너무 어처구니없는 황당한 기사나 정책이 나올 때가 첫번째이고 두번째는 오랜 경륜을 거친 진정한 전문가가 나의 생각과 일치되는 말을 했을 때이다. 깊은 마음 속 감동의 기쁨이다

첫번째 경우는 너무 빈번하다 보니 요새는 무감각한 상태가 되어 버려서 왠만한 엉터리 정책이나 기사가 아니면 지적하고 싶은 자극을 받지 않는다. 이번 경우는 두번째 경우로서 2021525(즉 어제) “Microsoft Build Conference”의 키노트 연설에서 마이크로소프트의 CEO인 사티야 나델라가 한 말이다. 유튜브에 16분짜리 동영상이 있으니 부담 없이 시청할 수 있다.

 사티야 나델라는 기술 전략에 뛰어난 통찰력을 가지고 있어 망해가는 마이크로소프트를 살렸다고 해도 과언이 아니다. 나와는 직접 같이 일한 적은 없지만 썬 마이크로시스템즈에서 같은 시기에  소프트웨어 엔지니어로 근무 했었다. 그의 연설은 기본적으로 마이크로소프트의 전략과 기술 소개가 핵심이다. 그러다 보니 마이크로소프트가 인수한 GitHub, Azure, Teams와 같은 핵심 서비스들이 소개되고 Platform, Digital Twin등과 같이 기술 전략보고서에 늘 등장하는 단골 용어들도 나온다. 여기까지는 그냥 사실 확인 정도로 부담 없이 들을 수 있었다.  

 무심하게 듣고 있던 나를 깨운 것은 다음 문장이었다. 작년에 자동차 인더스트리에서 기계공학자보다 소프트웨어 엔지니어를 더 많이 채용했다 라는 말이었다.

 실리콘밸리에서의 내 직장 경험을 보면 원자력발전소에서 소프트웨어를 개발할 때는 같이 일하는 원자력공학 엔지니어가 있었다. 물론 그들도 소프트웨어 개발을 한다. 인공위성을 만드는 회사에 있을 때도 옆에는 인공위성 전문 엔지니어가 있다. 그들도 소프트웨어 개발을 한다. CAD를 만드는 회사에서 일했을 때는 옆에 전자공학 엔지니어가 있었다. 물론 그들도 하루 종일 소프트웨어를 개발한다.

 사티야 나델라는 이 연설에서 그런 산업 전문가를 Domain Experts” 라고 명명했다. 그리고 소프트웨어 전문가를 Pro-Developers라고 명명한다. 그리고 그들이 힘을 합쳐 일한다고 말한다. 여기서 중요한 것은 소프트웨어 엔지니어나 Domain Experts라는 사람들이나 모두 프로그램을 한다는 것은 비슷하지만 근본적으로 하는 일이 다르고 기술도 다르다는 사실이다. 프로그램을 한다고 해서 다 Pro-Developers는 아니다. 요새는 온 국민이 프로그램을 배운다고 하는데 그 중에 Pro-Developer가 될 확률은 거의 없다.

 나는 항상 소프트웨어 엔지니어였지만 원자력공학 엔지니어도 아니었고 전자공학자도 아니었고 기계공학자도 아니었다. 나는 소프트웨어 엔지니어로서 소프트웨어 개발을 필요로 하는 곳에서는 Domain(즉 산업분야)와 상관없이 내 소프트웨어 전문성으로 업무를 수행해 왔다. Domain Experts들은 소프트웨어 엔지니어들을 필요로 하고 소프트웨어 엔지니어들은 Domain 지식이 필요하다. 소프트웨어 엔지니어들만 모여 있다면 개발할 대상이 없기 때문에 할 일이 없다. 개발할 대상도 필요하고 그 대상 분야의 전문성이 필수적으로 필요하다. 반대로 소프트웨어 엔지니어가 없는 Domain Experts만 있다면 그들은 조그만 초가집은 만들 수 있을지 몰라도 Platform과 같은 거대한 빌딩은 만들어 낼 수 없다.

 Domain ExpertsPro-Developers는 서로 꼭 필요한 존재이다. 한 사람이 둘을 다 잘한다는 것은 시간적으로 불가능하다. 자신이 둘을 다 잘한다고 주장한다면 둘 다 모두 못한다는 얘기이다. 프로 농구선수와 프로 축구선수를 둘 다 한다는 것은 불가능하다. 그냥 보통 사람보다 잘 하는 동네 팔방미인 소리를 들을 수는 있지만 프로는 절대 아니다.

 사티야 나델라가 말한 통계로 추측하면 이제는 Domain 지식의 역할보다는 그를 엮어서 거대한 소프트웨어 제품을 만들어 내는 소프트웨어 엔지니어의 역할이 더 많아졌고 더 중요해 졌다는 것이다.

 여기서 잠깐 한국의 상황으로 돌아와서 나의 경험을 얘기하자면 한국에는 소프트웨어 엔지니어가 거의 없다. 한국에서는 소프트웨어 개발 역량이 중요한 것이 아니라 Domain지식을 많이 가지고 있는 사람이 중요한 것으로 인식되어 소프트웨어 개발 역량은 향상되지 않고(물론 배울 곳도 없고) 같은 종류의 회사 아니면 갈 곳이 없는 엉성한 Domain Experts 만 존재한다.

 대부분의 소프트웨어 개발자의 경력진행을 보면 최초에 어떤 Domain의 회사에 취업했는지가 평생 갈 수 있는 경로를 협소하게 정해 버린다. 금융계에서 소프트웨어 개발을 하던 사람이 자동차 회사에 취직하기는 불가능하다. 소프트웨어 엔지니어를 채용하는 것이 아니라 자동차 개발자를 원하기 때문이다.   

 그래서 나는 한국에서 소프트웨어 개발자라고 주장하는 사람들에 대해 당신들은 소프트웨어 개발자가 아니다라고 말한다. 그 대신 당신은 프로그램을 적당히 할 줄 아는 자동차 전문가다라는 식으로 말한다.

 그럼 도대체 무엇이 소프트웨어 전문가인가? 여기서는 이해하기 어려운 추상적인 영역으로 들어간다. Domain에 특화된 Hard Skill이 아닌 모든 소프트웨어 개발에 사용되는 일반적인 Soft Skill 분야인데 분석, 설계, 컴포넌트와 인터페이스의 이해, 협업 등 창조적이고 문화적인 요소가 중요하며 구체적으로 눈앞에 보여주기 어려운 영역이다. 인생에서 어떤 영역이든지 전문가가 되려면 구체적인 지식의 모음보다는 철학적이고 추상적이며 잘 보이지도 않는 단계를 꼭 넘어가야 한다

골프 등 모든 스포츠에서 공통적으로 힘을 빼라와 같은 추상적인 표현을 왜 뉴톤 단위의 숫자로 표현할 수 없는가를 이해할 수 있어야 비로서 전문가가 될 수 있다. 힘을 빼라는 코치에게 몇 뉴톤이면 됩니까하는 질문은 고등학생 정도나 할 질문이지 전문가가 할 질문은 아니다.  내가 고교생 수준에서 답을 해준다면 당신이 가지고 있는 모든 기술 중에서 Hard Skill은 20% Soft Skill은 80%를 가져야 한다고 억지로 답을 해주겠다. 현재 한국의 대부분의 개발자는 반대로 Hard Skill은 80%, Soft Skill은 20%를 가지고 있다. 소프트웨어 개발자라고 말할 수가 없다. 기본조차도 되어 있지 않은 경우가 대부분이다. 

하여튼 결론은 한국에는 진정한 소프트웨어 엔지니어는 없다. 내가 만약 과거에 없었던 새로운 산업이 생겨서 소프트웨어 개발자를 채용해야 한다면 마음에 드는 개발자는 극히, 아주 극히 소수에 불과하다. 예를 들어 구글이나 페이스북이나 클라우드나 블록체인이나  다 새로 생긴 산업이고 그런 경우에 80%의 Hard Skill은 아무 곳에도 쓸데가 없다. 새로운 사업에서 소프트웨어 개발자에게 필요한 것은 Soft Skill 뿐이다. 

현재 한국에는 다양한 산업의 수 많은 Domain Experts만 있다. Java나 Python으로 Git을 사용해 몇십년을 일했다고 해도 자아도취한 경이적인 숙련공이 될지는 모르지만 진정한 Pro-Developer가 되기 위한 조건과는 거리가 멀다. 프로그래밍 언어나 도구와는 별개의 문제이다. 하여튼 내가 원하는 개발자는 아니다.  이런 잘못된 결과의 피해는 어느 정도 규모 이상의 소프트웨어는 만들 수 없다는 것이다. 대표적인 것이 사티야의 연설에서도 나오는 플랫폼이다. 소프트웨어 전문가가 없이는 플랫폼을 만들 수가 없다. 몽상과 열정으로 시작해 흉내만 내거나 장난감하나 만들다가 끝난다. 그런 필연적인 결과를 모르고 시작할 뿐이다. 근거 없는 열정은 동키호테의 무모함으로 결국은 회사와 자신에게 피해를 입힌다. 어떤 산업 Domain 영역에서도 소프트웨어 전문가의 도움 없이는 큰 규모의 소프트웨어는 만들어 낼 수 없다.

 전문가는 커녕 소스코드 관리시스템도 사용하지 않으면서 소프트웨어 개발자라고 말하는 중견 소프트웨어 회사도 있다. 어떻게 이런 어처구니 없는 현상이 벌어졌는지는 미스터리 하지만 하여튼 소프트웨어의 60년 역사에서 보기 어려운 소프트웨어 개발자의 행태가 지금도 벌어진다. 반대로 진짜 소프트웨어 전문가는 그런 가짜 소프트웨어 개발자들 사이에서 오리 떼 속의 백조로 왕따당하는 것이 현실이다. 물론 이렇게 된 주요 이유 중의 하나는 회사의 무지한 리더나 관리자이다. 대학교육의 잘못도 절대 빼 놓을 수 없다

기술을 잘 이해하는 사티야 나델라는 빌 게이츠의 지원아래 소신대로 마이크로 소프트를 살려내 다시 훌륭한 회사로 만들어 낼 수 있었다. 빌 게이츠와 사티야 나델라가 없었다면 마이크로소프트는 지금과는 완전히 다른 평범한 회사가 되어 있었을 것이다.

 소프트웨어 엔지니어를 고용해서 엉성한 Domain Experts로 만들어 버리는 한국의 회사들은 영원히 대규모의 소프트웨어도 만들어 내지 못하고 지금까지 그래왔듯이 글로벌경쟁은 여전히 실현 불가능한 꿈으로만 남아 있을 것이다. 사티야 나델라의 지적처럼 Pro-Developer의 중요성을 이해하려면 이번 기회에 먼저 Pro-DevelopersDomain Experts와의 차이점을 정확히 이해하려는 노력을 하기위한 계기가 되기를 바란다.

 

 

 

댓글 4개:

moneyqna :

안녕하세요! 게시글 잘 읽었습니다.
게시글로 Domain Experts와 Pro-Developer의 구분이 되는 것 같습니다.
혹시 생각하시는 Pro-Developer가 되기 위한 조건들은 어떤 것들이 있을까요?

김익환(Ike Kim) :

모든 소프트웨어 개발에 필요한 공통된 역량을 길러야 되는데 분석, 설계, 코딩, 언어의 본질에 대한 이해, 기반시스템, 공유 기술, 프로세스등이 있습니다. 지식, 경험, 시간이 모두 필요한 것들이죠.

Unknown :

네, 답변 감사합니다.

익명 :

최근에 많이 생각하고 있는 지금의 회사에서만 필요한 사람이 아닌 개발자로써 고민을 구체적인 글로 보니 머리속이 정리되는 느낌이네요. 감사합니다.