- 소프트웨어 설계는 인간관계 속에서 벌어지는 활동
- 팀원끼리 견해 차이가 있을 때는, 이론적인 틀을 공유하는 것이 유용하다.
- 원칙에 동의하지 않더라도 서로의 원칙에 대해 논의할 수 있다면 더 빨리 합의할 수 있는 기회가 생긴다.
요소들을 유익하게 관계 맺는 일#
- 소프트웨어 설계의 의미: 요소들을 유익하게 관계 맺는 일
- 요소: 경계가 있고 계층 구조를 선호한다.
- 관계: 요소들은 서로 관계를 가진다.
- 함수 호출
- 발행(publish)
- 대기(listen)
- 참조
- 유익하게: 기계를 위한 명령어가 아닌, 일종의 중간 요소들이 서로 도움이 되도록
- 예) 함수 A는 함수 B가 계산의 복잡한 부분을 덜어간다.
- 이러한 관점에서 소프트웨어 설계자는 오직 다음과 같은 일만 할 수 있다.
- 요소를 만들고 삭제한다.
- 관계를 만들고 삭제한다.
- 관계의 이점을 높인다.
구조와 동작#
- 소프트웨어는 두 가지 방식으로 가치를 만든다.
- 현재 소프트웨어가 하는 일(동작)
- 미래에 새로운 일을 시킬 수 있는 가능성(구조)
- 시스템을 더 가치 있게 만들기 위해서 굳이 시스템의 동작을 바꿀 필요가 없다.
- 다음에 무엇을 할 수 있는지에 대해 선택할 수 있는 기회를 만들자마자, 나는 이미 돈을 번 것이다.
- 소프트웨어의 구조는 동작처럼 또렷하게 드러나지 않는다.
- 그래서 사람들은 동작 변경과는 다르게 구조 변경에 대해서는 혼란스러워한다.
- 구조 변경과 동작 변경은 모두 가치를 만들어내지만, 근본적으로 다르다는 것을 이해해야한다.
- 되돌릴 수 있는 능력 즉, 가역성의 차이가 있다.
경제 이론: 시간 가치와 선택 가능성#
- 프로그래머로서 우리가 하는 일이 돈의 본성과 상반될 수도 있다.
- 그러나 프로그래머의 욕망과 돈의 명령이 충돌하면, 결국 돈이 승리한다.
- 돈의 본성의 두 가지 속성
- 오늘의 1달러가 내일의 1달러보다 더 가치가 있기 때문에 버는 것은 빨리하고, 쓰는 것은 가능한 뒤로 미룬다.
- 혼란스러운 상황에서는 어떤 물건에 대한 옵션이 물건 자체보다 낫기 때문에 불확실성에 맞서는 옵션을 만든다.
comments powered by