LISP - 프로그래밍 언어의 듀카티
(듀카티 : Ducati - 경주용 모터사이클. 초고속 모터사이클로 유명하다.)
원문 : http://www.defmacro.org/ramblings/lisp-ducati.html
들어가며
--------
2003 년 초여름 저녁, 나는 친구들과 활기찬 뉴욕시 카페의 테라스에 있었다. 불쾌한 동부 해안의 습기가 머물기전이라 상쾌한 따스한 미풍을 즐기며 길을 지나는 자동차를 보고 있었다. 내 옆자리에 앉은 사내는 초면이었다. - 그 날 저녁 우연히 우리와 함께한 친구의 친구였다. 그 사내는 모터사이클 자켓을 입고 무릎에는 헬멧을 놓고 있었다. 얼음을 깨물어 먹으면서, 나는 문득 떠오른 질문을 덜졌다. "바이크를 좋아하는 이유가 뭐지요?" 순수한 흥미였지만, 별다른 답을 들을 것을 예상한 것은 아니었다. 나 자신이 자동차를 모는 느낌을 다른 이에게 전달하지도 못하는 마당에 다른 사람으로부터 바이크를 모는 느낌을 기대할 수는 없지 않은가? 천마디 말보다 한가지 경험이 더 낫다. 그의 대답은 놀라웠다.
" 당신이 자동차를 몰면 말입니다", 라며 그는 말을 시작했다. "당신하고 기계사이에는 어떤 단절이 있어요. 느낄지도모르겠지만, 바이크를 몰기 전에는 전혀 인식하지는 못할 겁니다. 자동차를 가속하려면, 연료를 넣고, 자동차가 말을 들을 때까지아주 잠깐 기다려야하죠. 바이크에서는 이런 기다림이 훨씬 작아요. 그래서 머리에 기억해둘 필요가 없는 겁니다. 뭔가를 생각하면,거기에 있게 되는 거지요. 바이크는 당신의 몸과 같이-또는 몸의 연장(延長)같이-됩니다. 아마 이런 느낌을 차에 느끼려면 페라리가필요할겁니다. "
거기서 바로 나는 언젠가 모터사이클을 배우자고 결심했다(먼저 여가 시간을 마련하고 어머니에게 이사실을 비밀로 붙일 방법을 찾아야겠지만). 나는 다른 생각이 들때까지 며칠간 정신/기계 통일성에 관한 철학을 생각했었고, 이대화는 점차 잊혀졌다.
Common Lisp
-----------
haskell을 배우는 것은새로운 암벽등반로를 접하는 것과 같다. - 느리고, 도전적이며, 힘들지만, 과정의 만족감은 엄청나다. 마침내 쉴 수 있는안정적인 지점을 찾아내면 행복감마저 느끼게된다. Hindley-Milner 방식(역주: Haskell에서 많이 사용되는 개발방식으로 보임)으로 인한 사고의 고착을 피하기위해서, 잠시동안 Haskell을 떠나기로 결심했다. 그 다음 몇주간은 CommonLisp을 해킹하는데 보냈다.
어느 날 친구와 점심을 하면서 하고 있는 일을 말해주었다. 내 친구는"기묘한" 언어에 대한 내 애정을 결코 이해하지 못했다. - 그럴 수 있는 사람은 거의 없었다. "그래서 Lisp으로프로그램한다는 것은 어떤 느낌이야?" 하고 그가 물었다. 갑자기, 3년 전의 대화가 기억의 저편에서 떠올랐다. "바이크를 타는것 같지." 라고 내가 말했다.
Common Lisp 컴파일러는 단순한 도구가 아니다. - 많은 지식을 얻게되면 그언어는 정신과 몸의 연장(延長)이 되어 준다. 어떤 일을 하고 싶은지 생각하고 약간의 타이핑을 하게 되면 곧 그것이 성취된다.지연시간이 있는 것을 알아채지 못할 정도다. Lisp 프로그램을 해킹하는 것은 상당히 유동적이어서 기계를 외부의 존재로인식하기가 어려울 정도이다. Common Lisp은 프로그래밍 언어의 듀카티인 셈이다.
Haskell
-------
내 친구와 그런 대화를 할 때 계속해서 이렇게 물었다. "Lisp이 듀카티면 Haskell은 뭐야?" 그가 이 점을 물어줘서기뻤다. - Haskell을 이제 갓 접한 사용자로서, 대답을 생각해내는 과정을 통해 내 자신의 마음에 있는 퍼즐의 마지막조각을 맞출 수 있었다.
약간 생각을 한 후 나는 교통 수단을 통한 비유로는 Haskell을 의미있는 방식으로설명하기 어렵다는 것을 알게 되었다. Haskell 프로그램을 해킹하는 것은 운전하는 것과는 다르다. - 유연한 요소를 놓친다.Lisp은 어떤 생각을 하건, 그것을 기계와 지속적으로 소통할 수 있게 한다. Haskell은 아주 다른 방식으로 생산성을폭발적으로 향상시킨다. Haskell은 문제를 해결하는 매 단계를 관찰하고 다시 배열하게한다. 구조에 관련된 규약으로 인해유연성은 떨어진다. 아름답지않은 Haskell 프로그램을 만드려고 한다면 엄청나게 수고를 들여야 할 정도이다.
Lisp과 Haskell 중 무엇을 먼저 배워야할까? 개인적인 선호에 따라 다를 것이다. 하나는 분명하다. - 만약 위대한 개발자가 되기를 원한다면 반드시 두 개 모두 배워야 할 것이다.