Microsoft의 헷갈린 용어가 개발 문서 이해에 대해 미치는 영향

이 포스트는 앞의 포스트, “Confusing Microsoft terminology : Mark-up, Code-behind, even VS2010 download link“를 한글로 다시 쓴 것이다. ( This post is Korean version of the previous post. )

여기 글을 읽으시는 분들은 기본적으로 프로그래머라고 생각한다. 프로그래머들은 특성이 항상 흥미로운 새로운 기술이 나왔는지 소식을 들으려하고, 그런게 나오면 배워야 할지 말아야할지 고민한다. 그리고 일단 배워야 하겠다라고 생각하면, 그 지식을 습득하기 위해 시간을 소비한다.

이런 상황에서, 참 짜증나고 시간을 허비하게 만드는 건, 도대체 그 새 기술이 뭐하는 건지 이해하는 것이다. 세상엔 알기 쉽게 잘 글을 쓰는 사람도 있고, 쉬운 것도 어렵게 설명하는 사람도 있게 마련이다. 그리고 그런 식으로 쓴 문서들을 읽어서 파악하는게 때로는 참 쓸데 없이 시간을 낭비하게 한다.

아무래도 MS의 사람들은 후자의 경우가 아닌가 한다.

왜 그렇게 생각하냐고? 자 그럼 VS2010 RC를 다운로드 받으려고 한다고 해보자. 그 페이지를 보면 Visual Studio 2010 RC를 받을 수 있는 링크들이 쭉 있고, 그 밑에는 .NET Framework RC를 받을 수있는 링크도 나와 있다. 음.. 요샌 .NET Framework가 없는 Visual Studio는 상상도 할 수없지 않지 않는가? 왜냐면 MFC를 대체할 차세대 Framework로 강력하게 밀고 있어서, Visual Studio의 기본 환경 중 특히 두 환경, C#과 C++를 위한 환경에서 CLR 타입의 프로젝트를 만들 수있게 되어 있기 때문이다. 그래서 딱 생각하기에, “아. Visual Studio 2010 RC를 다운로드 하면 .NET Framework RC도 그 안에 포함되어 있겠구나” 하고 생각하게 된다. 그게 당연한거다.

근데 조금 더 밑으로 눈을 내려 보자. 거기엔 별도로 .NET Framework 4 RC를 다운로드 받을 수 있는 링크가 있다. 그리고 거기엔 “받고 싶으면 이것만 따로 받을 수있어요”라고 써져있지도 않다. 그럼 그 링크를 보면 무슨 생각이 들까? 아.. 어쩌면 Visual Studio 2010 RC를 받아도 그 안엔 .NET Framework 4 RC가 없어서, 따로 받아야 되나보다 하는 생각이 들지 않을까?

그래서 일단 Visual Studio 2010 RC를 받을 수있는 링크를 눌렀다. 그럼 나오는 페이지를 보면 거기도 그다지 .NET Framework이 포함되어 있는지 아닌지에 대한 언급은 없이 쓸데 없는 정보만 가득하다. ( 뭐 MS가 그렇지 뭐. 이 네들은 해당 페이지를 보는 사람이 뭐에 관심을 가질지에 대해서 생각이 없는 거 같다. )
역시 눈을 좀 밑으로 내려 보자. 그럼 다음과 같은 문귀가 있다.

“What Others Are Downloading
Others who downloaded Microsoft Visual Studio 2010 Ultimate RC – ISO also downloaded:”

그리고 그 밑에 .NET Framework 등의 링크가 있다.
아.. 느낌 확 온다. 다른 애들도 받았데.. 나도 받아야겠구나.

근데 그거 아는가? 사실 저 VS 2010을 받으면 이미 그 안에 다 포함되어 있다. 당연하게도 말이지.
근데 저 따위로 링크를 만들어 놓아서 사람을 아주 헷갈리게 만든다. (이게 미국애들이 참 잘 취하는 행동 패턴이다. 하다 못해 커피숍을 가더라도 이런 식의 접근을 한다. 나는 다 되었거니 하고 딴 생각하고 있는데, 얘네들이 뜬금없는 질문을 한다. 그럼 난 멍해진다. 도대체 왜 묻는거야? )

아니.. 좀 위의 페이지에서, 정작 필요한.. 이 패키지엔 뭐가 포함되어 있다. 그런 건 안 나와있을까?

