소프트웨어, 실무형 인재의 신화

1. 들어가며
며칠전 쓴  “소프트웨어, 잉여와 공포”, 이 글이 생각보다 흥해서 충격을 받았다. 음, 솔직히 말하자면 회사에서 일은 안하고 방문자수를 체크하며 혼자 흐뭇해 하는 저질스러운 나를 발견했다. 흥한 글 다음에 망글을 쓰면 어쩌나 하는 부담감에, 좀 더 좋은 주제가 생각나면 써야지 생각하다가 다음과 같은 제목의 기사를 읽게 됐다:  “SW 실무 인재 직접 양성”…NHN ‘SW 아카데미’ 설립. 마음에 타오르는걸 꼭 써야할것 같아 어쩔수 없이 키보드 앞에 앉았다 (솔직히 재미없을까봐 두렵다).

예상되듯, 국내의 큰 포털회사가 실무와 동떨어진 대학 커리큘럼에 실망해 직접 큰 규모의 SW학원 (어쩜 학교일지도)을 시작한다는 것이다. 그동안 삼성이 언론을 통해 자주 이야기 하던 그것인 듯 하다 (더 글을 쓰기전 이점을 밝혀두고 싶다: 나는 삼성이나 타 IT기업에 전혀 악감정을 갖고 있지 않다. 오히려 선후배, 친구들이 많이 그곳에서 일하니까 잘 되었으면 하는 바램이다. 이글에서 삼성은 특정 회사를 지칭하기 보다 한국의 대기업 전체를 지칭한다고 보는게 좋겠다).

“요즘 졸업생들은 실무 교육이 너무 안돼 있다. 다시 재교육을 시켜야 하는데…(짜증난다). 학교들아, 좀 제대로 가르쳐라”

물론 호통만 치는게 아니라 학교들에 돈을 좀 쥐어주고 졸업생 취업을 보장하는 등의 당근을 제공한다. 학교는 이에 맞추어 커리큘럼을 “삼성형 인재” 개발로 최적화 하는 패키지로 보답한다. 이 스토리엔 삼성취업 xx% 라는 문구에 따라 변하는 입학생 수능점수 때문에 어쩔수 없이 자존심 굽히는 학교의 애잔함이 녹아있다.

교육덜된 학생에게 호통치는 삼성은 개인적으로도 경험했다. 작년 영원할것 같던 박사과정을 마치면서 삼성 계열사에 면접을 본적 있다 (해커의 자존심을 지키기 위해 밝히자면 면접보자고 연락을 먼저 해왔다). 먼 도시까지 달려가 임원 면접이라는 것을 보게됐는데, 이런 상황이 연출됐다:

막내 대리 : (생글 생글) 박사님 연구 방향을 좀 소개해 주시죠?
나: (짐짓 태연) 네 저는 가상화 어쩌고, 운영체제 어쩌고, …., 를 했습니다 (그래서 제가 이렇게 잘났습니다 크흠)
임원님: (처음부터 쉿 드신 표정이었다) 그래서 어쩌라고요? 그게 우리 회사랑 뭔 상관이냐고? 박XX씨가 우리 회사를 위해 할수 있는게 뭔지 한번 말해 보라고.
나: (급 당황) 아 예..어 저는 삼성의 요번 새로 시작하는 비지니스에…(더듬 더듬) ..
임원님:  난 당신 그 말이 이해가 안된다고(요)..우리가 얼마나 큰 회사인지 아냐고(요). 학교에서 컴터 몇대놓고 조물대던거 가지고 무슨 도움이 되는지 얘기를 해보라고요.. 
나: (망했다). 

위의 상황은 정확한 대화 기록은 아니지만 대충 기억에 따르면 그랬다. 임원분은 호통만 치다가 면접이 끝났다. 물론 나중에 압박면접 이었노라고 날 달래주었고 나쁘지 않은 조건으로 입사를 제의받았다. 하지만, 분명히 알것 같았다. “아 저런 상황을 견딜수 있는 대인배들만 받겠다는 거구나” — 즉 공포의 관리에 내가 얼마나 견디는지를 시험해본 것이다. 난 소인배여서 가지 않았고, 다음날부터 교수님에게 “제발 자리좀 알아봐 주십쇼…” 애걸했다.

이 블로그는 제목 그대로 소프트웨어 실무형 인재 그 허구를 이야기 하고자 한다. 또 대학과 정부에 대해서 한소리 하고자 한다.

