소프트웨어를 개발할 때는 다음과 같은 전제가 있음을 미리 알아 둘 필요가 있다. 아래의 전제들을 무시하고 개발에 임하면 개발자 간의 협력이 어려워지고, 투입되는 비용과 인력이 증가하며 개발 기간은 길어지게 된다. 개발자라면 언제나 효율성을 추구해야 한다. 그리고 효율성을 측정하는 단위는 프로젝트다. 개인 단위가 아님을 명심해야 한다.


소프트웨어를 관리 할 수 있는 도구는 인간의 두뇌 뿐이다 

잘 이해가 되지 않는다면 "불완전성의 원리"를 읽어 보기 바란다.

소프트웨어는 스스로 잘 동작함을 검증할 수 없다.

검증용 소프트웨어가 다른 소프트웨어를 검증할 수도 없다.


관리 가능한 소프트웨어의 크기가 기회의 크기이다

갈수록 소프트웨어의 규모는 커져가고, 큰 소프트웨어를 관리할 수 있는 기술력이 있어야 시장에서 기회를 잡을 수 있다.


개인의 능력으로는 부족하다

시장에서 요구하는 소프트웨어를 혼자서 모두 개발할 수 있는 사람은 없다.

다수의 개발자가 만든 소프트웨어를 통합해야만 큰 소프트웨어를 만들 수 있다.

따라서 커뮤니케이션을 통한 개발자간의 협력은 필수 요소이다.


언어를 통한 소통은 부정확하다

인간의 언어는 코드보다 부정확하다.(기능에 대한 설명은 개요 이상에 대한 설명을 기대하기 어렵다.)

코드는 가장 정확한 진실을 담고 있다.

원칙적으로 코드를 통한 커뮤니케이션이 가능해야 한다.


인지 능력에는 한계가 있다(인지능력의 한계를 시험하는 예)

명칭과 실제의 부조화

동등한 기능에 대한 서로 다른 구조의 구현

중복된 코드

추상 레벨의 편차

기능 흐름의 분산

잦은 제어 분기

암기할 것이 많은 코드

합리성의 결여

예측 불가능


인간의 인지 능력에 맞는 코드를 작성해야 한다

코드는 인간의 인지 능력 내에서 관리 될 수 있어야 한다.

개인의 능력을 넘는 소프트웨어 작성을 위해서 코드는 커뮤니케이션 도구 역할도 수행해야 한다.

따라서 코드는 모든 인간의 인지 능력의 효율에 맞게 작성되어야 한다.


Posted by 이세영2
,