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와의 차이점을 정확히 이해하려는 노력을 하기위한 계기가 되기를 바란다.

 

 

 

2021년 3월 6일 토요일

개발자 한 명이 백 명의 일을 할수 있나?

 

소프트웨어에 대해서 얘기하면 꼭 나오는 말이 있다. 훌륭한 개발자의 능력이 보통 개발자의 능력보다 몇 배 뛰어난가 하는 주제이다. 소프트웨어 공학가인 자크만(Sackman)은 이미 1968년도에 개발자 사이에는 28배의 차이가 난다고 발표했고 페이스북의 주커버그는 2011년에 100배의 차이가 있을 수 있다고 그냥 말했다. 이런 말장난을 듣고 호들갑 떠는 한국 소프트웨어 관련 교수, 정부, 경영진들을 보면 소프트웨어를 손톱만큼이라도 이해하고 있는지에 의문이 든다. 나도 이런 말을 인용해서 사용하기는 했지만 "소 귀에 경읽기" 인 것을 알고 나면서부터는 별로 인용하지 않는다. 또 그런 논문이 잘못되었다고 반발을 제기하는 논문도 있다. 다 이론 가지고 싸우는 사람들의 소일거리며 밥벌이 수단이다.

 "True Technologist"라고 불리는 마이크로소프트의 팀장이었던 실전 소프트웨어 전문가인 조엘 스폴스키(Joel Spolsky) 같은 사람들은 그런 이론가들을 경멸한다. 나도 당연히 조엘 스폴스키, 스티브 맥코넬(Steve McConnel), 밥 글래스(Robert Glass), 켄트 벡(Kent Beck)같은 실전 전문가들을 좋아하고 공감한다. 40년의 경험과 일치하기 때문이다. 반면에 이론가들하고는 얼굴 마주치기도 싫다. UML을 만들어낸 "3 Amigo"라고 불리는 야콥슨, 부치, 럼바와 같은 이론가들도 유행을 만들어 유명해지는 데는 성공했지만 과연 소프트웨어의 개발역량에 이바지를 했는지는 회의적이다. 이미 다 행해지고 있는 관행을 도식화 했을 뿐이지 새로운 개념을 만들어 낸 것도 아닌데 그 처세술에 놀랍기만 하다. 그래서 조엘 스폴스키는 그런 사람들에게 "화성에 가서 살고 제발 지구에 내려와서 피해를 입히지 말라"고 했다. 나도 그런 한국의 교수들이나 대기업의 경영진들을 보면 화성에 가서 살라고 하고 싶다. 그들도 목구멍이 포도청이기 때문에 지구를 떠날 리는 만무하지만 제발 피해를 덜 입히는 좋겠다는 생각은 항상 가지고 있다.

 다시 100배 얘기로 돌아와서 나는 차라리 10,000배라고 말하겠다. 어차피 다른 사람은 못할 일을 한 사람이 할 수 있다면 무한대의 배율이지 몇 배가 아니다. 퍼센티지나 배수를 얘기할 때는 분자와 분모를 정확히 얘기해야 한다. 지식산업의 세계는 모차르트나 아인슈타인과 같이 배수로 판단할 수는 없는 것이다. 노동산업에서나 숫자가 가능한 것이다. 억지로 강조하려다 보니 그냥 100배라고 얘기한다. 본질은 이해하지도 못하고 진짜 100배인가 보다고 착각하고 어떻게 하면 개발자들을 더 훌륭하게 양성할 수 있을까 하고 고민 같지도 않은 고민을 하면서 일을 벌이고 회사에서 급여를 타가기도 한다. 무지가 판치는 세상이니까 가능한 현상이다

