나쁜놈들 전성시대

war_on_crime_small

2012년 가장 재미있던 한국 영화중 하나는 <범죄와의 전쟁-나쁜놈들 전성시대> 였다. 영화가 특별히 재미있었던 이유는 예전 어린아이의 눈으로 목격했던 한국 사회의 모습을 생생하게 다시 재현했기 때문이다. 내가 초중고 학생으로 살았던 80-90년대는 정말로 <나쁜놈들 전성시대>였다. 조폭들만 나쁜놈이 아니었다. 영화에서 최민식이 그렸던 공무원, 경찰, 회사원들이 일상속에서 저지르는 자잘한 비리들은 그 시대엔 생활의 일부였다. 과속 단속에 걸리면 1만원짜리 한장 쥐어주는 것으로 넘어갔었고, 아이들이 학교에서 선생님에게 맞고 돌아올때면 엄마들은 하얀 봉투를 책속에 꼬옥 넣어 건네야했다. 우리 동네에는 한국에서 그당시 샐러리맨으로 살았던 분들이 여럿 계시다. 이 분들의 샐러리맨 <활약상>들을 들을때면 흥미진진하다. 대기업 말단 사원을 불러 수백만원짜리 양복을 맞추어주던 하청업체의 접대와 고스톱판에서 잃어주는 돈으로 은근히 전달하던 뇌물 이야기등등. <그땐 참 모두들 나쁘게 살았지…> 이렇게 말끝을 흐리시는 추억담을 듣곤 한다.

대학교 버전의 <나쁜놈들 전성시대>역시 크게 다를바 없다. 용돈으로 나오는 몇십만원 월급을 고스란히 교수님에게 상납해야 했던 대학원생들 사이에선 다양한 <학교 전설>들이 구전되었다. 해외 연수를 가면 학생들의 여행경비를 압수해 가족의 동반 여행에 여비로 활용하던 사람도 있고, 연구 장비로 책정된 예산으로 본인 집 냉장고 산 교수의 이야기는 전설중 레전드였다. 신임 교수자리가 나오면 모집 요강의 내용까지 바꿔가며 자기 사람을 불러주고, 신임은 선배의 은혜가 고마워 교수 계급사회의 아래에서 묵묵히 선배 교수에게 프로젝트, 논문의 한자리를 상납하곤 했다. 계급의 맨 바닥에 깔려있는 대학원생은 자기가 쓴 논문의 앞자리 이름을 지도 교수에게 양보하면서 <내가 졸업만 해봐라 이쪽으로는 오줌도 안싼다> 다짐을 하던 그런 시대가 있었다.

조폭들에겐 범죄와의 전쟁을 선언했다면, 부패한 학교들에게 가해진 조치는 <규칙>과 <정량 평가>다. 교수를 임용할때 돈이 오가거나 선후배 끌어주기가 심하다는 지적에 <오케이, 그럼 신임교수 뽑을때나 교수 평가할때는 SCI 논문 갯수로만 합시다> 하면 깔끔한 승부가 이루어질거라 생각했다. 교수들이 연구비를 임의 전용한다면, <오케이, 그럼 연구 제안서에 회식비등 짜잘한 항목까지 정확하게 적게 하고 나중에 다 영수증을 검사합시다>. 범죄와의 전쟁에서 경찰과 검사가 활약했다면, 학교에는 이렇게 <규칙>과 <정량평가>라는 객관적인 감시자를 붙여놓았다. 국가에서 SCI라는 규칙을 정하니 학교들은 군말없이 잘 따른다. 아니 사실은 잘 따르는게 아니라, 새 규칙에 잘 적응해가는 것이다. 프로젝트 제안서에는 몇개의 SCI논문을 쓸것인가 약속해야 한다. 정교수로 승진하기 위해서 몇편 이상의 SCI 논문을 써내야 한다. 둘다 논문의 품질은 상관이 없다. 그게 이 바닥의 새로운 룰이니 최민식이 그랬듯 적응하는자가 살아남는다.

그런데 문제는 SCI 논문이라는 이 기준이 어떤 분야에는 전혀 들어맞지 않는다는 것이다. 내가 전공하고 일하는 컴퓨터 과학 (혹은 컴퓨터 공학) 분야에서 SCI 논문으로 연구를 평가하는 것은 정말 <불 쉿>이다. 그냥 <불 쉿>이 아니고 진짜 큰 소의 <불 쉿>이다. SCI는 책으로 발간되는 논문집말고 컨퍼런스에서 발표되는 논문들은 포함하지 않는다. 하지만 컴퓨터분야의 발전 속도는 너무 빠르기 때문에 가장 중요한 연구 결과들을 대부분 컨퍼런스에서 발표한다. 단언컨데 컴퓨터 연구계의 <일진>들은 SCI로 분류되는 논문집에 결과를 발표하지 않는다. 심사하는데 1-2년 소비하고 학회지에 논문이 출판되면 이미 흘러간 옛 이야기가 되버리고 마니까.

좀 더 구체적으로 사례를 들어보자. SOSP와 OSDI라는 두개의 학회는 운영체제, 시스템 분야에서는 넘사벽의 학회다. 매년 백편 이상의 논문이 제출되지만 약 20편 정도만 학회에서 발표할 수 있다. 그렇게 논문을 제출해보기라도 하는 학교들이 보통 MIT, Berkeley, CMU 와 같은 곳들이고, 평범한 미국의 주립대학들은 사실 논문을 내 볼 엄두도 잘 못낸다. 두 학회에서 논문을 한편이라도 발표한 사람 만나면, 이 바닥에서는 형님대접 해드려야 한다. 미국의 아무 학교에 지원서를 내도 서류 심사에서는 특별 대우를 받는다. 그런데, 두 학회에 논문을 10편을 쓴 가공의 인물이 있다고 하고, 이 사람이 정신이 나갔는지 한국 학교의 교수 임용에 신청서를 냈다고 해보자. 하지만 이 사람은 SCI 점수가 0점이라 서류 심사를 통과하지 못한다. 어디 아프리카에서 발행되는 학회지라도 SCI에 낸게 있는 사람보다 낮게 평가받는다. 이거 말고 더 큰 <불 쉿>이 어디있단 말인가?

나는 미국에서 박사과정중 2008년에 <슈퍼컴퓨팅> 컨퍼런스라는 곳에 논문을 냈다. OSDI, SOSP까지 수준은 아니지만 내 분야에서는 최고이고 컴퓨터과학계에 가장 유명한 컨퍼런스중 하나다. 그런데 소가 뒷걸음치다가 개구리 밟듯 운이 좋았는지 <최고논문상> 후보에 올랐다. 내공이 모자라 상은 받지 못했지만, 후보에 오른것만으로 자랑할만한 성과다. 컨퍼런스의 경쟁률이 5:1 정도 되고, 약 30개 논문중 4편이 후보에 올랐으니 40:1 정도의 경쟁이었을 것이다. 그 이듬해 한국에 갈일이 있어 모교에 들렀다. 예전 교수님을 만난 자리에서 그 논문에 대해 이야기를 꺼냈던것 같다. 이런 대화가 오갔다.

나: <교수님 저 이번에 이런 논문 썼습니다…>
교수님: <응.. SCI를 써야 해.. 한국에 교수로 오고 싶으면 SCI를 써야지 아님 서류심사에서 통과를 못해>
나: <미국 학교들에선 SCI에 안내는거 아시잖아요…>
교수님: <으응..나도 알고 과에서도 알지.. 근데 규칙이야.. SCI를 써야 해..>

SCI도 쓰면서 좋은 연구를 할 수 있을까? 어떤 분야에서는 가능하다고 생각한다. 하지만 컴퓨터과에서는 전혀 아니다. 허접한 SCI 학회지들에 일년에 몇개의 논문을 내기 위해선 <일진> 수준의 연구는 현실적으로 포기해야 한다. <일진> 수준의 연구를 하기위해선 <일진>들이 노는 물에 가서 놀아야하는데 그 사람들은 SCI에서 놀지 않는다. 사실 미국의 컴퓨터과 교수들은 SCI라는 평가기준을 알지 못한다. 그래서 졸업을 2년정도 앞둔 내게 선택은 <한국에서 교수하고 싶으면 타협하고 SCI 방식으로 연구하거나> <진짜 일진이 되고 싶으면 SCI는 무시하고 수준있는 학회들에 논문을 내거나> 둘중 하나였다. 나는 후자를 선택하는게 옳다 여겼다. 주변에 전자를 선택하는 사람도 여럿 보았다. 똑똑해서 일진될 재목같았던 분들이 전자를 선택할때는 좀 안타까웠다.

내가 가장 <불쉿>이라고 느끼는 것은 <응 나도 알고 과에서도 알아. 근데 규칙이야> 이 대목이다. 몇해 후 모교를 방문해서 다른 교수님과도 대화를 나눴다. 나이 지긋하시고 학교에서도 파워 있으신 교수님 역시 같은 이야기 <자네 발표 잘 하던데…SCI는 좀 썼나?.. 나도 알고 과에서도 아는데…규칙이라서…>. 컴퓨터과의  얼마나 많은 재능있는 사람들이 이 멍청한 규칙에 세계적인 연구자 되기를 포기해야하는지 모른다. 교수도 알고, 학교도 알고, 심지어는 교육계의 관료도 문제를 안다고 생각한다. 부패를 막으려고 만든 규칙이 독이 되어 개인과 시스템을 서서히 죽이는걸 알지만, <근데 규칙이라서…>를 위선적으로 대뇌어야 한다면 얼마나 우리는 스스로에게 자신이 없다는 이야기인가?

이것이 단순히 학교 안에서만 벌어지는 현상은 아니다. SCI 못지않은 초대형 불쉿 <공인인증서>를 보자. 1999년 막 인터넷이 한국에 보급되면서 제정된 세계에서 유래를 찾을수없는 국가 <공인인증서>. 본래는 처음 인터넷을 접하는 국민들에게 해커들의 헤꼬지를 막아주려한 선한 의도의 <규칙>이다. 지금껏 15년 세월이 지나는동안 인터넷 기술은 완전히 달라졌고, 얼마나 많은 사람들이 <공인인증서 불쉿>을 외쳐왔는지 모른다. 공인인증서가 있건 없건 상관없이 수백만건의 개인정보는 유출되고 있다. 오히려  공인인증서의 본 의미도 모르는채 무조건 클릭하게끔 사람들을 적응시켜 보안을 악화시키는 주범으로 전락했다. 인터넷 회사들의 결제 과정에 등장해서는 사용자 경험(UX)을 똥칠해 버리지만, 법률이라 스타트업, 인터넷 기업들이 혁신할 기회가 없다. 그 사이 미국에서는 아마존이 <원클릭>이라는 인터넷 상거래의 혁신으로 전 세계를 먹어가고 있는데도, 아무리 목이 터져라 <공인인증서 불쉿>이라고 외쳐대도 변화가 없다. 늘 되풀이된다. <공인인증서가 아닌건 너도 알고 나도 알지만, 근데 규칙이야>. 

법은 양심이 작동하지 않는 곳에서 어쩔수 없이 발휘돼야 하는 필요악이다. 우리는 사회가 성장하면서 겪은 <나쁜놈들 전성시대>에 질린 나머지 <너도 알고, 나도 아닌걸 알지만 어쩔수 없는 규칙>의 노예로 살고 있다. 교수들의 양심을 믿고 SCI 규칙을 풀었다가는 학교들이 또 부정하게 신임 교수들을 뽑을까봐서. 교수들의 연구 관리를 자유롭게 풀어주면 또 세금으로 자기집 냉장고 살까봐. 국민의 인터넷 실력을 믿고 공인인증서 규칙을 풀었다가는 전부 해킹당할까봐서. 그래서 아무리 <불쉿><불쉿>대도 규칙을 풀지 않는다. 그 사이 학교와 인터넷은 세계에서 경쟁력을 잃어가지만, <나쁜놈들>의 기억이 얼마나 강력한지 좀체로 자유를 허락치 않는다. 그러나 어쩌면 사회가 생각하는 것보다 우리 개개인은 훨씬 더 많이 발전했는지 모른다. 급격한 성장의 마약에 취해 한때 양심을 잊은 적이 있지만, 지금은 그보다 훨씬 나은 직업적 양심, 소명, 능력을 가진 사람이 많을지 모른다. 양심에 의한 자율이 다스리는 사회가 법치국가보다 훨씬 더 나은 곳이다.

박상민 / https://twitter.com/sm_park

인터뷰의 질문과 답

얼마전 제게 소프트웨어 개발과 오픈소스에 대해 인터뷰를 부탁하셔서 평소 생각을 말씀 드렸는데 여러 사람들 의견을 모아 책으로 출간이 되었네요. http://jpub.tistory.com/366

