Code Metaphor

Programming, Writing, Reading, Thoughts…

야크 털깎기

아래는 LangDev IRC 채널에서 7월 15일에 했던 대화. (중간에 껴있는 다른 주제의 이야기는 제외.)

11:49 <@sanxiyn> 또다시 yak shaving의 신비한 세계
11:51 <@sanxiyn> yak shaving이 뭔지 다 아시죠?
11:51 <디토군> 방금 찾아보고 왔음
11:51 <@mana> (조용히 설명을 기대중)
11:51 <@sanxiyn> 나무를 베려고 하는데
11:52 <@sanxiyn> 도끼질을 하다가
11:52 <@sanxiyn> 도끼가 더 잘 들면 나무를 쉽게 벨텐데 해서
11:52 <@sanxiyn> 도끼 날을 세우다가
11:52 <@sanxiyn> 도끼 가는 돌이 더 좋으면 도끼 날을 더 빨리 세울텐데 해서
11:52 <@sanxiyn> 좋은 숫돌이 있는 곳을 수소문해 보니
11:52 <@mana> …
11:52 <&홍민희> 그거 전형적인 제 행동이네요
11:52 <@sanxiyn> 저 멀이 어디에 세계 최고의 숫돌이 난다고
11:52 <@sanxiyn> 거기까지 야크를 타고 가려다가
11:52 <@mana> 항상하던 짓이라서 타이핑을 할 수 없었습니다
11:52 <@sanxiyn> 야크 털을 깎아서…
11:52 <@sanxiyn> etc.
11:52 <@mana> …
11:53 <@sanxiyn> Jargon File에는 자세한 내용은 안 나오네요.
11:53 <@sanxiyn> http://www.catb.org/~esr/jargon/html/Y/yak-shaving.html
11:55 <@sanxiyn> 근데 저도 현재 yak shaving 중
11:55 <@sanxiyn> 리커전이 너무 깊어서 도저히 이런 공개적인 자리에서 말할 수가 없다는;
11:55 <@sanxiyn> 창피;
11:58 <디토군> 흠 나도 yak shaving을 하고 있던가
11:58 <@sanxiyn> 디토군: 너무 깊지 않으면 소개좀~
11:58 <@mana> 다들 살다보면 그런경우 꽤 많지 않나요?
11:58 <디토군> 딱히 그런 것 같지는…
11:58 <@mana> 나만 그런가
11:58 <@mana> …
11:58 <@sanxiyn> mana: 프로그래머들만 그래요
11:58 <디토군> 그래도 일단 Django에 붙은 걸로 yak shaving은 해결된 듯
11:58 <@sanxiyn> 뭐랄까 우수한 프로그래머들의 직업병
11:59 <디토군> 애니메타 코드를 재작성하고 있긴 한데
11:59 <디토군> (…….)
11:59 <@sanxiyn> yak shaving이라 함은 예를 들어
11:59 <@sanxiyn> 애니메타 코드를 재작성하고 있는데
12:00 <@sanxiyn> 테스트하다가 CSS가 어디 미운 곳을 찾았는데
12:00 <@sanxiyn> 고치려니 짜증나서 CSS 마크업 언어를 찾다가 LESS를 발견했는데
12:00 <@sanxiyn> LESS 그냥 쓰면 되는데 루비로 되어 있어서 파이썬으로 다시 짜려다가
12:00 <@sanxiyn> 테스트 수트가 없어서 LESS 테스트 수트를 만든다거나
12:00 <@sanxiyn> 이런 걸 말하는 것임
12:00 <@sanxiyn> (특정인을 가리키려는 의도는 없구요)
12:00 <디토군> ㅋ

