컴퓨터과학이 여는 세계
이 글은 이광근교수님께서 쓴 동명의 책에 대한 소개이자 독후감이다. 서점 가판대에 놓인 책을 보자마자 신기하고 반가웠다. 그 느낌은 '드디어 우리에게도 이런 책이 나온단 말인가?' 였다. 당시 옆에서 지켜본 지인께서 책을 사서 선물하셨다. 딱히 읽고 싶어서 집어든 것은 아니었고, 앞서 말한 반가움의 표현이었는데, 마치 내가 읽어야 할 사람이라는 듯이 선물 받게 되었다. 그 후 책을 실제로 읽기까지는 상당한 시간이 걸렸고, 대부분은 북경과 서울을 오가는 기내[1]에서 읽었다.
우리에게도 이런 유산이
책 머리에서 느낄 수 있는 저자의 책임감은 모처럼 존경스러운 교수님을 만난 느낌이었다. 그리고, '따스한 모국어'란 표현이 읽는 내내 상당한 자극[2]을 주었다. 우리말과 우리 정서로 소화한 컴퓨터 과학에 대한 이야기는 전에는 본 적이 없다. 비전공자를 위한 책이라지만, 소프트웨어 공학 전공자라 할 수 있는 나에게도 쉽게 읽히는 책은 아니다. 물론, 수학적 어휘와 내용이 생소하다는 뜻이다. 하지만, 저자가 다루는 방대한 이론을 이보다 쉽고 짧은 분량에 소화하는 일은 감히 도전하기 힘든 일로 칭송할만한 일로 오해가 없기를 바란다.
따스한 모국어
솔직히 모국어가 따스한지 모르겠다. ^^ 그보다는 임춘봉님이 오래 전에 모국어로 표현할 수 없으면 이해하지 못하는 것이라고 말한 바 있는데, 따스하다 같은 형용사 표현보다는 그때 들은 말이 떠오른다. 이광근교수님은 책 구석구석에서 많은 모국어 해석을 내놓았다. 파격적이고 어색했지만, 흔히 쓰이는 직역 표현에 비해 확실히 본질을 떠올리는데에는 모국어 표현이 효과적이다. 몇 가지 사례를 흔히 쓰이는 다른 곳의 표현과 대비하여 열겨하면 다음과 같다.
- 통밥heuristic (vs[4] 휴리스틱)
- 나눠풀어 합치기divide-and-conquer (vs 분할정복)
- 기억하며 풀기dynamic programming (vs 동적 프로그래밍)
- 질러놓고 다듬기iterative improvement[5]
- 속내용 감추기abstraction (vs 추상화)
특히, 기억하며 풀기의 경우 주석으로 아래와 같이 저자의 의견을 피력하셨다.
대개 '동적 프로그래밍'으로 직역해서 통용되고 있으나, 내용을 쉽게 전달하는 번역으로는 아쉬움이 많다. 그래서 'dynamic programming'의 아이디어가 직관적으로 전달되도록 의역해서 '기억하며 풀기'로 썼다.컴퓨터과학이 여는 세계 125쪽 중에서
튜링 기계와 람다 계산법이란 두 중력권
내용면에서 나에게 가장 큰 영향을 끼친 부분이 있다. 159쪽부터 등장하는 두 중력권이야기다. 비로소 이 내용을 읽고서야 명령형 프로그래밍언어와 함수형 프로그래밍 차이를 이해했다. 완전히 소화했다 말할 수는 없으나, 단순히 프로그래밍 스타일로 함수형 언어를 살펴본 경우와는 분명 달랐다. 사실 지난 달에 쓴 매력적인 Scala, 하지만 우리는 Go!의 배경지식 50%는 이 책에서 얻은 것이다. 다시 말해 컴퓨터과학이 여는 세계를 읽지 않았다면 Algebraic Data Type이란 말의 존재조차 알지 못했을 것이고, 함수형 언어가 갖는 파급효과를 추정하는 지혜도 갖지 못했을 것이다.
만일, 필자처럼 함수형 언어에 왜들 법석인지 궁금한 분이라면 159쪽 이하 일독을 권한다. 아래 176쪽의 표는 필자에게도 숙제로 남은 내용이다. 그저 독서로 해결할 수 있는 부분은 아닐 듯하고, 구현을 통해 공부(工夫)해야 할 부분이기에 한쪽 귀퉁이를 접어두었다.
![프로그램 짜기와 증명하기 대응관계](http://www.popit.kr/wp-content/uploads/2017/12/13-543x600.jpg)
프로그램 짜기와 증명하기 대응관계
미더운 사이
흥미로운 내용을 하나 더 소개한다. 따스한 모국어로 쓰인 매우 독특한 해석이 엿보이는 내용이 있다. 221쪽의 내용인데 그대로 발췌하니 읽어 보시라.
우리는 가족이나 친척, 고향 친구나 동창, 동네의 이웃들과는 미더운 사이를 쉽게 형성한다. 시공간을 오랫동안 공유하고 부대끼며 누가 믿을만한지 잘 알게 됐기 때문이고, 상대의 믿음을 저버리면 모두가 알게 되어 사회생활이 어려워지는 위험을 서로 알고 있기 때문이다. <중략> 기계 학습 기술은 이런 미더운 사이를 더 넓은 세계의 모든 사람 사이로 확장시켜 준다. 서로 겪어본 경험이 없지만 미더운 정도를 가늠해서 알려준다. 인터넷에 남은 그 사람의 그동안의 행적으로부터 그 사람의 미더운 정도를 가늠해준다. 서로가 서로에게 남기는 추천이나 평가가 고스란히 데이터가 되어 미더운 정도를 가늠해준다. 앱덕abduction 과정이다.
기계학습에 대한 핵심을 꿰뚫은 표현치고는 놀랍도록 쉽다. 인공지식에 대한 사심어린 기사나 흥미위주의 자극적 내용만 발췌한 글이 넘쳐나는 형국에서 보석같은 내용이 눈에 띄지 않게 숨어(?) 있다. 여기서 또한 '미더운 사이'가 주는 의미를 더 부각시키기 위해 다른 글을 인용해본다.
머신러닝 시스템이 불러오는 위험은 세 가지다. 첫째, 설계자가 의도하지는 않았지만 시스템 훈련용 데이터에서 비롯된 편견이 기계에 숨어들지도 모른다. 예를 들어 어떤 시스템이 과거에 인간 헤드헌터가 내린 일련의 결정을 토대로 입사지원자들의 면접 여부를 정하는 법을 배운다면, 그 시스템은 인종, 젠더, 민족 등에 대한 다양한 편견을 무심코 학습하게 될 수 있다. 게다가 이런 편견은 뚜렷한 규칙으로 드러나기보다는, 고려 대상이 되는 수천 가지 요소의 미묘한 상호작용 안에 박혀 있을 수 있다.인공지능 파헤치기, 에릭 브린욜프슨, 앤드루 맥아피 <HBR한국판 11, 12월호> 중에서
그렇다. 인공지능조차도 인간의 살아가는 방식 즉, 미더운 사이 안에서 이해할 때 숨은 뜻까지 제대로 파악할 수 있다. 우리 모두가 인용한 글의 저자인 인공지능 전문가가 아니라면 더더욱 그렇다.
맺음말
책 내용 소개는 여기까지다. 솔직히 가볍게 읽을 책은 아니다. 비전공자에게 어떨지는 추측하기 어렵다. 단, 나처럼 유사 전공자지만, 이론과 거리가 좀 멀어진 경우라면 일독을 권한다. 그리고, 함수형 언어가 (유행 말고) 어떤 의미를 지니는가에 대해서 궁금한 이들에겐 특별히 권하고 싶다.
마지막으로 바라건대 이 책이 1판에서 그치지 않고, 계속 개정되어 외산 학문의 틀을 벗어나 따스한 모국어로 우리의 해석이 담긴 형태로 전수되길 희망해본다.
주석
[1] 학교 다니던 시절 전공서적과 프로그래밍 관련 영문 기사 대부분을 왕복 지하철에서 읽었던 습관은 20년이 흘러도 그대로다. 아니 교통편만 조금 바뀌었을 뿐.
[2] 이 책 읽기 전에도 스스로, 또 외부 자극으로도 배운 바를 우리 말로 남겨야 한다는 책임감이 있었다. 아마도 이 책이 내가 앞으로 쓸 책 집필을 결심하는데 필요한 수치인 200(용기)[3]을 채워준 듯하다. 독후감을 쓴 이후 조만간 나는 출사표를 발표하고, 죽기 전에 설계 노하우를 기록하여 우리말로 내놓을 생각이다.
[3] '마음은 몸으로 말한다' 참조
[4] 다른 글에서 흔히 보던 표현
[5] 다시 보니 애자일에서 말하는 반복 역시 질러놓고 다듬는 성격이 강하다 싶다. 멋지다.