SICP : 위대함과 오묘함

semmal의 이미지

살면서 위대함과 오묘함을 구별하지 못한 경우가 나는 꽤나 많다. 위대함이란 보통 사람이 넘볼 수 없을 만큼 대단해서 오히려 하찮게 보일 때가 많았다. 반면에 오묘함은 꽤나 납득이 가면서도 신비함에 가득차 있는 무언가처럼 보였다. 그렇지만 수많은 실수에도 불구하고, 위대함과 오묘함을 알아채는 건 아직까지도 정말 힘들일이기는 하다.

어떤 사람이나 기술이 위대한지 알기 위해서는 그 대상에 대해서 잘 알아야 한다. 문제는 위대한 존재는 위대한 만큼 이해하기 위해서는 앞에서 알아야할 것이 많다는데 있다. 그렇기 때문에, 앞에서 필요한 지식을 얻지 못했다면 대상이 위대한지 위대하지 않은지 구별할 수 없다.

반면에 오묘한 건 아주 쉽게 발견할 수 있다. 오묘하다는 건 완전히는 아니지만 어느 정도 그것을 알게 되었다는 말이다. 그리고 그 순간은 첫 만남이 아니라도 오랜 시간이 지나지 않아 오묘함을 깨달을 수 있다. 반면에, 오묘함은 오묘함에서 그치는 경우가 많다. 애초에, 오묘하게 느껴졌던 것은 상세하지 않았기 때문이고, 상세하지 않았기 때문에 더 알기가 힘들다.

나의 경우에 첫번째 오묘함은 Object-Oriented라는 개념이었다. C에서 자질구레한 프로그램이나 짜면서 자기만족을 했지만, 늘상 제대로된 추상과 설계를 하지 못한다는 사실을 깨닫고 있었다. 그때는 OO라는 개념이 딱 내가 부족하던 부분을 말해주고 있었고, 그것을 쉽게 해결할 수 있으리라 믿었다.

하지만 재밌게도 내가 부족한 점을 매꿀 수 있었던 것은 7년이 지난 어느 날 SICP를 배우면서 였다. 실제로 이 책은 여러가지 경로로 OO를 접할때 거의 동시에 접하게 되었고, 나에게서 철저히 무시되었다. 내가 봤을 때 이 책은 나중에 쓸일도 없는 scheme이라는 언어의 문법책이었고, 문법책 답지 않게 엄청나게 어려운 문제들로 중무장하고 있었다. 당연하게도 나는 흥미를 잃었고, 아리송한 OO의 세계에 빠져드는 것을 선택했다. 대학원에서 SICP를 다시 봤을 때야, 그리고 여러 사람의 도움을 받고서야, 이 책의 진가를 겨우 발견할 수 있었다.

7년동안의 고민이 단지 일년도 안되는 기간동안 본 책으로 인해서(그것도 책의 반도 채보지 않았는데) 깨졌을 때의 허탈함은 이루말할 수 없다. 프로그래밍에서 오묘함은 없다. 루크가 "해본다"라고 말했을 때 "한다, 못한다 중 하나야. ’해본다’는 없어."라고 대답한 요다처럼, 프로그래밍은 "안다, 모른다" 중 하나일 뿐이다.

우습게도 실력이 없었던 과거에는 자신감이 넘쳐서 뭐든지 시키면 다 만들 수 있다고 남들에게 소리쳤다. 지금은 뭐든지 못한다고 말할 수 밖에 없다. 아직 나에게는 컴퓨터 세상은 오묘함으로 보이는 "모르는 것" 투성이다.

이 글을 보는 프로그래머들에게 "멋지게 다가오는 오묘함을 믿지마라.", "진실을 알기전까지 무엇이든 섣부른 판단은 하지마라."라고 말하고 싶다. 그리고 꼭! "SICP를 봐라"라고 당부하고 싶다. 어쩌면 이 마저도 오묘함을 위대함이라 착각하는 경우일 수도 있지만...

댓글

쿨링팬의 이미지

판소리에 고수의 추임새를 이 때 넣어야 되는군요.

'얼씨구'

P.S. 좋은 말씀이라는 얘기입니다. ;)

kasi의 이미지

공교롭게도 윗분 이미지가 요다 이군요. ㅋㅋ

sixmen의 이미지

Structure and Interpretation of Computer Programs 군요. 마침 제 옆에 있는 책..

좋은 책이죠..

학부때 좀 본 이후(한 1/5쯤은 봤나?)로 전혀 진도를 못 나가고 있습니다. 언제 완독하나..

gurugio의 이미지


학교 동아리에서 같이 독서모임을 하기로 한 책이네요.
이번주부터 시작인데...
반만이라도 읽었으면 좋겠습니다.

대학 2~3학년 학생들도 읽을만한가요?

----
세상을 바꾸는 것은 단 한 사람. 오직 하나님의 사람뿐이다.

익명 사용자의 이미지

그래서 알면 알면 알수록, 더 알아야 할것이 많고, 심사숙고 해지는것 같네요...
모르면, 무조건 할수 있다고 할수 있고,,,,
알면, 할수 없다고 하니,,,,
회사에서는 싫어해요...ㅠㅠ

semmal의 이미지

다만 몇가지 주의할 점이 있습니다.
SICP 초반의 책 내용은 그리 어렵지 않습니다. 문제는 따라가다가 보면 난이도가 점프를 하는 것 같은 느낌을 받는다는데 있습니다. 그 이유는 연습문제를 꼼꼼히 안풀어봤기 때문입니다. 연습문제를 풀어야 내용이 연결되는 부분이 있습니다.
책을 읽으시면서 연습문제 하나 각주 하나도 놓치지 마시고 다 보세요. 각주에 보면 논문을 봐라고 하는 부분도 찾아보면 좋습니다.
다만, 이런 식으로 진행하면 아주 진도가 더디게 나갑니다. 하지만 맘을 급하게 먹지마시고 조금씩이라도 제대로 나가시다보면 많은 걸 알게되리라 믿습니다.
그리고 scheme을 통해서 SICP를 보고 있더라도, 쓰고 있는 언어(c, java 등)로 어떻게 표현할까를 생각해보시면 실제 프로그래밍하는데도 도움이 됩니다. 무엇은 쉽게 되고 무엇은 쉽게 안되는지, 안되는 것은 왜 그런지, 이유를 찾다보면 SICP의 내용을 써먹는데 유용할 것으로 생각됩니다.
------------------------------
How many legs does a dog have?

------------------------------
How many legs does a dog have?

deisys의 이미지

연습문제를 하나 하나 꼭 다 풀어봐야 가치를 느낄 수 있는 책입니다. >_<=b

--
Deisys, in the middle of the world, being with you . . . . . .

OpenSnake의 이미지

번역본이 있긴한데.....

--------------------------------------------
혼자있고 싶습니다. 모두 지구밖으로 나가주세요.

--------------------------------------------
혼자있고 싶습니다. 모두 지구밖으로 나가주세요.

tavon의 이미지

미국 일부 대학 학부 1학년 때 Scheme를 첫 프로그램잉 언어로 가르치고 SICP를 교과서로 쓰는 학교도 있습니다. ^_^;; 예: MIT, Carnegie Mellon, UC Berkeley...등등

저희 학교는 C++를 배웠는데... 왠지 차이가 너무 나내요.

bellows의 이미지

슬슬 2008년도 계획을 짤 시기입니다..
딱 알맞겠네요..
물론 직장 다니면서 얼마나 볼 수 있을지는 모르겠습니다만.. ^^;;

아직은 갈 길이 멀다

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.