소프트웨어가 지식산업이라고 말로만 떠들지 전혀 이해하지 못한 상태에서 발전에 장애가 되는 짓만 한다. 소프트웨어 산업을 발전시킨다고 하면서 노동집약산업 형태의 공장으로 만들고 잘되기를 바라는 것은 망상이다. 폴리페서들과 공무원들의 이해 관계가 맞아 떨어진 탁상행정도 마찬가지이다. 지난 20년 동안  정부에서 20개 정도의 법이 소프트웨어 진흥을 위해 만들어 졌으나 노동산업을 기본사상으로 시작했으니 잘 될 리가 없다.

 한국에서는 100배를 위해 노력하고 말고 걱정할 필요도 없다. 노동산업에서는 그런 일이 벌어 질 수가 없기 때문이다. 숙련공이라야 기껏해야 몇 배의 효율 밖에 나지 않는다. 훌륭한 개발자는 몇 배의 차이 정도 나는 코딩을 잘하는 것이 아니다. 분석이나 설계에서만 10,000배라는 상징적인 차이가 날 수 있다. 아니면 다른 사람들이 아예 못하는 것을 할 수도 있다. 모든 개발자를 코딩의 노동공장에 쏟아 부으면서 100배의 차이를 운운하는 것은 완벽한 무지의 소치이다. "무지를 치유할 수 있는 약은 없다."라는 속담처럼 적어도 과거 20년은 변하지 않았다. 정부나 기업이나 앞으로도 몇 십 년은 변할 기미가 보이지 않는다.

새 개발 도구나 관리의 효율화 같은 것이나 생각하는 상태에서 100배는커녕 2배 차이가 나면 다행이다. 말 잘하는 아첨꾼들은 몇 배의 능력이 있는 것처럼 포장할 수 있겠지만 삽으로 땅 파는 능력에서는 큰 차이가 나지 않는다. 그러면서 100배 가치 있는 훌륭한 개발자를 찾는다고 하는데 현실은 바보 개발자를 피하는 노력에 불과하고 숙련된 목수를 찾는 것에 불과하다. 숙련공을 찾아 헤매면서 훌륭한 개발자를 찾겠다고 하는 착각이다. 유행하는 개발언어나 도구를 아는 것을 훌륭한 개발자라고 하는 착각은 어디서 시작되었는지는 모르지만 그런 잘못된 생각이 만연되어 있다. 소스관리도구인 GIT를 아는 데는 반 나절이면 충분하고 파이썬은 2시간에 가르쳐 주는 것이 내가 배운 과목에서 벌어진 현상이다. 또 파이썬으로 숫자 인식하는 인공지능 기계학습 프로그램을 만드는 데는 보통 개발자라도 해도 1,2일 아무리 많아도 1주일이면 충분하고도 남는다. 믿지 못하겠으면 구글 웹사이트 가서 찾아보고 실제 해보기 바란다

그런 도구를 안다는 것이 이력서에 자랑스럽게 적을지 모르지만 망치 다루는 것을 안다 뿐이지 건축가로는 인정하지 않는다. 개발자의 가치는 도구의 사용도나 능숙도가 아니다. 내가 과장해서 말한다고 할지 모르지만 자세히 설명하기도 불가능하지만 그런 것을 이해하지 못하는 것이 근본적인 문제인 것이다.

한국의 모든 고층건물은 외국 건축회사가 설계했다. 결국 시뮬레이션 소프트웨어 능력이 없어서이다. 한국이 자랑하는 인천대교와 영종대교도 외국 건축가가 설계 했다. 그나마 장비와 인부 동원해서 시공은 잘하니까 시공업체가 돈은 벌지 모르지만 고부가가치는 전부 외국의 몫이다. 이제 한국에서는 "훌륭한 개발자를 기르자" 같은 공허한 소리는 하고 싶지도 않고 듣고 싶지도 않다. 그럴 환경이 없다. 숙련공에 불과한 목수를 건축가라고 하지 말라.

 다행인 것은 그런 열악한 환경에서 이를 진심으로 인지한 유일한 회사는 삼성전자뿐이다. 삼성전자의 Metacognition, "자아인지" 역량은 한국에서 유일하다고 생각한다. 수년 전에 삼성전자가 스스로 평가하기를 삼성전자 개발자의 1,2 퍼센트 만이 구글의 문제해결 능력이 있다는 자체평가를 내렸다. 필자가 삼성에 교육을 해 본 결과 몇 퍼센트 정도는 된다고 본다. 나의 경험과 삼성의 평가가 거의 일치한다.  이런 정확한 인지능력은 미래의 발전 역량을 의미한다. 그나마 삼성 같은 회사가 있다는 것은 다행이다. 수십 개의 회사를 컨설팅 하면서 얻은 조그만 희망의 불꽃이다.

 그 외의 모든 회사는 잘 해보겠다고 헛된 노력을 많이 하지만 근본적인 이해가 전혀 없는 상태에서 망상에 불과하고 시간과 비용만 낭비할 뿐이다. 용어를 외웠다고 해서, 본질을 이해한 것도 아니고, 그를 실행할 수 있는 것도 아니다. 사마천의 사기 "손자,오기열전"에 나오는 말이 있다. 오왕 합려는 손자병법을 이해한 유일한 왕인데 손자가 말하기를 "당신이 손자병법을 이해는 했지만 실행하지는 못할 것입니다" 라고 했고 그 말을 듣고는 손자를 대장군에 고용하고 7번의 큰 전쟁을 모두 승리하며 초강대국이 되었다. 그런 합려가 아들인 부차를 꾸지르면서 한 말이 있다. .  "너는 손자병법을 외웠지만 한 글자도 이해하지 못했다."  손자병법은 6천자 정도로 종이 2장에 적히는 작은 양이다. 결국 외웠다는 것, 이해한다는 것, 실행한다는 것은 모두 하늘과 땅 차이가 있다. 이것을 이해한 오왕 합려는 자아인식 수준이 최고인 왕이었고 당연히 춘추오패가 될 수 있었다. 반면에 손자병법을 외우기만 하고 자만했던 부차는 월나라와의 전쟁에서 패해 자결한 오나라의 마지막 왕이 되었다.

 정부나 회사에서 어떤 정책을 펼쳐도 먼저 자아인식을 하지 않는 이상은 탁상공론만 나온다. 이런 말을 이해하지 못하겠다면 그냥 목표를 조그마하게 가지면 된다. 그냥 똑똑한 숙련공만으로 가능한 노동집약적인 비지니스를 찾아 국내에서만이라도 생존하는 것도 훌륭한 처세술이다. 지금 한국에서 살아 있는 99.9%의 소프트웨어 회사들이 다 그런 회사들이다. 절대 글로벌 회사가 될 수는 없지만 헛된 꿈을 쫓지 말고 현실을 아는 것만 해도 무척 현명한 것이다. 외화는 어차피 한국의 제조업에서 잘 벌어오니 글로벌 걱정하지 말고 그냥 국내에서 돌고 도는 돈만 가로채서 벌면 된다. 이기적이지만 법적으로 뭐라고 할 수는 없다. 그런 면에서 IT 강국이라는 말은 허상이다. 이런 상황에서 개발자가 농부나 시인이나 배달맨보다 훨씬 더 많이 버는 것도 부조리하다. 운이 좋은 것을 감사하며 살아야 한다.

내가 지난 20여년 동안 한국에서의 경험 중에 뛰어난 개발자를 몇 명 발견했지만 당연히 회사의 방침과는 다르게 간 사람들이었다. 회사의 방침대로 갔다면 잘 해야 숙련공이 되겠지만 숙련공이 되기도 전에 해고당하기 딱 좋은 케이스였다. 그들을 보호하고 성장하는 것을 보는 것이 나의 최고의 보람이었다. 하지만 그들도 결국은 노동집약 공장 속에 하나의 숙련공이나 관리자로 전락될 것을 생각하면 가슴이 아프다. 그런 사회에 속하게 된 하늘의 뜻을 탓할 수는 없고 자신의 운명으로 받아들이는 것이 현명하게 사는 법이다.

"100배 능력의 개발자" 같은 소리는 소프트웨어에 대한 모욕이고 한국에서는 벌어질 수 없는 현실이니 이제는 그런 소리는 더 이상 아무도 하지 않았으면 좋겠다. 나도 한국에서는 진정으로 이해하는 극히 소수의 사람들과의 대화에서만 사용할 것이다.

글로벌이니 4차 혁명이니 하는 용어도 한국에서나 호들갑으로 떠들어 댈 뿐이고 막상 그 안에 들어가 있는 회사는 그런 용어를 사용하지도 않는다. 아마존 책방과 예스24에 가서 검색하고 비교해 보면 알 수 있다. 그런 호들갑스러운 행동도 한국 갈라파고스 현상의 일부분이다. 먼저 자아인식을 하는 것이 모든 발전의 출발점이며 유일한 희망이다.