메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

유연한 소프트웨어를 만드는 설계 원칙

막다른 골목 없이 진화하는 시스템 개발하기

한빛미디어

번역서

판매중

  • 저자 : 크리스 핸슨 , 제럴드 제이 서스먼
  • 번역 : 류광
  • 출간 : 2022-03-30
  • 페이지 : 504 쪽
  • ISBN : 9791162245408
  • 물류코드 :10540
  • 초급 초중급 중급 중고급 고급
4.2점 (27명)
좋아요 : 4

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

 

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

 

 

940px_상세이미지_유연한 소프트웨어를 만드는 설계 원칙.jpg

크리스 핸슨 저자

크리스 핸슨

크리스 핸슨은 데이테라의 기술 직원이다. 여러 해 동안 MIT에서 지내면서 MIT/GNU 스킴 시스템의 주 저자로 일했다. 구글에서도 10년간 일했다.

제럴드 제이 서스먼 저자

제럴드 제이 서스먼

MIT 전기공학부 파나소닉 교수(Panasonic Professor of Electrical Engineering)

 

류광 역자

류광

25년 이상의 번역 경력을 가진 전문 번역가로, 『컴퓨터 프로그래밍의 예술』(The Art of Computer Programming) 시리즈와 『UNIX 고급 프로그래밍』(Advanced Programming in UNIX Environment ) 제2판 및 제3판, 『인공지능: 현대적 접근방식』(Artificial Intelligence: A Modern Approach) 제3판 및 제4판, 『Game Programming Gems』 시리즈를 비롯해 80권 이상의 다양한 IT 전문서를 번역했다. 본서와 관련이 깊은 번역서로는 『유연한 소프트웨어를 만드는 설계 원칙』(한빛미디어, 2020)이 있다.

 

개인 웹사이트 류광의 번역 이야기(https://occamsrazr.net)와 게임 개발 웹사이트 Gpg Study(https://gpgstudy.com)를 운영한다. 

 

 

제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 스킴

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

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

 

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

 

 

대상 독자

  • 유연성에 집중한 프로그램 설계 방식을 알고 싶은 프로그래머
  • 복잡한 시스템을 구축해야 하는 아키텍트

 

배우는 내용

  • 표준 인터페이스를 따르는 짜맞춤 방식으로 작은 함수부터 산술 패키지 전체까지 다양한 구성 요소를 조립하는 시스템 구성법
  • 측정 단위나 자료 출처 같은 정보를 담은 독립적인 주해를 사용한 데이터 증강
  • 통합이나 전파를 이용한 독립적인 부분 정보 조각 조합
  • 영역 모형, 규칙 시스템, 패턴 부합, 전파, 의존성 지향적 역추적을 이용한 제어 구조와 문제 영역 분리
  • 동적으로 확장 가능한 평가자를 이용한 프로그래밍 언어 확장

 

추천사

 

대부분의 훌륭한 시스템은 한순간만 반짝하지 않고 오랫동안 빛을 발한다. 이 책은 망가짐 없이 발전하는 유연한 시스템을 만드는 비법을 훌륭하게 소개한다.

_리치 히키, 프로그래밍 언어 '클로저'의 주 저자

 

이 책은 소프트웨어 개발의 판도를 뒤바꿀 가산적 프로그래밍 개념을 소개한다. 가산적 프로그래밍을 사용하면 프로그래머가 곡예같은 노력을 하지 않아도 기존 디자인을 변경할 수 있다. 소프트웨어 디자인 과정에서 오랫동안 간과해왔던 문제를 우아하고 명확하게 지적한 뒤, 이에 대한 획기적인 해결책을 알려주는 책이다.

_댄 프리드먼, 인디애나주립대 컴퓨터과학과 교수

나는 함수형 프로그래밍에 관심이 없는 사람이다

책 표지를 보고 유연한 소프트웨어를 만드는 방법에 대해 알려주는 것으로 생각했지만

막상 책을 구매하니 함수형 프로그래밍에서 어떻게 적용할지에 대한 책이였다

 

책 요약

소프트웨어를 살아 숨쉬는 유기체에 빗대어 설명하는 새로운 개념의 책이다. 소프트웨어 설계에 많은 개발자가 읽기에 매우 유익한 책이다. 기반지식과 많은 시간을 투입해야 많은 것을 이해할 수 있는, 난이도가 꽤 높은 수준을 보인다. 쉽지는 않지만 개발의 원칙을 세우는 철학을 확립할 수 있는 계기를 만들어 줄 수 있을 것이라 기대해볼만하다.

 

대상 독자

  • 소프트웨어 설계가 궁금한 개발자
  • 유연한 소프트웨어를 개발하고 싶은 개발자
  • 한단계 스킬업이 하고 싶은 개발자

 

리뷰

만만하게는 볼 수 없다. 소프트웨어를 개발할 때 어떤 방식으로 만들어야하는지 살아있는 세포에 빗대어 원칙을 구성하는 개념을 설명해 나간다. 평소 설계에 대해 고민을 해보지만 이러한 개념을 통해 소프트웨어를 개발해 본 경험이 있는 사람은 흔하지 않을 것이다. 소프트웨어의 유연성을 극대화하기 위해서는 어떻게 해야하는지 설명한다.

우리의 몸을 구성하는 세포틑 모두 같은 세포를 통해 확장되어 진다. 이 세포는 과연 어떻게 같지만 다른 기능을 하게 됐는지, 또 다른 세포가 기능하지 못 했을 때에도 어떻게 다른 세포들이 그 기능을 대체할 수 있는지에 빗대어 소프트웨어 또한 세포와 같이 구성되어져야 한다고 설명한다. 세포의 이런 유연함을 닮기 위해 소프트웨어를 다양한 조건을 수용할 수 있어야하며, 이 특징을 통해 대체 가능한 확장성을 갖게 된다고 한다. 그리고 어떻게 하면 소프트웨어가 확장 혹은 대체를 유연하게 할 수 있는지 기법들을 설명한다.

도입부에서 이 책을 접했을 때 매우 어렵다고 느끼면서도 한편으로는 매우 새롭다는 생각이 머릿 속을 사로잡는다. 항상 기술적인 이야기와 디자인 패턴에 대한 이야기를 통해 효과와 효율에 대해 이야기하던 내용과는 다르게 자연에서 힌트를 얻어 발전되어가는 소프트웨어를 이야기한다. 소프트웨어 설계 원칙 역시 무에서 만들어진 것이 아니라 자연의 이치에서 배운 원칙에서 힌트를 얻는다는 것이다. 그리고 그 원칙을 소프트웨어에 적용하여 이상적인 목표에 다다를 수 있다고 말한다.

철학적이면서도 개발자로 한단계 성장할 수 있는 심도깊은 책이다. 책의 분량은 많지 않지만 단순 개념의 이해가 아니라 자연의 원리를 이해하며 개념을 잡고 소프트웨어에 반영하는 개념들이 생소하여 읽기에 다소 시간이 걸린다. 하지만 책을 읽으면 읽을수록 더욱 빠져들며 설계 원칙을 세워갈 수 있을 것이라 기대에 차게 한다.

아직 설계에 대한 경험이 없더라도 충분한 시간을 투입하면서 자신만의 고유한 원칙을 쌓아 나갈 수 있을 것 같다.

  

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

[회전]1.jpg

 



해당책은 프로그래밍의 유용한 기법과기술을 다룬다.

mit 수업교제로도 활용되는 책이라고 하는데 좋은내용을 다루고있지만

아쉬운점은 schme 이라는 언어로 작성되었다.

사실 평소에 다루는 언어거나, 유사한 언어를 개인적으로 다룬적은 없어서 코드가 눈에 잘 들어오지는 않았다.

 

2.jpg

 

 



하지만 지문을 읽어보더라도, 책에서 다루고자 하는 내용은 이해할수있고,

설명하는 방식에서 신선하고 좋은책이라는 생각이 든다.



[회전]3.jpg

 

 

코드를 점점 발전해 나감으로써, 코드설계의 방향성을 제시 해준다.

 

 

[회전]4.jpg

 


 



논리 회로를 가지고 설명해주는 부분도 굉장히 독특했다 .

 

연습문제를 통해 문제에 대한 고민도 하고, schme 이라는 언어를 접해볼수 있어 좋았다.

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



 

 

 



 

개발 관련 필독서에 항상 상위에 올라오는 책들이 있다. 하지만 그 책들을 온전히 받아들이고 흡수할 수 있느냐는 다른 얘기다. 이 책 “유연한 소프트웨어를 만드는 설계원칙”도 그런 책 중 하나라고 생각이 든다. 내가 처음부터 이런 말로 시작하는 이유는 책 내용이 그만큼 쉽지 않기 때문이다.

가산적 프로그래밍 Additive programming

저자들이 이 책을 통해 “요구사항이 변해도 작동 중인 프로그램을 뜯어고칠 필요 없이, 그냥 새로운 기능을 구현한 코드를 추가하거나 기존 함수를 새로운 요구사항에 맞게 조정할 수 있어야 한다” 라는 핵심 가치를 가산적 프로그래밍 이라고 부른다. 사실 이 책의 핵심 주제는 위의 저 문장안에 모두 들어있다고 보면된다. 그리고 책에서는 이를 추구하기 위한 기법들을 소개한다.

사실 이 주제가 특별한건 아니다. 이를 다루는 책들도 많으며, 지겹도록 듣는 “객체지향 프로그래밍의 특징과 원칙”, “디자인 패턴” 들의 태생도 별반 다르지 않기 때문이다. 다만, 이 책의 차별점이자 개인적으로 느끼는 단점으로는 저자들의 설명이 단순하지 않고, 어려운 비유를 들고 있다는 것이다.

 

생체계들은 견고성을 엄청나게 진화시켰다. 생체계의 한 가지 특징은 중복성이다. 간이나 콩팥 같은 장기는 중복성이 높다. …

 

유전 부호 자체가 충중적이다. 코돈에서 아미노산으로의 사상은 일대일 사상이 아니다. …

제 1장의 제목인 “자연과 설계의 유연성”에서도 알 수 있듯이 책 전반에 있어서 이런 내용을 기반으로 설명을 한다. 개인적으로는 이런 비유들은 한번 읽어서는 오히려 각 챕터별 주제를 이해하는데 방해가 되기도 했다. 즉, 나의 수준이 못 따라간다고 해야할 것 같다.

함수형 프로그래밍

책의 예제로 사용되는 언어인 ‘스킴’은 “함수형 프로그래밍과 절차적 프로그래밍을 지원하는 다중패러다임 프로그래밍 언어” 라고 정의하고 있는데, 책에서 설명하고 있는 많은 기법들을 읽다보면 함수형 프로그래밍을 떠올리게 되었다. 작은 단순한 함수들의 조합으로 더 크고 복잡한 시스템을 구축할 수 있는 강력함을 맛보게 해주는 것 같았다. 하지만 함수형 프로그래밍에 익숙하지 않은 나와 같은 사람에게는 다소 개념들이 어렵게 다가오고, 스킴이라는 언어 또한 그리 친절하진 않았다. 처음엔 수도코드 수준으로 읽어지겠지 싶었지만, 전혀 그렇지 못했다.

조금은 학술적인…

저자 중 한 분은 컴퓨터 프로그램의 구조와 해석 이 책의 저자이기도 한데, 이 책 또한 가벼운 책은 아니다. 이 처럼 읽는데 어려움을 느끼다보니, 내용에 있어서 실용적이기 보다는 학술적인 내용으로 읽혀질 수 밖에 없었다. 저자들의 지식을 온전히 흡수하기 위해서는 중급 이상의 내공을 필요로 한다고 본다.

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

소프트웨어 개발자라면 누구나 외부 조건이 변경되더라도 손쉽게 혹은 약간의 수정만으로도 문제없이 동작하는 소프트웨어를 개발하고 싶다는 생각을 해본 적이 있을 것이다. 개인적으로도 프로그래밍을 하면서 미쳐 생각지 못>한 변경 사항에 의해 기존에 작성했던 코드를 수없이 수정한 경험이 많다보니 이러한 유연한 소프트웨어를 만들기 위해서는 어떠한 사항을 고려해서 설계해야 하는지 무척 궁금했다. 그러던 중 한빛미디어 서평 이벤트에서 이 >책을 보고 도전하게 되었다.독서하면서 느낀 첫 생각은 책의 내용이 생각보다 많이 어렵다는 것이었다. 나름 프로그래밍 경험이 많다고 생각하고 있었지만 이 책의 생소한 IT 전문 용어와 Scheme이라는 처음 보는 프로그래밍 언어로 작성된 코드는 잘 이해가 가지 않았다. 보통 컴퓨터 책을 읽을 때는 내용이 잘 이해가지 않더라도 예제 코드를 보고 이해를 하는 경우가 많았지만 불행이도 이번 건은 이러한 방식을 적용하기는 어려웠다. 다만 유연한 소프트웨어 설계 원칙이 생체계의 동작 방식에서 일부 착안되었다는 점은 무척 신선했다.마지막으로 이 책에 대해 평가하자면...* 내용을 이해하기 어렵다. (전문 용어, 익숙치 않은 언어로 작성된 코드 예제)* Scheme이라는 함수형 언어에 가까운 언어를 선행 학습하는 것을 추천한다. 그래야 예제 코드를 이해할 수 있고 그나마 난해한 내용을 조금 더 이해하는데 도움을 받을 수 있을 것 같다.* 소프트웨어 설계에 대해 깊이 있는 배움을 원하는 사람이 아니라면 추천은 어려울 듯"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

소프트웨어 개발자라면 누구나 외부 조건이 변경되더라도 손쉽게 혹은 약간의 수정만으로도 문제없이 동작하는 소프트웨어를 개발하고 싶다는 생각을 해본 적이 있을 것이다. 개인적으로도 프로그래밍을 하면서 미쳐 생각지 못>한 변경 사항에 의해 기존에 작성했던 코드를 수없이 수정한 경험이 많다보니 이러한 유연한 소프트웨어를 만들기 위해서는 어떠한 사항을 고려해서 설계해야 하는지 무척 궁금했다. 그러던 중 한빛미디어 서평 이벤트에서 이 책을 보고 도전하게 되었다.

 

독서하면서 느낀 첫 생각은 내용이 생각보다 많이 어렵다는 것이었다. 나름 프로그래밍 경험이 많다고 생각하고 있었지만 이 책의 생소한 IT 전문 용어와 Scheme이라는 처음 보는 프로그래밍 언어로 작성된 코드는 잘 이해가 가지 않았다. 보통 컴퓨터 책을 읽을 때는 내용이 잘 이해가지 않더라도 예제 코드를 보고 이해를 하는 경우가 많았지만 불행이도 이번 건은 이러한 방식을 적용하기는 어려웠다. 다만 유연한 소프트웨어 설계 원칙이 생체계의 동작 방식에서 일부 착안되었다는 점은 무척 신선했다.

 

마지막으로 이 책에 대해 평가하자면...

* 내용을 이해하기 어렵다. (전문 용어, 익숙치 않은 언어로 작성된 코드 예제)

* Scheme이라는 함수형 언어에 가까운 언어를 선행 학습하는 것을 추천한다. 그래야 예제 코드를 이해할 수 있고 그나마 난해한 내용을 조금 더 이해하는데 도움을 받을 수 있을 것 같다.

* 소프트웨어 설계에 대해 깊이 있는 배움을 원하는 사람이 아니라면 추천은 어려울 듯.

* 내용을 이해할 수만 있다면 소프트웨어 개발자로써 많은 성장이 기대되는 책

 

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

 

 이번에 한빛미디어 도서 체험단으로 "유연한 소프트웨어를 만드는 설계 원칙"을 받게 되었다.

책 내용은 별 5개로 만점이지만, 번역이 너무 아쉽다... 

책의 내용 자체는 흥미로운 내용이었다. 요즘 핫한 함수형 프로그래밍을 기반으로 하여 어떻게 하면 확장성 좋고 유연한 소프트웨어를 만들 수 있을지, 그 디자인에 대해서 생각해보고 논한다. 특히 컴퓨터 프로그램의 구조와 해석 이란 책을 재미있게 읽고, 잘 아시는 분이라면 더욱 흥미롭게 읽을 수 있는 책이라고 생각한다. 예제로 LIPS 기반의 Scheme이란 언어를 사용하기 때문이다. 이 점은 코드를 핸즈온으로 따라함에 있어서 단점일 수도 있는 것이 윈도우 환경이 아닌 MIT/GNU 환경에서 컴파일 되기 때문이다. 

 

번역은 류광님이 맡으셨다. 이전에 류광님이 번역하신 심층학습, 인공지능 현대적 접근 이란 책을 읽었는데, 한국어로 읽는데도 읽히지가 않아서 결국 원서로 사서 읽었다. 이 책에서도 내가 이전에 읽었던 두 책의 느낌이 물씬났다. 범용적인 언어의 사용보단 나름의 기준으로 잡으신 핵심 용어들. 1장에서 저자들이 설명을 위해 생체계란 단어를 자주 사용하는데, 한국에서 생체계란 말이 자주 쓰이는지 모르겠다. 명서들이 한국어로 번역이 되는 것은 좋으나, 읽는 독자에 대한 배려가 없는 번역서는 잘 모르겠다. 이 책도 앞에 읽었던 두 권의 책들처럼 웬지 원서가 더 잘 읽힐 것 같아 원서로 사서 마저 읽을 예정이다.

 

책 내용은 참 좋다.... 아마 원문은 그렇게 어렵게 읽힐 것 같진 않다. 심층 학습, 인공지능 책처럼 번역이 만든 난이도가 꽤 있는 책이라고 평하고 싶다.

한두번도 아니고 세번째 데이니까 마음이... 참 힘들다.....

이 책은 한빛미디어에서 나온 유연한 소프트웨어를 만드는 설계원칙 입니다. 프로그래밍을 하는 과정에서 유연한 소프트웨어는 얼마나 중요할까요? 프로그램을 하면서 유연한 프로그램은 수정과 변경이 용이하고 각각 역할을 분리함에 따라 유지보수를 조금 더 효율적으로 하는데 있다. 이책은 이러한 과정에서 더 좋은 프로그래머, 프로그램을 하기위한 필요한 책이며. MIT의 수업을 내용을 바탕으로 만들어진 교재이다. 여기서는 스킴 이라는 프로그램을 통하여 책을 따라 갈수가 있다.

이책의 저자 제럴드 제이서스먼과 크리스 핸슨은 도합 100년이 넘는 프로그래밍 경험에서 얼마나 더 좋은 코드를 개발 할 수 있을까라는 생각에서 출발했다고 볼수 있다.

유연한 소프트웨어를 만드는 설계원칙  프로그래머들의 시간에 쫓기면서 어쩔수 없이 시간의 제약으로 인한 다양한 코드가 아닌 일률적인 코드를 작성하며 더이상 성장하지 못함을 위에서 만들어졌다고 생각해도 좋다. 유연한 코드의 설계 원칙으로서 발전할 수 있다고 도움을 주는 책이다. 각 장마다 연습문제와 리스프의 방언 스킴을 이용한 다양한 예저코드로 발전 할 수 있을것이라 생각한다.

스킴이라는 언어는 LISPO 계열으리 언어 중 유명한 언어이다. 함수형 프로그래밍을 권장하는 언어로서 생소 할 수 있지만 1958년부터 초안이 작성되 이후에 괴장히 오래전 언어로 사용되고 있으며 , 전공자들은 이언어는 배울 만큼 조금 더 나은 개발자가 되기위해서 이책을 위해서라도 한번 쯤 사용해보길 추천하는 책이다.

다양한 차트로 책을 소개되어 있다. 유연한 소프트웨어를 만드는 설계원칙을 이용하여 다양한 예제가 되어 있다. 기본적으로 MIT의 교재로 쓰이는 만큼 프로그램의 이해도와 학술적인 의미가 많이 부여되고 있다고 볼수가 있다. 1장에서는 프로그램밍의 대해서 자세히소개하고 2장에서는 DSL ㄷ장은 일반 프로시저와 산술패키지 효율성을 높이는 프로그램 4장에서는 패턴의 부합과 5장에서 해석과 컴파일 6장에서는 계층적데이터와 프로시저들을 통해 시스템을 구축하는방법 6장에서는 전파에대해서 소개한다.

유연한 소프트웨어를 만드는 설계원칙 다양한 예제를통하여 유연함을 가르친다 외국에서 유명한 책을 가져와서 국내의 다양한 개발자들에게 좋은 책을 만드는 한빛미디어가 자랑스럽다고 말 할 수 있다. 이런한 책들로 많이 발전할 수 있을 것이라는 생각이 든다. 책은 기본적으로 수학에대한 기본예제가 있으니 확실히 전공자를 위한 교재라고 생각할 수 있다.

프로그램을 통하여 개발자의 성장과 조금 더 나은 개발자가 되기위해서 공부하는 책이라고 본다. 수학적 사고가 많이 필요하기 때문에 함수에 대한 이해도가 높은 개발자들에게 추천하는 교재이다.  표준 인터페이스를 이용하여 다양한 구성요소를 조립하는 시스템구성법과 측정단위나 자료출처 같은 정보를 담은 독립적인 주해를 사용한 데이터 증강 동적으로 확장가능한 평가자를 이용한 프로그래밍 언어 확장들 다양한 프로그램의 이해 할수 있는 책이다.

 

SICP 의 저자, 제럴드 서스먼의 책 "설계 원칙"

  컴퓨터 프로그래밍의 예술 "The Art of Computer Programming" 과 UNIX 고급 프로그래밍 (Advanced Programming in UNIX Environment) 등 정말 좋은 책들이자 내가 몇번을 시도하고 완독하지는 못한 책들을 번역하신 류광님이 옮긴 설계와 관련된 새 번역책이 나왔다. 무려 SICP, Structure and Interpretation of COmputer Programsa 의 저자인 제럴드 서스먼이 공저자인 프로그래밍 설계와 관련된 책이다. 학교를 나온 이후로 설계와 관련해서 책을 하나 잡고 꾸준히 본게 얼마만인가 싶다. 책을 읽다보니 내용이나 난이도를 떠나서 오랜만에 초심으로 돌아가보고 싶은 생각이 들었다.

 

 

 

유연한 소프트웨어를 만드는 설계 원칙 (한빛미디어)

 

 

MIT 의 강의 자료로부터 만들어진 책

  "유연한 소프트웨어를 만드는 설계 원칙" 은 MIT 의 컴퓨터 프로그래밍 수업을 진행하면서 작성된 책이라고 한다. 학부생 고학년과 대학원생을 대상으로 하다보니 책의 난이도가 일반적인 IT 책 중에서도 상당히 높은 편에 속하는 것 같다. 개인적으로 어느 정도의 프로그램이 경험이 있어야, 혹은 작더라도 프로젝트를 진행한 경험이 있어야만 책의 내용이나 의도를 이해할 수 있을 것 같다. 특히 설계는 원칙이란게 있지않다보니 적당히 골라내서 보기도 해야하는데, 아마 저학년 수준에서는 힘들지 않을까싶다.

 

 

MIT 에서 수업을 진행하기 위해 만들어진 책으로 학부 고학년과 대학원생을 대상으로 한다.

 

 

책의 코드는 Scheme 으로 작성되었다.

  책의 코드는 스킴으로 작성되었다. 책의 저자 중 한명인 크리스 핸슨이 MIT/GNU Scheme system 의 주 저자 중 한명이다보니 그런 것 같다. Lisp 의 일종이라는데, 10여년 전 한번 어쩌다 한번 보고 그 이후로 들어본 적도 없던 언어를 새 책에서 만나니 반갑기도 하면서도 도대체 모르겠다.

 

 

이 책의 코드는 스킴 Scheme 으로 작성되었다.

 

 

Scheme 을 먼저 공부하거나, 예제를 자신의 주 언어로 바꿔 구현해보자.

  책의 첫 부분에는 대부분의 독자들에게는 생소한 프로그래밍 언어인 스킴을 사용하다보니 코드를 파악하는데 어려움이 있을 수 있다는 것을 확실하게 명시하고 있다. 과감하게 책을 덮고 스킴 공부를 먼저 하길 추천한다고 한다. 더불어 이 책의 예제들을 자신의 주 언어를 이용해서 구현해보면서 공부하는 방법도 추천하고 있다. 물론 훨씬 많은 시간을 투자해야될 것 같지만 개인적으로 정말 좋은 방법이라고 생각한다.

 

 

 

 

핵심은 "유연성"

  이 책의 핵심은 프로그래밍과 설계의 관점에서의 유연성이다. 1장에서 저자들이 생각하는 유연성에 대한 철학을 설명하면서 다양한 기법들을 소개하고 있다. 저자들은 효율성과 정확성만큼이나 유연성이 중요한 문제라고 주장하면서 많은 예제들과 연습문제를 이용해서 설명하고 있다. 2장은 DSL, Domain Specific Language (영역 특화 언어) 로 시스템을 구축하는 방법을 배우고 3장 이후에는 유연성 기법 중 하나인 generic procedure 과 pattern matching, unification 등 이름만 들어서는 무슨 소리인지 전혀 모를 듯한 기법들을 배우면서 유연성을 가지는 시스템을 구축하는 방법들을 배운다.

 

 

 

 

  책의 서문에서도 명확하게 밝히고 있는데, 이 책은 개괄서나 튜토리얼 수준이 아니다 마스터 클래스의 하나로 두 명의 저자가 작정하고 만든 책이다. 나 역시 가벼운 마음으로 읽기 시작했지만 내용도 어렵고 여전히 이걸 내가 읽을 이유가 있을까 생각이 든다.  어려우니까 온갖 핑계를 대기 시작하는 걸수도 있다.  정체기를 맞은 것 같은 요즘 새로운 분야를 공부하는 기분으로 차분하게 보고 있으니 은근 재밌기도 하지만 여전히 초심자에게, 혹은 다른 개발자들에게도 이 책을 굳이 보라고 권하기는 쉽지 않은 것 같다. 그래도 같이 보는 사람이 있으면 더 재밌게 읽을 수 있지 않을까.

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

 

계산과 건축

    프로그램 설계를 건축에 비유할 수 있을 것입니다. 건축가는 건물 부지의 성격과 건물 구조의 요구조건을 파악한 후 파르티 parti라는 개념을 이용해서 설계과정을 시작한다고 합니다. 학교건물을 설계할 때를 예로들면 복도, 화장실, 기계실 승강구 같은 기반 구조 요소들과 

연구실, 교실, 사무실 같은 서비스 받는 공간을 분리함으로써 건축 설계 문제를 어떤 기준으로 나누기도 합니다. 또한 이러한 나눠진 공간은

각각의 목적으로만 동작이 가능한 구조물이 아닐 것입니다. 사람의 동선을 고려해야 할 것이고, 난방 과 공기 조절기 배관과 상하수도관,

전기 배선과 통신시스템, 도로를 배치함으로써 온전한 공간으로서 활용이 되어질 것입니다.  프로그램도 마찬가지로 각기 목적에 따른 모듈이 있을 것이며 공통적으로 사용되는 라이브러리들이 필요할 것이고 특정 사용자의 패턴을 만족시키기 위해서만 동작하는 모듈이 필요할 것입니다. 이러한 것이 설계하는 과정에서 잘 계산이 되어야지만, 적절한 비용과 시간을 들여 프로그램을 개발할 수 있게 될 것입니다.




설계의 원칙

    이 책에서는 다양한 설계원칙에 대해서 이야기 하고 있습니다. 산술 연산의 조합, 패턴 부합, 계층화, 전파 등등의 방법으로 말입니다.

각 장에서는 개념에 대한 설명과 코드로 이야기를 하고 있습니다. 예를 들어 체스 게임에 대한 프로그램을 설계한다고 할 때 어떻게 설계를 해야 효율적인지에 대해서 설명하고 있습니다. 책을 읽으면서, 다양한 확장 방법에 대해서 알게 되었습니다. 특히나 체스 게임에 비유한 설계를 이야기 할 때에는 명확하게 이해가 되어 좋았습니다. 처음에는 체스 규칙에 적용된 함수를 적용했다면, 확장성을 적용한 모델에서는 다른 형태의 보드게임에 적용을 할 수 있도록 만드는 개념에 대해 설명을 하여서 확장성이란 어떤 것인지에 대해 좀더 이해가기가 쉬웠습니다.

다만 중간중간 어려운 개념이 나오거나, 수학식이 나오기도 하여 조금 당황스럽기도 하였지만 말입니다.

 

총평

    프로그램을 설계하면서 이런저런 고민을 했던 프로그래머라면 이 책은 한번쯤은 읽어봐도 좋을만한 이론 서적이 아닌가 싶습니다.

다만 여러가지 허들이 있는데, 첫번째로는 스킴 입니다. 스킴이라는 언어로 작성한 예시를 가지고 설명을 하는데, 언어의 문법이 다소 생소합니다. 그래서 소스코드만 보면 예시가 잘 이해가 되지 않을 수 있습니다. 두번째로는 개념의 어려움입니다. 많은 개념들이 등장하는데

용어들이 참 생소합니다. 다소 난해한 수학 공식도 등장합니다. 수학과 친하지 않은 사람이라면 책이 다소 어렵게 느껴질 수 있을 것입니다.

한줄로 책에 대해 이야기 하보면, 설계에 대해 좀더 deep 하게 공부해보고 싶은 사람에게 추천! 입니다.

1. 들어가며

아직 간단한 기능을 만드는 데도 엄청난 삽질을 반복하고, 줏대도 없이 무지성 구글링으로 해결하는 응애 중의 응애라 소프트웨어 설계 원칙 이라는 키워드에 매료되어 이 책을 읽게 되었다. 그러나 그때는 알지 못했다. 이 책은 나같은 응애가 읽어봤자 이해하지 못한다는 것을...

2. 책에서 다루는 내용

읽기 전에 목차부터 훑어보고 차근차근 읽는 스타일인데, 이 책은 목차부터가 무슨 내용을 다루고 있는 건지 이해할 수 없었다. 그래서 반정도 읽다가 너무 어려워서 책을 덮고 다른 일에 집중했다. 아마 시니어 정도의 실력이 쌓이면 그때는 이 책을 읽어도 좋지 않을까 싶다.

3. 요약

출판사에서는 좋은 내용을 개발자분들께 널리 전하고 싶었을 테지만, 적어도 나같은 학부생 ~ 주니어 레벨의 개발자가 읽기에는 버겁다. 다시 한번 말하지만 시니어 ~ CTO 레벨 정도의 개발자가 읽기에 좋을 것 같다.

이번에 한 리뷰 책은 "유연한 소프트웨어를 만드는 설계 원칙" 이라는 번역서 입니다.

처음 책을 신청할때는 개발 방법론과 같은 책인줄 알았는데 막상 읽어보니 방법론과는 조금 거리가 있는 책이었습니다.

책의 내용은 개발을 하는데 있어서 복잡하지 않고 효율성과 정확성을 추구하는 개발을 위해서 하는 방법에 대해서 가이드 정도책이라고 되어 있지만 가이드 책이라기에는 저같은 개알못에는 맞지 않은 책이었습니다.

책 내용에도 재미있게 읽으시라고 되어 있지만 조금은 많이 어려운 책이었습니다.

책의 서문에 적혀 있기를 "이책은 우리가 MIT에서 컴퓨터 프로그래밍을 가르치는 과정에서 개발된 것이다" 라고 되어 있는데 그만큼 고학력자(?)에게 조금 맞는 책이었습니다.

 

제1장 자연과 설계의 유연성

제2장 영역 특화 언어(DSL)

제3장 산술 추제의 변형들

제4장 패턴 부합

제5장 평가

제6장 계층화

제7장 전파

 

예제로 사용되는 언어는 스킴이라는 언어로 저자는 쉽다고 하였지만 저에게는 접근하기가 많이 어려운 언어였습니다.... (찾아보니 LSIP이라는 언어의 변형으로 일반적이지 않은 언어였음)

아무래도 저자 대상은 고급 정도의 실력이 있는 개발자가 접근하기 괜찮은 책이라는 생각이 듭니다.

 

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

 

소프트웨어 엔지니어에게 어떤 상황에서도 유연하게 확장 가능한 설계는 판타지에 나오는 마법지팡이와 같은 이야기이다. 코드에 대한 섣부른 일반화가 미래 요구사항에 맞지 않아 다시 많은 부분을 손봐야한다던가 너무 특정 문제에 초점에 맞춰 구현된 개발은 향후 기만한 변화에 발목을 잡게 될 수 있다. 이 책은 기존 코드를 수정하지 않고 어떻게 새로운 코드를 추가할 수 있을 것인지 그리고 시스템을 어떻게 진화시킬 수 있는지를 이야기하는 가산적 프로그래밍(additive programming)을 설명하는 책이다.

 

1장부터 주옥같은 내용들이 정말 많이 나온다. 

 

여러 프로그램을 결합해서, 각 프로그램이 지원하는 행동들의 합집합을 얻는 것은 언제라도 가능하다. 그러나 우리는 전체가 부분의 합보다 크길 원한다. 즉, 시스템의 부품들이 연동함으로써 그 어떤 부품도 혼자서는 하지 못 하는 일을 시스템이 할 수 있게 만들고자 한다. 그러나 여기는 절충(trade-off)이 존재한다. 시스템 구축을 위해 결합하는 부품들은 반드시 관심사들을 명확하게 분리해야 한다. 한가지 일을 극도로 잘해내는 부품은 서로 무관한 여러가지 기능을 결합한 부품보다 재사용하기 쉽고 디버깅 하기도 쉽다. 시스템을 가산적으로 구축하려면 의도치 않은 상호 작용을 최소화하면서 부품들을 조합할 수 있어야 한다

 

미국 MIT 대학에서 학부생 또는 대학원생에게 가르치던 내용이 일부 포함되어 있다고 한다. 책을 이해하는 과정이 MIT 수업을 듣는 것과 어느정도는 비슷하다고 볼수 있다. 책 첫장을 펴고 1시간 정도 읽어보면 친절하게 이야기를 풀어가는 책들과 결이 다르다는 것 또한 알 수 있다.

 

그러다보니 혼자서 이 책을 다 소화하기에는 상당히 많은 시간과 노력이 들어갈 것이란 생각이 든다. schem 개발 언어를 사용하여 설명하는데 이 부분 또한 책을 이해하는데 발목을 잡을 것이다. 그러므로 혼자서 책을 읽어나가기 보다는 이 주제에 관심이 많은 시니어 개발자들이 각자 책을 사서 스터디를 진행하면 더 효과적으로 책을 읽어나가고 토론하기 좋은 책이라고 생각한다. 

 

프로그래밍이란 주제에 대해 철학적으로 시작하여 진지하게 다시 한번 정리하고 학습하고 싶은 개발자들에게 추천한다. 

 

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

컴퓨터의 역사는 100년도 되지 않습니다.

컴퓨터가 만들어진 이후 소프트웨어가 만들어졌는데요.

처음 시작은 작동이 되도록 만드는 것이었을 겁니다.

 

하지만 개발이 끝이 아니라 유지보수까지 염두에 두고 만들어져야 합니다.

프로그래머들이 반복적인 것을 줄이고  효율적인 설계를 하기 위해 노력해왔습니다.

 

효율적인 설계를 하고 싶은 프로그래머분들에게 좋은 소식이 나왔습니다.

좋은 소식은 유연한 소프트웨어를 만드는 설계 원칙입니다.

 책을 통해 유연한 프로그램 설계를 배우는 시간이 되길 바랍니다.

 

1) 기존 코드의 문제

기존 코드들은 재사용할  없는 문제가 있었습니다.

재사용할  없는 것은 끔찍한 시간 낭비라   있는데요.

 이유는 코드에서 수많은 변수를 바꾸는 것은 시간이 오래 걸립니다.

 

하지만 사소한 수정만 해도 된다면 소요되는 시간을 줄일 수 있습니다.

 

많은 프로그래머가 프로그램을 짜다가 막다른 골목을 만날 때도 있는데요.

막다른 길을 벗어나기 위해 코드 리팩토링을 하는 게 좋습니다.

 

2) 효과적인 전략과 기법

초보 프로그래머에게 바로 효과적인 코드를 작성하라 할 수는 없습니다.

어느 정도 개발 경력이 있는 분들은 효과적인 코드를 짜려고 노력해야 합니다.

 

초반에는 자연과 설계를 유연성을 비유하여 책의 방향성을 알려줍니다.

조합자를 사용하면 유연하게 조립할 수 있습니다.

 

또한 래퍼를 통해 일반화하고 도메인 모델을 추상화하고 단순화할 수도 있어야 합니다.

 

Ps

이 책의 예제코드는 스킴으로 작성되었습니다.

스킴은 리스프의 일종으로 함수형 언어와 가깝습니다.

 

스킴을 모르신다면 스킴에 대한 학습을 먼저 하시고 읽어보시길 추천합니다.

스킴이 많이 쓰이는 언어는 아닌데요.

저자가 이 언어를 사용한 이유는 문법이 극도로 단순하고 제한적인 규칙이 없어서 사용했습니다.

 

유연한 소프트웨어를 설계하려면 프로그래밍 개념을 학습하고 싶은 분들에게 이 책을 추천합니다.

 

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

개발을 혼자 하면서 

구상하고 코드화하는 일련의 과정이 즉흥적인 것 같고,

어떤 체계가 잡혀야 할 것 같다는 느낌이 계속 들었다.

그런 의미에서 이 책을 선정해 읽었다. 

 

지금껏 내가 소프트웨어를 설계하는 방식은 조금만 수정하려해도 번거로우며

나의 코드가 다른 사람과 유기적으로 작용하지 못했음을 깨닫았다.

 

책의 다양한 예제를 통해 어떤 방식으로 유기적인 프로그래밍을 하는지 배울 수 있었다.

프로그래밍 개념에 대해서 철학적인 내용이 많아서 한번만 읽어서는 이해하기가 어렵습니다.

 

 

개요

 

유연한 소프웨어를 만드는 설계 원칙
구성방식은 해당 챕터를 관통하는 예제를 제시 후 이에 설명하면서, 구성요소와 구현방식에 대해 풀어서 설명한다.
책의 내용은 중급자 이상의 내용을 담고있으며, 스스로 개발 프레임워크를 구성할 수 있는 정도의 깊이를 담고 있다.
내용 곳곳에 '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)에서 예상되는 기대값이 같은 경우를 말한다.


마무리

아쉬운 점으로는 번역됨에 있어서 독자들에게 익숙하지 않은 한자어로 변역됨에 따라서 이해가 안될 수 있으나,
이를 원어 내 단어 그대로 읽어 나가면 좀더 수월하게 읽을 수 있을 것이다.
도서가 풀어나가는 목표는 명확하다.
디자인패턴과 같은 소프트웨어 설계를 다루는 것을 목표로 하지 않고, 소프트웨어 아키텍처의 설계 방향을 중점적으로 다루고 있다.
즉, 일반적이고, 범용성과 확장성을 지닌 소프트웨어 설계을 하고자 함은 변화에 대해서 능동적으로 대체가 가능할 수 있는 요소에 대해서 다양한 방법으로 서술하고 있다.

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


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

이번 도서 후기는 소프트웨어 철학과 설계 원칙에 대해 배울 수 있는 도서이다.

소프트웨어를 만드는 개발자들은 어떻게 하면 완성도 있는 소프트웨어를 개발할 수 있을까라는 고민은 늘 해오고 있을 것이다.

시간이 흐름에 따라 복잡하지만 견고하고 완성도 있는 시스템을 설계하는 것은 많은 경험과 고민, 그리고 기술과 숙련이 필요하다.

 

이 책은 총 8장으로 구성되어 있다.

1장에서는 프로그래밍 철학을 소개하는데, 유연성이라는 주제를 통해 여러 기법을 소개한다.

2장에서는 DSL을 통해 시스템을 구축하는 방법을 통해 DSL 개발을 위한 기본 수단들을 개발하는 방법과 이를 통해 하위 시스템을 조합하고 조직하는 방법을 다룬다.

3장에서는 일반 프로시저를 소개하여 산술 패키지를 확장하는 방법과 데이터에 형식 태그를 적용하여 일반화의 호율성을 높이는 방법의 기법을 배울 수 있다.

4장에서는 패턴 부합이라는 주제로 항 재작성 시스템을 구현하는 방법을 알아보고, 통합을 통해 형식 추론을 구현하는 방법도 알아본다. 

5장에서는 해석과 컴파일, 프로시저를 사용하는 방법을 알아본다.

6장에서는 계층적 데이터와 프로시저들을 통해 시스템을 구축하는 방법을 알아본다.

7장에서는 전파에 대해 소개하여 전파 매커니즘, 다중대안 세계관, 값 병합 등에 대해 소개한다.

 

이 책은 스킴(Scheme) 언어를 통해 코드를 설명하고 연습 문제를 다루기 때문에 나에게는 많이 어려웠던 책이다.

그리고 읽는 내내 이해하기 어려운 내용들도 많았었다.

하지만 스킴(Scheme) 언어에 대한 기본 이해가 있으신 개발자분들은 나와 다르게 이해하기 수월하지 않을까라는 생각이 든다.

원천 시스템을 설계하기 위한 여러 프로그래밍 기법과 철학을 배울 수 있어 여러번 반복하다보면 유연성있는 시스템을 만들어 가는데 도움을 받을 수 있지 않을까 싶다.



## 이 책의 장점


1. 소프트웨어 공학 자체에만 한정되지 않는 설명

프로그래밍 언어나 라이브러리 등에서 미리 정의된 개념과 달리 '설계원칙'이라는 것은 굉장히 모호하고 철학적인 개념일 수밖에 없다.

그래서 조금 더 큰 흐름을 가지고 코드의 품질을 높이는 사고를 할 수 있도록 많은 배려가 되어 있는 책이다.



2. 다양한 사고의 확장

- 장점1과도 연결 고리가 있는 부분이다.

이 책의 목차 중 일부는 아래와 같다.

 

1. 프로그래밍 철학
2. 성장의 여지가 있는 시스템을 구축하기 위한 보편적 적용 방법
3. 강력하지만 위험한 유연성 기법 소개
4. 기호적 패턴 부합 등
...

 

대제목만 봐서는 잘 와닿지 않을 수 있는 주제들을 소제목을 통해 세부적으로 풀어나가기에 '이렇게 생각할 수도 있는 거구나'라는 관점들을 배울 수 있었다.
 


## 책을 읽으며 아쉬웠던 점


1. 아직은 이해하기 버거웠던 난이도

이 책은 특정 언어로 특정 프로젝트를 만들어보는 것을 주제로 삼지 않는다.

즉 코드를 하나하나 따라가며 쳐보며 이해하기보다는 내용 전반에 대한 이해가 유기적으로 이루어져야 하고, 코드를 더 '유연'하게 만드는 데에 도움이 되는 여러 가지 개념들에 대해 소개한다.
그러다보니 굉장히 다양한 내용을 다루고 있고, 수많은 용어가 등장하는데 용어 자체가 익숙지 않은 것들이 많았다. (번역의 이슈가 아닌 원문 자체의 단어가 수준이 높은 단어들이라는 생각된다.)
용어들의 개념 자체가 아직은 내게 어려운 것이 많았기에 책 내용을 온전히 이해하기 힘들었다.
이해를 한 후, 내가 짜는 코드의 품질을 높이는 데에 적용하고 싶었는데 아직은 그러기에는 나의 역량이 부족함을 깨달았다.




## 감상

이해하지 못하고 지나간 챕터들이 많아서 개인적인 아쉬움이 많이 남았고, 그렇기에 시간이 흐른 후에 다시 한번 보고 싶은 책이다.
조금 더 넓은 시야로 개발을 바라볼 수 있도록 계속해서 노력한다면, 점차 이 책에 대한 이해도도 분명 더 높아질 것이라고 생각되기 때문이다.
따라서 이 책은 코드 자체의 동작에 애쓰기보다는, 더 나은 코드와 더 넓은 시선의 함양을 원하는 시니어 개발자 혹은 그러한 시니어 개발자를 꿈꾸는 분들께 권하고 싶다.




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

 


[도서 소개]

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


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


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

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


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


[대상 독자]

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

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


[주요 내용]

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

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

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

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

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


[서평]

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


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


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

 

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

 

 

어떤 소프트웨어 프로그램의 구조를 생각할 때는 고려해야 할 것이 많이 있다.

그래서 나도 여전히 초심자로써 이런저런 호기심의 연결고리에서 닿게 된 것들 중에 하나인 유연한 소프트웨어를 만드는 설계 원칙이라는 책을 접하게 되었다.

 

 

 

해당 책은 확실히 초급 중급 상급으로 난이도를 나눈다면... 절대로 초급은 아닌 책이긴 하다. 하지만 그만큼의 가치는 높지 않을까 하다. 첫 번째 챕터부터 살펴보면

1. 자연과 설계의 유연성
2. 영역 특화 언어 ( DSL )
3. 산술 주제의 변형들
4. 패턴 부합
5. 평가
6. 계층화
7. 전파

이라는 각 장을 담고 있다. 그중에서 1장만 살펴보자면, 1장에서는 전체적인 책의 전반적인 내용에 대해 설명해주고 있으며 기억에 남는 내용으로 "이 책의 기법 중 다수는 새로운 것이 아니다... 유연성에 초점을 둔 사고 방식을 권장하는 것이다"라고 하고 있다.

 

이후에는 1장에서 간략히 소개해준 유연성을 위한 전략들을 각 장에서 소개해주고 있다.

 

 

책이 쉽지 않다고 느낀 이유 중 하나로 책에서 나오는 단어들이 특정 소프트웨어 분야에 한정되는 단어들도 아니다 보니, 단어들이 초급자들이 접하기엔 어려운 느낌이 많이 있다.

 

물론 책의 옮긴이가 그런 단어들을 찾아서 설명을 해주고 계시지만... 아래에 보면 예를 들어 '축 중성(degeneracy)'이라는 단어가 나오고 해당 단어를 설명해주고 있다.  근데도 익숙한 단어는 아니지만(나에게 있어선), 이해하는 데에 좀 어려움이 있었다. 물론 이런 옮긴이의 단어들을 설명해주려고 하신 부분에 대해 박수를 보낸다.

 

 

그리고 익숙하지 않은 점이라면 스킴(Scheme)이라는 개인적으로 처음 들어본 언어를 사용하고 있다.

 

물론 어떤 문법이 어떤 기능을 사용하는데에는 다양한 언어가 있다 하더라도, 크게 다르지 않고 시간을 좀 더 들여서 이해하면 되지만 , 개인적으로도 흔하지 않은 언어라서 좀 더 요즘 대중적인 언어였으면 어땠을까 하는 개인적인 아쉬움은 조금 생겼다.

 

- 책에 나오는 스킴 언어 샘플 예시 중 일부

개인적으로 샘플 코드는 잘 안보게 되었다..

 

 

대신 각 챕터에 대해 각각에 대한 샘플을 마련해주고 있는 부분은 굉장히 좋았다.

어떤 방법이 있는데 이걸 이렇게 쓰는거야 하는 예시를 이해를 돕는 과정 중에 좋은 방법이 아닐까 한다.

 

몇 가지 아쉬움이 있었지만, 한 순간에 이 책을 마스터해서 습득할 순 없겠지만 추후에 필요할 때에 꺼내어 보면 좋은 책이 될 것 같다.

 

마지막으로 책에서 기억에 남는 부분을 끝으로 글을 마친다.

 

 

 

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

저자: 크리스 핸슨, 제럴드 제이 서스먼

 

 

#책소개

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

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

라고 YES24가 소개하더이다.

 

 


 

 

# 이 책의 특징

 

1. 초심자를 위한 책은 아님

솔직히 초심자도 아니고 주니어도 아니고 ... 숙련자가 읽어야 하는 책이다.

나에게 너무 어렵다... 이해하지 못하는 것은 아니지만 이해해서 아직.. 써먹을 수 없다.

 

 

2. 구성

구성은 좋으나 내용이 진짜 어려움... 책 겉모습만 보면 쉬워보이는데 어려움.. 구성은 숙련자가 보기에 좋을 거라고 생각함.

 

 

3. 용어설명

솔직히 설명하는 언어가 내가 써본 적이 없는 것이라 코드를 읽는 데에도 애를 먹음.

 

 

 


 

#후기

 

아직은 내가 읽을 수준이 아니다.

디자인 패턴부터 다 익숙해져서 구조를 자유롭게 다룰 수 있도록 해야 할 듯 하다.

 


 

 

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

 


읽기전에, 이책은 MIT에서 컴퓨터프로그래밍을 가르치는 과정에서 개발된 것이고 인공지능 응용의 핵심부에 해당하는 프로그램을 작성하는데 유용한 기법과 기술을 학부 고학년과 대학원생에게 가르치는 것이었다. 수강생들에게 의존성을 추적하는 방법과 의존성을 설명과 역추적제어에 활용하는 방법을 가르치고자 했다고 한다. 예제코드는 다소 생소한 스킴이라는 함수형언어에 가까운 언어로 작성되었는데 이해하기가 힘들수도 있다. 이 책이 목적이 프로그래밍 개념들을 제시하고 설명하는 것이기 때문에 스킴이라는 언어로 더 짧고 간단하게 표현가능해서 썼다고 한다. 내가 원한것은 디자인설계이지 시스템설계와 원론적인 내용이 아니었지만 한번 읽어보는것도 도움이 되기때문에 프로그래밍에 숙련도가 높은 사람들이나 연구하는 대학원생들이 이책을 봐야할것 같다. 괜히 MIT교재가 아니다. 책의 난이도가 아주아주아주 높다!!! - 표준인터페이스를 따르는 짜맞춤 방식으로 작은 함수부터 산술패키지전체까지 다양한 구성요소를 조립하는 시스템 구성법 - 측정 단위나 자료 출처같은 정보를 담은 독립적인 주해를 사용한 데이터 증강 - 통합이나 전파를 이용한 독립적인 부분 정보 조각 조합 - 영역모형, 규칙시스템, 패턴부합, 전파, 의존성 지향적 역추적을 이용한 제어구조와 문제영역 분리 - 동적으로 확정 가능한 평가자를 이용한 프로그래밍 언어확장 을 책에 담았다. 이책을 보면서 이해를 하고 싶었으나 시스템설계쪽은 거의 무식에 가깝고 스킴도 모르는 상태에서 읽기엔 너무 난이도가 무시무시했다. 프로그래머하면 이정도는 해야지 진정한 프로그래머인것인가라는 생각이 들정도로 너무 대단하다고 생각됨이었다. 언젠가는 이책을 이해할 날이 올거라고 생각하며 이만 리뷰를 마친다.   "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

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


개인적으로 언어 한 개 갓 배운 예비 개발자가 보려고 한다면, 조금 어려울 것 같다는 생각이 많이 드는 서적입니다.

예제 언어가 스킴이라 잘 안 읽히는 것이 아쉬우나, 다른 언어의 관점에서 코드를 짜는 것을 보면서 현재 내가 쓰는 언어로 고민하고, 개발할 수 있어 좋았따.


 

Author: 크리스 핸슨, 제럴드 제이 서스먼 지음 / 류광 옮김

출판사: 한빛미디어

Score /5: ⭐️⭐️⭐️⭐️

현업에서 개발일을 하거나 기초가 부족한 또는 컴퓨터 공학 전공이 아님에도 IT 계열의 길을 걷는 사람들이 있다. (필자의 얘기임)
처음엔 모든것이 신기하고 단순히 문법을 익히기에도 벅찼던 초보자 시절을 지나 어느정도 생각을 코드로 옮기게 되었을 때 한가지 고민이 들게 된다.
단순히 사용 가이드대로 따라는 할 수 있는 단순한 코더로 만족할 것인지 아니면 탄력있고 유연한 프로그램을 설계할 수 있는 프로그래머의 길을 걸어 볼지 말이다. 후자의 길은 피곤하고 복잡하다. 하지만 성장에 필요한 고민이라고 생각된다.

유연한 소프트웨어를 만드는 설계 원칙은 일종의 여러가지 기준을 잡아주는 책으로 보인다.
레퍼런스처럼 프로그램 설계를 위한 고민들이 각각의 영역과 코드로 500여 페이지를 수 놓는다.
그만큼 생각을 많이 하게 만들고 고민을 주는 책이다.

다만, 아쉬운 점이 있다. 옮긴이가 서두에 언급했듯이 일반 개발자들이 익숙하지 않은 스킴(Scheme)이라는 언어를 통해 코드를 설명하고 있는데 코드를 이해하기 위해서 스킴을 공부해야 하는 일종의 이중고(?)를 겪었다.
(물론 지금도 스킴을 완벽하게 이해하지 못해서 책을 일독했음에도 코드를 모두 이해하진 못했음)
두번째 아쉬운 점은 책의 난이도가 상당히 있다는 점이다.
이건 개인차일수도 있는데 개인적으로는 어려웠다.

하지만 위의 2가지를 극복한다면 이 책은 두고두고 참고하고 써먹을 수 있는 개발자/설계자의 나침반 같은 책이 아닐까 싶다.
거시적인 관점으로 프로그램에 접근하고 기초에 목마른 개발자들에게 레퍼런스로 이 책을 추천한다.

 

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

*읽기 전

 

이 책의 추천사에보면 

 

이 책에 담긴 개념과 착안은 풍부하고 심오하다. 문장과 코드 둘 다 세심하게 읽고 파악한다면 큰 보상이 따를 것이다.

 

설계 원칙의 추천사 중 가이 L. 스틸 Jr. Guy L. Steele Jr.

 

매사추세츠주 렉싱턴

 

라는 말이 있다. 

 

내가 이 책을 선정한 이유는 이젠 단순 개발이아닌 솔루션구조를 설계하는 능력을 키우고싶어 이 책을 선정하게 되었는데,

 

이 문구를 보게되니 내가 원하는 내용이 있어 시스템 설계관련 역량이 향살될것만 같은 느낌을 받았다.

 

 

* 간략설명

 

이 책은 크게 7장으로 구현되어있으며, 각 장에는 아래의 내용을 서술하고 있다고 한다.

 

1장 : 우리의 프로그래밍 철학 소개

 

2장 : 정장의 여지가 있는 시스템을 구축하기 위한, 보편적으로 적용할 수 있는 방법과 DSL(영역 특화 언어)개발을 위한 기본 수단들을 개발

 

3장 : 일반적 프로시저 소개

 

4장 : 기호적 패턴 부합을 소개하고, 이를 이용한 항 재작성 시스템을 구현

 

5장 : 해석과 컴파일의 위력소개

 

6장 : 계층적 데이터와 계층적 프로시저들로 시스템을 구축하는 방법 소개

 

7장 : 역추적 검색을 최적화하기 위해 의존성을 활용

 

 

 

* 대상독자

 

이 책의 목적은 프로그래밍 개념들을 제시하고 설명하는것으로, 초심자보다는 개발을 충분히 해보고서

 

단순 프로그래밍이 목표가 아닌 시스템설계 및 솔루션, 프레임워크 디자인을 목표로하는사람이 보는게 좋을거같다는 생각이 든다.

 

그리고 책의 난이도가 높은편이고, 이산수학, 선형수학에 대한 개념을 예제로 두고있어

 

대학수학이상의 지식을 배경지식으로 가지고 있어야 예제를 이해할 수 있을꺼라 생각된다.

 

 

 

* 이 책의 좋은점

 

 

그리고 이 책의 예제코드는 스킴(Scheme)으로 작서되었다고 하는데 나도 첨 들어보는언어이고

 

실제로 업계에서도 잘 쓰이지 않은 언어이지만, 이 책의 목적에 딱 맞다라고 되어있다.

 

https://github.com/jeffhhk/SoftwareDesignForFlexibility

 

* 총평

 

음..... 솔직히 말해서 내가 이 책을 고른이유에비해 상당한 난이도가 있는 책이었다.

 

난 프로그래밍을 하기위해 디자인설계에 관련된 내용인줄 알았는데 

 

내용을 보니 원천적인 시스템설계를 위한 도서였다.

 

(솔직히 내가원하는책이 아니었음..)

 

예제를보면서 이해하고싶었으나 내가 가지고있는 수학적 지식이 아주 미약하고(수학에 손땐지 10년이 다되가는...)

 

이정도수준의 개발을 하시는분들이 계시다는것에 놀랐으며

 

존경이 피어나는 책이었다.내수준으로는 감히 평가할 수 있는 책이 아니라 생각된다..

 

 

 

 

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

이 책은 '21년 발간한 원서 'Software Design for Flexibility: How to Avoid Programming Yourself into a Corner'를 번역한 책으로 중고급 수준의 난이도의 책으로 MIT에서 많이 사용하지만 일반업계에서 많이 사용하지는 않는 LISP계열의 함수형, 교육용 소프트웨어인 스킴(Scheme)을 예제코드 사용언어로 채택하였다.

 

전반적으로 예제와 코딩을 책 본문에 충실히 활용하여 탁상공론이 아닌 실무서에 가깝도록 책을 구성한점은 좋아보인다. 

 

저자는 크리스 핸슨, 제랄드 제이 서스먼 2명이 공저하였으며 크리스 핸슨은 구글에서 10년간 일하였으며 MIT/GNU 스킴 시스템의 주 저자로 일하였으며 다른 저자 제랄드 제이 서스먼은 MIT 전기공학부 파나소닉 교수로 재직중이다.

 

저자들의 약력에서 살펴볼 수 있듯 기술에 대한 근본 이해도 무시하지 않으며 응용성, 실용적 활용에 촛점을 두고 프로그래밍을 바라보고 있어 본책은 현업에 종사하며 이러한 기술을 어떻게 활용할 것인가에 대한 원초적 물음을 가진 분들에게도 큰 도움이 될 수 있어 보인다.

 

책 내용은 전체적으로 본문 503페이지 가량의 약간 두꺼운 분량이지만 책상앞에 두어도 큰 부담이 되지는 않아보이며 총 8장으로 구성되어 있다.

 

8장중 

1장은 자연과 설계의 유연성을 비유하여 설명하며 전반적인 책방향에 대해 간략히 설명하고 있다.

 

2장은 영역특화언어(DSL)을 중심으로 조합자, 정규표현식, 래퍼, 추상화등에 대해 다루고 있다.

 

3장은 산술 주체의 변형에 대해 학습하며 산술연산조합, 확장성 있는 일반 프로시저, 효율적인 일반 프로시저 등을 다루며 자동미분을 예제로 다루고 있다.

 

4장은 패턴부합, 항재식성, 부합기 설계, 통합 부합, 그래프상의 패턴 부합등을 다룬다.

 

5장은 모델 평가와 해석, 컴파일, 프로시저 등을 언급하고 있다.

 

6장은 계층화에 대해 설명하고 있으며 계층활용, 계층화 구현, 계층적 산술, 값의 의존성 주해추가 등을 다루고 있다.

 

7장은 전파에 대해 언급하고 있으며 예제로 별과의 거리라는 천문학 내용을 소재로 하고 있으며 전파 매커니즘, 다중대안 세계관, 값들 병합, 가능한 세계검색등을 보여준다.

 

8장은 1장에서 7장까지의 내용을 마무리하는 장으로 앞의 내용을 정리하며 맺음말로 본문을 정리한다.

 

이 책의 장점으로는 일반적으로 사용하지 않지만 미국 이공계를 대표하는 최고 명문대 MIT에서 개발한 LISP 계열 스킴언어를 주요 언어로 사례 중심 접근을 하므로 스킴언어의 함수적인 강함과 유연성에 대해 다시금 생각하는 기회가 되는 책이라 볼 수 있다.

 

전체적인 총평은 난이도가 중상으로 보이나 이미 컴퓨터학 통계학관련 전공 학생, 전공과 무관하게 프로그래밍의 개념이 어느정도 있는 직장인, LISP계열 언어에 대해 알고 있고 이공계열 전공으로 과학예제에 대해 프로그래밍을 해보고자 하는 학부, 석박사 학생에게 적합해 보이며 기본적으로 프로그래밍 언어에 대한 이해도를 가지고 있다는 전제로 서술되어 있으므로 이에 대한 이해가 부족한 독자들은 책을 읽기전이나 읽는 도중에 선행 학습이 있어야 더 쉽고 깊은 이해가 가능하다고 생각된다.

 

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

결제하기
• 문화비 소득공제 가능
• 배송료 : 2,000원배송료란?

배송료 안내

  • 20,000원 이상 구매시 도서 배송 무료
  • 브론즈, 실버, 골드회원이 주문하신 경우 무료배송

무료배송 상품을 포함하여 주문하신 경우에는 구매금액에 관계없이 무료로 배송해 드립니다.

닫기

리뷰쓰기

닫기
* 도서명 :
유연한 소프트웨어를 만드는 설계 원칙
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

글이나 이미지/사진 저작권 등 다른 사람의 권리를 침해하거나 명예를 훼손하는 게시물은 이용약관 및 관련법률에 의해 제재를 받을 수 있습니다.

1. 특히 뉴스/언론사 기사를 전문 또는 부분적으로 '허락없이' 갖고 와서는 안됩니다 (출처를 밝히는 경우에도 안됨).
2. 저작권자의 허락을 받지 않은 콘텐츠의 무단 사용은 저작권자의 권리를 침해하는 행위로, 이에 대한 법적 책임을 지게 될 수 있습니다.

오탈자 등록

닫기
* 도서명 :
유연한 소프트웨어를 만드는 설계 원칙
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
유연한 소프트웨어를 만드는 설계 원칙
구입처*
구입일*
부가기호*
부가기호 안내

* 온라인 또는 오프라인 서점에서 구입한 도서를 인증하면 마일리지 500점을 드립니다.

* 도서인증은 일 3권, 월 10권, 년 50권으로 제한되며 절판도서, eBook 등 일부 도서는 인증이 제한됩니다.

* 구입하지 않고, 허위로 도서 인증을 한 것으로 판단되면 웹사이트 이용이 제한될 수 있습니다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?

자료실