사실 이 문제는 MS가 보여주는 전형적인 문제이다. MS식 사고 방식이 고스란히 잘 나타나 있다.
이런 사고 방식은 이제 본격적으로 MS의 문서를 읽다 보면 나온다.

자.. 이제 살펴보자. MS 문서. 얼마나 생각없이 만드는지.

어제 WPF를 구체적으로 알아보기 위해 MSDN의 문서를 읽어보게 되었다. WPF는 Windows Presentation Founation의 약자다. 나는 이미 이것이 Mozilla의 XUL과 같은 것을 하기 위해서 MS가 그 아이디어를 받아들여 구현한 것으로 알고 있었다. 그러기에 적어도 이 프레임워크가 뭐하는 지를 알고 들어갔다는 것이다.

근데 말이다. 관련 페이지를 읽어보면, 구체적으로 WPF가 뭐하는 건지에 대한 설명을 하는 부분에서, 실질적으로 뭐하는지에 거에 대한 설명은 없고, 아주 화려한 수식어들만 나무하는 마케팅식 서술로 가득차 있다. 제기럴.. 기술문서에서 마케팅 수사를 사용한다. 이노므 자식들.. ( 미국 애들이 쓴 논문이나, 그 어떤 글을 봐도 이런 공통된 경향을 본다. 아마 미국 애들은 학교에서 그렇게 글을 쓰도록 교육을 받아온게 아닌가 한다. 사실 미국애들이 쓰는 레주메를 봐도 그렇다. 가만히 이게 뭔가 하고 생각하고 보면 별게 아닌거라는 걸 아는데, 그냥 보면 뭐 대단한거 같다. 자식들… )

아무튼 저따위 마케팅 수사로 가득찬 설명대신에 나더러 써보라고 하면 이렇게 쓰겠다.
“WPF는 기존의 *.rc 파일이 하던 GUI를 기술하기 위한 새로운 방식으로, XML을 사용해서 GUI를 표현한다. WPF가 사용하는 XML은 XAML이라고 부른다. 또한 WPF는 이런 새로운 메커니즘을 지원하기 위한 클래스들과 클래스 함수들, 등등을 제공한다.”

이럼 프로그래머 입장에선 금방 알아듣지 않겠는가?
기존의 *.rc파일이 뭐하는건지 모르는 독자를 위해선, 밑에 리소스를 에디팅하는 스크린 샷 하나 정도 첨부해주고, 이런거다라고 한줄 기술하면 땡이다.

심지어 Mozilla의 XUL과 같은 것을 MS가 받아들여 구현한 것이다라고 쓰면 더욱 더 이해하기 쉽겠고, 여러 기술들이 아…이런 맥락을 가지는구나 알아보기도 쉽겠지만, 그건 MS가 지네 자존심때문에 그렇게 기술은 못하겠지. 뭐 그건 이해해 주겠다. 그럴 수있지 그건.

두번재 문제는, 얘네들이 사용하는 단어나 용어의 선택이 참 문제가 많다는 것이다.
예전에 What Apple Inc. doesn’t tell you라는 블로그를 가지고 있을때 이미 언급한 것인데, Apple은 System 7에서 “구독자”와 “발행자”와 같은 용어를 사용했었다. 그런데 MS는 이것을 OLE/COM으로 가지고 오면서 “Sink” 와 “LInk”인가로 용어를 선택해서 썼었다.
(Link였는지는 정확히 기억이 안난다. 아무튼 요지는 도대체 어느 쪽이 데이터를 제공하는 측이고, 어느 쪽이 받아들이는 쪽인지 용어만 봐서는 참 파악하기 힘들다는 거다.)
보면 알겠지만, Apple이 선택하는 용어는 그 기술에 대한 설명을 깊이 보지 않고서도, 대충 뭐겠다 싶은 감이 잡힌다. 반면에 MS가 선택하는 용어는 전혀 그렇지 못하다. 이것은 길고 지루한 기술 문서를 읽을 때, 심각한 문제를 초래한다.
MS식의 문서를 읽으면, 뭐가 Sink이고 뭐가 Link인지를 설명한 부분은 읽고 그렇구나 하고 넘어가다가 몇페이지 지나서는 뭐를 Link라고 불렀더라? 라고 하면서 다시 원래 어디서 설명이 되었는지 찾아서 돌아가야 한다. 이거참.. 문서를 자연스럽게 읽는데 지장을 초래한다.

