chap01.전제 - 프로그래밍 불변의 진실

chap01.전제 - 프로그래밍 불변의 진실

[프로그래밍의 정석]를 보고 메모한 부분을 정리했습니다.

목차

1.1 프로그래밍에 은제탄환은 없다.
1.2 코드는 설계서다
1.3 코드는 반드시 변경된다.


서론


1.1 프로그래밍에 은제 탄환은 없다.

*WHY_소프트웨어는 본질적으로 난해하다.

  1. 복잡성
  2. 동조성 : 실세계와 계속 동조해야한다.
  3. 가변성 : 소프트웨어가 사용자의 인식에 영향을 미치며 새로운 요구사항이 생긴다.
  4. 비가시성 : 추상화해서 단순한 도면으로 만드는 작업은 가능하나, 이때의 정보가 사상되므로 모든 정보를 표현할 수 없다.

*HOW_역사를 배워 복잡함에 맞선다.

소프트웨어 개발의 역사는 복잡함과 투쟁의 역사.

*소프트웨어의 우유적인 부분을 개선

  • 본질 : 어떤 대상에서 그것이 없으면 대상물이라고 할 수 없는 성질
  • 비본질(우유) : 부차적이고 부수적이라는 의미로 그것이 없어도 대상물이라고 할 수 있는 성질
  • 소프트웨어 개발 현장에서 필요한 기술이라고 알려진 것의 대부분은 우유적인 부분
    빌드 환경, 프로그래밍언어, 라이브러리, 프레임워크 등등은 우유적..
  • 우유적인 부분의 개선 중에서 큰 성과는 자동화
    (테스트, 빌드, 환경 설정 등을 자동화 작업 품질 향상)
  • 우유적인 부분을 자동화
    본질적인 부분에 시간을 할애하자.

1.2 코드는 설계서다.

*what_코드가 곧 설계서

  • 설계

    • 상세설계
    • 프로그래밍
    • 테스트
    • 디버깅
  • 설계서

    • 코드
  • 공정(제조)

    • 배포
    • 컴파일러, 빌드시스템

*how_우수한 설계자(프로그래머)가 필요

설계란 창조적이며 기예가 필요한 행위다.
(설계 = 기본설계 + 상세설계 + 프로그래밍 + 테스트 + 디버깅)
신입에게 맡길 첫 업무가 아니라 고도로 숙련된 프로그래머의 업무여야 한다.

*로제타 스톤

장래의 유지보수 담당자에게 필요한 가이드북
: 소프트웨어 개발 환경을 이해하기 위한 정보와
소프트웨어 아키텍처를 이해하기 위한 정보가 담겨 있다.

소프트웨어 개발 환경을 이해하기 위한 정보

  • 빌드와 테스트 프로세스를 수행하는 방법
  • 소프트웨어를 파악할 때 함정에 빠지는 일을 방지해 준다.

소프트웨어 아키텍처

  • 전체를 파악하기 위해 필요한 그림
  • 코드로부터 파악할 수 없는 코드 전체를 부감(높은 곳에서 내려다봄)해서 본 그림을 기술한다.

1.3 코드는 반드시 변경된다.

  • 최초 배포만으로 요구사항을 완전히 망라한 소프트웨어를 만들어 내는 것은 불가능하다.
  • 변경에 강한 코드를 작성한다.