인터뷰의 질문과 답 모두 의미가 있는 것 같아 블로그로 공유합니다.

Q: 중국, 인도, 영국 등에서 코딩교육을 의무화한다고 합니다. 국내에서 조심스럽게 프로그래밍을의무교육-입시화 하자는 얘기가 제기되었습니다. 비슷한 맥락에서 ‘10만 SW인력양성론’을 주장하기도 합니다. 조기에 SW를 접하는 것이 중요하다든지, 정책적 차원에서 SW인력을 길러내는 것이 필요하다는 주장에 대해 어떻게 생각하시는지요?

A: 기본적으로 어린 나이에 코딩을 접해야 한다는 것에 동의합니다. 페이스북의 마크 져커버그는 아주 어려서부터 프로그래밍을 했고, 12살 나이에 이미 아버지의 치과 사무실에서 사용하는 메신져 프로그램을 만들었습니다. 져커버그의 관심을 파악한 부모는 코딩 과외를 시켜주기도 했습니다. 트위터를 만든 잭 도시, 텀블러의 데이빗 카프등 거의 모든 소프트웨어 창업자들은 초등학교, 늦어도 중/고등학교 시절부터 프로그래밍을 했습니다.

그런데 어릴적부터 프로그래밍을 해야 하는 이유가 중요합니다. 좀 더 빠르게 접해서 단지 더 많이 배우게 하거나, 코딩을 아주 잘하는 기술자로 만드는게 목적이 아닙니다. 어린 시절에 코딩을 시작하면, 주변에서 접하는 사소한 “문제(Problem)”들을 프로그래밍으로 해결하기 시작합니다. 즉, 져커버그가 아버지 치과 사무실과 자신의 집을 연결시키는 메신저를 만든 이유는, 아버지와 가족이 일하면서도 대화를 나누는 “문제 해결”을 한 것입니다. 계속해서 주변에 존재하는 “문제”들을 인식하던 결과물이 훗날 소셜 네트웍이라는 대박 “문제”를 해결한 페이스북입니다. 어른, 특히 대학교 이후에 직업을 위해 코딩을 배운 사람들은  분명 존재하지만 쉽게 알아채기 어려운 이런 문제들을 발견 못합니다.

한국의 소프트웨어 회사들중 “문제”를 처음 발견하고 그걸 해결한 곳은 거의 없습니다. 네이버는 구글이 발견한 문제를, 삼성은 애플이 발견한 문제를, 다음은 야후가 발견한 문제를 자신들 역시 해결한 것 뿐입니다.  흔히 창의력이 없다 라고 이야기하는 것이, 바로 문제를 발견하는 눈이 없다는 뜻입니다.

프로그래밍 조기 교육 주장의 문제는, “10만 SW인력 양성론”에서 드러나듯 그 목적이 단지 많은 기술자를 양성하려 하는데 있습니다. 기술자를 만들어내는 것은 대학교 교육으로 충분합니다. 절대 프로그래밍은 어려서부터 배워야할만큼 어렵지 않습니다. 우리가 가르치는 목적은 어려서부터 주변의 문제들을 파악하는 감각을 기르기 위함이고 따라서 커리큘럼등이 이에 초점을 맞추어서 만들어져야 합니다.

Q: 오픈소스 관련 한 벤처대표는 오픈소스는 공짜라기보다는 ‘자유’다라고 강조하셨습니다. 참여와 공유를 강조하는 측면입니다. 박상민 연구원님은 블로그에서 “오픈소스가 한국 SW의 근본적 해결”라고 적으셨습니다. 국내에서는 안타깝게도 FTA 이후 오픈소스 관련 분쟁사례가 늘어나고 있는데요. 이 때문에 오픈소스 거번넌스 체계가 시급하다는 지적이 있습니다. 오픈소스의 본질(가능성)은 무엇이라고 생각하십니까? 아울러, 현실에서 오픈소스에 대한 이해 부족 혹은 오해와 곡해를 통한 저작권 침해 등을 해결하기 위한 방안은 무엇이라고 생각하십니까?

A: 그 대표분 말씀대로 오픈소스는 공짜가 아닙니다. 저희 회사 Eucalyptus systems는 모든 소스코드를 github을 통해서 공개하지만, 고객들에게 돈을 받고 소프트웨어를 배포합니다. 저희 회사 CEO는 그 전 오픈소스 회사 MySQL을 1조원 넘는 가격에 팔았습니다. 그래서 흔한 질문이 “소스 코드를 공개했는데, 왜 내가 돈을 지불해야 하는가?” 부분입니다. 답은 “소스코드는 소프트웨어의 단지 한 부분” 이라는 사실입니다. 코드이외에 실제 소프트웨어를 운영하기 위해선 다른 기술들 (패키징, QA)과 고객 서비스 (24시간 콜센터등)가 필요합니다. 그래서 오픈소스 제품을 사는 사람들은 소스를 사는 것이 아니라, 오픈소스 회사의 모든 서비스를 구입하는 것입니다. 반대로 이런 서비스를 구입하지 않고 소스코드만 가지고 스스로 패키징, QA, 서비스 조직을 만들어 운영하는 곳도 있습니다. 저희 CEO의 말을 빌리자면, “어떤 사람들은 돈이 많아서 시간을 절약하고, 어떤 사람들은 시간이 많아서 돈을 아낀다”고 합니다.

오픈소스는 두가지 측면이 있습니다. 첫째는 문화적인 측면입니다. 미국에 끊임없이 소프트웨어 회사가 생기고 회사들이 빠른 시간에 성장하는 이유는 저변에 셀수 없이 많은 오픈소스 해커들이 있기 때문입니다. 스티브 워즈니악이 PC를 취미로 만들고 공유하던 동호회에서 시작한 회사가 애플입니다. 리누스 토발즈는 주말에 시간내서 소스코드 관리툴 git 을 만들었는데, 그 툴을 좋아한 젊은이 둘이 웹 버젼으로 만든 github은 전 세계에서 가장 잘 나가는 스타트업이 되었습니다. 주말에 취미로 만들고 코드를 공개한 소프트웨어가 참여, 공유를 통해서 스타트업, 대기업이 되는 것입니다. 또한 회사가 빠른 시간에 성장하기 위해서는 능력있는 개발자가 많아야 하는데, 오픈소스 문화가 그런 고급 인력을 지속적으로 공급해 줍니다.

두번째는 기업에 도움이 된다는 측면입니다. 최근 몇년사이에 미국에서는 <스타트업은 오픈소스 해야 한다>는게 일종의 불문율입니다. 이유는 주 구매층인 중견 기업, 대기업들이 이를 원하기 때문입니다. 기업들은 몇십년간 마이크로소프트, 오라클등에 종속(lock-in)되어서 어쩔수 없이 많은 지출을 해야 했는데, 이제는 Linux, MySQL등  품질은 비슷하지만 적은 비용으로 소프트웨어를 운영하는 대안을 선택합니다. 80년대-2000년대까지는 소프트웨어의 “품질”이 최고의 요구사항 이었다면, 품질에 차이가 거의 없는 지금은 “자유”, “선택”이 소프트웨어 구매의 최고 요구사항입니다. 코드를 직접 볼 수 있고 필요하다면 구매하지 않고도 소프트웨어를 운영할 수 있는 오픈소스가 이기는게 당연합니다.

개인적으로 한국에 가장 필요한 것은, 성공적인 오픈소스 회사의 등장이라고 생각합니다. 프로그래머들에게조차 오픈소스는 괴짜들이 하는 취미 정도로만 인식되는게 현실입니다. 오픈소스는 취미일뿐 아니라 성공적인 기업 모델입니다. 오픈소스의 전도사 역할을 할만한 회사가 대기업 가운데서도 나와야 하고, 스타트업중에도 성공하는 회사가 있어야 합니다. 법, 제도적으로는 기반이 없는 지금 그런 회사들을 띄워줄 (Bootstrap)만한 지원이 있어야 한다고 생각합니다.

Q: 블로그에 보면 ‘제큐어웹(XecureWeb)’으로 인한 한국 보안 인증체계의 문제점을 언급하셨습니다. 외국에 비해 국내 보안 체계는 매우 복잡하고, 사용자에 책임을 전가한다는 지적이 있습니다.한국과 미국 보안 인증 체계의 차이점은 무엇이라고 보시는지요?

A: 질문과는 반대로 사실 가장 큰 차이는 미국은 사용자에 책임을 지우는 반면, 한국은 정부가 사용자를 보호하려는 의도가 아주 강합니다. 미국의 경우 예를들어 아마존에서 쇼핑을 하면 클릭 한번 하는 것으로 결재가 끝납니다. 구매의 전 과정에서 정부가 규제하는 것은 단 하나도 없습니다. 반대로 한국의 경우 정부가 사업체에 보안 인증을 강제하니까 제품을 한번 구매할때마다 ActiveX, 키보드 보안 프로그램등을 강제로 설치해야 하죠.

정부의 의도가 완전히 잘못 되었다고 생각치는 않습니다. 컴맹이고 나이 든 분들께는 보안을 강제 하는 것이 효과를 발휘할 수도 있습니다. 그러나 소프트웨어는 보안과 뛰어난 사용자 경험이 꼭 밸런스를 맞추어야 합니다. 한국정부는 지나치게 국민을 신뢰 못하는 나머지 보안쪽에 너무 큰 무게를 두고 사용자 경험을 무시했습니다. 웹기업 들이 창의적으로 만들 수 있는 뛰어난 사용자 경험이 정부에 의해 근본적으로 막힌 것입니다. 보안, 인증 체계는 기업들이 만들어야 하고, 자연스럽게 더 나은 보안 체계를 갖춘 회사들이 시장에서 성공해야 합니다. 그런데 정부가 모든 보안의 키를 쥐고 있으니까 오히려 기업들에서는 보안에 신경을 쓰지 않게 되고, 결과적으로는 더 위험한 웹이 되었다고 생각합니다. 지금의 정부 규제는 보안에서, 사용자 경험면에서 모두 실패입니다.

Q: 정부 주도의 진흥 혹은 규제보다는 서비스 사용자 중심의 시장에 의해 성공하는 SW가 나올 것이라는 얘기가 많습니다. 바람직한 SW정책 혹은 SW정책의 방향성은 무엇입니까? 더불어 창조적인 아이디어가 인정받고 스타트업이 시장을 이끌어나가기 위해 한국에서 가장 시급한 과제는 무엇이라고 판단하십니까?

A: 이미 크게 성공하고 있는 카카오톡, 라인등에 정부가 한 역할이 조금이라도 있었을까 궁금합니다. 스타트업이 성공하는 과정에서 대기업등에 의해 불이익을 받지 않도록 보호 해주는 역할 정도가 정부가 해야 할 것으로 생각합니다. 또한 창업자들이 빛을 지거나 신용불량이 되는 등 사업의 결과에 의해 불이익을 받는 일이 없도록 해야 합니다. 실패하면 잃을것이 너무 많은 환경에서 누가 시작을 하겠습니까?

정부 보다는 스타트업으로 이미 성공한 사람들이 투자자, 멘토 역할을 해서 다음 세대를 이끌어야 합니다. 유명한 벤처기업가 폴 그레이엄은 자신의 스타트업을 성공시킨 후 YCombinator를 만들어 매년 수십팀의 스타트업에 초기 자금을 지원하고 멘토링을 해왔습니다. 여기에서 드랍박스, AirBnB와 같은 걸출한 스타트업들이 나왔고 수십조원 가치의 회사들을 탄생시켰습니다. 아마존의 제프 베조스는 구글 창업자 둘의 가능성을 보고 맨 처음 몇억을 투자 했습니다. 우리 역시 성공한 사람들에 의해 다시 투자 되는 벤처 생태계가 필요합니다. 최근 모바일 생태계 조성을 위해 100억 투자를 약속한 카카오 김범수 의장이 좋은 예입니다.

정부가 중점적으로 해야 할 과제는 소프트웨어 문화를 진흥시키는 것이라 생각합니다. 소프트웨어 문화의 핵심은 오픈소스 입니다. 취미로 주말에 코딩을 하는 학생들, 직장인들의 수와 국가의 소프트웨어 경쟁력은 정확히 비례할 것입니다. 학교, 기업들에서 적극적으로 오픈 소스를 도입하고 개발하도록 정부가 지원을 해야 합니다. 앞에서 이야기했듯 오픈 소스는 문화이면서 또한 강력한 경쟁력입니다.

