왜 아시아에서는 스타 개발자가 나오기 힘들까?


1편. 왜 아시아에서는 스타 개발자가 나오기 힘들까?


2편. 제품 개발 관점에서 본 문화 차이


3편. 개발 조직 관점에서 본 문화 차이



양 한 마리 vs. 잠 자리 한 마리


인기몰이 중인 드라마 굿닥터에서 잠이 안 올 때 양 숫자를 세기 보다 잠자리 숫자를 세란 대사가 나온다. 이유는 간단하다. 양은 영어로 sheep이고, 잠을 뜻하는 Sleep과 발음이 비슷하기 때문에 영어권 사람들이 잠 안 올 때 세면 효과가 있다는 것이다. 즉, 우리는 잠과 발음이 비슷한 잠자리 한 마리, 잠자리 두 마리…… 이런 식으로 세는 것이 맞는 주장이다. 별 것 아닌데 그것 참 말이 된다.


오리인가 토끼인가?


우리는 언어로 생각하고, 표현한다. 인간을 탐구하는 학문인 철학에서 언어 철학은 이미 굵직한 흐름을 이어가고 있다. 현대 분석 철학의 대가이자 언어를 철학의 주요 논제로 만들어 놓은 비트겐슈타인(Wittgenstein)의 연구를 통해 우리는 인간의 사고와 세계 그리고 언어의 관계에 대해 생각해볼 수 있다. 아래 그림이 무엇으로 보이는가? 사람마다 다른 답이 나온다. 비트겐슈타인은 이런 현상을 사람은 각자 나름의 해석 틀이 있고, 이를 가지고 사물을 이해한다고 봤다. 그렇다면 이 틀은 어떻게 형성되는 것일까? 비트겐슈타인은 언어에서 그 답을 찾고자 했다.



언어와 사고 – 그 오래된 논제


비트겐슈타인은 언어가 규칙에 따라 움직이는 일종의 활동이라 봤고 언어 행위를 제약하는 규칙은 두 가지 다른 종류의 삶의 양식에 기초하고 있다고 생각했다. 여기서 말하는 삶의 양식이란 공통적인 생물학적 특징을 바탕으로 한 판단과 반응을 의미하는 ‘원초적 삶의 양식’과 문화 및 사회 역사적 특성에 따른 판단, 행동을 뜻하는 ‘문화적 삶에 대한 양식’으로 구분해 볼 수 있다. 위 그림의 예처럼 사람들은 삶의 양식에 따라 동일한 사물을 놓고 생각과 관점의 차이를 보인다. 이런 차이는 우리가 쓰는 언어뿐이 아니라 소프트웨어 개발 언어와 방법론에도 이어지고 있다. 필자가 감히(?) 난이도 높기로 유명한 비트겐슈타인의 철학을 언급하며 언어와 사고에 대해 화두를 던지고자 하는 이유다.


소프트웨어 개발에 있어 문화적 삶에 대한 양식이 갖는 영향


세계적인 개발자 또는 소프트웨어 개발 강국의 반열에 오른 나라들은 영어를 모국어로 쓰거나 영어를 공용어로 구사하는 곳인 경우가 많다. 왜 그런지 생각해 본적 있는가? 그 배경을 필자는 언어에서 찾아보고자 한다. 오늘날 우리가 쓰는 소프트웨어 개발 언어는 대부분 만든 이들이 영어권에 속한 서양 사람들이다. 이들이 만든 개발 언어에는 곧 그들의 ‘원초적 삶의 양식’과 ‘문화적 삶의 양식’이 담겨 있을 수 밖에 없다. 새로운 언어를 배울 때 우리는 항상 문법을 배운다. 낯선 언어 구조 속에서 문법은 이해의 대상이 아니라 암기의 대상처럼 여겨지기도 했다. “잘 모르겠으면 그냥 외워라!” 왠지 귀에 익숙하지 않은가?


