Topic 12 예광탄
데이비드 토머스, 앤드류 헌트
느낌표 ! (인상 깊은 문장 | 문맥)
숱한 영화나 드라마, 비디오 게임에서 기관총 쏘는 장면을 보았을 것이다. 이런 장면에서 총알이 공기 중에 밝은 줄무늬의 궤적을 남기는 것을 볼 수 있는데, 이런 줄무늬는 예광탄(tracer bullet)이 만드는 것이다.
p.72
군인들은 발사된 예광탄을 사용하여 조준을 재조정한다. 실제 상황에서의 실시간 피드백이기 때문에 매우 실용적이다.
p.72
예광탄은 목표물을 맞추기 위해 한 발을 쏘기 전에 모든 노력을 다해 준비하기보다 우선 한 발 쏘고 영점을 조절 할 수 있다. 궤적과 결과가 눈에 보이기 때문이다. 총알을 보고 방법론을 떠올리는 것. 이처럼 어느 하나에 몰입되어있으면 다른 것을 봐도 몰입한 것이 연상되어 떠오르는 것 같다.
어둠 속에서 빛을 내는 코드
예광탄이 효과적인 까닭은 일반 탄환과 동일한 환경 및 제약 조건에서 발사되기 때문이다. 탄환이 순식간에 목표물에 도달하기 때문에 기관총 사수는 즉각적인 피드백을 얻을 수 있다.
…
시스템을 정의하는 중요한 요구 사항을 찾아라. 의문이 드는 부분이나 가장 위험이 커 보이는 곳을 찾아라. 이런 부분의 코드를 가장 먼저 작성하도록 개발 우선순위를 정하라.
p.73
새로운 프로젝트를 시작하면 익숙하지 않은 상황이 펼쳐진다. 알고리즘, 프레임워크, 라이브러리 등 필요에 따라서 배우면서 사용해야하는 상황이 매우 빈번하다. 이럴 때마다 어떤 부분에서 시간이 오래 걸리고 어떤 이슈가 발생할지 고민하지만 모든 것을 에측 할 수 없다. 항상 예기치 못한 부분이 발생하기 때문이다.
테스트 케이스가 있다고 해서 버그가 없다고 말하지 않는 것처럼 예광탄 코드가 있다고해서 예기치 못한 상황이 안 벌어지지는 않겠지만 그런 상황을 줄일 수 있는 것은 분명하다. 우선 예광탄 코드를 작성하게 되면 개발에 필요한 흐름을 파악하게되기 때문에 프로젝트에 관해 감이 잡힐 것이다. 기존 프로젝트에 예광탄 코드를 추가한다면 기존 코드에 대한 파악이 될 것이고 새로운 프로젝트에 예광탄 코드는 요구사항의 정확도를 높일 수 있을 것이다.
일단 정확하게 조준하고 나면 기능을 추가하는 일은 쉽다.
p.75
방향이 맞으면 가는 것은 쉽다. 곤란한 상황은 개발 진척이 많이 되고 나서야 이 요구사항은 잘못된 것이라는 것을 알게되는 순간이다. 능숙한 개발자는 코드 변경에 유용하게 코드를 작성하지만 실용주의 개발자는 그런 상황을 만들지 않는다.
예광탄 코드 접근 방법 장점
사용자가 뭔가 작동하는 것을 일찍부터 보게 된다.
사용자는 지금 보는 것이 아직 완성되지 않았음을 이해할 것이다. 따라서 기능이 없다고 실망하지 않을 뿐더러 오히려 자신이 쓸 시스템에 진전이 있음을 실제로 보게 되어 매우 기뻐할 것이다.
p.75-76
개발자가 들어가서 일할 수 있는 구조를 얻는다.
여러분의 팀은 더 이상 무에서부터 많은 것을 만들어 낼 필요가 없어진다. 그러면 모두의 생산성이 더 좋아지고, 일관성도 좋아진다.
p.76
통합 작업을 수행할 기반이 생긴다.
한꺼번에 모든 것을 통합하려고 노력하는 대신 매일 통합할 수 있다.
p.76
보여줄 것이 생긴다.
예광탄 코드 접근 방법을 사용하면 보여줄 수 있는 것이 언제나 마련되어 있다.
진행 상황에 대해 더 정확하게 감을 잡을 수 있다.
예광탄 코드 개발 방법에서 개발자는 유스 케이스를 한 번에 하나씩 다룬다. 하나가 끝나면 다음으로 넘어간다. 이러면 수행을 평가하기도 쉽고 사용자에게 얼마나 진전되었는지 보여주기도 쉽다.
p.77
예광탄 코드 개발 방법은 에자일 방법론과 매우 유사하다. 큰 덩어리를 목표로 개발하기보다 점진적 개발을 추구하기 때문이다.
예광탄이 언제나 목표물을 맞히는 것은 아니다
코드의 크기가 작으면 관성 역시 약하므로 빠르게 쉽게 바꿀 수 있다.
p.77
힘을 주고 코드를 작성했지만 변경해야할 상황은 빈번한데 변경할 때 다시 힘을 줘야하는 상황을 마주치곤 한다. 물론 모든 것은 상황에 따라 다르지만 가능하면 가볍게 코딩하고 필요에 따라서 변경하는 것을 선호한다.
예광탄 코드 대 프로토타이핑
프로토타입은 나중에 버리는 코드를 만든다. 예광탄 코드는 기능은 별로 없지만 완결된 코드이며, 최종 시스템 골격 중 일부가 된다. 프로토타입은 예광탄을 발사하기 전에 먼저 수행하는 정찰이나 정보 수집과 같은 것이다.
p.79
미지수가 있을 때는 프로토타이핑을 개발을 시작할 때는 에광탄 코드를 작성하면 좋을 것 같다. 예광탄 코드, 프로토타이핑 모두 방향을 다잡는 방법론이라고 볼 수 있다. 방향은 요구사항 또는 코드가 될 수 있다.
예광탄 코드, 프로토타이핑 두 방법론 모두 자신의 예상과 생각은 한계가 있기 때문에 작은 단위에 아웃풋으로 피드백을 받는 방법론이다. 잘못된 방향으로 가지 않고 직선으로 가기 위해 부단히 노력하는 실용주의 개발자가 되어야한다.
Topic 12 느낌
Topic 12 에서는 총알이 어디에 박힐지 탄도학을 공부하지 말고 일단 쏘고 수정하라는 실용적인 조언을 하고 있는 것 같다.