Q: 이번 책의 컨셉이 ‘SW로 성공한다는 것’입니다. 과연 SW의 성공은 어떤 의미라고 생각하시는지요? SW로 성공한다는 것(개발자들의 입장에서)과 SW가 성공한다는 것(제품 혹은 서비스의 입장에서)으로 나누어서 생각해볼 수 있을 것 같습니다. 이에 대해 마지막으로 사례를 포함해서 답변해주시면 감사하겠습니다.

A: 개발자의 입장에서 SW로 성공하는 것은 직업이 즐거움이 되는 것입니다. 한국에서 개발일을 하며 힘들어 하고 불평하는 친구들을 많이 봅니다. 이것은 이상한 현상입니다. SW를 개발하는 과정은 즐거움의 연속이어야 합니다. 오픈소스 개발자들은 직업으로 코딩하는 그 시간만큼 저녁이나 주말에 프로그래밍합니다. 이유는 단 하나 그것이 즐겁기 때문입니다. 소프트웨어를 만드는 것은 스스로 조물주가 되어 생각하고 행동하는 창조물을 만드는 것입니다. 이건 아주 중독성이 강한 즐거움이기 때문에, 경제적으로 아주 성공한 사람들 (예를들어 폴 그레이엄)이 나이 들어서도 코딩하는 것입니다. 미국의 경우 개발자들은 의사를 제외하고 가장 높은 연봉을 받는 직군입니다. 매일 놀이를 하면서 경제적으로 여유롭게 살 수 있는 것은 아마도 SW 개발자들만 누리는 성공이라고 생각합니다.

하지만 위의 설명에서 한가지 빠진 조건은 “능력있는” 개발자가 되어야 한다는 것입니다. 개발을 즐거워 하는 정도와 능력은 정확히 비례합니다. 프로그래밍을 싫어하면서 능력있는 사람은 한번도 못 보았습니다. 프로그래밍을 좋아하는데 능력이 없는 사람은 있을 수 있습니다. 그건 학생이거나 해서 아직 경험이 부족하기 때문입니다. 시간이  지날수록 코딩을 좋아하는 사람들은 능력있는 사람이 되고 경제적으로 여유로워 집니다. 이것이 개발자의 성공이라 생각합니다.

제품/서비스 입장에서 SW가 성공하는 것은 “문제를 해결”하는 것입니다. 모든 성공한 제품은 사람들이 갖고 있는 공통된 문제점 한가지를 해결한 것입니다. 구글은 “알고 싶다”, 아마존은 “사고 싶다”, 페이스북은 “친하고 싶다”, 트위터는 “말하고 싶다”는 문제를 해결한 것입니다. 해결하는 고통의 정도가 크면 클수록 서비스는 더 크게 성공합니다. 구글이 해결한 “알고 싶다”의 문제의 깊이와 현재 구글의 300조 주식 가치는 정확히 비례합니다. 아마도 트위터가 절대로 구글보다 커질 수 없는 이유는 “말하고 싶다”는 본능이 “알고 싶다”는 욕구보다 더 작기 때문일 것입니다.

앱스토어에 출시된 수십만개의 앱들 대부분이 가치가 없는 이유는, 아이디어가 기발하지만 사실 아무 문제도 해결하지 않기 때문입니다. 그중의 아주 소수 앱들만이 사람들의 문제를 해결해주고 성공합니다. 그런데 대부분의 사람들은 주변에 존재하는 문제들을 무시하고 상상속에서 문제를 만들어내 SW로 해결합니다. 제프 베조스는 인터뷰에서 “사람들은 새로운 문제를 해결하려고 하지만, 우리는 이미 다 알고 있고 고통이 큰 문제 (싼 가격에 물건사서 빠르게 받는것)를 해결합니다” 라고 이야기 했습니다.

트위터, 블로거, 미디움 세개의 서비스를 연속해 성공시킨 에반 윌리엄스는 사람들의 공통된 문제중 하나를 골라, ‘기다리기 싫어함’, ‘생각하기 싫어함’ 두가지만 SW로 해결해주면 스타트업은 반드시 성공한다고 이야기 했습니다. 그래서 SW의 성공은 고통의 정도가 큰 문제를 발견하는 것에서 시작합니다. 내가 만드는 SW가 사람들의 고통을 해결해 주는 것은 SW개발하는 과정 만큼이나 즐거운 일입니다.

https://twitter.com/sm_park

장관님, 이런 놈들을 찾으십니까?

이상한 녀석들

세인트루이스 도심 기차역에 어려서부터 말을 더듬었던 그래서 내성적일 수 밖에 없었던 한 10대 아이가 앉아있다. 아이는 복잡하게 얽힌 기찻길을 사고한번 없이 정교하게 지나가는 기차들을 경이롭게 바라보며 비디오로 찍어댄다.  그에겐 기차, 택시와 같은 교통수단들이 지점 A에서 지점 B로 정확하게 이동하는 그 과정이 참으로 신비하다. 호기심많은 이 아이는 또한 경찰과 앰뷸런스의 비상 라디오 채널에 무선 주파수를  맞추고 거기서 들려오는 “짹짹” 대는 듯한 짧고 강렬한 메시지들에 매료되어 있다. 그는 복잡한 교통 지도와 짦은 메시지로 표현되는 이 도심 전체를 재현해보고 싶었다. 그가 트위터를 만든 Jack Dorsey 다 [1].

dorsey

사진 1: 잘생겼다! Jack Dorsey

뉴욕주에 어려서부터 참 코딩을 좋아한 녀석이 있었다. 그는 갓 12살 되는 나이에 아버지의 치과 사무실과 집을 연결하는 메시징 프로그램을 만들었다. 아래는 그가 만든 홈페이지인데, 저 가운데 떡하니 박힌 공룡 눈깔은 90년대 너드의 풍모를 제대로 풍긴다.

mark zuckerberg

사진 2: 공룡 눈깔 홈페이지                                              사진 3: The Web

그런데 그중 “The web” 이라는 링크를 따라 들어가면 오른쪽 그림과 같은 사람과 사람이 연결된 복잡한 그래프가 나온다.  웹의 정의는 HTML 문서와 문서가 링크되는 것인데, 사람과 사람이 연결되는 그런 웹이라니…? 이것은 페이스북의  Mark Zuckerberg가 고1때 만든 홈페이지다 [2]. 짧은 스토리에서 드러나는 두 사람의 공통점이 있다. 어려서부터 프로그래밍을 참 좋아했고 잘했다는 것. 그리고,

남들이 쉽게 이해할 수 없는 아주 이상한 것에 꽃혀 있었다는 사실이다.  

한번 이런 상상을 해보자. 우리 동네에 어떤 형 하나가 있는데 말도 더듬고 내성적이다. 비디오 카메라를 가지고 전철역에 나가서는 기차가 왔다갔다 하는 모습을 항상 찍는다.  무전기를 꺼내 경찰의 신호를 도청하며 듣고, 복잡한 교통 지도를 뚫어져라 쳐다보곤 웃는다.  난 그 사람을 이렇게 부를거다: “동네 바보형”.

초딩? 코딩?

Jack Dorsey나  Mark Zuckerberg 이야기를 꺼내는 이유는 다름아닌 창조경제의 떠오르는 키워드 “초딩 코딩”을 다루고 싶어서다. 우선 나는 코딩을 일찍 가르쳐야 한다는 주장에 동감한다. 거의 모든 성공적인 해커들이 어려서부터 코딩했으니까. 아래 비디오에 나오는 강호의 고수들이 거짓말을 할거라 생각하지 않는다.

그러나 한가지 마음속 깊은곳부터 “그건 아닌데…” 라고 반항하는 이유는 아마도 우리 높으신 장,차관님들의 제한된 생각 때문인듯 싶다.

“우리나라 젊은이들이 능숙하게 컴퓨터 언어를 구사할 수 있도록 초등학생들을 대상으로 컴퓨터 프로그램 개발 교육을 진행할 예정이다. 어릴 때부터 컴퓨터 교육을 진행하면서 창조경제에 적합한 인재를 키워내겠다는 전략이다 [3].”

“윤 내정자는 ‘우리 아이들이 ICT로 발달한 결과물(게임, 인터넷)만 가지고 노는 것에 익숙하다보니 게임 중독도 나오고 인터넷 중독도 나오는 것’이라면서 ‘소프트웨어에 대한 체계적인 교육에 기반해 아이들의 놀라운 호기심과 능력을 직접 만들고 개발하는 쪽으로 돌릴 수 있다면… [4].”

창조형 인재를 “키워내겠다”는 의지는 고마운데 그 과정에서 혹시 저기 노량진역에 앉아 기차들을 비디오로 찍는, 말 더듬는 그런 아이 하나도 창조형 인재로 인정해 줄 수 있을까? 혹시 그런 아이들을 게임 중독에 빠진 아이와 같은 비 창조형으로 낙인찍진 않을까?

장관님, 저 코딩은 좀 합니다

이 동네에 만 34세에 코딩을 꽤 하는 사람이 있다. 실리콘밸리의 잘 알려진 스타트업에서 IaaS 클라우드를 만드는데 10개 넘는 언어중 아무거나 골라잡아 코딩할 수 있고, 리눅스나 윈도우즈든 가리지 않는다. 뭐 버는 것도 쏠쏠찮다. 그래서 뻔뻔하게 “장관님 저 코딩은 좀 합니다” 라고 이야기 할만한 그 사람은 바로 나다.

ujjurago

그런데 내겐 마음 한구석 늘 빈공간이 하나 있다. 나도 무언가 내것을 창조해보고 싶다. 내가 시작하는 스타트업을 하고 싶다는 생각은 10년 넘게 지겹게 날 쫓아왔다. 코딩 실력은 부족하지 않다. 20대만큼 잠 적게 자며 코딩할 수 있는 자신도 있고 체력도 있다. 늘 하는 이런 고민을 하던중 얼마전 새벽 갑자기 스치는 생각에 놀라 잠에서 깼다.

내게는 비젼(Vision) 이 없구나.

아니 사실은 예전 블로그에서 이야기 했듯  미국의 너드 프로그래머들 사이에서 코딩하는 그 비젼은 있었고 이루었다 [링크]. 하지만 넘치는 코딩 능력과 열정을 쏟아부어 이루고 싶은 그림, 오랜 시간 집착하게 만드는 그런 그림이 내게는 없었다. 붓도 물감도 모두 준비되었지만 꼭 그려내야 할 나만의 세계관이 없었다.

SW 스타트업 – 집착(Obsession) 과 비젼

Jack Dorsey가 어린시절 빠져있었던 것은 도심의 복잡한길을 정교하게 통과하는 기차, 택시 그리고 그것들이 만들어내는 “짹짹”대는 소음들이었다. 그 집착(Obsession)이 코딩을 만난 결과물이 트위터다.  Mark Zuckerberg는 문서와 문서가 연결되는 웹이 아닌, 사람과 사람이 연결되는 웹을 생각했다. 고1때 그런 웹을 생성하는  Java프로그램을 홈페이지에 올렸고, 훗날 하버드 기숙사에서는 Facemash라는 해킹을 통해 사람과 사람을 연결하는 집착을 지속했다. 요즘 가장 잘 나가는 스타트업 Pinterest를 시작한 Ben Silbermann은 어려서부터 우표, 돌, 곤충을 수집했고 자신이 수집한 것들이 자기를 표현한다고 믿었다 [5]. 최근 가장 크게 주목받은 Tumblr의 David Karp는 고등학교를 중퇴해 처음 일한곳에서 블로깅 사이트를 만들다가, “‘this blogging thing is too hard”라 선언하며 사용자 친화적인 블로그에 집착했다. 어려서부터 지속되는 바보같은 집착이 코드를 만날때, 집착은 비전이 되고 코드는 전세계에 그림을 그린다.

pinterest

사진 4: Pinterest – 온라인 곤충 수집

우리 아이들

창조경제의 핵심이 SW라고 믿는다면, 창업자들의 독특한 세계관에 대한 “집착”에 대해서도 이야기 해야 한다. 지금 우리 눈에 바보처럼, 엉뚱한 짓거리 하는 것처럼 보이는 아이의 집착을 과연 우리는 용납할 수 있을까? 나는 30대 중반에서야 깨달은 이 SW의 진실이 참 억울하다. 80-90년대를 지나며 그런 바보짓할 여유를 주지 않았던 부모님과 한국 학교, 사회가 참 야속하다. ‘만일 그때 나도 Jack처럼 비디오 카메라 들고 전철역에 앉아 있었더라면….’. 지금도 분명 우리 가운데 Jack같은 아이들이 초등학교, 역전, 시장통 어딘가에서 엉뚱한 짓거리를 하고 있을거다. 그 아이들에게 코드는 가르치자..그리고 그 집착은 눈감아주자… 