자.. 그때가 한 10년전이다. 지금은 많이 개선이 되어을까? 에라… 믿을 걸 믿어라.
WPF 문서 중, 소개글을 읽어 보자.
제일 핵심이 되는 두 단어가 있다. 아.. 두 용어. 바로 Mark-up과 Code-behind
참… 요상하게 선택된 단어다.
생각해 보자. 그냥 Mark-up이란 말을 들었다고 하자. 그럼 드는 생각이 뭔가? “마크업? 뭘 마킹업하기 위한 건데?”
뭐랄까.. 그냥 한 용어.. 뭔가 entity를 지칭하는 용어처럼 들리지 않는다. 명사지만 여전히 어떤 “동사적”인 느낌을 많이 가지고 있다.
그리고 Mark-up이란 표현은 너무 일반적이다. 그래서 그 말을 딱 들었을때, WPF에서 말하려고 하는 바로 그것으로 인식이 옮겨가질 않는다. 나라면 차라리 “GUI Description”이나 뭔가 다른 말을 생각해 냈을 거 같다.

그 다음 Code-behind란 말도 참 이상한 말이다. 우리 말로 하자면 배후에 있는 코드란 뜻이다. 즉 앞에 UI요소들, 이를테면 버튼이나 다이얼로그 박스등이 있는데, 버튼을 누르거나 하면 trigger될 action handler나 아무튼.. 그 배후에서 동작할 로직이 되는 코드들을 말하는 것이다. 역시 명사화가 되어있다. 이 역시 너무 일반적인 말이다. Mark-up과 같은 문제가 있다. 3D 게임을 할때, 아 도대체 이 3D 객체는 어떻게 그렸을까? 이 빛은 어떻게 표현했을까? 그 “뒤에 있는 코드”가 있을 것이다. Excel을 사용할 때, 사용자의 조작을 대응해서 처리해주는 그 배후의 코드가 있을 것이다. 이렇게 일반적인게 먼저 생각나는 용어다. WPF의 그것이 생각나질 않는다.

즉 이 Mark-up과 Code-behind가 도대체 뭘 위한 것인지, 뭘 뜻하는건지 알려면, “외워야 한다”. 자연스럽게 머리에서 떠오르는게 아니라 “외워야 한다”. 그럼 비로소 생각이 난다.

근데 사실 여기엔 더 큰 문제가 있다. 이미 프로그래밍 계에선, 이 부분에 대해서 통용되어서 쓰는 말이 있다. Apple사는 이런 통용되는 언어를 그대로 차용해서 쓴다. (아니면 그냥 쉽게 이해할 수있는 표현을 잘 만든다. )

Model-View-Controller라는 Design Pattern을 아는가? 요새 이 패턴… 참 인기있지 않은가? 어딜가도 이 이야기다. 아니 이젠 아예 아무도 이야기 하지 않는다. 너무 공기와 같은 존재가 되어 버린 패턴이다.

Code-behind는 Controller 코드이고, 또한 model 코드도 포함할 수있다.
Mark-up는 View code에 해당한다. 물론 조금 다른 면은 있지만 뭉뚱그려서 View쪽에 해당하는 코드다라고 보면 된다.

Apple의 개발 툴을 봐도 View는 그저 Interface Builder에서 그냥 마우스 드래그&드롭으로 버튼 가져다 놓고, 윈도우 디자인하면 그게 View의 부분인거다. (재미난 점이, Apple은 기존의 NIB 파일에서 XIB 파일로 넘어오면서 그 구조를 XML 기반으로 바꾸어 놓았는데, 그거하자고 API가 바뀌진 않았다. 물론 내부적으론 XML이 아닌 NIB 파일을 파싱해서 요소를 해석했던 것에서 XML 파일인 XIB을 파싱해서 해석하는것이니 만큼 변했겠지만 일반 프로그래머들이 새로 익혀야 할 것을 따로 없다. 그저 IB열고 하던 그대로 버튼 가져다 놓고, 각종 view들 얹어 놓고 하면 된다 )

