순수한 함수는 입력이 같으면 결과가 항상 같아야 합니다. 그럼 랜덤 함수는 어떻게 만들 수 있을까요? 매 번 입력을 다르게 해서 불리도록 만듭니다. 정말 항상 다른 입력을 넘기는 걸까요? 맞습니다. 항상 그렇게 합니다. 항상 그렇게 하지만, 사용자가 불편하지 않게 “가려 놓는” 패턴들을 이용해서 불편을 해소합니다. 굉장한 매직을 일으키는게 아니라 단순히 “안 보이게” 하는 패턴들인데, 단점은 이 들을 이해하는게 꽤 까다롭습니다.(사실은, 컴파일 타임에만 다른 값으로 볼 뿐, 런타임에 가면 “매 번 다르다고 표시한 값”은 사라집니다.)
이 블로그는 대부분 하스켈의 까다로운 부분을 이해하기 위해 발버둥치다 “아하!”한 순간의 노트입니다. 지식 전달이나 강의를 대체하기 위한 글이 아닙니다. 제가 이해한 게 맞는지 여러분들과 의견을 나누기 위한 글로 검증 절차를 따로 거치지 않아 틀린 내용이 있을 수도 있습니다. 발견하신 분들은 글을 남겨 주시면, 이 블로그 작성자뿐 아니라 여기를 찾는 다른 분들에게 큰 도움이 될 겁니다.
글을 쓰면서 지켜려는 규칙 몇 가지
업계에서 잘 쓰이지 않는 번역 용어보다는 입에 붙는 용어를 쓰려고 합니다. 이미 우리글 자료가 많은 분야면 크게 고민거리는 아닐지 모르지만, 하스켈 공부를 하려면 거의 외국어(영어) 텍스트들을 봐야합니다. 어차피 익숙치 않은 한자어로 번역을 해봤자, 번역 단어에서 원 단어보다 더 나은 어떤 점도 못느낀다면 그냥 원 단어가 더 낫습니다. 물론, 언뜻 봐선 연결 고리를 찾기 어려운 순우리말 번역도 마찬가지로 피했습니다. 용어는 억지로 정착 시킨다고 살아남는 게 아닌 것 같습니다. 국내에 하스켈 생태계가 어느 정도 생기고 자료가 많아졌을 때는 다른 선택을 할 수도 있겠지만, 지금은 대부분 영어 텍스트들을 읽어야 하는데, 머리에서 한 번이라도 생각의 과정을 덜 거치게 하는게 낫습니다. 번역 용어가 자리잡게 하기 위한 시도들을 하는 분들이 잘 못 되었단 말은 아닙니다. 누군가는 진도를 빼기 위한 생각을 가지고 있고, 누군가는 착실히 다지면서 가고 싶은 생각을 가지고 있습니다. 어느 한 쪽이 옳은 게 아니라, 둘 다 생태계를 만들어 가는데 필요한 요소라 생각합니다. 어느 쪽을 억지로 강요한다고 그 방향으로 가지 않는다는 걸 경험으로 알고 있습니다. 저는 아직도 “알멩이”란 단어에서 커널을 지칭하는 개념이 떠오르지 않습니다. 하지만, 누군가는 그 단어로 첫 시작을 해서 저와는 다른 생각을 가질 수 있습니다. 누가 옳다 그르다의 문제가 아닙니다. 어느 방향으로 쏠릴지는 선구자가 결정할 수 있는 문제가 아니라, 생태계가 결정할 문제입니다.
기술적인 글은 ’ ~의’, ’ ~적’, ’ ~에 대하여’를 최대한 줄이는게 좋다고 생각합니다. 이 셋은 거의 모든 곳에 써도 될 정도의 뜻을 가지고 있습니다. 바꿔 말하면 엄청나게 모호한 의미란 얘깁니다. 의도를 명확히 할 수 있는 조사들이나 가능한 설명이 있음에도 ‘~의’, ‘~적’, ‘~에 대하여’를 써버리면, 자세한 정보를 모두 가려버리는 비효율적인 도구들입니다. 여기 글에선 최대한 쓰지 않으려고 노력하지만, 무심결에 써버리는 경우가 많습니다. 인지될 때마다 고쳐나가고 있습니다. 기술 문서에서 ’거시기’ 화법은 좋지 않다고 봅니다.
“MyData에 대한 펑크터”
“MyData의 펑크터”
“MyData를 키로 하는 펑크터 인스턴스”
어느 정도 지식이 있을 때는 어느 표현도 무리 없지만, 펑크터 개념을 처음 볼 때는 분명한 차이가 있습니다. 몇 글자의 추가로 생산성이 떨어질리 없습니다. 명확한 문장이 훨씬 생산성이 높습니다.
완벽한 글을 공개하는 것이 아닙니다. 이해하지 못한 단순 번역을 올리는 건 피하지만, 제대로 이해한 건지 의심되더라도 아이디어가 어렴풋이 보인다면 공개해서 의견을 나누는 쪽으로 방향을 잡았습니다.
모두에게 맞는 글은 없습니다. 여기 글은 명확한 대상을 정하고 씁니다. 저와 컨텍스트가 맞는 분들과 생각을 공유하기 위한 글입니다.
MSX Basic
Z80 Assembly
Pascal
GW-Basic
C
Macromedia Director
Visual Basic
PHP
Flash Actionscript
C++
Javascript
그리고 지금은 Haskell, PureScript(아직까지는 희망 사항).