— 박상민  https://twitter.com/sm_park

[1] http://www.vanityfair.com/business/features/2011/04/jack-dorsey-201104
[2] http://www.huffingtonpost.co.uk/2013/04/04/mark-zuckerbergs-first-website-angelfire-screenshots_n_3012148.html
[3] http://news.inews24.com/php/news_view.php?g_serial=746979&g_menu=020400&mains=News
[4] http://media.daum.net/digital/others/newsview?newsid=20130324164805713
[5] http://money.cnn.com/gallery/magazines/fortune/2012/10/11/40-under-40.fortune/18.html

컴퓨터 이야기 #3 – 계산기에서 컴퓨터로

지난번 컴퓨터 이야기 #1에서 다룬 것처럼 버네버 부쉬(Vannevar Bush)의 막대기들로 이루어진 아날로그 계산기는 1940년대까지 전쟁터를 포함한 전세계 곳곳에서 사용됐다. 그리고 곧 클라우드 섀년(Claude Shannon)에 의해 수식계산뿐 아니라 논리연산까지도 기계로 표현할 수 있음을 알게됐다. 1940년대는 숨막히는 2차대전의 열기만큼, 계산기에서 컴퓨터로 넘어가고자 하는 과학자들의 열정이 뜨거운 시대였다. 이 시기 넘어야했던 가장 큰 두가지 산은 이렇게 요약할 수 있다:

1. 기계식 계산에서 전자식으로 발전

2. 계산기에서 사람처럼 논리를 수행하는 진짜 컴퓨터로의 발전 (이를 위해선 if/else와 같은 조건문, for 와 같은 반복문 수행이 필요하다)

두가지 산을 가까스로 넘은 첫 발명품이 바로 우리가 어렸을적 배운 최초의 컴퓨터 에니악이다. 여기서 한가지 짚고 넘어갈 점은 사람들마다 인류 최초의 컴퓨터가 무엇이냐에 의견이 다르다는 점이다. 혹자는 1820년대 디자인된 찰스 베비지(Charles Babbage)의 미분방정식 계산기가 최초라 주장하고, 최근에 와서는 에니악보다 5년이 앞섰다고 밝혀진 독일의 Z3 머신 (Konrad Zuse)이 최초다라는 주장도 있다. 하지만 컴퓨터를 정의하는 여러가지 관점들 — 즉 막대기들로 이루어진 기계식도 컴퓨터냐? 아니면 계산기도 컴퓨터냐? — 에 따라 다른 답이 나오기 때문에 정답은 없다고 생각한다. 다만 개인적으로도 그렇고 많은 학자들도 동의하는 것은, 현대식 컴퓨터를 처음 상상한 사람은 지난회 소개한 앨런 튜링 (Alan Turing)이라는 사실이다.

거인의 뇌 에니악

80년대 초등학교를 다닌 사람에게 “세계 최초 컴퓨터는?” 이라는 질문을 던지면 자동으로 “에니악!” 이라는 답이 튀어나올 것이다. 그리고 그 순간 머리속엔 괴물같은 거대한 검은 기계와 그 아래 작게 서있는 가운입은 과학자의 이미지가 그려질 것이다. 그렇게 컴퓨터를 소개해야했던 그 시대의 교과서가 한편으론 좀 씁쓸하다. 차라리 그 당시에 한창 히트하던 애플 컴퓨터를 소개했으면 좀 더 컴퓨터가 친숙하게 와닿았을걸… 아무튼 교과서가 거짓말하진 않았다. 실제 에니악의 생김새는 그 당시 사람들에게도 “거인의 뇌” 라고 불릴만큼 쇼킹한 모습이었으니 말이다.

에니악은 1943년 펜실베니아 대학교에서 만난 30대의 물리학자 마우쿨리(John Mauchly)와 20대의 전기과 대학원생 에커트(J. Presper Eckert)에 의해 만들어진 최초의 전자식 범용(all-purpose) 컴퓨터였다. 에니악은 당시 포탄의 궤적계산을 위해 미 육군이 추진한 프로젝트였다. 에니악은 과학 천재(예를들어 튜링)에 의한 놀라운 상상의 결과물이라기 보단,  노력파 엔지니어 마우쿨리와 에커트의 열정이 낳은 작품이라고 해야 적절할 것같다. 이전에도 비슷한 형태의 전자식 계산기, 예를 들어 아이오와 대학의 ABC 컴퓨터등이 이미 만들어졌고 에니악의 개발자들은 이것들을 참조했으니 말이다. 하지만 에니악이 대단한 것은 그때까지 현실성 없어보였던 진공관 컴퓨터를 실제 유용한 계산에 쓰일수 있을 정도로 성능과 안정성면에서 혁신시켰기 때문이다.

왼쪽 그림은 실제 에니악에 쓰인 진공관인데, 1940년대까지 진공관은 라디오나 TV등의 전자제품에 사용된 기본 부품이었다. 기계식 계산기에서는 막대의 회전 각도에 따라 숫자를 표현했다면 진공관에선 전류의 흐름 여부와 강도에 따라 숫자를 표현할 수 있고, 여러개의 진공관을 배열해서 덧셈등을 수행하는 기본 연산기를 제작할 수 있었다. 하지만 진공관의 문제는 쉽게 타버리는 불안정성에 있었다. 에니악은 17,468개의 진공관으로 이루어졌는데 한개의 진공관이 탈때마다 컴퓨터는 정지했고, 사람이 들어가 진공관을 교체해야만 컴퓨터를 다시 가동할 수 있었다. 에니악의 완성전까지 사람들이 프로젝트의 성공을 의심한 이유가 여기에 있었다.

하지만 마우쿨리와 에커트는 뛰어난 전기설계능력과 근성을 발휘해, 결국 에니악을 미육군이 흡족해할만한 수준으로 완성했고, 에니악은 1955년까지 수소폭탄 설계나 포탄의 궤도계산을 위해 사용된다. 에니악의 성능과 안정성을 요약하면 이렇다.

  • 평균 이틀에 한번 꼴로 컴퓨터가 멈췄고, 진공관을 가는데엔 15분 정도 걸렸다.
  • 초당 5,000번의 덧셈/뺄셈과 357번의 곱셈을 수행할 수 있었다 (참고로 아이폰 3GS는 약 20억번의 곱셈을 수행할수 있다; 즉 에니악보다 5천만배 빠르다)


에니악의 결정적 한계는 프로그래밍에 있었다. 새로운 계산프로그램을 에니악에 집어넣기 위해선 위 그림처럼 사람 (6인의 여성)이 직접 케이블을 연결하고 스윗치를 On/off 하는 과정을 거쳐야 했고 흔히 며칠이 소요됐다. 즉 새로운 소프트웨어를 돌리기위해 사람이 기계를 고쳐야 했던건 버네버 부쉬의 아날로그 계산기와 마찬가지였다. 이것은 튜링의 상상과는많이 달랐다. 튜링머신에선 소프트웨어를 테이프에 텍스트로 쓰고 범용 튜링머신(하드웨어)이 텍스트로 기록된 소프트웨어를 수행한다. 고쳐야 하는 계산기와 이론적인 튜링머신, 그 사이 간극을 연결한 “마법사”가 바로 폰 노이먼이다.

마법사 폰 노이먼 (John Von Neumann, 1903-1957)

폰 노이먼을 도대체 어떻게 설명할 수 있을까? 지금 블로그의 모티브가 된 책 [1]에선 그를 “마법사 (Wizard)” 라고 표현했는데, 그 보다 더 적절한 표현을 찾을수 없을것 같다. 헝가리 출신으로 미국에서 활동한 유대인 학자. 그의 동료 학자들은 그를 “마지막 위대한 수학자”, “두려운 능력자”, 혹은 “인류보다 고등한 존재의 뇌를 가진 사람”등으로 표현했다. 폰 노이먼은 건드리지 않은 현대 과학 분야가 없을 정도로 많은 분야에 빛나는 업적을 남긴다.
예를들어:

  • 경제학에 지대한 영향을 미친 게임이론을 창시
  • 양자역학과 논리학(logic), 집합론(set theory)에 결정적 공헌
  • 맨하탄 프로젝트에서 핵무기의 폭발에 관한 수학 모델을 세우고 계산
  • 현대식 컴퓨터 구조를 수립 (폰 노이먼 구조라 흔히 불림)

그 시대 폰 노이먼의 무게는 프린스턴의 고등과학원이 설립되며 초빙된 4인중 한명(아인슈타인, 괴델과 함께)이었다는 사실에서 쉽게 짐작할 수 있다. 1930년 독일의 수학학회에서 무명의 괴델은 “라이프니츠의 꿈은 이룰 수 없음”을 증명하는 이론을 내놓았는데, 그 당시 그 의미를 다른 수학자들 누구도 이해하지 못할때, 폰 노이먼은 그 자리에서 “논리학은 이제 끝장을 봤구나” 인식하고 다신 논리학쪽으로 고개를 돌리지 않았다.

폰 노이먼은 천재성에 더해 어쩌면 운이 좋은 사람인지도 모른다. 왜냐하면 그는 수학자로서 당시 비교적 알려지지 않은 튜링의 논문을 읽고 그 중요성을 간파한 소수의 사람중 하나였고, 동시에 맨하탄 프로젝트의 멤버로 에니악 프로젝트에 참여해 실물 컴퓨터를 경험한 특혜받은 인물이었기 때문이다. 즉 튜링의 이상적인 컴퓨터와 고쳐야 하는 계산기 ‘에니악’ 두가지를 모두 이해한 천재에게, 현대 컴퓨터의 첫 실물 모형 EDVAC의 개발은 어쩜 너무 당연한 수순이었는지도 모른다. 그는 에니악 다음 모델의 컴퓨터 EDVAC을 디자인한 리포트 “First Draft of a Report on the EDVAC (1945)”를 쓰고  현대식 컴퓨터의 아버지라는 명예를 얻는다. 그가 쓴 리포트는 실물 EDVAC뿐 아니라 곧 미국과 유럽에서 에니악 다음 세대의 컴퓨터 디자인에 기본 모델이 되었다. 리포트는 이런 내용을 담고 있다.

  1. 컴퓨터의 메모리에 프로그램과 데이터를 모두 저장해서, 사람의 개입없이 자동으로 프로그램의 명령어를 하드웨어가 수행하도록 한다 (stored program). 에니악은 사람이 케이블과 스위치를 조작해서 프로그램 해야 했다.
  2. 이진법을 사용한다 (에니악은 10진법).
  3. Program Counter 등의 레지스터를 사용한다.
  4. 수리연산 (덧셈, 뺄셈등)들의 회로 설계

리포트의 가장 중요한 내용은 프로그램이 데이터와 함께 메모리에 올려진다는 stored program 이었고 이는 프로그램이 테이프에 기록된다는 튜링 머신의 실물구현이었다. 아인슈타인에 버금가는 사회적 존경을 받았던 폰 노이먼은 불행한 두 천재 튜링, 괴델과는 다른 삶을 살았다. 명성 얻기를 주저하지 않았던 그는 그의 리포트에 튜링의 영향에 대해 전혀 밝히지 않는다. 후세의 연구에 의해 그가 튜링의 논문에서 직접적으로 아이디어를 얻었음이 발견됐을 뿐이다. 폰 노이먼이 프린스턴에서 박사를 마친 튜링에게 그의 조교 자리를 제안했던 사실은 그가 얼마나 튜링에게 관심이 있었는지를 말한다. 또한 폰 노이먼은 마우쿨리와 에커트와 함께 아이디어를 구상했으면서도 단독 저자로 리포트를 작성했다. 이로인해 이들 사이에선 훗날 특허 싸움을 치르기도 한다. 이상적인 컴퓨터와 현실적인 기계 사이의 간극을 연결한 폰 노이먼, 하지만 그 둘 모두를 자신의 업적으로 드러내고 싶었던 것은 지나친 욕심이 아니었을까?

튜링 (Alan Turing) – 진정한 소프트웨어의 아버지

튜링은 수학자로서 가상의 튜링머신을 상상하는 것에 그치지 않았다. 영국으로 돌아가 EDVAC과는 다른 형태의 컴퓨터 ACE (1946)를 구체적으로 하드웨어 레벨까지 설계하고 심지어 11,200 파운드라는 구현 비용까지 산정했다. 하지만 비전없는 영국 정부 (심지어 그를 자살로까지 내몰았으니)에 의해 ACE 프로젝트는 이리저리 표류하고 우울한 성격의 튜링을 더 좌절시키고 만다.

