하지만 yak shaving은 재미있다

7 hours ago 4
  • 블로그를 자유롭게 커스터마이즈하려다 HTML 작성, JSON 글쓰기, Markdown 변환, 컴파일·배포 도구까지 만들게 되었고 결국 정적 사이트 생성기를 직접 구현한 경험으로 이어짐
  • yak shaving은 한 목표를 위한 연쇄 작업이 원래 목적과 멀어지는 상황을 뜻하며, MIT AI Lab의 Carlin Vieri가 만든 표현임
  • 엔지니어와 관리자는 기성 솔루션이 마음에 들지 않거나 요구사항과 맞지 않는다고 느낄 때 처음부터 만들기의 함정에 빠지기 쉬움
  • 제한된 예산과 시간 안에서는 직접 구현의 즐거움보다 핵심 요구를 만족하는 대안 선택과 작업량 축소가 더 중요할 수 있음
  • Donald Knuth의 TeX처럼 큰 성과로 이어지는 경우도 있지만, 대부분의 yak shaving은 실패할 수 있으며 학습한 것이 있다면 그 자체로 가치가 있음

직접 만든 블로그가 정적 사이트 생성기로 이어짐

  • Jekyll, Hugo, Gatsby 같은 정적 사이트 생성기나 프레임워크를 쓰지 않음
  • 처음에는 몇 가지 도구를 써봤지만 커스터마이징 자유도가 부족하다고 느껴 직접 만들기로 함
  • HTML로 글을 쓰는 방식은 불편했고, 이를 해결하려고 JSON 파일 기반 글쓰기 시스템을 만들었지만 긴 글에는 다시 어색했음
  • 이후 Markdown 파일을 HTML로 변환하는 서비스와 결과 파일을 컴파일·배포하는 도구까지 만들면서, 결국 정적 사이트 생성기를 처음부터 만든 셈이 됨

yak shaving의 의미와 유래

  • yak shaving은 하나의 목표를 위해 관련 작업을 계속 따라가다가 원래 목적을 잃고 전혀 다른 일을 하게 되는 상황을 뜻함
  • LangDev IRC의 예시는 도끼로 나무를 베려다 도끼를 갈 돌을 찾고, 좋은 돌이 있는 마을에 가기 위해 yak을 구하고, yak의 털이 길어 결국 털을 깎게 되는 흐름임
  • Seth Godin의 예시는 세차에서 시작해 호스, Home Depot, E-ZPass, 이웃의 E-ZPass, 빌린 베개 문제를 거쳐 동물원에서 yak 털을 깎는 이야기로 이어짐
  • 이 표현은 Carlin Vieri가 MIT AI Lab에서 만든 말임
    • Vieri는 화요일 밤늦게 하키를 한 뒤 한밤중에 저녁을 먹으며 The Ren & Stimpy Show의 Yak Shaving Day 에피소드를 봄
    • 며칠 뒤 행정 허가, DHL 계정 설정, 우체국 찾기 같은 서류 작업을 하며 동료에게 자신이 yak shaving을 하고 있다고 말함
    • 이후 몇 달 동안 연구실 사람들에게 이 표현을 계속 쓰면서 퍼짐

처음부터 만들기의 위험

  • 엔지니어나 엔지니어링 팀을 운영하는 관리자가 자주 저지르는 실수 중 하나가 처음부터 만들기
  • 엔지니어는 기성 솔루션이 마음에 들지 않거나 자신의 실력을 증명하고 싶을 수 있음
  • 고객이나 관리자는 기존 솔루션이 무엇을 하는지 잘못 이해하거나, 요구사항을 정확히 만족하지 않는다고 판단할 수 있음
  • 대부분의 프로젝트는 제품 개발이든 토이 프로젝트든 예산과 시간이 제한되어 있음
  • 직접 만들기 시작하면 yak shaving으로 번지기 쉽고, 한번 들어서면 어디서 끝날지 알 수 없으며 원래 목표를 포기하게 될 수도 있음
  • 이런 상황에서는 요구사항의 핵심을 만족하는 대안을 찾고, 작업을 가능한 한 줄이는 편이 적절함

