컴퓨터 프로그램의 구조와 해석
해외주문/바로드림/제휴사주문/업체배송건의 경우 1+1 증정상품이 발송되지 않습니다.
패키지
북카드
키워드 Pick
키워드 Pick 안내
관심 키워드를 주제로 다른 연관 도서를 다양하게 찾아 볼 수 있는 서비스로, 클릭 시 관심 키워드를 주제로 한 다양한 책으로 이동할 수 있습니다.
키워드는 최근 많이 찾는 순으로 정렬됩니다.
작가정보
해럴드 애빌슨(Harold Abelson)은 매사추세츠 공과대학(MIT)의 전기공학&컴퓨터과학 학부(Department of Electrical Engineering and Computer Science)에서 컴퓨터과학을 가르치며, 미국 전기전자기술자협회(IEEE)의 특별회원이다. Creative Commons와 Public Knowledge, 자유소프트웨어연합(FSF)을 세우는 일을 이끌었으며, MIT 교육기술자문위원회의 공동의장으로 일한다.
제럴드 제이 서스먼(Gerald Jay Sussman)은 매사추세츠 공과대학의 전기전자공학부에서 전자공학을 가르치며, 1964년부터 MIT 인공지능 연구에 참여하여 문제해결 분야에 공헌하고 있다. ‘프로그램의 구조와 해석’(2판)에 공저자로 참여하였다.
줄리 서스먼(Julie Sussman)은 제럴드 서스먼의 부인으로, 자연어와 컴퓨터 언어를 모두 다루는 작가 겸 편집자다.
번역
김재우
동아대학교 컴퓨터공학과를 나왔고, 블루엣과 플라스틱 등 소프트웨어 개발 도구 전문회사에서 십여 년간 기술 지도자로 일했다. 이론 연구 성과를 교육과 실무에서 전하는 것을 즐거워하며, 현재는 메타프로그래밍과 선형 논리를 한 시스템으로 묶는 데 열을 올리고 있다. 자주 글을 쓰지 않아 찾는 사람도 없건만, http://kizoo.blogspot.com에 글자리를 펴놓았다. 현재는 동명대학교 컴퓨터공학과 전임강사와 (주)블루엣 인터내셔널의 소프트웨어 아키텍처 멘토로 일하고 있다.
안윤호
의대를 졸업하고 서울대학교 의용생체공학과에서 연구를 했으며 동대학원에서 공학을 전공했다. 전자공학과 컴퓨터를 취미로 다룬 지는 아주 오래되었다. 지금도 개인적인 호기심의 세계와 첨단 엔지니어링 세계에 차별을 두지 않고 전자공학과 컴퓨터 그리고 기술세계의 문화에 대한 관심을 기울이고 있다. 『과학 동아』에 과학과 기술과 문화에 대한 글을, 『마이크로소프트웨어』에 컴퓨터의 역사에 대한 새로운 시각과 리눅스 운영체제의 구조에 대한 칼럼을 오랫동안 기고하였으며 ZDNET에는 디지털 평전을 연재하고 있다. 개인적으로 LISP와 인공지능에 관심을 두고, FAB에 대해서도 나름대로 구현하는 방법을 연구 중이다.
김수정
동명대학교 MPS(Multi-paradigm Problem Solving) 교과의 강의팀에서 일했고, 현재는 동서대학교 전자공학과에서 강의를 하고 있다. 한국해양대학교 전자공학과를 졸업했다.
김정민
서울대 컴퓨터공학부를 졸업하고, 현재 SK Telecom 정보기술연구원에서 RM 및 PI 활동을 수행하며 모바일 고객센터, 디지털 홈 인프라, SPAM관리시스템 구축 등 다양한 소프트웨어 프로젝트의 PM으로 참여하였다. 옮긴 책으로 『소프트웨어 개발의 지혜』(야스미디어), 『실용주의 프로그래머를 위한 프로젝트 자동화』(인사이트), 『생각하는 Big Java』(사이텍미디어), 『LogOn Java2 Programming』(사이텍미디어), 『실용주의 프로그래머를 위한 단위 테스트 with JUnit』(인사이트)이 있다.
감수
이광근
서울대학교 자연과학대학에서 전산과학을 전공하고 미국 일리노이 대학교(UIUC)에서 박사 학위를 받았다. 미국 벨연구소 Software Principle Research Department에서 정규 연구원과 KAIST 전산학과 교수를 지내고, 현재 서울대학교 컴퓨터공학부 교수로 있다. 과학기술부 창의연구단인 ‘프로그램 분석 시스템 연구단’ 단장과, 파리 고등사범학교(ENS) 초빙교수를 역임했다. 프로그래밍 언어 이론을 응용한 무결점 소프트웨어 개발 도구에 대해 연구해 오고 있다. 홈페이지는 http://ropas.snu.ac.kr/~kwang
저자(글) 제럴드 제이 서스먼
목차
- 1. 프로시저를 써서 요약하는 방법
1.1 프로그램 짤 때 바탕이 되는 것
1.1.1 식
1.1.2 이름과 환경
1.1.3 엮은식(combination)을 계산하는 방법
1.1.4 묶음 프로시저(compound procedure)
1.1.5 맞바꿈 계산법(substitution model)으로 프로시저를 실행하는 방법
1.1.6 조건 식과 술어(predicate)
1.1.7 연습 : 뉴튼 법(newton method)으로 제곱근 찾기
1.1.8 블랙박스처럼 간추린 프로시저
1.2 프로시저와 프로세스
1.2.1 되돌거나(recursion) 반복하는(iteration) 프로세스
1.2.2 여러 갈래로 되도는 프로세스
1.2.3 프로세스가 자라나는 정도
1.2.4 거듭제곱
1.2.5 최대 공약수
1.2.6 연습 : 소수 찾기
1.3 차수 높은 프로시저(higher-order procedure)로 요약하는 방법
1.3.1 프로시저를 인자로 받는 프로시저
1.3.2 lambda로 나타내는 프로시저
1.3.3 일반적인 방법을 표현하는 프로시저
1.3.4 프로시저를 만드는 프로시저
2. 데이터를 요약해서 표현력을 끌어올리는 방법
2.1 데이터 요약데이터 간추리기, 데이터 내용 감추기
2.1.1 연습 : 유리수를 위한 산술 연산
2.1.2 요약의 경계(abstraction barrier)
2.1.3 데이터란 무엇인가?
2.1.4 집중 과제 : 구간 산술 연산 만들기
2.2 계층 구조 데이터와 닫힘 성질
2.2.1 차례열의 표현 방법
2.2.2 계층 구조
2.2.3 공통 인터페이스로써 차례열의 쓰임새
2.2.4 연습 : 그림 언어
2.3 글자기호 데이터
2.3.1 따옴표 연산
2.3.2 연습 : 글자 식의 미분(symbolic differentiation)
2.3.3 연습 : 집합을 나타내는 방법
2.3.4 연습 : 허프만 인코딩 나무
2.4 요약된 데이터의 표현 방식이 여러 가지일 때
2.4.1 복소수 표현
2.4.2 타입을 표시한 데이터
2.4.3 데이터 중심 프로그래밍과 덧붙임 성질
2.5 일반화된 연산 시스템
2.5.1 일반화된 산술 연산
2.5.2 타입이 다른 데이터를 엮어 쓰는 방법
2.5.3 연습 : 기호 식 대수
3. 모듈, 물체, 상태
3.1 덮어쓰기와 갇힌 상태(local state)
3.1.1 갇힌 상태변수(local state variable)
3.1.2 덮어쓰기가 있어서 좋은 점
3.1.3 덮어쓰기를 끌어들인 대가
3.2 환경 계산법
3.2.1 계산 규칙
3.2.2 간단한 프로시저 계산하기
3.2.3 물체에 상태를 넣어두는 곳, 변수 일람표
3.2.4 안쪽 정의
3.3 변형 가능한 데이터로 프로그래밍하기
3.3.1 변형 가능한 리스트
3.3.2 큐
3.3.3 표
3.3.4 디지털 회로 시뮬레이터
3.3.5 관계 알리기(constraint propagation)
3.4 병행성竝行性 : 시간은 중요하다
3.4.1 병행 시스템에서 시간의 성질본질
3.4.2 병행성을 다스리는 방법
3.5 스트림
3.5.1 스트림과 (계산을) 미룬 리스트
3.5.2 무한 스트림(infinite stream)
3.5.3 스트림 패러다임
3.5.4 스트림과 셈미룸 계산법
3.5.5 모듈로 바라본 함수와 물체
4. 언어를 처리하는 기법
4.1 메타써큘러 실행기
4.1.1 언어 실행기의 알짜배기
4.1.2 식을 나타내는 방법
4.1.3 언어 실행기에서 쓰는 데이터 구조
4.1.4 언어 실행기를 보통 프로그램처럼 돌려보기
4.1.5 프로그램도 데이터처럼
4.1.6 안쪽 정의(internal definition)
4.1.7 문법 분석과 실행 과정을 떼어놓기
4.2 Scheme 바꿔보기 - 제때 계산법
4.2.1 식의 값을 구하는 차례 - 정의대로 계산법과 인자 먼저 계산법
4.2.2 제때 계산법을 따르는 실행기
4.2.3 제때셈 리스트와 스트림
4.3 Scheme 바꿔보기 - 비결정적 계산
4.3.1 amb와 찾기
4.3.2 비결정적 프로그램 짜기
4.3.3 amb 실행기 구현
4.4 논리로 프로그램 짜기
4.4.1 연역식 정보 찾기
4.4.2 쿼리 시스템의 동작 방식
4.4.3 논리 프로그래밍은 수학 논리를 따르는가?
4.4.4 쿼리 시스템 만들기
4.4.4.1 드라이버 루프와 쿼리 값 찍어내기(instantiation)
4.4.4.2 실행기(evaluator)
4.4.4.3 패턴 매칭으로 참말 찾아내기
4.4.4.4 규칙과 동일화
4.4.4.5 데이터베이스의 관리
4.4.4.6 스트림 연산
4.4.4.7 쿼리의 문법을 처리하는 프로시저
4.4.4.8 일람표와 정의
5. 레지스터 기계로 계산하기
5.1 레지스터 기계 설계하기
5.1.1 레지스터 기계를 묘사하는 언어
5.1.2 기계 디자인에서의 속 내용 감추기(abstraction)
5.1.3 서브루틴
5.1.4 스택(stack)을 이용해 되돌기(recursion) 구현하기
5.1.5 명령어 정리
5.2 레지스터 기계 시뮬레이터
5.2.1 기계 모형
5.2.2 어셈블러
5.2.3 명령에 해당하는 실행 프로시저 만들기
5.2.4 기계 성능 지켜보기
5.3 메모리 할당(memory allocation)과 재활용(garbage collection)
5.3.1 벡터로 나타낸 메모리
5.3.2 무한히 많은 메모리인 양 보이기
5.4 제어가 다 보이는 실행기
5.4.1 제어가 다 보이는 실행기의 핵심부
5.4.2 시퀀스 계산과 꼬리 되돌기(tail recursion)
5.4.3 조건 식, 덮어쓰기(assignment), 정의
5.4.4 실행기 돌리기
5.5 번역(compilation)
5.5.1 번역기의 구조
5.5.2 프로그램 식의 번역
5.5.3 조합 식 번역하기
5.5.4 명령줄 한데 합치기
5.5.5 번역된 코드의 예
5.5.6 텍스트에서 변수의 정의를 파악하기(lexical addressing)
5.5.7 번역된 코드를 실행기에 연결하기
용어 대역표
연습문제 목차
참고문헌
찾아보기
출판사 서평
프로그래밍이 뭔가 돌아보게 해주는
MIT의 컴퓨터과학 입문교과서 / 프로그래머를 기르는 마법서(Wizard Book)
마법사 책(Wizard Book)이라는 별명으로도 유명한 이 책은 독특하기로 소문난, MIT 컴퓨터 과학 입문 교과 과정에서 쓰는 교과서로, 프로그래밍 언어 문법이 아닌 프로그램의 뼈대를 구성하는 기술을 익히게 해준다. 흔한 프로그래밍 입문서와 달리, 난해하다는 평을 듣는 LISP에서 갈라져 나온 Scheme을 활용하며, 요약(abstraction)과 조립식 설계(modularity)에 따라 복잡한 프로그램을 간단하게 짜는 전략을 보여준다. 그 뿐 아니라, 상태(state)가 있는 물체, 덮어쓰기(assignment), 병행 프로그래밍, 함수 프로그래밍, 제때 계산법(lazy evaluation), 비결정적 프로그래밍(non-deterministic programming) 등 다양한 프로그래밍 이슈를 살펴보며 한걸음씩 프로그램을 설계하고 짜 맞추고 살펴보고 고쳐 쓰면서, '과연 프로그래밍이란 무엇인가' 돌이켜 보게 하고, 생각하는 방식과 그 생각을 표현하는 방식을 가르쳐 준다.
이 책에 담긴 교과 과정은 한때 세계 300여개 대학에서 사용되었으며, 지금도 국내의 서울대와 카이스트를 포함해 세계 100여개 이름난 대학에서 가르치고 있다.
추천사 - 마이크로소프트 NTO 김명호 박사
제가 이 책을 처음 대한 것은 20여 년 전 KAIST 전길남 박사님의 개가식 서재에서였는데 아직도 그 때의 감동과 충격이 생생하게 남아 있습니다. 개발자의 관심을 끌기 위해 수많은 책들이 출현하고 사라져 갔지만 적어도 이 책만큼은 아직도 저의 최고의 애독서이며, 아직도 저 스스로를 기술임원이니 소프트웨어 아키텍트니 하는 불편한 타이틀보다 개발자 마인드를 가진 전문인임을 자랑스럽게 생각하도록 하는 원동력이 되고 있습니다. 대학교에서 후학을 지도하던 시절, 강의실 복도를 메우며 의자도 없이 일어서서 혹은 벽에 기대어 제 강의를 청강하던 학생들은 지금도 그 때의 강의를 떠올리며 저를 기억에 남는 스승으로 생각하고 있습니다. 그러나 정작 저는 저의 열정이나 교수법보다 더 좋았던 것이 바로 이 책 때문이었음을 고백하지 않을 수 없습니다.
이 책의 대표적인 특징은 프로그래밍의 기본기와 기초체력을 충실히 다질 수 있는 필수 영양소 위주로 구성되어 있다는 것입니다. 대다수의 소위 프로그래밍 서적이 특정 언어의 문법이나 열심히 소개하고 예제 몇 개를 보여주는 것에 그치고 있는데 이는 잡식과 편식으로 허약해진 개발습관을 조장하는 것에 지나지 않습니다. 제대로 된 프로그래밍 교재라면 프로그래밍 자체를 가르쳐야 합니다. 프로그래밍이란 결국은 문제 해결을 의미합니다. 그런 의미에서 프로그래밍 교재와 프로그래밍 언어 교재는 엄격히 구별되어야 합니다. 감히 단언하건대 이 책에서 소개된 모든 문제나 예제를 스스로 가장 자주 사용하는 언어로 충실하게 표현할 수 없다면 불행하게도 그 독자는 문제 해결 능력도 언어에 대한 전문성도 부족한 어설픈 개발자입니다.
특정 언어에 구애 받지 않고 자유롭게 문제의 해법을 사고할 수 있도록 이 책에서는 Scheme이라는 언어를 사용하고 있습니다. 저의 경험상 이 언어를 학습하는 비용은 거의 0에 가깝습니다. 물론 어떤 언어이든 그 언어의 특이한 기능, 관용적 표현 및 라이브러리를 모두 학습하는 것은 시간이 걸리는 일이지만 적어도 이 책을 학습하는 동안에는 그런 일이 거의 필요 없습니다. 그 결과 이 책은 문제 해결에만 거의 대부분의 사고를 집중하고 폭넓은 분야에서의 여러 문제를 위한 다양한 해법을 학습하는 데 대부분의 시간을 활용할 수 있습니다.
그러나 무엇보다도 이 책의 가장 큰 매력은 프로그래밍이 즐겁다는 것을 확실하게 증명하고 있다는 점입니다. 이 책에서 소개되는 문제들과 그 해결 방법은 비록 처음에는 어려워 보일지 몰라도 결코 따분하거나 재미없지 않습니다. 오히려 이 책을 학습하다 보면 프로그래밍이 기쁘고 즐거운 일이라는 것을 깨닫는 것에 그리 오랜 시간이 걸리지 않습니다. 더구나 지금처럼 Scheme 인터프리터가 다양하고 폭넓게 보급되어 있고, MIT의 오픈코스웨어를 통해 강의 동영상까지 제공되고 있는 것은 어쩌면 저보다 20여 년 후에 이 책을 대하는 독자 여러분의 행운이라 생각됩니다.
어휘와 토씨 하나에 이르기까지 최선의 노력을 기울인 역자들의 노고는 이 책을 원서 이상의 가치를 가진 책으로 거듭나게 하였음을 확신합니다.
기본정보
ISBN | 9788991268326 | ||
---|---|---|---|
발행(출시)일자 | 2007년 10월 25일 | ||
쪽수 | 792쪽 | ||
총권수 | 1권 | ||
시리즈명 |
프로그램 프로그래밍 프로그래머
|
||
이 책의 개정정보 |
새로 출시된 개정판이 있습니다.
개정판보기
|
Klover
e교환권은 적립 일로부터 180일 동안 사용 가능합니다.
리워드는 작성 후 다음 날 제공되며, 발송 전 작성 시 발송 완료 후 익일 제공됩니다.
리워드는 리뷰 종류별로 구매한 아이디당 한 상품에 최초 1회 작성 건들에 대해서만 제공됩니다.
판매가 1,000원 미만 도서의 경우 리워드 지급 대상에서 제외됩니다.
일부 타인의 권리를 침해하거나 불편을 끼치는 것을 방지하기 위해 아래에 해당하는 Klover 리뷰는 별도의 통보 없이 삭제될 수 있습니다.
- 도서나 타인에 대해 근거 없이 비방을 하거나 타인의 명예를 훼손할 수 있는 리뷰
- 도서와 무관한 내용의 리뷰
- 인신공격이나 욕설, 비속어, 혐오발언이 개재된 리뷰
- 의성어나 의태어 등 내용의 의미가 없는 리뷰
리뷰는 1인이 중복으로 작성하실 수는 있지만, 평점계산은 가장 최근에 남긴 1건의 리뷰만 반영됩니다.
구매 후 리뷰 작성 시, e교환권 200원 적립
문장수집
e교환권은 적립 일로부터 180일 동안 사용 가능합니다. 리워드는 작성 후 다음 날 제공되며, 발송 전 작성 시 발송 완료 후 익일 제공됩니다.
리워드는 한 상품에 최초 1회만 제공됩니다.
주문취소/반품/절판/품절 시 리워드 대상에서 제외됩니다.
구매 후 리뷰 작성 시, e교환권 100원 적립