본문 바로가기

관심사/도서

제럴드 와인버그 <Quality Software Book : How Software Is Built > - 9장 요약


Chapter 9: Why It's Always Hard to Steer

9.2.2 The history of software engineering

The Size/Complexity Dynamic 은 문제의 크기가 커질수록 복잡도가 제곱으로 높아지는 문제 유형을 말한다.

소프트웨어 역사를 보면, 성공하는 경험을 할 수록, 조직은 점점 더 어려운 문제를 찾고, 도전해왔다. 그러면서 소프트웨어가 발전해왔다. 

위의 그림은 소프트웨어 개발에 대한 effect diagram이다.

소프트웨어 조직이 성공을 경험하면 -> 도전적인 과제를 찾아서 -> 문제의 크기가 커져서 -> 솔루션의 복잡도가 높아진다.

문제의 난이도가 높아지면, 처음에는 개발자수를 늘리고, 고급인력을 채용하면서 리니어하게 문제를 해결할 수 있다. 그런데 이것도 한계가 있다.

대신, 사람들의 일하는 방법(어떤 일을, 어떻게 처리할지)을 컨트롤해서 문제 해결 능력을 높여야 한다. 

이를 위해서 소프트웨어 공학이 만들어졌다.


9.2.3. Games against Nature

Good managers, like good poker players, don't believe in bad luck. They play well with whatever hand they're dealt.

Good programmers don't believe in luck, either.

제럴드와인버그 책에 꾸준히 나오는 이야기다. 프로그래밍 심리학에서도 그랬다.

좋은 관리자/프로그래머는 운탓을 하지 않는다.


9.2.4. The Fault Location Dynamic 

Size/Complexity Dynamic은 시스템 오류 문제에도 적용할 수 있다. 

시스템이 커지면 오류를 발생시킬 확률이 높아지고, 사이드이펙트 때문에 오류가 발견될 수 있는 영향 범위 또한 늘어난다. 

그래서 큰 시스템에서 오류를 잡는 데에 발생하는 전체 비용은 비선형적으로 늘어난다. 

때문에 시스템과 조직을 작게 유지해서, 결합도를 낮추는게 필요하다.