bre***
2022-04-24

상황 변화에 따라 기존 프로그램을 변경하지 않고 다른 기능을 첨가해 \\\\\\\\\\\\\\\'가산형 프로그래밍\\\\\\\\\\\\\\\'을 사용해 진화하는 시스템을 만드는 비법을 살펴본다.
계산과 건축
프로그램 설계를 건축에 비유할 수 있을 것입니다. 건축가는 건물 부지의 성격과 건물 구조의 요구조건을 파악한 후 파르티 parti라는 개념을 이용해서 설계과정을 시작한다고 합니다. 학교건물을 설계할 때를 예로들면 복도, 화장실, 기계실 승강구 같은 기반 구조 요소들과
연구실, 교실, 사무실 같은 서비스 받는 공간을 분리함으로써 건축 설계 문제를 어떤 기준으로 나누기도 합니다. 또한 이러한 나눠진 공간은
각각의 목적으로만 동작이 가능한 구조물이 아닐 것입니다. 사람의 동선을 고려해야 할 것이고, 난방 과 공기 조절기 배관과 상하수도관,
전기 배선과 통신시스템, 도로를 배치함으로써 온전한 공간으로서 활용이 되어질 것입니다. 프로그램도 마찬가지로 각기 목적에 따른 모듈이 있을 것이며 공통적으로 사용되는 라이브러리들이 필요할 것이고 특정 사용자의 패턴을 만족시키기 위해서만 동작하는 모듈이 필요할 것입니다. 이러한 것이 설계하는 과정에서 잘 계산이 되어야지만, 적절한 비용과 시간을 들여 프로그램을 개발할 수 있게 될 것입니다.
설계의 원칙
이 책에서는 다양한 설계원칙에 대해서 이야기 하고 있습니다. 산술 연산의 조합, 패턴 부합, 계층화, 전파 등등의 방법으로 말입니다.
각 장에서는 개념에 대한 설명과 코드로 이야기를 하고 있습니다. 예를 들어 체스 게임에 대한 프로그램을 설계한다고 할 때 어떻게 설계를 해야 효율적인지에 대해서 설명하고 있습니다. 책을 읽으면서, 다양한 확장 방법에 대해서 알게 되었습니다. 특히나 체스 게임에 비유한 설계를 이야기 할 때에는 명확하게 이해가 되어 좋았습니다. 처음에는 체스 규칙에 적용된 함수를 적용했다면, 확장성을 적용한 모델에서는 다른 형태의 보드게임에 적용을 할 수 있도록 만드는 개념에 대해 설명을 하여서 확장성이란 어떤 것인지에 대해 좀더 이해가기가 쉬웠습니다.
다만 중간중간 어려운 개념이 나오거나, 수학식이 나오기도 하여 조금 당황스럽기도 하였지만 말입니다.
총평
프로그램을 설계하면서 이런저런 고민을 했던 프로그래머라면 이 책은 한번쯤은 읽어봐도 좋을만한 이론 서적이 아닌가 싶습니다.
다만 여러가지 허들이 있는데, 첫번째로는 스킴 입니다. 스킴이라는 언어로 작성한 예시를 가지고 설명을 하는데, 언어의 문법이 다소 생소합니다. 그래서 소스코드만 보면 예시가 잘 이해가 되지 않을 수 있습니다. 두번째로는 개념의 어려움입니다. 많은 개념들이 등장하는데
용어들이 참 생소합니다. 다소 난해한 수학 공식도 등장합니다. 수학과 친하지 않은 사람이라면 책이 다소 어렵게 느껴질 수 있을 것입니다.
한줄로 책에 대해 이야기 하보면, 설계에 대해 좀더 deep 하게 공부해보고 싶은 사람에게 추천! 입니다.