유연한 소프트웨어를 만드는 설계 원칙 크리스 핸슨 pdf 다운로드를 무료로 제공합니다 프로그래머들은 시간에 쫓기는 나머지, 어쩔 수 없이 제한된 용도로만 사용 가능한, 성장의 여지가 거의 없는 코드를 작성한다. 그로 인해 과거의 자신이 쌓은 벽에 가로막혀 코드를 새로 수정해야 하는 상황이 벌어지기도 한다
관련 책 pdf 모음
책 소개
최고의 시스템은 진화할 수 있는 유연성을 갖췄다. 기존 코드를 수정하는 대신 새 코드를 추가해 새로운 상황에 적응하는 가산적 프로그래밍을 활용한다. 이 책은 제럴드 제이 서스먼과 크리스 핸슨이 도합 100년이 넘는 프로그래밍 경험에서 발견한, 프로그래머가 막다른 골목을 피하는 데 도움이 되는 기법들을 담았다. 이 책은 동적으로 확장 가능한 일반적 프로시저처럼 극도로 강력하지만 잠재적으로 위험한 기법들도 소개한다. 각 장에는 연습문제와 리스프의 방언인 스킴으로 만들어진 예제 코드를 실었다. 천문 거리 계산에서 자동 미분, 어드벤처 게임에 이르기까지 다양한 예제를 살펴본다. 소프트웨어 개발자들은 주로 특정한 작업을 아주 잘 수행하는 소프트웨어를 설계해왔다. 이는 과거의 공학적 실천의 확장으로 개별 소프트웨어를 좁은 범위의 작업만을 수행하도록 설계했다. 이 경우, 풀고자 하는 문제가 변하면 소프트웨어도 변해야 한다. 그런데, 문제가 조금만 바뀌어도 소프트웨어는 크게 바꾸어야 할 때가 많다. 유연성에 초점을 두고 설계를 진행하면 환경 변화에 적응하는 시스템을 구축할 수 있다. 작동 중인 프로그램을 뜯어고칠 필요 없이, 그냥 새로운 기능을 구현한 코드를 추가하거나 기존 함수를 새로운 요구 사항에 맞게 조정하는 가산적 프로그래밍을 활용해 진화하는 시스템을 만들어보자.
유연한 소프트웨어 설계 원칙 pdf
제1장 자연과 설계의 유연성
1.1 계산과 건축
1.2 유연성을 위한 똑똑한 부품
1.3 중복성과 축중성
1.4 탐색 행동
1.5 유연성의 비용
제2장 영역 특화 언어(DSL)
2.1 조합자
2.2 정규표현식
2.3 래퍼
2.4 문제 영역의 추상화
2.5 요약
제3장 산술 주제의 변형들
3.1 산술 연산의 조합
3.2 확장성 있는 일반적 프로시저
3.3 예제: 자동 미분
3.4 효율적인 일반적 프로시저
3.5 효율적인 사용자 정의 형식
3.6 요약
제4장 패턴 부합
4.1 패턴
4.2 항 재작성
4.3 부합기의 설계
4.4 통합 부합
4.5 그래프상의 패턴 부합
4.6 요약
제5장 평가
5.1 일반적 eval/apply 해석기
5.2 비엄격 인수를 가진 프로시저
5.3 실행 프로시저로의 컴파일
5.4 탐색 행동
5.5 바탕 후속 프로시저들의 노출
5.6 큰 힘과 큰 책임
제6장 계층화
6.1 계층 활용
6.2 계층화 구현
6.3 계층적 산술
6.4 값의 의존성 주해 추가
6.5 계층화의 약속
제7장 전파
7.1 예제: 별과의 거리
7.2 전파 메커니즘
7.3 다중 대안 세계관
7.4 값들의 병합
7.5 가능한 세계 검색
7.6 전파는 축중성을 가능하게 한다
제8장 맺음말
부록 A 지원 소프트웨어
부록 B 스킴