그래도 yak shaving이 재미있는 이유

  • yak shaving은 무언가를 직접 만드는 즐거움 때문에 쉽게 끊기 어려움
  • 없던 것을 만들고, 문제를 발견해 해결하고, 어떤 것이 어떻게 동작하는지 이해하려고 지식의 사슬을 파고드는 과정이 엔지니어를 끌어당김
  • 엔지니어가 아니어도 원하는 것을 직접 만든다는 발상 자체는 매력적임
  • Frederick P. Brooks Jr.는 『The Mythical Man-Month』에서 프로그래밍이 재미있는 이유를 다음처럼 정리함
    • 무언가를 만드는 순수한 즐거움
    • 다른 사람에게 유용한 것을 만드는 즐거움
    • 서로 맞물려 움직이는 복잡한 퍼즐 같은 대상을 만들고, 그 규칙이 미묘한 순환 속에서 작동하는 것을 보는 매력
    • 계속 배우는 즐거움
    • 유연하고 다루기 쉬운 표현 매체로 작업하는 즐거움

TeX라는 성공한 yak shaving

  • TeX도 yak shaving에서 태어난 사례임
  • TeX는 Stanford 교수 Donald Knuth가 만든 조판 시스템이며, 조판 언어와 이를 처리하는 컴파일러를 포함해 프로그램이 돌아가는 전체 시스템을 가리킴
  • 수식을 쉽게 입력할 수 있어 사회과학, 과학, 공학 분야에서 널리 쓰이며, 대부분의 사용자는 TeX를 더 쉽게 쓰기 위한 매크로 집합인 LaTeX를 사용함
  • Donald Knuth는 1976년 『The Art of Computer Programming』 2권 2판을 준비하면서 1판에 쓰였던 활자 조판을 원했지만 더는 사용할 수 없었음
  • 대안에 만족하지 못한 Knuth는 Patrick Winston의 디지털 조판 책을 보고 직접 디지털 조판 시스템을 만들기로 결심함
  • Knuth는 TeX 첫 버전을 SAIL 언어로 만들고, 이후 자신이 만든 WEB 언어로 개발해 완성함
    • WEB 소스는 문서와 코드를 함께 섞는 방식임
    • Weave와 Tangle 프로그램으로 WEB 파일에서 각각 TeX 파일과 Pascal 파일을 추출할 수 있음
    • Knuth는 이 프로그래밍 패러다임을 literate programming이라고 부름
  • Knuth는 Michael Plass와 함께 문단에서 줄을 어디서 나눌지 결정하는 Knuth-Plass 줄바꿈 알고리듬도 고안함
  • TeX용 글꼴인 Computer Modern을 설계하고, 벡터 그래픽을 정의하는 언어 METAFONT를 만들었으며, 특정 장치에 의존하지 않고 TeX 결과를 출력하기 위한 DVI 형식도 개발함
  • 책을 쓰기 위해 프로그래밍 언어, 패러다임, 알고리듬, 도구, 글꼴을 만든 셈이며, TeX 제작에는 거의 10년이 걸렸고 책도 그만큼 늦게 나왔지만 헛된 노력은 아니었음

실패와 학습 사이

  • TeX는 극단적인 성공 사례이며, 대부분의 yak shaving은 실패함
  • 적절한 지점에서 멈춰야 하지만 이미 들인 시간이 아깝거나 yak shaving 자체가 재미있어서 그만두기 어려움
  • 끝까지 해야 하는 경우에도 “지금 내가 뭘 하고 있는 거지?”라는 생각이 들며 흥미가 식거나, 프로젝트에 배정된 자원이 바닥나 중단될 수 있음
  • 학습하려는 사람에게 yak shaving은 매우 효과적일 수 있음
  • 많은 컴퓨터공학 수업은 교수의 의도와 무관하게 어느 정도의 yak shaving을 요구하며, 과제 본문보다 주변 지식을 파고들면서 더 많은 것을 얻을 때도 있음
  • yak shaving 방식으로 컴퓨팅 시스템을 만들려면 Boolean logic, 논리 회로, 컴퓨터 구조, 프로그래밍 언어, 운영체제까지 공부해야 함
  • Noam Nisan과 Shimon Schocken의 The Elements of Computing Systems는 바로 이런 과정을 따라감
  • 끝까지 도달하지 못하더라도 yak을 깎는 동안 무언가를 배웠다면 그것만으로도 가치가 있음
Read Entire Article