**[프로그래밍의 정석]**를 보고 메모한 부분을 정리했습니다.
목차
1.1 프로그래밍에 은제탄환은 없다.
1.2 코드는 설계서다
1.3 코드는 반드시 변경된다.
서론
1.1 프로그래밍에 은제 탄환은 없다.
*WHY_소프트웨어는 본질적으로 난해하다.
- 복잡성
- 동조성 : 실세계와 계속 동조해야한다.
- 가변성 : 소프트웨어가 사용자의 인식에 영향을 미치며 새로운 요구사항이 생긴다.
- 비가시성 : 추상화해서 단순한 도면으로 만드는 작업은 가능하나, 이때의 정보가 사상되므로 모든 정보를 표현할 수 없다.
*HOW_역사를 배워 복잡함에 맞선다.
소프트웨어 개발의 역사는 복잡함과 투쟁의 역사.
*소프트웨어의 우유적인 부분을 개선
본질 : 어떤 대상에서 그것이 없으면 대상물이라고 할 수 없는 성질
비본질(우유) : 부차적이고 부수적이라는 의미로 그것이 없어도 대상물이라고 할 수 있는 성질
소프트웨어 개발 현장에서 필요한 기술이라고 알려진 것의 대부분은 우유적인 부분
빌드 환경, 프로그래밍언어, 라이브러리, 프레임워크 등등은 우유적..우유적인 부분의 개선 중에서 큰 성과는 자동화
(테스트, 빌드, 환경 설정 등을 자동화 작업 품질 향상)우유적인 부분을 자동화
본질적인 부분에 시간을 할애하자.
1.2 코드는 설계서다.
*what_코드가 곧 설계서
설계
- 상세설계
- 프로그래밍
- 테스트
- 디버깅
설계서
- 코드
공정(제조)
- 배포
- 컴파일러, 빌드시스템
*how_우수한 설계자(프로그래머)가 필요
설계란 창조적이며 기예가 필요한 행위다.
(설계 = 기본설계 + 상세설계 + 프로그래밍 + 테스트 + 디버깅)
신입에게 맡길 첫 업무가 아니라 고도로 숙련된 프로그래머의 업무여야 한다.
*로제타 스톤
- 장래의 유지보수 담당자에게 필요한 가이드북
: 소프트웨어 개발 환경을 이해하기 위한 정보와 - 소프트웨어 아키텍처를 이해하기 위한 정보가 담겨 있다.
소프트웨어 개발 환경을 이해하기 위한 정보
- 빌드와 테스트 프로세스를 수행하는 방법
- 소프트웨어를 파악할 때 함정에 빠지는 일을 방지해 준다.
소프트웨어 아키텍처
- 전체를 파악하기 위해 필요한 그림
- 코드로부터 파악할 수 없는 코드 전체를 부감(높은 곳에서 내려다봄)해서 본 그림을 기술한다.
1.3 코드는 반드시 변경된다.
- 최초 배포만으로 요구사항을 완전히 망라한 소프트웨어를 만들어 내는 것은 불가능하다.
- 변경에 강한 코드를 작성한다.