2. 실무형 인재
실무형  인재란 회사마다 정의가 다를 것이다. 삼성의 TN 부서라면 임베디드 시스템을 알고, 통신 프로토콜을 구현할 수 있으며, 인도사람 영어를 잘 알아듣는사람일 것이다. NHN이라면 기사에 나와있는 그대로 웹, 스마트폰, 게임 프로그래밍 전문가를 이야기 할 것이고. SI라면 DB설계, SW 디자인, ‘을’로 살아가는 법을 아는 사람을 실무형 인재라고 이야기 할 것이다. 스펙트럼이 이렇게 다양한 회사들이 학교에게 ‘실무형’ 인재를 가르치라면, 학자로서의 자존심 있는 대학들은 “엿이나 드쇼” 하고 싶지만, 수능점수가 아쉬워 어쩔수 없이 커리큘럼 세트를 만들어 낼수 밖에 없다. 빅맥 삼성 탤런트 세트, NHN 웹퍼 세트, SI 을고기버거 세트.  이제 몇년간은 아이폰, 안드로이드에 정통한 졸업생들을 만날 생각에 마음이 뿌듯하기 그지 없다.

3. 소프트웨어 – 추상적 사고 (Abstract thinking) 와 우연한 구현 (Accidental Implementation)
좋은 소프트웨어 엔지니어 교육을 이야기 하는 것은 쉽지 않고, 위험하다. 누구나 다른 관점에서 바라보고, 자신이 걸어온길을 돌아보며 설명하려 하기 때문이다. 나 역시 내가 유학시절 경험한 과정과 미국 벤처생활을 통해서 배운것으로, 좋은 소프트웨어 교육을 이야기 하려고 한다. 참고로 나는 버지니아 주립대학 (UVA)이라고, 나름 잘 가르친다고 평가받는 학교에서 낮은(!) 학점으로 박사를 마쳤다.  소프트웨어의 본질은 Fred Brooks 의 No Silver Bullet [1] 이라는 에세이에서 가장 정확히 다룬 듯 하다 (혹시 Mythical Man-month를 안 읽어보았다면 절대 강추다. SW고전중의 고전이니까; 번역도 되었으리라 생각한다).

6-70년대에 운영체제 같은 소프트웨어가 본격 개발되면서, 엄청나게 돈이 많이 들고 매번 데드라인을 넘기면서 나오는 작품들이 거지같다는 것을 (그제서야) 깨달았다. 기계나 HW는 안 그런데, 왜 SW만 그런것인지 사람들은 분개하기 시작했고, 최고의 엔지니어이자 Writer였던 F Brooks 는 이렇게 설명했다. 소프트웨어에는 내제된 어려움 (Essential Difficulties)과 우연한 어려움 (Accidental Difficulties)이 있다. 내제된 어려움은, 세상에 어떤 기술로도 해결할 수 없는 소프트웨어의 특성 때문이다. 즉 문제 자체가 워낙 복잡하고, 쉽게 바뀌며 (고객이 요구사항 바꾸듯), 보이는 실체가 없다는 점이다 (즉 얼마나 진행되었는지 알 방법이 없다). 반면 우연한 어려움들은 HW와 SW의 진화를 통해서 그동안 해결되었다. 우연한 어려움과 해결의 예로는:

  • 0/1 이진법으로 돌아가는 기계를 코딩하기가 쉽지 않다. ==>  C와 같은 하이레벨 언어를 써라
  • 컴퓨터를 여러 사람이 쓰기 쉽지 않다 (혹은 초기 아이폰처럼 여러 프로그램을 돌릴수가 없다). ==> 멀티 태스킹을 운영체제에 구현해라.
  • A에서 짠 프로그램을 B 컴퓨터에서 못 돌린다. ==> 라이브러리를 통합해라.

좋은 대학교의 컴퓨터 과학(공학) 전공은 본질과 우연한 어려움 두가지 모두를 해결하도록 돕는다. 즉, 알고리즘, 컴퓨터 이론, 데이터 구조, 소프트웨어 개발론 이런 과목들은 본질적인 어려움을 깨부수는데 필요한 이론들을 가르친다. 원체 복잡한 문제를 해결할때는 문제를 추상화 시키고,  잘 알려진 자료구조(예를 들어 그래프)로 표현해 낸후, 이미 알려진 알고리즘 혹은 새 알고리즘을 적용해서 해결한다 (참고로 컴퓨터 전공자들은 [2]를 강추한다. 이론때문에 고생하던 내가 눈물을 흘리며 읽었던 명서적이다). 반면 우연한 어려움을 해결하는데 역사적으로 사용된 기술들은 운영체제, 컴파일러, 네트워크 이런 과목들을 통해서 배운다. 즉 한국형 안드로이드 투자액 30억중 5만원으로는 운영체제책을 (공룡책 강추) 사야한다.

나의 경험을 통해 보면 미국에선 본질적 문제를 해결하는 과목에 좀 더 집중한다. 반면 한국은 우연한 문제를 해결하는 과목에 치중하고 있고, 이에 더해서 삼성은 그들만의 어려움을 해결할 테크닉을 가르치라고 닥달한다.  나는 본질적 문제를 해결하는 것을 교육하라고 주장한다. 왜나면 거기에 SW 경쟁력이 있기 때문이다. 검색의 예를 들어 보자. 초기 검색엔진 시장은 알타비스타 라는 엔진이 장악했다. 이 엔진은 알고리즘은 그저 그랬는데, DEC라는 예전 대기업에서 운영했기 때문에 서버와 데이터를 많이 갖고 있었다 (즉 우연한 문제를 해결했다). 반면 구글 창업자 래리 페이지와 세르게이 브린은 스탠포드 대학원시절 Page Rank라는 뛰어난 알고리즘을 가지고 데스크탑 한대로 서비스를 시작했다 (즉 본질적 문제를 해결했다). 결과는 우리가 잘 알고 있다.