폰 노이먼이 비록 20세기의 빛나는 천재이긴 하지만 컴퓨터, 특히 소프트웨어의 진짜 아버지는 튜링이라고 할 수 있다. ACE 컴퓨터는 하드웨어의 역할은 최소한으로 하고 소프트웨어가 복잡한 연산을 수행하는 구조인데, 70년대 들어 개발된 RISC 프로세서가 그 연장선이라 할 수 있다. 폰 노이먼이 컴퓨터의 역할을 빠른 계산기 정도로 규정하고, 컴퓨터 프로그래밍을 단순 노동으로 치부한 것은 그가 EDVAC에 어셈블러 (프로그래밍 도구로 사람의 언어를 이진법 코드로 변환) 를 구현하려한 그의 학생에게 화를 냈다는 일화에서 잘 드러난다 [2]. 반면 튜링은 1947년 ACE 컴퓨터를  설명하며 사람과 대결하는 체스 프로그램을 예제로 소개해, 아직 실물 컴퓨터를 구경조차 못해본  수학자들을 놀라게 했다(이 당시엔 O/S, 컴파일러등 소프트웨어라는 개념 자체가 존재하지 않았다). 50년이 지난 1996년에 드디어 딥블루 컴퓨터가 체스 챔피언을 이겼다는 사실은 튜링의 비전 그 깊이를 알게 한다. 튜링에게 있어 컴퓨터는 사람처럼 생각하고 사람과 대화할 수 있는, 가리워져 있으면 사람인지 컴퓨터인지 구별할 수 없는 지적 존재였던 것이다. 이 글의 처음 에니악 사진을 다시 한번 보고 튜링을 생각한다. 그의 상상력의 깊이에 무한한 감사를 표현하고 싶다.

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

[1] The Dream Machine: J.C.R. Licklider and the Revolution That Made Computing Personal
[2] The Universal Computer: The Road from Leibniz to Turing by Martin Davis

컴퓨터 이야기 #2 – 천재들의 행진

2차대전을 둘러싼 시기(1940-60)는 아마도 “천재들의 행진”이라고 불러도 될만큼 컴퓨터 역사에 큰 발자취를 남긴 거인들이 가득하다. 전쟁이 조성해 놓은 급박한 분위기가 천재들의 상상력에 불을 지폈고, 때마침 히틀러의 나치즘을 피해 미국, 특히 보스톤 지역으로 몰려든 유럽의 천재들 (예: 아인슈타인, 커트 고델, 폰 노이먼..)은 MIT, 하버드를 중심으로 서로 아이디어를 나누고 토론하며 현재까지도 영향력을 미치는 학문 분야들을 만들어간다. 지난번 포스팅 [1]에서 다룬 인물 버네버 부쉬가 지휘하는 가운데, 미국 정부와 육/해/공군은 독일을 위협할 수 있는 잠재적 기술들에 아낌없이 연구자금을 지원했고, 이 당시에 연구됐던 기술들은 실제 무기로 개발되기도 했지만, 훗날 많은 학문 분야들과 IT산업의 근본을 이루었다는 점에서 더 큰 의미가 있었다.

컴퓨터의 개념과 결과물이 막 태어나는 시점이었던 1930-1945년의 특징은 수학, 철학, 인지학(두뇌를 다루는 학문), 심지어 생물학에 이르기까지의 분야를 섭렵했던 천재들이 혁명을 주도했다는 사실이다. 즉 단순히 기계의 조합, 계산기 수준의 생각으로는 컴퓨터의 탄생을 이룰 수 없었다. 17세기 라이프니츠의 꿈 (무엇이든 대답할 수 있는 꿈의 방정식)을 이해하고, 더 나아가 사람의 본질과 생각(reasoning)의 원리에 대해 끊임없이 고민하는 사람들이 컴퓨터를 상상해냈다. 그들에게는 컴퓨터란 독일군에게 보낼 포탄의 정확한 궤적을 계산하는 계산기 수준이 아닌, 사람의 마음(mind)을 심을 수 있는 기계였다. 그 천재들 중 하나가 노버트 와이너(Norbert Weiner) 였다.

노버트 와이너 (Norbert Weiner) (1894-1964)

한국에 천재소년 송유근이 있다면, 20세기 미국엔 노버트 와이너가 있었다. 와이너의 천재성은 그야말로 대단했다. 14세에 대학교를 졸업했고 17세에 하버드에서 수학 박사학위를 받는다. 그리고 그 과정에 수학, 동물학, 철학을 모두 공부했다. 학위를 마치고 유럽으로 날아가 스승으로 삼은 사람들의 면면도 대단하다. 지구 최고의 철학자 버틀랜드 러쎌 (Bertrand Russell), 수학자 데이빗 힐버트 (David Hilbert), 하디 (G.H. Hardy) 등등. 한마디로 20세기 모든 지식이 그의 머리안에 있었다고 해도 과언이 아닐것이다. 천재성 만큼이나 기행도 많았던 그는, 갑자기 노동문제에 관심이 생겨 기자로 일한다거나 전쟁시기엔 애국심때문에 군에 지원 복무하기도 하는등 “신동 증후군”을 톡톡히 앓았다. 그는 MIT의 수학과 교수로 평생을 연구에 몰두한다.

와이너가 컴퓨터의 발전에 미친 공적은 이것이다라고 하나를 내세우긴 힘들다. 그의 업적은 “피드백”이라는 개념을 공식적으로 도입한 학문분야 싸이버네틱스(Cybernetics)라 할 수 있는데, 싸이버네틱스의 피드백 컨트롤 개념은 훗날 인공지능, 인지학, 철학등에 걸쳐 다양하게 영향을 미친다. 말하자면 와이너는 인공지능과 로봇의 선구자쯤으로 요약할 수 있겠다.  피드백 컨트롤의 개념은 아래 그림처럼 아주 간단하다. 어떤 대상 (컴퓨터, 사람, 동물 등등. 그림에선 Process)에 인풋(Input)을 가하게 되면 그 대상은 그 인풋에 영향받아 측정할 수 있는 결과(Output)를 보인다. 그때 인풋과 아웃풋 사이에 대상의 행동을 제어할 수 있는 제어기(그림에선 Comparator)를 달아서 원하는 방식으로 대상을 제어하는 것이다.

이 간단한 피드백 루프(loop)의 응용은 아주 광범위한데, 예를 들어 실내 온도 조절기엔 “아웃풋=온도, 인풋=냉난방기를 적용하게 되면, 제어기는 자동으로 원하는 온도를 맞추기 위해 냉난방기를 동작시키게 된다. 나아가 뉴럴 네트워크(Neural Network)이라는 인공지능 이론이 여기에서 출발한다. 사람의 뇌 기본은 뉴론(neuron)으로 이루어져있고 각각의 뉴론은 전자 신호를 인풋으로 받고 뉴론의 프로그램에 따라 다시 전자신호를 아웃풋으로 배출한다는 개념이다. 그리고 왼편 그림처럼 수도 없이 많은 뉴론들이 서로 통신하며 인풋/아웃풋으로 엮인 큰 네트웍을 형성한 것이 바로 인간의 뇌라는 개념이다. 이를 구현하면 곧 궁극의 AI 머신이 된다.

와이너는 인웃/아웃풋, 통신(Communication), 그리고 제어기(Controller)를 수학으로 표현(모델링)할 수 있음을 보였다. 그리고 이는 단지 전자기술 한 분야를 넘어 생물학, 인문학에 이르기까지 깊은 의미를 갖는다. 왜냐하면, 세상의 거의 모든 존재들은 인풋-아웃풋, 그리고 그 사이에 위치해서 인풋을 아웃풋으로 바꾸어주는 제어기로 표현할 수 있기 때문이다. 예를들어 지금 노트북 스크린을 보는 내 눈은 “인풋”, 그리고 키보드를 두드리는 내 손은 아웃풋, 둘 사이의 “보고 두드리는” 속도를 조절하는 뇌는 “제어기”라는 의미이다. 일종의 목적을 갖고 인풋/아웃풋을 조절해 주는 제어기, 이것을 현실에서 구현해 내는 것은 바로 우리 두뇌와 동일한 일을 하는 인공지능 기계를 만드는 일이다. 이렇게 와이너가 정의한 제어 이론은 현대의 전자공학, 인지과학, 인공지능등의 분야에 기초를 마련했다.

고독한 천재 튜링 (Alan Turing) (1912-1954)

애플 컴퓨터의 로고 “한입 베어문 사과”가 튜링이 자살하면서 베어 물었던 사과에서 비롯됐다는 이야기가 있다. 그게 사실인지 아닌지는 확인할 방법이 없지만, 애플을 좋아하는 사람들은 그 이야기가 사실이기를 바란다. 컴퓨터 역사에서 튜링만큼 매력적인 인물이 없기 때문이다. 컴퓨터의 아버지라 불릴만한 발견을 했고, 독일군의 암호를 해독하는 일을 했으며, 인공지능의 선구자 였던 사실들, 그보다 호사가들의 마음을 더 끄는 것은 그가 바로 게이였고, 영국정부로부터 강제로 호르몬 주사를 맞은 사실, 그리고 그로 인한 수치심에 독사과를 먹고 42세라는 젊은 나이에 자살한 비극 때문일 것이다. 어쩌면 그렇게 비극적인 죽음을 맞지 않았다면 컴퓨터의 역사는 다르게 쓰여지지 않았을까 생각이 든다. 말년에 그가 몰두한 연구는 인공지능이었고, 최근에 iPhone의 Siri가 큰 반응을 불러일으키는 것을 보면 말이다.

튜링이 컴퓨터의 아버지라 불리는 것은 그가 상상한 튜링 머신 때문이다. 튜링 머신은 이전 포스팅 [2] 에서도 소개했는데, 형체를 가진 기계가 아니다. 튜링이 고안한 일종의 가상의 기계인데, 사람이 사고(thinking)할때의 과정을 표현한 모델이다. 튜링 머신은 정보를 읽고 쓸수 있는 무한한 길이의 테이프 (카세트 테이프라고 생각해도 OK), 테이프 좌,우로 움직이며 정보를 읽거나 쓰는 헤드, 그리고 언제 어떻게 테이프 내용을 업데이트 할지를 결정하는 제어로직(현대용어론 프로그램)으로 구성되어 있다.

튜링머신을 이해하기 위해 간단한 곱셈을 예로 들어보자. 15×24 라는 곱셈을 할때, 우리는 이런 과정을 거친다 (암산이 가능한 천재들도 한번 따라해 주시길..).
    15
x  24
——–
60
+300
——–
=360

처음에 테이프엔 왼쪽 맨 윗처럼 문제만 써있다. 제어 로직엔 오른쪽처럼 우리가 알고 있는 곱셈 방법이 프로그램 돼있다. 헤드는 테이프 내용을 읽어가며 곱해질 숫자의 맨 끝자리 수(4)를 찾은 다음 그 전 수 (15)를 곱한 중간 결과(60)를 테이프에 적는다. 이번엔 곱하는 수의10의 자리 (2)를 찾아서, 다시 그 전 수(15)를 곱하고 중간 결과를 적는다 (300). 끝으로 헤드는 중간결과값 적은 자리를 찾아가서 60과 300을 각각 읽어 들이고 두개를 더한 값을 테이프의 맨 끝에 적고 계산을 마친다.  위의 간단한 곱셈식은 튜링 머신으로 할 수 있는 “논리적 사고(thinking)” 의 간단한 예다. 결론적으로 테이프, 헤드, 제어정보로만 이루어진 튜링 머신은 인간이 할 수 있는 모든 형태의 논리적 사고를 표현할 수 있다.

그 다음 튜링이 보인 결과는 더 경이롭다. 튜링은 제어로직과 인풋데이터로 이루어진 튜링머신을 텍스트로 쓰고, 이를 또 다른 튜링머신 (Universal Turing Machine)에게 주어서 시뮬레이션 할 수 있도록 만들수 있음을 보였다. 즉, 위의 예에서는 복잡한 곱셈에 쓰이는 제어 로직(일의 자리, 십의 자리 순으로 계속 곱해나가고, 중간 결과값을 더함)을  [*, +, 헤드 이동…] 등의 일련의 텍스트로,  15, 24라는 인풋 데이터와 함께 테이프에 기록하는 것이다. 그럼 유니버설 튜링머신은 테이프에 새겨진 곱셈의 제어로직이 하라는 그대로 인풋 데이터를 가지고 수행하게 된다. 아하, 이렇게 튜링은 컴퓨터를 인류 최초로 상상한 것이다! 다음편에 소개할 폰 노이먼에게 튜링의 상상은 한줄기 빛이 된다.

