|
읽기전에, 이책은 MIT에서 컴퓨터프로그래밍을 가르치는 과정에서 개발된 것이고 인공지능 응용의 핵심부에 해당하는 프로그램을 작성하는데 유용한 기법과 기술을 학부 고학년과 대학원생에게 가르치는 것이었다. 수강생들에게 의존성을 추적하는 방법과 의존성을 설명과 역추적제어에 활용하는 방법을 가르치고자 했다고 한다. 예제코드는 다소 생소한 스킴이라는 함수형언어에 가까운 언어로 작성되었는데 이해하기가 힘들수도 있다. 이 책이 목적이 프로그래밍 개념들을 제시하고 설명하는 것이기 때문에 스킴이라는 언어로 더 짧고 간단하게 표현가능해서 썼다고 한다. 내가 원한것은 디자인설계이지 시스템설계와 원론적인 내용이 아니었지만 한번 읽어보는것도 도움이 되기때문에 프로그래밍에 숙련도가 높은 사람들이나 연구하는 대학원생들이 이책을 봐야할것 같다. 괜히 MIT교재가 아니다. 책의 난이도가 아주아주아주 높다!!! - 표준인터페이스를 따르는 짜맞춤 방식으로 작은 함수부터 산술패키지전체까지 다양한 구성요소를 조립하는 시스템 구성법 - 측정 단위나 자료 출처같은 정보를 담은 독립적인 주해를 사용한 데이터 증강 - 통합이나 전파를 이용한 독립적인 부분 정보 조각 조합 - 영역모형, 규칙시스템, 패턴부합, 전파, 의존성 지향적 역추적을 이용한 제어구조와 문제영역 분리 - 동적으로 확정 가능한 평가자를 이용한 프로그래밍 언어확장 을 책에 담았다. 이책을 보면서 이해를 하고 싶었으나 시스템설계쪽은 거의 무식에 가깝고 스킴도 모르는 상태에서 읽기엔 너무 난이도가 무시무시했다. 프로그래머하면 이정도는 해야지 진정한 프로그래머인것인가라는 생각이 들정도로 너무 대단하다고 생각됨이었다. 언젠가는 이책을 이해할 날이 올거라고 생각하며 이만 리뷰를 마친다. ? "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다." |
|
유연한 소프트웨어를 만드는 설계 원칙: 막다른 골목 없이 진화하는 시스템 개발하기 * 이 서평은 한빛미디어에서 도서를 제공받아 솔직하게 제작한 서평입니다.
프로그래머들은 시간에 쫓기는 나머지, 어쩔 수 없이 제한된 용도로만 사용 가능한, 성장의 여지가 거의 없는 코드를 작성한다. 그로 인해 과거의 자신이 쌓은 벽에 가로막혀 코드를 새로 수정해야 하는 상황이 벌어지기도 한다. 하지만 최고의 시스템은 진화할 수 있는 유연성을 갖췄다.
이 책은 제럴드 제이 서스먼과 크리스 핸슨이 도합 100년이 넘는 프로그래밍 경험에서 발견한, 프로그래머가 막다른 골목을 피하는 데 도움이 되는 기법들을 담았다. 이 책은 동적으로 확장 가능한 일반적 프로시저처럼 극도로 강력하지만 잠재적으로 위험한 기법들도 소개한다. 각 장에는 연습문제와 리스프의 방언인 스킴으로 만들어진 예제 코드를 실었으며 예제 또한 다양하게 준비했다. 이 책은 소프트웨어와 프로그래밍에 대해서 어느 정도 이해하고 있어야 볼 수 있다. |
|
이 책은 한빛미디어에서 나온 유연한 소프트웨어를 만드는 설계원칙 입니다. 프로그래밍을 하는 과정에서 유연한 소프트웨어는 얼마나 중요할까요? 프로그램을 하면서 유연한 프로그램은 수정과 변경이 용이하고 각각 역할을 분리함에 따라 유지보수를 조금 더 효율적으로 하는데 있다. 이책은 이러한 과정에서 더 좋은 프로그래머, 프로그램을 하기위한 필요한 책이며. MIT의 수업을 내용을 바탕으로 만들어진 교재이다. 여기서는 스킴 이라는 프로그램을 통하여 책을 따라 갈수가 있다. |
|
* 책을 읽을 때, 역자가 쓴 글 부터 추천사 모두 좋은 내용들이 담겨 있습니다. 개발 서적 중 실무 이론을 담고 있는 책들의 경우 툭툭 던지는 화두들이 있습니다. 이 화두는 마음에 오래 남아 있기 때문에 이를 기록하고 경험에 빗대어 생각하게 됩니다. 그러다 보니 짧은 페이지를 읽는 중간에도 꽤나 많은 시간이 소요 되었습니다.
* 번역서들의 경우 가끔 역자가 전문 용어를 자신의 언어 또는 의역을 해서 읽고 싶지 않을때가 존재하는데, 이 책을 쓴 역자의 경우 의역 또는 원래 용어와 달라지는 경우 영단어 표시를 해서 그나마 읽을때 수월했습니다.
* 기법들을 소개하지만, 이를 반드시 사용해야 한다고 주장하지는 않습니다. 다만 유연성에 초점을 둔 사고 방식을 지속적으로 강조하고 있습니다.
* 개발 철학과 관련된 책들을 읽다보면 나오는 용어와 개념, 기법들이 반복해서 나오는 경우가 있습니다. 기초를 중요시하고, 기본이 정석이다를 다시 느끼게 되는 책 입니다.
* 한장 한장 천천히, 꾹꾹 눌러 읽어가기 좋은 책 입니다. 좋은 내용이 많기 때문에 반복해서 읽는 것을 추천드립니다.
* 책의 난이도가 있는 편이라, 개인 또는 팀 프로젝트를 경험해 본 개발자가 읽기에 좋은 책 이며, 개발 입문자에게는 권하지 않습니다.
총평 - 스킴으로 예시가 작성되어 있어서 당황스러울 수 있다. - 이론서 + 코드의 병합이 되어있기 때문에 각잡고 정독을 해야 해서 읽는 속도가 걸릴 수 있다. - 연습 문제가 있어서 복습 및 고민할 거리들을 계속 던져준다. - 긴 시간 여러번 곱씹을만한 좋은 책이고, 마음속에 새겨 둬야 할 것들이 너무 많아 언제 다 새겨질지가 고민이다.
|
|
어떤 소프트웨어 프로그램의 구조를 생각할 때는 고려해야 할 것이 많이 있다. 그래서 나도 여전히 초심자로써 이런저런 호기심의 연결고리에서 닿게 된 것들 중에 하나인 유연한 소프트웨어를 만드는 설계 원칙이라는 책을 접하게 되었다.
![]()
해당 책은 확실히 초급 중급 상급으로 난이도를 나눈다면... 절대로 초급은 아닌 책이긴 하다. 하지만 그만큼의 가치는 높지 않을까 하다. 첫 번째 챕터부터 살펴보면 1. 자연과 설계의 유연성 이라는 각 장을 담고 있다. 그중에서 1장만 살펴보자면, 1장에서는 전체적인 책의 전반적인 내용에 대해 설명해주고 있으며 기억에 남는 내용으로 "이 책의 기법 중 다수는 새로운 것이 아니다... 유연성에 초점을 둔 사고 방식을 권장하는 것이다"라고 하고 있다.
이후에는 1장에서 간략히 소개해준 유연성을 위한 전략들을 각 장에서 소개해주고 있다.
책이 쉽지 않다고 느낀 이유 중 하나로 책에서 나오는 단어들이 특정 소프트웨어 분야에 한정되는 단어들도 아니다 보니, 단어들이 초급자들이 접하기엔 어려운 느낌이 많이 있다.
물론 책의 옮긴이가 그런 단어들을 찾아서 설명을 해주고 계시지만... 아래에 보면 예를 들어 '축 중성(degeneracy)'이라는 단어가 나오고 해당 단어를 설명해주고 있다. 근데도 익숙한 단어는 아니지만(나에게 있어선), 이해하는 데에 좀 어려움이 있었다. 물론 이런 옮긴이의 단어들을 설명해주려고 하신 부분에 대해 박수를 보낸다. ![]()
그리고 익숙하지 않은 점이라면 스킴(Scheme)이라는 개인적으로 처음 들어본 언어를 사용하고 있다.
물론 어떤 문법이 어떤 기능을 사용하는데에는 다양한 언어가 있다 하더라도, 크게 다르지 않고 시간을 좀 더 들여서 이해하면 되지만 , 개인적으로도 흔하지 않은 언어라서 좀 더 요즘 대중적인 언어였으면 어땠을까 하는 개인적인 아쉬움은 조금 생겼다.
- 책에 나오는 스킴 언어 샘플 예시 중 일부
대신 각 챕터에 대해 각각에 대한 샘플을 마련해주고 있는 부분은 굉장히 좋았다. 어떤 방법이 있는데 이걸 이렇게 쓰는거야 하는 예시를 이해를 돕는 과정 중에 좋은 방법이 아닐까 한다.
몇 가지 아쉬움이 있었지만, 한 순간에 이 책을 마스터해서 습득할 순 없겠지만 추후에 필요할 때에 꺼내어 보면 좋은 책이 될 것 같다.
마지막으로 책에서 기억에 남는 부분을 끝으로 글을 마친다. ![]()
"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다." |
![]()
Author: 크리스 핸슨, 제럴드 제이 서스먼 지음 / 류광 옮김 출판사: 한빛미디어 Score /5: 4 현업에서 개발일을 하거나 기초가 부족한 또는 컴퓨터 공학 전공이 아님에도 IT 계열의 길을 걷는 사람들이 있다. (필자의 얘기임) 유연한 소프트웨어를 만드는 설계 원칙은 일종의 여러가지 기준을 잡아주는 책으로 보인다. 다만, 아쉬운 점이 있다. 옮긴이가 서두에 언급했듯이 일반 개발자들이 익숙하지 않은 스킴(Scheme)이라는 언어를 통해 코드를 설명하고 있는데 코드를 이해하기 위해서 스킴을 공부해야 하는 일종의 이중고(?)를 겪었다. 하지만 위의 2가지를 극복한다면 이 책은 두고두고 참고하고 써먹을 수 있는 개발자/설계자의 나침반 같은 책이 아닐까 싶다.
"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다." |
![]()
이번에 한빛미디어 도서 체험단으로 "유연한 소프트웨어를 만드는 설계 원칙"을 받게 되었다. 4점을 준 이유는 책의 내용만 놓고보면 만점이지만, 번역 때문이다. 책의 내용 자체는 흥미로운 내용이었다. 요즘 핫한 함수형 프로그래밍을 기반으로 하여 어떻게 하면 확장성 좋고 유연한 소프트웨어를 만들 수 있을지, 그 디자인에 대해서 생각해보고 논한다. 특히 컴퓨터 프로그램의 구조와 해석 이란 책을 재미있게 읽고, 잘 아시는 분이라면 더욱 흥미롭게 읽을 수 있는 책이라고 생각한다. 예제로 LIPS 기반의 Scheme이란 언어를 사용하기 때문이다. 이 점은 코드를 핸즈온으로 따라함에 있어서 단점일 수도 있는 것이 윈도우 환경이 아닌 MIT/GNU 환경에서 컴파일 되기 때문이다.
번역은 류광님이 맡으셨다. 이전에 류광님이 번역하신 심층학습, 인공지능 현대적 접근 이란 책을 읽었는데, 한국어로 읽는데도 읽히지가 않아서 결국 원서로 사서 읽었다. 이 책에서도 내가 이전에 읽었던 두 책의 느낌이 물씬났다. 범용적인 언어의 사용보단 나름의 기준으로 잡으신 핵심 용어들. 1장에서 저자들이 설명을 위해 생체계란 단어를 자주 사용하는데, 한국에서 생체계란 말이 자주 쓰이는지 모르겠다. 명서들이 한국어로 번역이 되는 것은 좋으나, 읽는 독자에 대한 배려가 없는 번역서는 잘 모르겠다. 이 책도 앞에 읽었던 두 권의 책들처럼 웬지 원서가 더 잘 읽힐 것 같아 원서로 사서 마저 읽을 예정이다.
책 내용은 참 좋다.... 아마 원문은 그렇게 어렵게 읽힐 것 같진 않다. 심층 학습, 인공지능 책처럼 번역이 만든 난이도가 꽤 있는 책이라고 평하고 싶다.
한두번도 아니고 세번째 데이니까 마음이... 참 힘들다..... |
![]()
개요 유연한 소프웨어를 만드는 설계 원칙 구성방식은 해당 챕터를 관통하는 예제를 제시 후 이에 설명하면서, 구성요소와 구현방식에 대해 풀어서 설명한다. 책의 내용은 중급자 이상의 내용을 담고있으며, 스스로 개발 프레임워크를 구성할 수 있는 정도의 깊이를 담고 있다. 내용 곳곳에 'Scheme'로 구성된 프로그램 예시가 존재한다. 해당 언어에 익숙하지 않는 독자들은 들어가기 앞서서 부록B를 먼저 보고 읽을 것을 권한다. 목차 1장. 자연과 설계의 유연성 유전체의 특징을 토대로, 프로그램 설계시 가져야할 요소를 설명하고 있다. 기본적으로 프로그램 설계시, Component화 해야 하며, Component들이 모여서 Function가 된다. 즉, mix-and-match 특성을 지녀야 한다.
2장. 영역 특화 언어(DSL) 특정 도메인 내 한정된 분야에서 사용되는 언어로 정의함으로써, 문제의 계층화 할 수 있으며 나아가서 프로그램 내 유연성 가질 수 있도록 한다. DSL 적용방안으로는 다음과 같다. 첫번째, primitive 를 조합하여, combinator를 정의 두번째, 정규식 (regular expression)를 통한 구현 세번째, 기존 요소에 wrapper를 통한 구현
3장. 산술 주제의 변형등 DSL에서 "problem domain은 명사들과 동사들 이루어진 하나의 추상이다"라고 정의하였다. 동사들을 procedure로 정의 할 수 있으며, 이번 장에서는 generic procedure 개념을 다룬다. generic procedure라 함은 산술(arithmetic) 연산의 조합을 말한다. 예를 들어, 사직연산의 조합 부터, π 상수 정의, 사용자 정의 등을 의미한다.
4장. 패턴 부합 pattern matching 이라 함은 equality testing 이다. 이는 같음 여부에 대해서 시험함을 의미한다. 같음이라 함은 type, value 등 여러 요인등이 될 수 있다. pattern matching를 하기 위해서 2개의 구성요소 combinator와 matcher가 필요하다.
5장. 평가 DSL를 만든다는 것은 해당 언어를 computational process를 통해서 의미를 부여함을 말한다. 의미를 부여하기 위해서는 interpreter가 computational process을 진행하며, 과정 내 eval/apply 진행된다. 즉, operator와 operand를 eval하면 각각 procedure, parameter를 나오며, 이를 환경 내에서 apply를 통해서 computational process 과정의 연속을 말한다.
6장. 계층화 layered programming은 각각의 layer 내 책임소지를 명확하게 하여서, 확장성을 가질 수 있도록 한다. layer 는 layered data를 받아서, layer 내 procedure에 전달 후 이후 layer에 넘겨준다. source 데이터를 처리할 때는 premise가 존재하며, 이를 처리하면 처리한 근거를 comment를 포함한다.
7장. 전파 Propagation은 다수의 독립적인 전파자들이 정보를 계산, 이를 공유 셀에 기여하며 정보를 병합하는 과정을 말한다. 구성요소는 셀, 전파자, 스케줄러으로써, 셀은 값에 대한 정보누적, 전파자는 funtional procedure, 스케줄러는 활성화된 전파자에게 계산자원 할당을 한다. 전파자 모형의 특성은 충중성(degeneracy), 병렬성, 중복성 으로, 기대효과는 무결성(integrity)과 회복성(resiliency)을 지원한다.
- 충중성(degeneracy) 수학적 표현으로 서로다른 선형독립적인 고유함수 (procedure)에서 예상되는 기대값이 같은 경우를 말한다.
마무리 아쉬운 점으로는 번역됨에 있어서 독자들에게 익숙하지 않은 한자어로 변역됨에 따라서 이해가 안될 수 있으나, 이를 원어 내 단어 그대로 읽어 나가면 좀더 수월하게 읽을 수 있을 것이다. 도서가 풀어나가는 목표는 명확하다. 디자인패턴과 같은 소프트웨어 설계를 다루는 것을 목표로 하지 않고, 소프트웨어 아키텍처의 설계 방향을 중점적으로 다루고 있다. 즉, 일반적이고, 범용성과 확장성을 지닌 소프트웨어 설계을 하고자 함은 변화에 대해서 능동적으로 대체가 가능할 수 있는 요소에 대해서 다양한 방법으로 서술하고 있다.
- 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다 |
|
안녕하세요 피슈입니다. 오늘 소개할 책은 유연한 소프트웨어를 만드는 설계원칙 이라는 책입니다. 우리가 소프트웨어 개발을 할 때 부딪히는 일들 중에 하나지요.. 확장성을 가지고 개발을 하는 것 입니다. 하지만 개발이 항상 우리의 이러한 상황을 고려해 주지 않지요.. 정해진 리소스안에서 개발을 해야되는 상황, 곧 일정과 주저진 인원내에서 수행을 해야되기 때문입니다. 그렇지만 미래에 다가올 추가 개발건이나, 고도화를 염두해 둔다면 프로젝트의 확장성은 염두해두어야 할 것입니다. 오늘 책은 개발자들의 이러한 고민에 대한 가이드를 줄 책이라고 생각합니다. 책 소개를 하면서 어떤 내용들이 담겼는지 간단하게 이야기 해보겠습니다.
계산과 건축 프로그램 설계를 건축에 비유할 수 있을 것입니다. 건축가는 건물 부지의 성격과 건물 구조의 요구조건을 파악한 후 파르티 parti라는 개념을 이용해서 설계과정을 시작한다고 합니다. 학교건물을 설계할 때를 예로들면 복도, 화장실, 기계실 승강구 같은 기반 구조 요소들과 연구실, 교실, 사무실 같은 서비스 받는 공간을 분리함으로써 건축 설계 문제를 어떤 기준으로 나누기도 합니다. 또한 이러한 나눠진 공간은 각각의 목적으로만 동작이 가능한 구조물이 아닐 것입니다. 사람의 동선을 고려해야 할 것이고, 난방 과 공기 조절기 배관과 상하수도관, 전기 배선과 통신시스템, 도로를 배치함으로써 온전한 공간으로서 활용이 되어질 것입니다. 프로그램도 마찬가지로 각기 목적에 따른 모듈이 있을 것이며 공통적으로 사용되는 라이브러리들이 필요할 것이고 특정 사용자의 패턴을 만족시키기 위해서만 동작하는 모듈이 필요할 것입니다. 이러한 것이 설계하는 과정에서 잘 계산이 되어야지만, 적절한 비용과 시간을 들여 프로그램을 개발할 수 있게 될 것입니다.
설계의 원칙 이 책에서는 다양한 설계원칙에 대해서 이야기 하고 있습니다. 산술 연산의 조합, 패턴 부합, 계층화, 전파 등등의 방법으로 말입니다. 각 장에서는 개념에 대한 설명과 코드로 이야기를 하고 있습니다. 예를 들어 체스 게임에 대한 프로그램을 설계한다고 할 때 어떻게 설계를 해야 효율적인지에 대해서 설명하고 있습니다. 책을 읽으면서, 다양한 확장 방법에 대해서 알게 되었습니다. 특히나 체스 게임에 비유한 설계를 이야기 할 때에는 명확하게 이해가 되어 좋았습니다. 처음에는 체스 규칙에 적용된 함수를 적용했다면, 확장성을 적용한 모델에서는 다른 형태의 보드게임에 적용을 할 수 있도록 만드는 개념에 대해 설명을 하여서 확장성이란 어떤 것인지에 대해 좀더 이해가기가 쉬웠습니다. 다만 중간중간 어려운 개념이 나오거나, 수학식이 나오기도 하여 조금 당황스럽기도 하였지만 말입니다.
총평
프로그램을 설계하면서 이런저런 고민을 했던 프로그래머라면 이 책은 한번쯤은 읽어봐도 좋을만한 이론 서적이 아닌가 싶습니다. 다만 여러가지 허들이 있는데, 첫번째로는 스킴 입니다. 스킴이라는 언어로 작성한 예시를 가지고 설명을 하는데, 언어의 문법이 다소 생소합니다. 그래서 소스코드만 보면 예시가 잘 이해가 되지 않을 수 있습니다. 두번째로는 개념의 어려움입니다. 많은 개념들이 등장하는데 용어들이 참 생소합니다. 다소 난해한 수학 공식도 등장합니다. 수학과 친하지 않은 사람이라면 책이 다소 어렵게 느껴질 수 있을 것입니다. 한줄로 책에 대해 이야기 하보면, 설계에 대해 좀더 deep 하게 공부해보고 싶은 사람에게 추천! 입니다.
다음에 더 유용한 리뷰로 돌아오겠습니다. 끝!
한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다. |