그렇다면 개발 언어를 배우고 이를 가지고 실제 구현 작업을 할 때 서양 개발자가 유리할까? 동양 개발자가 유리할까? 적어도 언어를 받아들이고 이를 통해 새로운 무엇인가를 만들어 감에 있어 서양 개발자들이 좀더 쉽게 이해하고 접근할 수 있는 것은 사실인 것 같다. 영어권 개발자들이 소프트웨어 설계하고 실제 코드를 작성하는 것과 비 영어권 개발자들 간의 문화적 차이에 따라 대상을 어떻게 해석하고 접근하는 가를 가장 잘 보여주는 예는 객체(Object)가 아닐까 한다.


객체지향에서 객체 ~ 그 뜻을 명확히 이해하기 참 쉽지 않은 개념


프로그래밍을 하는 이들에게 객체란 정말 너무나도 친숙한 단어다. 하지만 이 객체는 결코 만만하게 볼 단어가 아니다. 지금이야 넘쳐나지만 IT 출판 시장이 막 커지기 시작할 때만해도 볼만한 책은 다 영어 또는 일본어 원서를 번역해 나왔다. 아마 당시 역자들이 가장 번역하기 애매했던 것이 객체가 아니었을까? 포탈에 객체란 단어를 입력하고 났을 때 개발 언어가 뜻하는 객체는 ‘철학 사전’에 명확히 나와 있다. 철학적 풀이를 소프트웨어 개발 관점에서 재해석 하자면 객체란 ‘스스로 속성을 가지고 스스로 움직이는 것’이라 볼 수 있다. 이해가 되는가? 개발을 이제 막 시작한 이라면 어떤 해석을 봐도 모호하긴 마찬가지 일 것이다.



서양인과 동양인은 사고 방식이 다르다!


필자가 본 칼럼에서 던지고자 하는 화두는 비교 우위가 아니라 바로 차이가 무엇인지 함께 생각해 보자는 것이다. 개인적 소견에 비추어 볼 때 동서양의 차이는 여기저기서 쉽게 목격된다. 얼마 전 EBS에서 ‘동과 서’란 다큐멘터리를 방영한 적이 있다. 책으로도 출간된 내용인데, 개발자라면 꼭 한번 읽어 봐야 할 내용이 한 가득하다. 적어도 객체가 왜 이해하기 어려운지 객체지향이란 무엇인지를 머리가 아니라 가슴으로 이해할 수 있는 좋은 기회가 될 것이다. EBS 동과 서를 통해 필자는 서양인과 동양인은 객체를 바라보는 관점이 철학적으로 크게 다름을 알게 되었다. 동양인은 세상을 전체가 하나로 연결된 공간으로 보고 서양인은 세상을 여러 객체가 모여 집합을 이루고 있는 공간으로 본다고 한다. 그리고 서양인은 주체인 나와 객체인 대상을 명확히 구분하고 주체인 자신을 중심으로 세상을 관찰하고 분석하는데 비해 동양인은 나와 대상을 하나로 여기고 세계를 바라보는 경향이 있다고 한다. 이제 서양인이 만든 개발 언어에 담긴 객체가 갖는 문화적 철학적 배경이 이해되는가? 그렇다! 서양인들은 전체 속에서 속성에 따라 단순 명료하게 객체들을 구분하고 이들을 연결 짓는 것이 익숙하다. 이것이 서양에서 말하는 과학이다. 레고 블록을 떠올리면 바로 이해가 될 것이다. 레고로 만드는 창작물만 아니라, 기능을 세분화·표준화 하여 레고 블럭을 만드는 것 즉, 플랫폼을 만드는 능력이 몸에 배어 있다고 할 수 있다.


객체를 바라보는 시각 못지 않게 두드러진 차이로 관계에 대한 이해를 꼽을 수 있다. 서양인들은 정교하게 작성된 계약서를 통해 서로 간의 이해관계를 묘사한다. 어떠한 상황이 발생하면 계약서 대로 이행한다. 하지만 동양에서는 이러한 계약 관계보다 서로간의 이해 관계와 상황에 대한 해석을 중요시한다. 따라서 관계란 선문답처럼 복잡할 때가 많다. 이러한 동양적 사고 방식은 하드웨어나 소프트웨어의 0과 1로 표현되는 명확한 세계관에서는 난점으로 작용될 수 있다. 소프트웨어에서는 함수, 객체, 모듈 간의 관계는 상황에 따른 모호성 보다는 계약서와 같은 명확한 관계를 필요로 한다. 이렇게 함으로써 모듈화를 통한 재사용이나 확장이 가능하며, 신뢰성이 확보될 수 있기 때문이다.