좋은 소스 코드를 보면, 마치 좋은 책을 읽는듯 마음이 흡족하다. 좋은 소스 코드는 프로그래밍 언어의 숨겨진 마법을 잘 쓴 (이를테면 C의 포인터 장난) 그런 것이 아닌, 프로그래머의 뛰어난 표현력 (자료구조), 논리력 (알고리즘), 그리고 디자인 (소프트웨어 공학) 이 드러나는 그런 창작물이다.  어떤 이는 이렇게 주장할 것이다 “한국처럼 후발주자가 미국 따라가려면 좀 덜 고상한 방법을 써서라도 구현만 하면 됩니다!” . 그건 기계와 HW에 적용될지 몰라도, SW 엔 절대 안된다. 제 아무리 빠른 삼성 CPU를 써도 버블소트는 퀵 소트를 이기지 못한다.

4. 정부와 학교의 놀음
이 글을 높으신 누군가 보고, “옳커니 그럼 이론쪽을 강화하는 교육을 하면 되겠구만 (…할리도 없다 사실은…)” 라고 마음 먹어도, 문제는 그리 간단하지 않다. 학교들에 그쪽을 전공한 교수들이 많지가 않기 때문이다. 이유는 그동안 정부와 대학의 이런 놀음 때문이다:
“정부: 000 대통령 취임에 맞추어 xxx (예:유비쿼터스,그리드,클라우드,스마트폰,월드클래스) 프로젝트를 하사하노라. 대학들은 줄을 서도록 하라”
“대학:  예이”
“정부:  전문가를 프로젝트에 집어넣거라”
“대학: 뽑겠나이다”

이렇게 뽑은 교수들은 모두 우연한 어려움을 해결하는데 전문가들이다. 그쪽 분야가 쓸모 없다는 뜻이 아니다. 절대적인 비율로 그 분야들만 뽑아들이는것이 문제다.  내가 학교 생활을 하면서 세번의 정부가 바뀌었는데, 이 패턴은 늘 같았다. 사실 이 이야기는 내 발등을 찍는것과 같은데, 왜냐면 나 자신도 분야가 그쪽이기 때문이다.

5. 결론
이 블로그는 결론이 제일 어렵다. SW의 본질적인 어려움을 해결하는 대학 본래의 모습을 찾아라, 이것이 하고자 하는 말인데, 그럼 어떻게 해야 지금 우리 현실에서 그게 가능할지 이 질문에는 답이 나오질 않는다. 하지만 제일 문제있는 그룹은 공무원과 정치가라고 자신있게 이야기 할 수 있다. 왠지 한참 전에 읽은 J.C.R Licklider 라는 양반의 일대기 [3] 가 기억에 남는다. Licklider는 원래 MIT (인가 하버드인가) 심리학 교수였는데, 대단한 잉여자였다. 전공도 아닌 컴퓨터에 홀려서 카드를 집어넣는 집채만한 컴퓨터앞에 매일처럼 앉아 일과 상관없는 프로그래밍 하던 사람이다. 아마 나중에 교수도 그만두고 슈퍼컴퓨터 만드는 회사에서 일한 것으로 안다. 이 사람이 나중에 어쩌다보니 미 정부의 연구 프로젝트를 총괄하는 사업 책임자가 되었다 (즉 공무원이 되었다).  이 사람의 잉여력과 비전으로 추진된 두가지 사업이 있다:
1.  미 국방부의 ARPANet : 국방부 산하 슈퍼컴퓨터를 네트웍으로 연결해보는 프로젝트
2.  MIT의 Multics 라는 운영체제 개발

어떤분들은 이미 아실것 같다. 1 사업이 나중에 인터넷이 되었고, 2 사업은 그 자체는 빛을 못봤지만, 프로젝트에 참여했던 사람들이 회사로 옮겨 곧 C언어와 Unix 를 만들었다 (Linux는 Unix의 후손이고). 즉, 한 공무원이 IT기술의 물줄기를 열어버린 것이다.

우리 정부와 학교에도 그런 잉여와 비전이 넘치는 분이 나오길 기대하며 글을 마친다.

– 박상민 http://twitter.com/#!/sm_park

[1] No silver bullet – The Mythical Man-Month 챕터 16, by Fred Brooks.
[2] The Universal Computer: The Road from Leibniz to Turing by Martin Davis
[3] The Dream Machine: J.C.R. Licklider and the Revolution That Made Computing Personal (http://en.wikipedia.org/wiki/J._C._R._Licklider)