Topic 33 시간적 결합 깨트리기
데이비드 토머스, 앤드류 헌트
느낌표 ! (인상 깊은 문장 | 문맥)
시간에는 우리가 신경 써야 할 측면이 두 가지 있는데, 동시성(동시에 일어나는 일들)과 순서(시간의 흐름 속에서 일들의 상대적인 위치)다. 우리는 보통 프로그래밍을할 때 두 측면 모두 특별히 신경 쓰지 않는다. 자리에 앉아 아키텍처를 설계하거나 프로그램을 짜기 시작할 때는 보통 직선적 사고를 하기 마련이다.
p.243-244
병렬 프로그래밍은 골치 아픈 존재라고 생각하기 쉽지만 필연적이다. 그러기에 오히려 더 잘 사용해야한다.
똑은 딱보다 먼저 일어나야 한다.
이러한 접근 방법은 그다지 유연하지 않고 현실과도 동떨어져 있다.
p.244
똑딱이라고 믿고 싶지만 현실은 그렇지 않기 때문에 현실과 동 떨어진 믿음을 고집해서는 안될 것 같다.
동시성 찾기
우리는 동시에 일어나도 되는 게 뭐고, 반드시 순서대로 일어나야 하는 건 어떤 것인지 찾아내길 원한다. 활동 다이어그램 같은 표기법을 사용해서 작업 흐름을 기록하는 것이 한 방법이다.
p.244
활동 다이어그램(activity diagram) 예제
실 책에서는 피나 콜라다 칵테일 제조를 예제로 활동 다이어그램으로 나타내고 설명하고 있지만 실제로 활동 다어이그램을 만들어 이해를 돕기 위해서 필자의 경우는 드립 커피 추출로 각색해서 만들었다.
순차적으로 프로그래밍을 한다면 1~14 까지 순서대로 실행해도 결과 값 자체는 문제가 없다.
그렇지만 4 가열을 누른다
의 경우 완료되기까지 3분 가량을 기다려야한다.
반드시 가열이 완료 되어야 13 커피를 추출한다
를 실행시킬 수 있지만 다른 독립적인 활동 즉 1, 5, 8, 9
를 동시에 실행시킬 수 있다.
위와 같은 다이어그램으로 프로그래밍을 한다면 유연성과 작업 흐름이 자연스러워 우아한 결과가 나오지 않을까 싶다.
Topic 33 느낌
Topic 33 에서는 현실은 병렬적이니 순차적인 사고에서 병렬적인 사고로 바꾸도록 안내하고있다.