난 yak shaving으로 엄청난 시간을 낭비하는 사람이다. 예를 들어 VLAAH를 만들기 위해 인하우스 웹 프레임워크를 만들고, PostgreSQL을 사용하는데 마땅한 ORM이 없어서 PostgreSQL 전용의 ORM 프레임워크를 만들고, 데이터베이스 스키마 마이그레이션을 하기 위해 RoR에 있는 것과 비슷하게 또 만들고, ORM에서 블럭을 사용하거나 웹 프레임워크에서 액션을 고차함수로 주고 받고 싶어서 Phunctional을 만들고1… 그래서 지금은 VLAAH 코드의 중요한 부분에 모두 나의 책임이 엮여져 있기 때문에 야간개발팀에서 레거시 코드에 대한 다굴을 가장 많이 당하는 것도 나다.

이 블로그를 오랫동안 구독하셨던 분들은 기억하실 수도 있겠지만, 나는 Metaphor라는 언어도 하나 만들고 있다. 이것 역시 동기는 결국 yak shaving이다. 고등학교 2학년 때(5년이나 되었네?) 게임 제작 동아리에서 활동했는데, 게임에서 사용할 스크립트 언어를 찾아보라는 재석 선배2의 지시에 따라 Lua 같은 미니멀한 디자인의 언어를 찾다가 ‘아 뭔가 다 좀 부족해’(솔직히 그 게임에 쓰기엔 충분하고도 남았다)라는 생각을 하게 되었고, 그 뒤로 언어 구상을…

이르니아 연대기 사이트를 거의 7년 넘게 안 만들고 있는 이유도 비슷하다. 이르니아 연대기 사이트를 만들어야지. 근데 이건 일반적인 RDBMS로 설계하긴 애매한 데이터 모델이야. 온톨로지 데이터베이스가 적당하겠군? 하지만 이미 있는 것들은 쿼리를 위한 DSL이 이미 정해져있네? 난 SQL 싫어서3 완벽한 ORM을 추구하는 사람이야. 객체 맵핑을 쉽게 할 수 있는 온톨로지 데이터베이스를 먼저 만들어야겠군. 그런데 클라이언트 언어로 자연스럽게 쿼리할 수 있게 하려면 Lisp 같이 homoiconic한 언어를 써야겠네? 근데 난 S-expression을 그렇게까지 좋아하지도 않고 마침 내가 구상중인 언어 Metaphor도 homoiconic하지. 아 그럼 일단 Metaphor를 구현해야겠다. 근데 Metaphor는 성능 때문에 그냥 내 취향상 컴파일러를 만들어야겠어. 근데 역시 컴파일러는 GHC처럼 부트스트랩을 해야 개간지가 나잖아? 그럼 일단 Metaphor를 Python으로 최소한의 명세만 구현해놓고, Metaphor로 Metaphor 컴파일러를 구현해야겠네. Python으로 파서를 만드려면 역시 pyparsing이 편한가? 근데 pyparsing의 DSEL은 내 마음에 안들어. 더 깔끔하게 내가 직접 파서 프레임워크를 작성…

이게 내가 5년 넘게 만들어낸 게 별로 없는 이유 같다.


  1. 사실 VLAAH 만드려고 Phunctional을 만들었던 것은 아니지만… VLAAH에서 사용하기 위한 기능을 많이 추가한 것은 사실. 근데 PHP 5.3은 어설프지만 람다를 지원하게 되었다. 그래서 Phunctional은 이제 메인테인 안함. 

  2. shinvee 님. 지금은 야간개발팀 팀장인데, 그 때는 게임 동아리 선배였다. 

  3. 근데 내가 회사에서 사용하는 언어의 비율은 SQL이 50%, Python 30%, PHP 20% 정도. 게다가 주로 작성하는 SQL들은 짧은 것들이 아니라 SELECT 문 하나인데 보통 15줄이 넘어가고 길게는 50줄 넘는 경우도 있다. 난 불행하지 않아… 난 행복해… 

This entry was posted on September 11, 2009 at 11:08 AM. You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.

One Response to “야크 털깎기”

  1. dahlia's me2DAY Says:

    홍민희의 생각…

    야크 털깎기…

Powered by WordPress. Styled by Hong, MinHee. XML Feed, Comments XML Feed.