아.. 이렇게 산업계에서 일반적으로 쓰는 용어를 쓰면 쉽게 이해될거 아닌가? 굳이 MS는 왜 지네들만의 새 용어를 만들고 (이미 있는데도), 그것도 꼭 이렇게 이상하게 만들어서 기술 문서 읽는거 힘들게 만드냐 이거다. 아마 이 두 용어만 제대로 썼어도, 저 위의 문서들 있는데 한 5분이면 다 읽었을거다.

왜 Mark-up이나 Code-behind란 용어를 썼을까에 대해서 이해가 안되는 바는 아니나, 뭔가 포커스를 잘못잡고 정한 용어다.
그 용어만 탁 들어도 착 떠오르질 않는다. 다른 한 단계를 거쳐서야지만 이해가 된다는 것이다.
이러면 아무래도 문서 읽는데도 시간이 많이 걸린다.

또 다른 MS식 용어 문제 들어볼까? 예네들의 DBMS 제품 이름이 Microsoft SQL Server다.
일전에 다른 사람들에게 물어본 적이 있다. “이 DB를 위해서 어떤 SQL 서버쓰냐?” 그랬더니 대답이 “우린 SQL Server 안써” 그러는거다.
제길.. 그래서 “DBMS시스템 혹은 DB자체를 안써?” 그랬더니, “아 쓴다 DB System”. 그래서 “그럼 뭘 쓰는데?” 했더니 대답 왈 “PostgreSQL”이란다. 그래서 내가 말하길 “야. 그게 SQL server다” 했다.
비록 몇몇은 컴퓨터 공학이나 전산학을 전공했는데도, 얘네들은 학교에서 SQL이나 DBMS를 배우지 않은게 분명하다.
한국에서는 물론 교양과목이 점수 따기 쉬우니까, 전공 필수만 하고 나머지는 교양으로 학점을 채워 넣는다. 하지만 그래도 전공에 관심이 있는 애들은 전공 과목을 쭉 듣는다. 시간 안배를 위해 사이 사이에 교양을 넣을 뿐.
그래서 그래픽스도 알고 컴파일러도 알고 DB도 알고 네트워킹도 안다. 하지만 미국 애들은 이를테면 그래픽스쪽의 과목을 더 많이 듣는 애들은 네트워크 세팅을 할 줄 모르는 애들도 있다. 실제로 윈도우즈에서 IP 세팅할 줄 모르는 애들을 꽤 봤는데, “나 네트워크 전공 아니야” 그러더라. 이런 새끼들….. 그냥 이걸 확! 그걸 말이라고 하니?

물론 그런 만큼 전문성은 있다. 하지만 기본적으로 소양이란게 있는거다.
아무튼 그런 얘네들 입장에서는 SQL Server라고 하면 MS SQL Server라는 특정 제품을 생각하지 일반적으로 말하는 SQL 기반의 DB 서버인 SQL server를 생각하지 않는 것이다. 이 MS SQL Server때문에 다른 사람들과도 웃기는 대화를 한 적이 있다. 젠장.
MS는 왜 이따위로 이름을 짓는거야?

이건 일단 MS의 잘못이다. 이 놈들은 이해하기 쉽지 않은 용어나 단어를 가져다 쓴다. 그 단어나 용어 자체가 어려워서 이해가 안되는게 아니다. 그 용어가 생각나게 하는 그것이 제품과 기술과 맞아 떨어져야 하는데, 그게 한방에 안 맞아 떨어진다는 거다.
그리고 이 넘들은 산업계 표준의 용어를 절대 안쓴다.
그러다보면 Unix나 다른 OS를 기반으로 작업하는 사람들과 대화가 안된다. 그 중에 양쪽을 다 아는 사람이 있으면 “통역”을 해 주겠지만..
그리고 프로그래머들이 좀 자기 고집이 있고, 타인에 대한 배려들이 적지 않은가? 그래서 다른 사람이 통역해 주기까지 기다리지 못하고 지 할말 쫙 한다. 이런 새끼들!

MS 사람들아. 이 문제 좀 제발 심각하게 생각해 다오.

아니면 일부러 그렇게 하는거니? 그래서 너희 플랫폼에 프로그래머들 잡아 두려고? 항상 너희들 단어에 익숙해지는 노력을 하지 않으면 고생하게? 그러니 무서워서 다른 플랫폼에서 개발하겠니? 잠시 한 눈 팔면 다시 돌아가기 힘들게 만드는데?

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: