SICP : 위대함과 오묘함
살면서 위대함과 오묘함을 구별하지 못한 경우가 나는 꽤나 많다. 위대함이란 보통 사람이 넘볼 수 없을 만큼 대단해서 오히려 하찮게 보일 때가 많았다. 반면에 오묘함은 꽤나 납득이 가면서도 신비함에 가득차 있는 무언가처럼 보였다. 그렇지만 수많은 실수에도 불구하고, 위대함과 오묘함을 알아채는 건 아직까지도 정말 힘들일이기는 하다.
어떤 사람이나 기술이 위대한지 알기 위해서는 그 대상에 대해서 잘 알아야 한다. 문제는 위대한 존재는 위대한 만큼 이해하기 위해서는 앞에서 알아야할 것이 많다는데 있다. 그렇기 때문에, 앞에서 필요한 지식을 얻지 못했다면 대상이 위대한지 위대하지 않은지 구별할 수 없다.
반면에 오묘한 건 아주 쉽게 발견할 수 있다. 오묘하다는 건 완전히는 아니지만 어느 정도 그것을 알게 되었다는 말이다. 그리고 그 순간은 첫 만남이 아니라도 오랜 시간이 지나지 않아 오묘함을 깨달을 수 있다. 반면에, 오묘함은 오묘함에서 그치는 경우가 많다. 애초에, 오묘하게 느껴졌던 것은 상세하지 않았기 때문이고, 상세하지 않았기 때문에 더 알기가 힘들다.
나의 경우에 첫번째 오묘함은 Object-Oriented라는 개념이었다. C에서 자질구레한 프로그램이나 짜면서 자기만족을 했지만, 늘상 제대로된 추상과 설계를 하지 못한다는 사실을 깨닫고 있었다. 그때는 OO라는 개념이 딱 내가 부족하던 부분을 말해주고 있었고, 그것을 쉽게 해결할 수 있으리라 믿었다.
하지만 재밌게도 내가 부족한 점을 매꿀 수 있었던 것은 7년이 지난 어느 날 SICP를 배우면서 였다. 실제로 이 책은 여러가지 경로로 OO를 접할때 거의 동시에 접하게 되었고, 나에게서 철저히 무시되었다. 내가 봤을 때 이 책은 나중에 쓸일도 없는 scheme이라는 언어의 문법책이었고, 문법책 답지 않게 엄청나게 어려운 문제들로 중무장하고 있었다. 당연하게도 나는 흥미를 잃었고, 아리송한 OO의 세계에 빠져드는 것을 선택했다. 대학원에서 SICP를 다시 봤을 때야, 그리고 여러 사람의 도움을 받고서야, 이 책의 진가를 겨우 발견할 수 있었다.
7년동안의 고민이 단지 일년도 안되는 기간동안 본 책으로 인해서(그것도 책의 반도 채보지 않았는데) 깨졌을 때의 허탈함은 이루말할 수 없다. 프로그래밍에서 오묘함은 없다. 루크가 "해본다"라고 말했을 때 "한다, 못한다 중 하나야. ’해본다’는 없어."라고 대답한 요다처럼, 프로그래밍은 "안다, 모른다" 중 하나일 뿐이다.
우습게도 실력이 없었던 과거에는 자신감이 넘쳐서 뭐든지 시키면 다 만들 수 있다고 남들에게 소리쳤다. 지금은 뭐든지 못한다고 말할 수 밖에 없다. 아직 나에게는 컴퓨터 세상은 오묘함으로 보이는 "모르는 것" 투성이다.
이 글을 보는 프로그래머들에게 "멋지게 다가오는 오묘함을 믿지마라.", "진실을 알기전까지 무엇이든 섣부른 판단은 하지마라."라고 말하고 싶다. 그리고 꼭! "SICP를 봐라"라고 당부하고 싶다. 어쩌면 이 마저도 오묘함을 위대함이라 착각하는 경우일 수도 있지만...
댓글
판소리에 고수의
판소리에 고수의 추임새를 이 때 넣어야 되는군요.
'얼씨구'
P.S. 좋은 말씀이라는 얘기입니다. ;)
공교롭게도 윗분
공교롭게도 윗분 이미지가 요다 이군요. ㅋㅋ
SICP가 뭔가 했더니..
Structure and Interpretation of Computer Programs 군요. 마침 제 옆에 있는 책..
좋은 책이죠..
학부때 좀 본 이후(한 1/5쯤은 봤나?)로 전혀 진도를 못 나가고 있습니다. 언제 완독하나..
학교 동아리에서
학교 동아리에서 같이 독서모임을 하기로 한 책이네요.
이번주부터 시작인데...
반만이라도 읽었으면 좋겠습니다.
대학 2~3학년 학생들도 읽을만한가요?
----
세상을 바꾸는 것은 단 한 사람. 오직 하나님의 사람뿐이다.
흐~~~음...
그래서 알면 알면 알수록, 더 알아야 할것이 많고, 심사숙고 해지는것 같네요...
모르면, 무조건 할수 있다고 할수 있고,,,,
알면, 할수 없다고 하니,,,,
회사에서는 싫어해요...ㅠㅠ
네 대학2~3년이면 충분히 가능합니다.
다만 몇가지 주의할 점이 있습니다.
SICP 초반의 책 내용은 그리 어렵지 않습니다. 문제는 따라가다가 보면 난이도가 점프를 하는 것 같은 느낌을 받는다는데 있습니다. 그 이유는 연습문제를 꼼꼼히 안풀어봤기 때문입니다. 연습문제를 풀어야 내용이 연결되는 부분이 있습니다.
책을 읽으시면서 연습문제 하나 각주 하나도 놓치지 마시고 다 보세요. 각주에 보면 논문을 봐라고 하는 부분도 찾아보면 좋습니다.
다만, 이런 식으로 진행하면 아주 진도가 더디게 나갑니다. 하지만 맘을 급하게 먹지마시고 조금씩이라도 제대로 나가시다보면 많은 걸 알게되리라 믿습니다.
그리고 scheme을 통해서 SICP를 보고 있더라도, 쓰고 있는 언어(c, java 등)로 어떻게 표현할까를 생각해보시면 실제 프로그래밍하는데도 도움이 됩니다. 무엇은 쉽게 되고 무엇은 쉽게 안되는지, 안되는 것은 왜 그런지, 이유를 찾다보면 SICP의 내용을 써먹는데 유용할 것으로 생각됩니다.
------------------------------
How many legs does a dog have?
------------------------------
How many legs does a dog have?
동감합니다.
연습문제를 하나 하나 꼭 다 풀어봐야 가치를 느낄 수 있는 책입니다. >_<=b
--
Deisys, in the middle of the world, being with you . . . . . .
--
http://www.deisys.net
근데 다들 영문 버젼으로 보셨나요?
번역본이 있긴한데.....
--------------------------------------------
혼자있고 싶습니다. 모두 지구밖으로 나가주세요.
--------------------------------------------
혼자있고 싶습니다. 모두 지구밖으로 나가주세요.
미국 일부 대학 학부
미국 일부 대학 학부 1학년 때 Scheme를 첫 프로그램잉 언어로 가르치고 SICP를 교과서로 쓰는 학교도 있습니다. ^_^;; 예: MIT, Carnegie Mellon, UC Berkeley...등등
저희 학교는 C++를 배웠는데... 왠지 차이가 너무 나내요.
내년 계획이 추가되었습니다
슬슬 2008년도 계획을 짤 시기입니다..
딱 알맞겠네요..
물론 직장 다니면서 얼마나 볼 수 있을지는 모르겠습니다만.. ^^;;
아직은 갈 길이 멀다
댓글 달기