결론적으로 동양적인 다른 말로 표현하면 한국적인 철학적인 배경과 언어, 관습, 생활 습관을 통해 형성되어 있는 사고 방식은 서양인들의 사고 방식을 표현하는 소프트웨어의 설계, 개발 방법, 개발언어 등을 사용하는데 있어서 차이를 가질 수 밖에 없다고 볼 수 있다.


하지만 사고와 문화 차이는 우위의 문제가 아니다


그렇다면 서양인이 만든 개발 언어로 개발하면 동양인은 불리한 것일까? 필자는 그렇게 생각하지 않는다. 사고와 문화의 차이는 옮고 그름의 문제도 아니고 비교 우위를 가르는 기준도 아니다. 서로 다른 세계관 그리고 생각의 프레임을 가지고 있다는 다양성의 관점에서 접근해야 할 주제라 본다. 그리고 이 다양성이 적절히 조화를 이룰 때 언어와 문화의 경계를 넘어서는 보편적인 가치가 만들어 진다고 본다. 이는 필자의 공상이 아니다. 실제 예가 분명히 있다. 스티브 잡스가 동양 철학에 심취했던 것을 기억하는가? 그는 개발자는 아니었지만 분명 동양적 세계관을 서양인이 사고의 틀 안에서 받아들이고 이를 제품 개발에 반영했다. 그리고 그 결과는 공전의 히트를 치며 그를 레전드의 반열에 올려 놓았다. 스트브 잡스의 예뿐 아니라 최근의 추세를 빗대어 보면 분명히 동양적인 사고가 도움이 될 수 도 있을 것으로 보인다. SNS나 클라우드 등의 서비스는 사람들 간의 관계나 사람과 기계간의 복잡하고 모호한 관계를 규명하고 표현하려고 하고 있다. 이러한 서비스들은 오히려 전체적인 관점을 보는 동양적인 세계관에서 오랫동안 다루어왔던 문제가 아닐까 싶다. 하지만, 우위를 선점하기 위해서 선행되어야 할 것은 소프트웨어 개발과 관련한 사고방식의 차이점과 그에 따른 교육이 시급하게 필요할 것으로 보인다.


소프트웨어 개발자 양성 ~ 교육 혁신이 필요


동서양 언어와 문화 차이라는 거대한 주제를 내세우며 글을 쓰다 보니 최근 화두로 떠오르고 있는 인력 양성과 자연스럽게 맥이 닿는다. 최근 정부가 소프트웨어 인력 양성에 팔을 걷은 것까지는 좋은데 그 방향성은 과거 숫자 채우기 게임의 룰을 크게 벗어나지 못한 것 같다. 올 2학기부터 초중고를 대상으로 개발 언어 등을 공부할 수 있는 ‘소프트웨어 창의 캠프’를 운영하고 내년 3월부터 영재학교 등에서 소프트웨어 교과목을 주당 2시간 이내로 편성한다고 한다. 여기에 소프트웨어 마에스터고 개교도 추진한다고 하니 소프트웨어 개발자 양성 관련 숫자는 꾀 많이 나오지 않을까 한다.


문제는 숫자 이야기는 나오는데 커리큘럼이나 교수법에 대해서는 아무 말 없다. 그저 IT 학원에서 하던 아니면 대학에서 하던 기존 강의를 답습하려는 것은 아닐까? 소프트웨어 개발은 그저 기술을 익혀서 되는 그런 일이 아니다. 새로운 가치를 만들어 내는 크리에이터임에 분명하다. 그런데 인재 양성 방식은 기술자를 길러 내는 데 초점이 맞추어져 있다. 우리나라 개발자들이 약하다고 오랜 동안 지적되어온 글 쓰기, 영어 등등과 함께 아키텍처 관점에서 어떻게 동서양이 생각하고 받아들이는 것이 다른지 등 소양 교육의 기본이 잘 다지는 것에 더 큰 의미를 두고 교육 혁신을 추진해야 할 때가 아닐까?