이렇게 천재들은 인류의 역사에 큰 공헌을 하지만 한편으로 그들의 인생은 불행하게 마치는 것이 공통적이다. 강제로 호르몬주사를 맞아 가슴이 여자처럼 커지는 수모를 겪고, 결국은 독사과를 베어 물고 죽어야했던 튜링 (최근 영국 정부는 튜링에게 공식적으로 사과했다). 기술이 전쟁에 미치는 영향을 목격한후, 정부의 연구 자금을 스스로 끊고 일생을 함께 보낸 친구들 (폰 노이먼등)과의 관계마저 절교해 말년을 외롭게 보낸 와이너. 그리고 여기에 언급하진 않았지만 튜링보다 앞서 라이프니츠의 문제에 답을 한, 20세기의 최고 수학자 커트 괴델(Kurt Godel) 의 말년은 더 슬프다. 괴델은 정신불안에 시달리며 자신 아내이외의 사람이 주는 음식에 독이 들어있다고 의심하고, 아내가 병으로 입원해있는 동안 홀로 굶어죽고 만다. 빛나는 천재의 마음(mind)은 세상을 밝게 만들었지만, 그 밝음만큼 내면에 간직해야 했던 어두움은 그들 자신의 인생을 불행으로 몰고 간 것이다.

(다음 편은 폰 노이먼과 에니악, 에드박등을 다룰 예정입니다 ^_^b).

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

[1] 컴퓨터 이야기 #1 – 생각에서 기계로
[2] 소프트웨어, 하드웨어의 아버지

컴퓨터 이야기 #1 – 생각에서 기계로

왜 옛날 이야기를 시작하지?

지난번 괜히 제목만 거창한 글 “소프트웨어, 하드웨어의 아버지” 이후로 계속 컴퓨터, 특별히 소프트웨어 역사 이야기를 해보고 싶었다. 컴퓨터의 역사만큼 흥미진진한 이야기가 더 있을까 싶을 정도로 지난 70년은 컴퓨터, 인터넷, 웹을 창조한 영웅들의 무용담으로 가득하다. 사실 17세기의 라이프니츠까지 거슬러 올라가야 진정 소프트웨어의 역사를 이야기할 수 있겠지만, 우선 한동안은 20세기 초, 현대식 컴퓨터가 처음 만들어지던 시절부터 현재 실리콘밸리가 번영하기까지의 스토리들을 짚어보고 싶다. 굳이 옛날 이야기들을 써내려가는 건 컴퓨터, 소프트웨어가 얼마나 즐겁고 흥분되는 학문, 직업인지 이야기 하고 싶어서다. 어린 학생들이 가장 기피하는 전공이 컴퓨터 사이언스가 되었다는 이야기, 40대 프로그래머의 미래는 치킨집 뿐이라는 이야기들 (그래서 대학생들 컴퓨터 숙제하다 막힐땐 동네 닭집으로 달려가야 한다는데…), 그런 우울한 소식들에 지쳐있는 다음 세대들에게 소프트웨어의 “환상적인” 역사들을 소개하고 그래서 조금이라도 더 이 분야에서 일하고 싶은 생각이 들게 한다면, 그럼 지금의 잉여짓도 큰 보람이 있을거란 생각이 든다. 그럼 시작해 볼까?

생각에서 기계로

17세기 라이프니츠의 발칙한 상상, “세상의 모든 질문에 답을 주는 기계를 만들 수 있을까?“, 은 결국 괴델과 튜링의 증명을 통해 불가능하다고 결론이 났다 (관련 내용은 지난번 포스팅 참조 [1]). 즉 “신은 존재하는가?”와 같은 인간이 던지는 모든 질문들 중 어떤 것들은 Yes/No의 대답이 불가능하다고 결론난 것이다. 괴델은 그런 기계(궁극의 알고리즘)가 존재할 수 없음을 우회적으로, 세상의 어떤 논리로도 증명할 수 없는 다른 차원의 수들이 있음을 보임으로써 증명했다. 튜링은 거기에서 더 나아가 대답할 수 없는 질문의 “예제(example)”를 선보였고, 바로 이것이 튜링의 Halting Problem 이었다 (여전히 이게 뭔 이야긴가 궁금하시면 [1]을 꼭 참조!). 고대의 철학, 논리학, 수학자들을 미궁가운데 빠뜨렸던 질문에 답을 했으니 이제 과학자들 스트레스는 좀 덜어졌겠다 생각하면 오산이다. 이유는 바로 전 세계에 몰아닥친 2차대전의 여파가 과학 세계에도 몰아쳤기 때문이다.

전장에 나가있는 젊은이들의 생명이 과학자들에게 맡겨지게 된건 바로 현대식 전투에서 복잡한 수식 계산이 쓰이기 시작했기 때문이다. 예를들어 장거리 포의 궤적을 정확히 예측하기 위해서는 거리, 중력, 바람의 방향과 속도등 다양한 변수들을 궤도 방정식에 적용해야 했다. 전장에서 수식표를 들고 다니며 대입하는 방식으로는 목표물과는 엉뚱한 방향으로 포를 날릴수 밖에 없었다. 더 나아가 미국이 본격적으로 핵무기를 개발하는 “맨하탄 프로젝트”를 시작했는데, 플루토늄 239를 오직 원하는 시점에 폭발시키기 위한 장치를 만들기 위해서는 대단히 복잡한 계산식을 풀어내야만 했다 (실제 폰 누이먼에게 맡겨진 일이었다). 독일군의 암호를 해독하기 위해서도 빠른 계산기가 필요했다. 이것이1930-40년대에 과학계에 던져진 숙제였다.

버네버 부쉬(Vannevar Bush) 와 아날로그 계산기

그림: 버네버 부쉬(1890-1974)와 그의 미분계산기

버네버 부쉬 [2]의 이름을 들어본 적이 있다면 아마도 그가 현대식 “월드 와이드 웹(WWW)”의 첫 고안자였다는 사실때문일 것이다. 하지만 그것 말고도, 버네버 부쉬의 업적은 20세기 미국 과학계에 전설로 남아있다. 그의 몇가지 역할만 예로 들자면, “맨하탄 프로젝트의 지휘자”, “군수업체 Raytheon 설립자”, “최초의 미국 대통령 과학 비서관”등이다. 현재 세계를 지배하는 미국의 힘이 과학에 있다고 한다면, 그같은 과학정책을 처음 디자인한 사람이 바로 버네버 부쉬라고 할만큼 그의 영향력은 지대했다.

과학계에서 그의 첫 업적은 기계식 계산기의 개발이었다 [3] . 1920년대 MIT의 전자공학 교수로 일하며 그는 미분 방정식을 계산해 낼 수 있는 거대한 기계를 만들어냈다. 그의 계산기는 설명 그대로 기계였다: 위 그림처럼 막대, 기어, 도르래를 엮어서 만들었고 변수에 값을 할당하기 위해서는 여러개의 막대들을 정확한 각도로 회전시켜야 했다. 계산기에 새로운 방정식을 프로그래밍하는 건 더한 노동이었다. 막대와, 기어, 도르래를 다시 연결해서 주어진 방정식과 가장 유사한 형태로 조합해야 했던 것이다. 즉, 지금 우리가 C 언어로 몇줄 안되게 짜내는 방정식 계산 프로그램을 만들기 위해 이 당시에는 대학원 학생들이 땀 뻘뻘흘리며 막대기와 도르래를 회전시켜야 했다는 말이다. 그리고 계산기에 달린 모터를 돌리기 시작하면 기어가 돌고 막대기가 회전하면서 2%내의 오차에서 정확한 답을 계산해 냈다. 지금 시대의 우리가 보기에 너무나 조악한 이 기계는 그 당시 전 세계  과학계를 환희로 물들인 최고의 발명품이었다. 미국과 유럽등의 대학들에 날개돋힌듯 복제되어 배포되었고, 훗날 2차대전중 복잡한 계산식을 풀어내는데 사용되었다.

그림: 버네버 부쉬의 메멕스 (Memex)

앞에서 언급한대로 버네버 부쉬는 월드 와이드 웹의 개념을 처음으로 “상상”한 사람이다. 정보의 홍수속에 웹을 타고 헤엄치는 우리에게는 덜 와 닿겠지만, 그 시대의 유일한 미디어는 책과 마이크로 필름 정도였다는 것을 생각해보면 그의 상상력이 얼마나 기막힌것이었는지 알수 있다. 부쉬는 사람이 생각할때 꼬리에 꼬리를 물고 생각의 끈이 이어진다는 사실에 착안했다. 그리고 곧 사람의 두뇌에서 일어나는 그 원리를 그대로 기계로 만들어보면 어떨까 상상했고, 메멕스(Memex)로 불린 그의 상상속 기계를 구체적으로 “As we may think” 라는 논문에서 기술했다 [4]. 즉 마이크로 필름들에 쓰여진 정보중 다른 정보로 연결(association/하이퍼링크) 하는 부분에 문자 코드를 입력해 놓고, 필름를 읽다가 책상위 버튼을 누르면 책상속 기계가 돌아가며 문자코드가 가리키는 마이크로 필름을 찾아서 영사기에 올리고 출력해 준다는 개념이다. 이것은 지금의 WWW와 얼마나 유사한가! 문자 코드는 하이퍼링크고, 버튼은 마우스 클릭, 책상밑 기계는 네트워크로 대체하면, 곧 그의 상상이 바로 월드 와이드 웹 이었음을 알 수 있다. 1945년에 이러한 시스템을 상상했다니, 그저 놀라울 뿐이다. 그런 비전을 가진 사람이 만든 과학정책이 아직도 세계를 지배한다는 건 어쩌면 당연한 일인지도 모르겠다.

클라우드 섀넌(Claude Shannon)의 충격적인 석사 논문

클라우드 섀넌 (Claude Shannon), 1916-2001

20세기 최고의 “석사” 논문을 뽑으라면 누구나 주저하지 않고 클라우드 섀넌(Claude Shannon) [5]의 1937년 논문 “A Symbolic Analysis of Relay and Switching Circuits [6]”을 꼽을 것이다. 솔직히 박사논문들과 비교해봐도 그보다 영향력있는 논문을 과연 찾을 수 있을까 싶다. 왜냐하면 그의 논문이 역사상 최초로 추상적인 논리가 현실에서 돌아가는 기계로 만들어질 수 있음을 보였기 때문이다.

1936년 스무살에 수줍은 성격의 섀넌은 미시건 대학을 졸업하고 위에 소개한 버네버 부쉬의 석사 학생으로 MIT에 입학했다. 그는 부쉬의 기계식 계산기를 사용하면서, 계산기에 사용된 스위치 (switch: 막대와 막대를 연결)의 동작에 흥미를 갖게 됐다. 그리고 그는 곧 모터에 의해 열리고 닫히는 스위치가 오래전부터 사용됐던 불(Boole)의 이진법 연산(Boolean logic)과 동일하다는 사실을 발견했다. 참고로 이진법 연산이란 변수에 숫자가 아닌 참/거짓을 할당하고 더하기, 빼기의 사칙연산이 아니라 AND, OR, NOT과 같은 연산을 사용해서 주어진 식의 최종적인 참/거짓 여부를 구하는 계산법이다. 사람이 생각하고 결론에 다다르기까지의 논리를 바로 이진법 연산으로 표현할 수 있다. 섀넌은 아래 그림처럼 스위치 두개를 직렬로 이어놓았을때는 AND 연산, 병렬로 이어 놓았을때는 OR 연산과 같은 결과가 나오는것을 발견했다. 더 나아가 스위치들을 좀 더 복잡하게 조합하면 이전 스위치의 결과 (참/거짓)에 따라 다음 스위치의 열고 닫히는 여부를 결정할 수 있음도 발견했다 (즉 if/else 문을 수행할 수 있다는 뜻).

  

그림: AND 연산                                                                      그림: OR 연산

“이게 뭐 별거라고 21세기 최고의 논문 운운하냐?” 혹 이렇게 생각한다면, 좀 더 깊이 그 의미를 음미해보기를 권한다. 그것은 곧,

“사람의 생각을 기계의 조합을 통해서 표현할 수 있다”

는 충격적인 (적어도 내게는) 뜻이기 때문이다. 1930년대엔 모터로 스위치를 여닫는 기계가 쓰였지만, 곧 같은 원리가 진공관, 전자회로, 집적회로, 실리콘등 물질을 바꾸어가며 지금의 CPU와 메모리까지 이어져왔기 때문이다. 사람의 생각을 기계로 표현하는 것, 즉 컴퓨터 하드웨어의 시작을 연 것이 충격적이 아니라면 뭐가 더 충격이 될수 있을까?

지도교수 부쉬와 마찬가지로 섀넌의 천재성은 여기서 끝나지 않았다. 섀년은 10여년후 1948년 또 다시 세계를 놀래키는 논문 (A Mathematical Theory of Communication)을 쓰고 정보이론 (Information Theory)의 아버지가 된다. 일설에 의하면 그는 그의 발견을 논문으로 쓰기 싫었지만(귀찮았지만) 일하던 벨 연구소의 보스가 강제로 시켜서 출판했다고 한다. 그는 천재적인 수학실력으로 정보가 채널을 통해 전달되는 과정을 수학으로 표현하고, 채널에 노이즈가 있다 하더라도 정보를 표현하는 방식을 달리하면(encoding/decoding) 정보의 의미를 잃지 않고 전달할 수 있음을 보였다. 사람이 소음이 많은 환경에서 대화할때 몇개 중요한 단어만 들어도 문장 전체의 의미를 잃지않고 전달할 수 있는것과 같은 맥락이다. 그의 발견은 단순히 전화나 인터넷과 같은 통신망의 개발에만 중요한 것이 아니다. 정보의 교환이 이루어지는 모든 분야, 즉 인지과학, 인공지능, 데이터압축, 암호학, 또한 Compact Disc등 미디어에 이르기까지 모든 산업과 학문분야에 걸쳐 정보이론은 중요한 토대가 되었다.

(다음 편에는 튜링, 노버트 와이너를 다룰 예정입니다 ^__^b)

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

[1] 소프트웨어, 하드웨어의 아버지
[2] Vannevar Bush (위키 아티클)
[3] Differential Analyzer (위키 아티클)
[4] Memex (위키 아티클)
[5] Claude Shannon (위키 아티클)
[6] A Symbolic Analysis of Relay and Switching Circuits (위키 아티클)
[7] Information Theory (위키 아티클)

What-How-Why-Why not?

출근했는데 마땅히 급한 일이 없으니 한번 짧게 교육에 대한 생각을 정리해 본다.
요즘 Steven Levy 가 지은 구글에 대한 책 [1] 을 읽으면서 든 생각이다. 구글은 미디어에서 잘 묘사하듯이 너드, 오탁후, 해커들이 모여 만든 대형 AI (인공지능) 공장이다. Levy는 책에서 이런 구글의 문화는 독종 오탁후 래리 페이지와 세르게이 브린이 받았던 몬테소리 교육에서 비롯됐다고 이야기한다(몬테소리 원장님들이 들으면 입꼬리가 살짝 올라갈 듯). 즉, “그건 왜 안되는데?” 를 가르치는 교육이 일찌기 두 창업자 뇌를 프로그래밍 했다는 이야기다. 30분 걸어가야 유치원 한군데 있는, 00리 출신인 나로선 그런 교육을 못받은게 억울할 뿐이다 (아니다. 생각해 보니 난 자연이 프로그래밍 했다. 자랑스러워 하자). 한번 교육의 네 단계에 대해서 정리해 보자.

What
중,고등학교에서 늘 하는 짓, 지식의 결과물을 듣고 암기하는 것이다. 지금 머릿속에서 랜덤으로 쏟아져 나오는 것들을 적어보면:

  • 삼국사기 김부식, 삼국유사 일연. 김부식 나쁜놈
  •  
  • ATM의 셀은 53 바이트 (아 이건 그만 잊고싶다…ㅠㅠ)

How
대학교와서 What과 더불어 배우는 것들이다. xx 기술은 어떻게 구현되었는가? CPU는 디지털회로 땜질을 해보면서, C 언어는 컨텍스트 프리 그래머를 떠올리면서, SW디자인은 폭포와 달팽이를 손으로 따라 그려보면서 배웠다.

Why
여기서부터는 대학교에서 배우지 못한 것들인데, 누가, 왜  그 시대에 그 지식 혹은 기술을 만들어야 했는가? 미국에 와서 1년후 치른 공포의 박사시험 (Qual)에서 받은 이론 점수는 0 점이었다. 지도 교수는 미 동부 특유의 깐깐하고 엄숙한 사람인데, 그 점수가 매겨진 시험지를 앞에 놓고 약 1분간 침묵하며 날 바라보았다. 그 깊고 그윽한 눈길에서 난생 처음 공포를 느꼈다. 집에 돌아가 위로하는 아내를 거실에 두고 혼자 침대에 누워 다시 눈뜨지 않았으면 생각했다. 이런 목소리가 들렸다.

다시 힘을 얻은건 지난번 소개처럼 Martin Davis의 The Universal Computer를 읽고 나서다. 라이프니츠와 튜링이 왜 그리 Dream Machine 문제에 집착했는지를 알고 난 후, 그제서야 나도 문제 자체의 매력을 알게 됐다. 간신히 Why의 단계로 들어간 거다. How 과정에서 좌절하고 힘들때 Why는 신념을 갖고 문제에 도전하게 한다. 이런 동기부여를 주지 않은 예전 대학이 미웠다.

Why not?
요즘 정말 들어가고 싶은 단계는 “Why not?” 이다. “이런 아이디어는 왜 안되는데?”, “난 회사를 시작하면 왜 안되는데?”… 역사를 거슬러 올라가서 Why 를 찾아냈다면, 그럼 미래를 만들어내려면 Why not? 을 외쳐야 한다. 그런데 참 어렵다. 래리와 세르게이가 받았던 그런 교육을 못 받아서 그런가? 공포로 받은 상처들이 아직 아물지 않아 그런가? 은행 잔고를 보면 한숨쉬는 아내에게 미안해서 그런가?

어쩌면 평생 Why not?의 단계에 못 들어갈지도 모르겠다. Why 단계에 머무르기만 해도 아마 중산층으로, 좋은 남편과 아빠로, 혹 학교에 가게 된다면 좋은 선생이 될 수 있겠지. 근데….10년전 집을 나와 살던 벤처회사의 서버실 뒷 공간, 거기 깔아 놓은 매트에 누워서 듣던 팬(fan) 소리, 서너시간 자면서도 알고리즘이 떠오르면 일어나 메모지에 적어놓던 날. 아주 잠시였고, 실패했지만 Why not? 을 시도해봤던 그때가 계속 생각난다. 돌아가고 싶다.

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

[1] In The Plex: How Google Thinks, Works, and Shapes Our Lives, by Steven Levy
[2] 소프트웨어, 하드웨어의 아버지 (https://sangminpark.wordpress.com/2011/08/30/)

소프트웨어, 하드웨어의 아버지

1. 들어가며
요즘 나는 블로그 댓글 보는 재미로 산다. 사람들의 칭찬 한마디 보는게 이제 8개월된 딸내미의 방긋대는 얼굴만큼 흐뭇하다. ‘이러다 너드들 사이에서 강풀 (만화가)되는거 아냐?, 우훗’, 상상도 해보다가 이내 짧은 글심이 떠올라 좋은 주제나 찾아야지 생각하게 된다. 이번에 풀고 싶은 주제 역시 지난번처럼 신문기사를 읽다가 떠올랐다. 안철수님의 “하드웨어 대응 만으로는 승산없다” 라는 기사의 한 부분에 이런 언급이 나온다:

“얼마 전 하드웨어·소프트웨어·인터넷 서비스 등으로 분류해 IT업계 트렌드를 설명했더니 대기업 전자회사 최고기술책임자(CTO) 한 분이 소프트웨어는 하드웨어를 구동시키는 하나의 부분이므로 분류가 잘못됐다고 지적하더라.”

“소프트웨어가 하드웨어를 구동 시키는 하나의 부분”이다. 왠지 울컥하다. 그래, 하드웨어로 성공한 우리나라에서 소프트웨어의 역할은 그게 맞다. 빠른 CPU, 넓은 메모리에 광활하고 밝은 디스플레이, 미려한 외관으로 장식된 하드웨어를 소프트웨어는 “구동” 시키고 있다. “구동”이 주는 어감….그렇지, 소프트웨어는 뛰어난 하드웨어가 돋보이도록 낮은곳에 숨어 봉사하고 있다.  SW에 큰 관심없는 일반인들에겐, 형체없는 소프트웨어를 설명하는데 이것보다 더 좋은 표현이 있을까?. 얼마전 SW벤쳐에서 일하는 내게 아버지가 “너희 회사 공장은 어디있냐?” 하신적도 있다 (공장은 마음속에 있어요 아버지). 아마도 “하드웨어 나고, 소프트웨어가 나오는 거다” 라는게 상식처럼 되어버린 세상인데, 근데, SW로 온가족이 먹고 살아서 그런가, 왜 나는 이 기사에 울컥하고, 뜨거운 것이 솟아오르는 건가?…그렇게 고민하며 주말을 보냈다.

나는 이 에세이에서 그 반대의 이야기를 하고싶다.  “소프트웨어가 하드웨어의 애비다” 라고 외쳐본다. 여기에서 나는 소프트웨어-본질-의 역사와 하드웨어-우연-의 역사에 대해서 소개하고, 역사가 우리 프로그래머들에게 던지는 의미에 대해 쓴다. 이 글의 큰 줄거리는 지난 블로그에서도 소개했던 [1] 에서 영감을 얻었다. 그리고 좀 더 깊게 들어가는 증명은 컴퓨터 이론 텍스트북 [2,3] 에서 찾을 수 있다 (뭐, 증명이라고? — 그렇다. 심하게 재미 없을수도 있다).

2. 라이프니치의 꿈
계산과 논리는 인류가 기록물을 남긴 시절 이전부터 존재했을거다. 1+1=2 라는 사칙연산말고도, 일련의 논리적 절차를 거쳐서 결과를 보이는 계산 — 즉 알고리즘– 에 대한 인류의 자각은 아주 먼 옛날(bc)의 기록에서도 찾을 수 있다 [4]. 비 전공자에게 알고리즘은 좀 낯설수 있으니 예를 들면서 시작하자.

문제: 주어진 임의의 숫자 나열 중 가장 큰 숫자를 찾아라

1) 제일 큰 숫자를 저장할 공간을 a 라고 부른다.
2) 제일 처음 숫자를 a에 집어 넣는다.
3) 모든 수에 대해서 a와 비교해, a보다 더 큰 숫자가 나오면 a에 집어 넣는다.
4) a를 출력한다.

엄청 간단하다. 한단계 이상의 논리적 절차를 걸쳐서 결론을 냈으니 아무튼 알고리즘이다. 조금 더 복잡한 알고리즘을 소개하자면 binary search같은것이 있겠다.

문제: 순차적으로 정렬된 숫자들 가운데서 숫자 K를 찾아라

1) K와 중앙에 위치한 수를 비교한다.
2) 비교한 결과 같을 경우, 찾았음을 알리고 종료한다.
3) K가 작을 경우엔, 처음부터 중앙 바로 전까지의 숫자를 가지고 1)을 반복한다.
4) K가 클 경우엔, 중앙 다음부터 마지막까지 숫자를 가지고 1)을 반복한다.

이같은 알고리즘의 기록은 bc.300 년전 이상으로 올라간다 [4]. 일련의 논리적 절차를 거치는 계산이 알고리즘인것은 알았지만, 17세기까지 아직 절차를 어떻게 표현할 것인가는 인식하지 못했다. 현대의 프로그래밍 언어가 바로 그런 역할을 한다.

그런데 역사상 최고의 수학자중 한명인 독일의 라이프니츠(1646-1716)는 그 옛날 이런 발칙한 상상을 시작한다.

“계산과정(알고리즘)을 몇가지 글자로 표현할 수 있다면, 그럼 어쩌면 세상 모든 알고리즘에 항상 답을 주는 마법과 같은 기계(machine)를 만들수 있지 않을까?”

다시 말해서, 알고리즘을 정해진 언어로 표현해 낼 수 있다면, 그럼 우리는 그 언어로 써내려간 스토리를 마법의 공식에 집어 넣을 수 있지 않을까? 그리고 그 공식은 즉각 답을 내어준다니, 라이프니츠의 상상은 진정 대인배다웠다. 프로그래머라면 금방 알것인데, 라이프니츠의 상상은 우리가 매일 하는 그짓이다. 프로그래밍 언어로 알고리즘을 써내려가고, 이를 컴퓨터에게 주면, 컴퓨터는 항상 답을 준다. 그런데, 그가 발칙한 이유는  이 단어, “항상 (Always)”, 에 있다. 정말 모든 질문에 컴퓨터는 정답을 이야기 하나? 이 질문이 주는 깊이는 대단해서, 참으로 증명되면 적절한 데이터를 주었을때 “신이 존재하는가?” 의 질문에도 답을 할수 있다는 뜻이다. 이에 감명받은 어떤 신학자는 수학 공식으로 신의 존재를 증명하려는 잉여행동까지 감행한다.

이를 라이프니츠의 Dream Machine 이라고 부른다. 그가 상상한 마법의 기계(Machine)는 물리적 기계(하드웨어)가 아닌 무형의 “공식” 혹은 “알고리즘” 이다. 그당시 상상으로는 이 마법 레서피가 적힌 책을 들고 있는 사람에게 알고 싶은 질문을 (프로그램 언어로)써서 주면 그 사람이 마법 레서피로 주어진 문제를 계산해 결과를 가르쳐주는 것이다. 컴퓨터는 컴퓨터인데, 사람이 계산하는 컴퓨터라니, 엄청 느렸을 거고 담당자의 기분 따라서 결과가 달라졌겠지?

어쨌든, 라이프니츠는 인류가 “Let us calculate!” 이렇게 외치는 순간이 곧 올 것이라 믿었다. 라이프니츠 이후, 불(Boole), 프뤠게(Frege), 칸토(Cantor), 힐버트(Hilbert)로 이어지는 논리학, 수학의 거장들이 하나 하나 문제 해결을 위한 단초를 제공하게 된다. 그들은 이 문제에 대해, “Yes: 그래 그런 마법의 공식은 존재해!”, 혹은 “No: 그런 마법 공식은 존재할 수 없어!”, 이 둘 중 한가지를 증명해내기 위해 평생을 잉여짓으로 보낸다. 그리고 20세기에 와서야 우리는 결론에 도달했다.

3. 튜링의 잉여짓
수백년을 이어온 이 질문은 영국의 젊은 천재 수학자 튜링 (Alan Turing, 1912-1954)[6]에게도 최고의 도전거리였다. 하지만 안타깝게도 그 보다 앞서 이  질문에 답을 한 또 하나의 천재 수학자가 있었으니 그가 바로 오스트리아 출신 괴델 (Kurt Godel)[7]이다. 괴델은 25세 되던 1931년 Incompleteness Theorem 을 발표하고, 라이프니츠의 꿈 – Dream Machine – 은 존재할 수 없음을 증명했다. 즉 세상엔 답을 할 수 없는 어떤 문제 (질문)가 존재하는 것이다. 어쩌면 당연하다. 어떻게,”엄마 좋아, 아빠 좋아?” 혹은 “짜장이 갑이냐, 짬뽕이 갑이냐?”  이런 질문들에 답을 할 수 있겠는가?

괴델의 완벽한 증명에도 불구하고 튜링은 왠 똥고집이었는지, 자신만의 사고로  Dream Machine이 존재할 수 없음을 증명하기 시작했다. 잉여짓의 좋은 예다. 그 결과가 컴퓨터 학과 학생들의 헬게이트를 열어버린 튜링 머신이다. 여기서 나도 뭔 똥배짱인지는 모르지만, 튜링의 증명을 소개한다. 그동안 두편의 블로그로 쌓아온 “이해하기 쉽게 쓰는 블로거”의 이미지를 한방에 날려버릴 절호의 찬스다! 굳이 이런 짓을 하는 이유는, 이 증명안에 설명하긴 참 어렵지만, 심오한 진리가 있기 때문이다.

컴퓨터 프로그램은 가장 단순히 표현하면 위의 그림과 같은 일을 한다. 즉 프로그램 P는 주어진 인풋 데이터를 가지고, 질문이 참인지 거짓인지를 대답한다. 바로 이때, “어 근데 어떤 질문들은 참/거짓 말고 다른 대답을 하잖소?” 라고 물을 것이다. 예를 들어, 아까 설명한 최대값 찾는 알고리즘은 결과값이 숫자여야 한다. 하지만 그런 질문들은 쉽게 참/거짓으로 변환이 가능하다. 즉, 나열된 숫자에 대해서 “1보다 더큰 수 있냐?”, “2보다 더큰 수 있냐?” 이런 식으로, “아니오” 가 나올때까지 질문하는 것이다. 이것이 라이프니츠 전까지 존재했던 모든 알고리즘 혹은 논리적 사고의 가장 단순한 형태다.

우리들의 아버지 튜링은, Input, P, 와 T/F 결과값으로 이루어지는 이 단순한 형식을 신비하게 변형시킨다. 아래의 그림은 그의 Halting 프로그램을 표현 한 것이다.

이 프로그램은 특이하게 인풋으로 프로그램(P)과 데이터(I)를 모두 받는다. 그리고 내부에서 하는 일은 받은 P를 데이터 I를 넣어 돌리는것이다 (너드 언어로 에뮬레이션 한다). 그리고 나온 결과 값이 참일 경우, 거짓을 출력하고, 반대로 거짓일 경우 참을 출력한다. 그럼 이런 프로그램을 진짜 만들 수 있냐? 라는 질문이 나오는데, 조금만 생각해 보면 그리 어렵지 않다. 잠시 “너드” 모드로 들어가서 설명하자면:
– H라는 프로그램과 P라는 프로그램 모두 C 언어로 짠다.
– H는 내부에서 gcc 를 콜해서 P를 컴파일 한다. P의 바이너리가 나온다.
– Fork하고 execute해서  P를 돌린다. 데이터는 I를 넣어준다.
– 나오는 결과값 검사해서 반대를 출력한다.

여기까지 읽고 계신분들께 존경을 표한다. 갈길이 그리 멀지 않다. 여기서 한가지 이상한 짓을 해보자. 아래와 같이 H 프로그램의 인풋으로 H 프로그램 소스코드를 두번 넣는 것이다.

이 경우 H프로그램이 하는 일은 무엇일까? 다름 아니고 H프로그램 자신의 소스코드를 컴파일하고, 돌려서 결과를 반대로 출력하는 것이다. 그럼 위의 경우에 H 프로그램의 결과값은 무엇이 될수 있을까?

참: H가 참이 되려면 안에서 돌아간 H가 거짓이어야 한다…어?
거짓: H가 거짓이려면 안에서 돌아간 H가 참이어야 한다…어?

말이 안된다. H는 어떤 결과도 낼 수 없다. 다시 말해  H라는 프로그램은 존재 할 수가 없는 것이다.  바로 이것이 튜링이 라이프니츠의 Dream Machine을 반증하기 위해 만들어낸 존재할 수 없는 알고리즘 (Undecidable problem) 인 것이다.

4. 폰뉴먼과 우연한 하드웨어
과학에 2등은 없다. 튜링은 괴델보다 늦게 증명을 했으니 그는 루저였다. 그러나 튜링은 괴델과 함께 타임지의 20세기 100대 인물에 올라가 있고, 컴퓨터의 아버지라 불리고 있다. 매년 주어지는 컴퓨터의 노벨상을 튜링 어워드라 부른다. 튜링의 놀라운 업적은 증명과정에서 보여준 H라는 프로그램에 있다. 튜링 전에도 원시 형태의 컴퓨터들이 있었는데, 이것들은 기계나 전기를 활용하여 단 한종류의 알고리즘만을 구현하는 것이었다. 이를테면 아래의 사진은 튜링보다 100년이나 앞서 시도됐던 Charles Babbage의 초대형 미분방적 계산기 부속품이다. 오로지 미분방적식만 풀 수 있는 거대한 기계다.

그런데 튜링의 증명과정에서 보여준 H 프로그램은 그 내부에서 임의의 프로그램 P를 수행할 수 있다. 그는 어떤 형태의 프로그램 P든 간에 돌리고 결과값을 산출할 수 있는 H 프로그램을 어떻게 만들어 내는지를, 읽고 쓰기가 자유로운 테이프를 활용해서 보여주었고, 이를 우리는 Universal 튜링 머신이라 부른다. 어떠한 종류의 프로그램 (SW)이든 받아서 돌리고, 결과를 보여주는 어떤것, 왠지 컴퓨터의 냄새가 솔솔 나지 않는가?

이 아이디어를 처음 하드웨어로 구현한 사람은 바로 폰 뉴먼 (John Von Neumann) [8]이다. 폰 뉴먼은 20세기 최고의 천재로 불렸고, 별의 별 분야(사실 잘 모르니 이렇게 표현할 수 밖에)에 업적을 남긴 수학자였다. 그는 1945년, 튜링이 생각해낸 방식을 좀 더 구체화시켜서, 프로그램이 메모리에 저장되는 컴퓨터 EDVAC [5]의 컴퓨터 구조를 고안했다(너드언어로, 프로그램 카운터, 논리연산, 레지스터, 연산과 데이터 메모리 통합 고 따위것들이다). 그가 써내려간 구조를 하드웨어 천재들 ( John Mauchly and J. Presper Eckert)이 구현해 내는데, 이것 저것 잡다한 아날로그 전기부품을 다 써보다가, 우연히 TV등에 널리쓰인 진공관을 활용해 이런 괴물 컴퓨터를 만들어 내기에 이른다.

여담으로, 폰뉴먼은 낚아채기의 달인이다. 폰뉴먼은 튜링의 논문에서 아이디어를 얻었으면서도 자기 저서들에서 이를 언급하지 않았다. 또 함께 일했던 하드웨어 달인들의 영향을 무시하고 무명의 용사들로 만들어 버린 결과, 훗날 그들과 특허 전쟁을 치룬다. 괴델과 튜링 모두 타임지의 20세기 100인에 선정되었지만, 폰뉴먼은 대단한 업적에도 불구하고 선정되지 못했다. 어쨌든, 폰뉴먼의 구조는 70년이 지난 지금도 여전히 유효해서, PC, 타블렛, 스마트폰 모두 여전히 폰뉴먼 구조라 부른다. 다 알다시피, 이후 6-70년대 실리콘과 마이크로프로세서의 혁명으로, 컴퓨터는 인류에게 본격적으로 침투했다.

5. 결론
여기까지 써놓으니 읽는분들께 왠지 미안하다. “이따위 길고 지루한 역사 이야기만 하다니, 대 실망이다!” , 이런 원망이 들리는듯 하다. 내 얕아빠진 지식을 길게, 가까스로 풀어놓은 이유는…

“소프트웨어는 하드웨어를 구동시키는 하나의 부분 ”

나는 이 말이 진정 듣기 싫기 때문이다.

bc 300년전에도 존재한 유클리드의 알고리즘, 라이프니츠가 상상한 모든 질문에 대답해 주는 Dream Machine, 그리고 컴퓨터의 표본인 튜링의 Universal Machine 까지, 그 어떤 것도 하드웨어가 아니었다. 인간의 두뼘남짓 뇌에서 피어난 논리의 결과물, “지식(Knowledge)이란 무엇인가?” 이 질문에 인생을 걸었던 철학/과학자들의 피와 땀이 만들어 낸 결과물은 바로 소프트웨어다.  (참고로 철학박사인 친한 형과 비슷한 대화를 나눈적이 있다. 그 형은 위에 언급된 모든 사람들을 알고 있었다.)

위 카툰처럼 우리의 소프트웨어와 프로그래머들이 받고 있는 대접이 너무 씁쓸하다. 소프트웨어는 우연의 산물 하드웨어를 보조해주는 또 다른 우연이 아니라, 태초부터 인간의 인간다움속에 내재돼있던 고귀한 창조물이다. 학부 1학년이 과제로 짜는 100줄의 코드도, 수백명 엔지니어가 함께 짜는 안드로이드의 100만줄 코드도 모두 동일하다. 주어지는 문제는 다르지만, 우리의 이 작은 뇌로 고도의 생각을 집중하고, 논리의 다리를 쌓아나가 목표에 다다른다. 우연한 하드웨어 (x86, 메모리 크기, 디스크의 속도)와 환경 (데드라인, 돈, 사회적 시선)의 제한에 둘려쌓여 있지만, 우리는 그 한계들마저 소프트웨어로 계산하고, 하나 하나 해결해 나가는 그 즐거움에 취해 산다.

“소프트웨어는 하드웨어를 구동시키는 하나의 부분 “

천하에 불효자들이나 지껄일 수 있는 소리일 뿐이다.

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

[1] The Universal Computer: The Road from Leibniz to Turing by Martin Davis
[2] Introduction to Automata Theory, Languages, and Computation, by John E. Hopcroft, et al.
[3] Introduction to the Theory of Computation, by Michael Sipser
[4] Euclidean Algorithm: http://en.wikipedia.org/wiki/Euclidean_algorithm
[5] EDVAC: http://en.wikipedia.org/wiki/EDVAC
[6] People of the century: Alan Turing (http://www.time.com/time/magazine/article/0,9171,990624,00.html)
[7] People of the century: Kurt Godel (http://www.time.com/time/magazine/article/0,9171,990621,00.html )
[8] John Von Neumann: http://en.wikipedia.org/wiki/John_von_Neumann

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

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)