유연한 소프트웨어를 만드는 설계 원칙 - 막다른 골목 없이 진화하는 시스템 개발하기
크리스 핸슨.제럴드 제이 서스먼 지음, 류광 옮김 / 한빛미디어 / 2022년 3월
평점 :
장바구니담기


 

[도서 소개]

누가 코드를 이렇게 짜놨어?


프로그래머들은 시간에 쫓기는 나머지, 어쩔 수 없이 제한된 용도로만 사용 가능한, 성장의 여지가 거의 없는 코드를 작성한다. 그로 인해 과거의 자신이 쌓은 벽에 가로막혀 코드를 새로 수정해야 하는 상황이 벌어지기도 한다. 하지만 최고의 시스템은 진화할 수 있는 유연성을 갖췄다. 기존 코드를 수정하는 대신 새 코드를 추가해 새로운 상황에 적응하는 가산적 프로그래밍을 활용한다. 이 책은 제럴드 제이 서스먼과 크리스 핸슨이 도합 100년이 넘는 프로그래밍 경험에서 발견한, 프로그래머가 막다른 골목을 피하는 데 도움이 되는 기법들을 담았다. 이 책은 동적으로 확장 가능한 일반적 프로시저처럼 극도로 강력하지만 잠재적으로 위험한 기법들도 소개한다. 각 장에는 연습문제와 리스프의 방언인 스킴으로 만들어진 예제 코드를 실었다. 천문 거리 계산에서 자동 미분, 어드벤처 게임에 이르기까지 다양한 예제를 살펴본다.


크리스 핸슨과 제럴드 제이 서스먼이 설명하는

유연성을 위한 가산적 프로그래밍 마스터 클래스


소프트웨어 개발자들은 주로 특정한 작업을 아주 잘 수행하는 소프트웨어를 설계해왔다. 이는 과거의 공학적 실천의 확장으로 개별 소프트웨어를 좁은 범위의 작업만을 수행하도록 설계했다. 이 경우, 풀고자 하는 문제가 변하면 소프트웨어도 변해야 한다. 그런데, 문제가 조금만 바뀌어도 소프트웨어는 크게 바꾸어야 할 때가 많다. 유연성에 초점을 두고 설계를 진행하면 환경 변화에 적응하는 시스템을 구축할 수 있다. 작동 중인 프로그램을 뜯어고칠 필요 없이, 그냥 새로운 기능을 구현한 코드를 추가하거나 기존 함수를 새로운 요구 사항에 맞게 조정하는 가산적 프로그래밍을 활용해 진화하는 시스템을 만들어보자.


[대상 독자]

- 유연성에 집중한 프로그램 설계 방식을 알고 싶은 프로그래머

- 복잡한 시스템을 구축해야 하는 아키텍트


[주요 내용]

표준 인터페이스를 따르는 짜맞춤 방식으로 작은 함수부터 산술 패키지 전체까지 다양한 구성 요소를 조립하는 시스템 구성법

- 측정 단위나 자료 출처 같은 정보를 담은 독립적인 주해를 사용한 데이터 증강

- 통합이나 전파를 이용한 독립적인 부분 정보 조각 조합

- 영역 모형, 규칙 시스템, 패턴 부합, 전파, 의존성 지향적 역추적을 이용한 제어 구조와 문제 영역 분리

- 동적으로 확장 가능한 평가자를 이용한 프로그래밍 언어 확장


[서평]

이 책은 우리가 MIT에서 컴퓨터 프로그래밍을 가르치는 과정에서 개발된 것이다. 인공지능 응용의 핵심부에 해당하는 프로그램을 작성하는 데 유용한 기법과 기술을 학부생과 대학원생들에게 가르치는 것이다. 그런 시스템들을 조합해서 더욱더 강력한 시스템을 구축할 수 있을 정도로 유연하게 시스템을 구축하는게 목표이다. 또한 의존성을 추적하는 방법과 의존성을 설명과 역추적 제어에 활용하는 방법를 배울수 있다. 


1장에서는 프로그래밍 철학을 소개한다. 여기서는 유연성을 자연과 공학이라는 좀더 큰 맥락이서 배울수 있다. 여기서 유연성이 효율성과 정확성 만큼이나 중요한 문제라고 말하고 있다. 이후의 내용에서는 유연성을 위한 기법들을 소개하고 예제와 연습문제를 통해서 배울수 있다. 2장에서는 성장의 여지가 있는 시스템을 구축하기 위한 보편적으로 적용할 수 있는 방법 몇 가지를 살펴본다. 3장에서는 극도로 강력하지만 잠재적으로 위험한 기법인 술어로 디스패치되는 일반적 프로시저를 소개한다. 4장에서는 기호적 패턴 부합을 소개하고 이를 이용해서 항 재작성 시스템을 구현한다. 5장에서는 해석과 컴파일의 위력을 살펴본다. 6장에서는 계층적 데이터와 계층적 프로시저들로 시스템을 구축하는 방법을 살펴본다. 마지막 7장에서는 컴퓨터 언어들의 표현식 지향적 패러다임에서 벗어나기 위한 전파 개념을 소개한다.


이 책의 목적은 프로그래밍 개념들을 제시하고 설명하는 것이다. 각 장에서 두명의 전문가가 고급 기법으로 작동하는 코드 조각을 점차 발전시켜 나가면서 주요 전략을 설명한다. 피해야 할 함정을 알려 주거나 제한을 제거하기 위한 노하우를 배울수 있다. 이 책에 담긴 개념과 착안은 매우 풍부하고 심오하다. 문장과 코드 모두 깊이가 있어 여러번 반복해서 공부하다 보면 유연성 향상 기법을 구현할 수있을 겁니다.


 "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo