출판사로부터, 올 초 마무리한 R 데이터 과학 서적의 원고가 현재 2차 교정/교열 작업 중이며 최종 리뷰 후인 6월 경에는 출판될 것이라는 연락을 받았다. 애초에 원고 의뢰를 받은 것이 2015년 7월이었던 것을 생각하면 거의 이년의 시간이 걸린 셈이다. 집필 과정중에 배우고 느낀 몇가지 팁을 나누고자 한다.

  1. 서적 집필을 승낙하기 전에 서적 집필은 힘들다는 사실을 이해하고 깊이 고민해야 한다. 나는 지금까지 10-15페이지 분량의 논문들은 여러 번 써 보았고, 그러한 작업에 많이 익숙하기 때문에 “책이라고 많이 다를까?” 하고 쉽게 집필을 승락했다. 논문은 전문 독자를 대상으로 하며 (역설적으로 쓰기 쉽다), 분량이 짧으며, 1-2주일 내로 골격과 초고가 완성된다. 달리기라면 중거리 달리기라고 할 수 있다. (물론 논문 “쓰기”만을 이야기하는 것이다. 논문을 쓸만한 내용을 만들기 위한 연구 작업 자체는 당연히 포함하지 않는다) 이에 반해 저서는 대중적인 독자를 대상으로 하기 때문에 눈높이를 맞춰야 하고, 분량이 많으며 (현재 300페이지가 넘는다!), 집필에 보통 몇 달 이상이 걸린다. 마라톤에 비유할 수 있다. 이번 첫 저서 집필이 논문 열편을 쓰는 것보다 더 힘들었다고 할 수는 없다. 하지만 멀리 보며 숨을 고르고, 참을성을 가지고, 꾸준히 해야 하는 작업임을 몸으로 느꼈다. 조급한 성격인 나에게는 특히나 쉽지 않은 훈련이었다.
  2. 집필 내용에 대한 피드백은 일찍, 자주 받도록 한다. 수시로 피드백을 받는 것은 좋은 글쓰기의 기본 소양이다. 독자의 눈높이에 맞추고, 내용을 개선하기 때문이다. 피드백의 또다른 이로운 점은 마라톤처럼 외로운 자신과의 싸움이 되기 쉬운 긴 글쓰기 과정을 외롭지 않고, 흥미진진하게 만들어 준다는 것이다.
  3. 초고 작성에는 구글 닥 등의 협업 툴을 사용한다. 온라인 협업에 최적화된 구글 닥 등을 사용하면 쉽게 초고를 리뷰어와 나누고, 피드백과 코멘트를 받아서 반영할 수 있다.
  4. 분석과 도표 생성은 재현가능하게 코드로 저장한다. 재현가능성, 즉 reproducibility 는 이번 책의 중요한 주제들 중 하나이다. GitHub 을 사용해 분석과 도표 작성 R 코드를 버전관리하면 좋다. 코드를 책의 부록으로 제공할 때도 좋다. (참고로 이번 책의 소스코드는 https://github.com/Jaimyoung/data-science-book-korean 에 올려 두었다.)
  5. 인용 그림이나 자료 정보와 저작권을 미리 관리해둔다. 참고자료을 웹에서 가져 올 때는 URL 과 접속 일시를 기록해 두고, 저작권을 확인한다. 위키피디아 는 대부분의 경우 괜찮지만 출처를 명시하여야 한다. 참고로, 본서에서 “에어론 체어”(Aeron chair)를 인용하느라 위키피디아의 https://en.wikipedia.org/wiki/Aeron_chair 기사의 사진을 출판사에 보내었는데 사진의 해상도가 충분하지 않았다. 그런데 웹상에서 저작권이 걸려있지 않은 고해상도의 사진을 찾는 것이 참으로 힘들었다! (독자중 그러한 사진을 찾은 분은 연락주시기 바란다)
  6. 도표는 출판사와 상의하여 크기, 해상도, 폰트 사이즈 등을 정해야 한다. 참고로 이번 출판사에서는 PNG 화일을 사용해도 좋고 크기는 5.5 in. X 4 in., 해상도는 600 dpi, 글자 Text Point Size = 9 정도가 적당하다고 하여서, 도표 출력 코드의 파라메타를 결정할 수 있었다. 이 책 하단의 R 코드를 참조하자.

위의 팁들을 책 집필 초반에 알았더라면 작업이 좀 더 수월했을 것이다.

어쨌건 평생 처음 해 본 책 집필은 생각보다 훨씬 힘든 작업이었지만 또한 많은 것을 배운 좋은 경험이었다. 사람들과 나눌만한 경험이나 지식이 있는 사람이라면 평생 한번은 도전해 볼것을 권한다.

6월에 마침내 책이 출판되면 데이터 과학에 관심있는 한사람에게라도 도움이 되길 바란다.

# A few useful lines to export plots
# 1. base R graph
png("../../plots/.png", 5.5, 4, units='in', pointsize=9, res=600)
# Plot body
dev.off()

# 2. single ggplot
# Produce ggplot first. Then...
ggsave("../../plots/.png", width=5.5, height=4, units='in', dpi=600)

# 3. plot matrix from library(gridExtra)
# Produce p1, p2, p3, p4 individual ggplot object
g <- arrangeGrob(p1, p2, p3, p4, ncol=2)
ggsave("../../plots/.png", g, width=5.5, height=4, units='in', dpi=600)

** 후기 (4/22): 결국 에어론 의자 사진은 직접 찍었습니다.