3.4 결론
소프트웨어 공학이 해결해야 하는 가장 핵심적인 문제는 소프트웨어 자체가 너무 복잡해서 인간의 두뇌에 잘 맞지 않는다는 점입니다. 1986년 프레더릭 브룩스(Frederick Brooks)12는 다음과 같이 분석했습니다.
“소프트웨어 개발의 고전적인 문제들 대부분은 소프트웨어가 가지고 있는 본질적인 복잡성과 더불어 크기가 커짐에 따라 폭발적으로 증가하는 복잡도로 인해 발생합니다. [...] 복잡성 때문에 프로그램에 존재할 수 있는 모든 상태를 이해하는 것은 물론, 이런 상태를 나열하는 것조차도 어려워졌습니다.”[14]
저는 복잡성(complexity)이란 말을 리치 히키(Rich Hickey)13가 사용하는 방식과 똑같이 사용합니다[45]. 즉, 복잡성이란 단순함(하나로 통합된 것)의 반대말로, ‘여러 부분이 얽혀 있거나 조합되어 있는 상태’를 의미합니다.