장바구니 담기 close

장바구니에 상품을 담았습니다.

GREAT CODE. 1

GREAT CODE. 1

  • 랜달하이드
  • |
  • 에이콘출판
  • |
  • 2019-04-18 출간
  • |
  • 460페이지
  • |
  • 188 X 235 X 26 mm
  • |
  • ISBN 9791161752471
판매가

30,000원

즉시할인가

27,000

배송비

무료배송

(제주/도서산간 배송 추가비용:3,000원)

수량
+ -
총주문금액
27,000

※ 스프링제본 상품은 반품/교환/환불이 불가능하므로 신중하게 선택하여 주시기 바랍니다.

출판사서평




★ 이 책에 쏟아진 찬사 ★

정규교육을 받지 못했거나 사수가 제대로 돌봐주지 않는 프로그래머들에게 랜달 하이드의 「GREAT CODE」시리즈는 큰 흥미를 불러일으킬 것이다. 첫 다섯 장과 불리언 로직을 설명한 장만으로도 책은 그 값어치를 충분히 한다.
-UnixRev1ew.com

이 책은 대부분의 프로그래머가 당연하게 받아들이는 것들에 대해 자세히 설명하고 있다.
-「Computer Shopper」

읽는 재미가 있다.
-「VSJ Magazine」

이 책은 초보자용은 아니며, 가장 깊은 단계의 복잡한 컴퓨터 연산에 대해 설명한다. 깊숙한 단계의 작업에 흥미가 있는 프로그래머들에게 매우 도움이 되는 책이다.
-secuntyworld.com

흔히 지나치기 쉬운 부분을 아주 잘 설명하고 있으며 컴퓨터공학 학위의 필독서가 될 만하다. 이 책을 한 번 읽고 나면 효율적으로 작성된 코드에 대해 깊이 이해하고 정확한 평가를 내릴 수 있게 될 것이다. 그리고 스스로도 코드를 효율적으로 작성할 수 있게 될 것이다.
-MacCompanion, ★★★★★

이 책은 어떤 언어를 사용하든 어셈블리 언어를 배우지 않고 뛰어난 코드를 작성하기 위한 방법을 알려주는 필독서 목록에 그 이름을 올려야 한다.
-WebServerTalk

저자는 모든 개발의 핵심과 깊숙이 연관돼 있는 컴퓨터 구조와 관련된 주제를 다룬다.
-「Practical Applications」

전형적인 ‘독학으로 프로그래밍 배우기’ 류의 책과는 다르다. 모든 언어와 모든 단계의 프로그래밍 경험과 관련이 있다. 어서 서점으로 달려가 이 책을 사서 읽기를 권한다.
-BAYLISA Bay Area Large Installation System Administrators


★ 이 책에서 다루는 내용 ★

■ 숫자나 문자열, 고급 자료구조 등을 표기하는 방법을 익혀, 컴퓨터가 각 데이터 타입을 사용하는 데 드는 비용을 파악한다.
■ 컴퓨터가 데이터를 구성하는 방법을 익혀, 데이터를 효율적으로 처리하는 방법을 알아낸다.
■ CPU가 동작하는 방식을 익혀, 컴퓨터가 처리하는 방식대로 동작하는 프로그램 코드를 작성한다. 입출력 장치가 동작하는 방식을 이해하면, 그러한 장치에 접근하는 애플리케이션의 성능을 최대화할 수 있다.
■ 메모리 계층 구조를 최적화해 사용하는 방법을 익혀, 최대한 빠른 프로그램을 작성할 수 있다.


★ 이 책의 대상 독자 ★

이 책을 효과적으로 이용하기 위해서 적어도 한 가지 이상의 절차적 프로그램 언어를 다룰 줄 알아야 한다. C/C++, 파스칼(Pascal), 베이직(BASIC), 어셈블리 언어처럼 많이 사용되는 언어뿐 아니라 에이다(Ada), 모듈러2(Modula-2), 포트란(FORTRAN) 같은 언어여도 괜찮다. 또 작은 문제에 대한 명세를 받아서 그 문제에 대한 소프트웨어를 설계하거나 구현할 능력이 있어야 한다. 보통 대학 강의를 한 학기 정도 수강하거나, 독학으로 몇 달만 노력하면 이 책을 공부하는 데 큰 불편함은 없을 것이다.
이 책은 특별한 프로그램 언어를 위한 책은 아니다. 이 책에서 설명하는 개념은 프로그래밍 언어의 종류와 관계없이 적용할 수 있는 것들이다. 여러분의 편의를 위해서 프로그램 예문은 몇 가지 언어(C/C++, 파스칼, 베이직, 어셈블리 등)를 번갈아 가면서 사용할 것이다. 이 책을 쓸 때 여러분이 특정 언어를 알 것이라고 가정하지 않았다. 따라서 이 책에서 예시를 제시할 때는 코드에 대한 정확한 설명을 덧붙일 것이므로, 비록 그 언어에 익숙하지 않더라도 관련 설명을 통해서 프로그램의 동작을 충분히 이해할 수 있을 것이다.

이 책은 다양한 예시에서 다음 언어와 컴파일러를 사용했다.
■ C/C++: GCC, 마이크로소프트 비주얼 C++, 볼랜드 C++
■ 파스칼(Pascal): 볼랜드 델파이(Delphi)/카일릭스(Kylix)
■ 어셈블리: 마이크로소프트 MASM, HLA(the High Level Assembler), Gas(파워 PC용)
■ 베이직(BASIC): 마이크로소프트 비주얼 베이직


★ 이 책의 구성 ★

이 책에서는 프로그래머에게 직접 영향을 줄 수 있거나, 시스템 아키텍트의 의도를 이해하는 데 도움을 줄 수 있는 내용을 주로 다룬다. 컴퓨터 구조를 배우는 궁극적인 목적은 자신만의 CPU나 컴퓨터 시스템을 설계할 능력 배양이 아니라, 기존의 컴퓨터 설계를 가장 잘 활용하는 법을 아는 것이다.
그래도 컴퓨터 구조가 어떤 것인지 감이 오지 않는다면 책의 목차를 살펴보며 생각해 보자.
2장, 4장, 5장에서는 컴퓨터의 기본적인 데이터 표기법을 다룰 것이다. 예를 들어 컴퓨터가 어떠한 방법으로 부호 있는 정수와 부호 없는 정수, 문자, 문자열, 문자 집합, 실수, 분수와 같은 값들을 표현하는지 알아본다. 컴퓨터가 다양한 자료를 어떻게 표현하는지를 충분히 이해하지 못한다면, 특정 작업이 왜 그렇게도 비능률적인지 알 수 없을 것이다. 또 그 이유를 이해하지 못한다면 코드에서 데이터를 제대로 다루지 못할 가능성이 높고, 그 결과 최고의 코드와는 멀어지게 될 것이다.
3장에서는 대부분의 현대적인 컴퓨터 시스템에서 사용하는 이진법의 계산과 비트 오퍼레이션을 다룰 것이다. 대부분의 프로그램 언어가 이진법과 비트 오퍼레이션을 지원하기 때문에 이 책에서는 일반적인 프로그래밍 개론 과정에서 잘 다루지 않는 이진법과 논리 오퍼레이션을 통해 코드를 향상시키는 법에 대해서 알아볼 것이다. 최고의 코드를 작성하는 강력한 프로그래머가 되기 위해서는 널리 시용되는 이런 기법을 익숙하게 구사할 수 있어야 한다.
6장에서는 ‘메모리 계층과 접근’이라는 중요한 주제를 다룬다. 메모리 접근 문제는 현대 컴퓨터에서 시스템 성능 문제를 일으키는 주범이다. 6장은 메모리에 대한 소개를 시작으로 컴퓨터가 메모리에 접근하는 방법 메모리의 성능상 특징에 관해 상세히 설명하겠다.
또 CPU가 메모리에 있는 다양한 자료구조에 접근할 때 사용하는 메모리 지정모드(addressing mode)에 대해서도 알아볼 것이다. 요즘 프로그램 중에서도 프로그램의 세부적인 메모리 접근에 대한 고려가 부족해서 프로그램의 완성도가 떨어지는 경우가 많다. 6장에서는 여러 문제를 해결할 수 있는 기반지식을 제공할 것이다.
7장은 다시 데이터 표현으로 돌아가서 복합 데이터 타입과 메모리 객체를 다룬다. 여기서는 앞 부분의 여러 장에서 다뤘던 내용과는 다르게 포인터, 배열 레코드, 구조체, 공용체 등과 같이 하이 레벨 데이터 타입에 관해 공부하게 된다. 많은 프로그래머가 메모리, 성능상의 문제를 고려하지 않은 채 커다란 복합 데이터 구조를 사용하고 있다. 7장에서는 이런 하이 레벨 복합 데이터 타입을 로우 레벨의 관점으로 설명함으로써 프로그램에서 이 기법을 사용할 때 지불해야 할 비용이 어느 정도인지 알려준다. 결국 이 기법을 좀 더 신중하고 현명하게 사용할 수 있게 될 것이다.
8장에서는 불리언 로직(boolean logic)과 디지털 설계에 관해 다룰 것이다. 8장에서는 CPU 설계와 그 외의 컴퓨터 시스템 요소를 이해하기 위해 필요한 수학적, 논리적 배경 지식을 제공한다. 주로 하드웨어적인 소재를 다루지만, 진정한 최고의 코드를 작성할 때 사용할 수 있는 몇 가지 아이디어도 얻을 수 있다. 특히 if, while 등과 같이 일반적인 고급 언어에서 사용되는 불리언 식을 최적화하는 방법은 유용하게 사용할 수 있다.
9장 역시 8장에 이어 하드웨어적인 내용으로 CPU의 구조에 관해 다룬다. 이 책의 궁극적인 목적이 자신의 CPU를 디자인하는 법을 가르치는 것이 아님에도 불구하고, 기본적인 CPU 설계와 동작을 제대로 이해해야 최고의 코드를 작성할 수 있다. CPU가 코드를 수행하는 방식에 맞춰서 코드를 작성하면, 더 적은 시스템 자원을 사용해서 더 좋은 성능을 얻을 수 있다. 반면에 코드 작성을 CPU 동작에 맞추지 않는다면, 느리고 자원을 많이 사용하는 프로그램이 될 것이다.
10장에서는 CPU 명령어 집합구조(instruction set architecture)에 대해 알아볼 것이다. 모든 CPU에서 명령어는 CPU 동작에 가장 기본이 되는 부분이고, 프로그램 수행시간은 수행되는 명령어의 종류와 수에 직접적인 영향을 받는다. 컴퓨터 구조에서 명령어를 설계하는 방법을 이해하게 되면, 어떤 오퍼레이션이 다른 오퍼레이션보다 시간이 더 걸리는 이유를 알 수 있게 된다. 뿐만 아니라 명령어의 한계와 CPU가 명령어를 해석하는 방식을 이해하면, 형편없는 일련의 코드를 최고의 코드로 탈바꿈시킬 수도 있다.
11장에서는 메모리 이야기로 돌아와서 메모리 아키텍처와 구조에 대해 알아본다. 이 장은 빠른 코드를 작성하는 데 큰 도움이 될 것이다. 여기서는 메모리의 계층에 대해 설명하고 캐시의 성능을 극대화하는 방법, 다른 고속 메모리 구성 요소 등을 알아본다. 최고의 코드는 현대 컴퓨터 애플리케이션의 일반적인 문제인 스래싱(thrashing)을 피해야만 한다. 이 장에서 스래싱을 배우며 애플리케이션에서 낮은 성능의 메모리 접근을 피하는 방법을 알게 될 것이다.


목차


1장. 최고의 코드를 위해 알아야 할 것
__1.1 ‘GREAT CODE’ 시리즈
__1.2 이 책의 내용
__1.3 이 책의 대상
__1.4 최고의 코드의 특징
__1.5 동작 환경
__1.6 더 많은 정보를 원한다면


2장. 수치 표기법
__2.1 수란 무엇인가?
__2.2 수 체계
__2.3 수치/문자열 변환
__2.4 내부 수치 표현법
__2.5 부호 있는 수와 부호 없는 수
__2.6 2진수의 유용한 속성
__2.7 부호 확장, 0 확장과 축소
__2.8 포화
__2.9 2진화 10진 표기법
__2.10 고정소수점 표기
__2.11 스케일 수치 포맷
__2.12 유리수 표기법
__2.13 더 많은 정보를 원한다면


3장. 2진법 연산과 비트 연산
__3.1 2진수, 16진수의 연산
__3.2 비트 논리 연산
__3.3 2진수와 비트 스트링에 대한 논리 연산
__3.4 유용한 비트 연산
__3.5 쉬프트와 로테이트
__3.6 비트 필드와 묶인 데이터
__3.7 데이터 묶기와 풀기
__3.8 더 많은 정보를 원한다면


4장. 부동소수점 표기
__4.1 부동소수점 연산 소개
__4.2 IEEE 부동소수점 포맷
__4.3 정규화
__4.4 라운딩
__4.5 특별 부동소수점 값
__4.6 부동소수점 예외
__4.7 부동소수점 연산
__4.8 더 많은 정보를 원한다면


5장. 문자 표기법
__5.1 문자 데이터
__5.2 문자열
__5.3 문자셋
__5.4 자신만의 문자셋 설계
__5.5 더 많은 정보를 원한다면


6장 메모리 구조와 접근
__6.1 기본 시스템 구성 요소
__6.2 메모리의 물리적 구조
__6.3 빅 엔디안 구조 vs. 리틀 엔디안 구조
__6.4 시스템 클럭
__6.5 CPU 메모리 접근
__6.6 더 많은 정보를 원한다면


7장. 혼합 데이터 타입과 메모리 객체
__7.1 포인터
__7.2 배열
__7.3 레코드/구조체
__7.4 유니온
__7.5 더 많은 정보를 원한다면


8장. 불리언 로직과 디지털 설계
__8.1 불리언 대수
__8.2 불리언 함수와 진리표
__8.3 함수 번호
__8.4 불리언 수식의 대수 처리
__8.5 정규형
__8.6 불리언 함수의 단순화
__8.7 결국, 불리언 로직은 컴퓨터에 어떻게 적용되는가?
__8.8 더 많은 정보를 원한다면


9장. CPU 구조
__9.1 기본적인 CPU 설계
__9.2 명령어의 해석과 수행: 랜덤 로직 vs. 마이크로코드
__9.3 단계별 명령어 수행
__9.4 더 높은 성능의 비결, 병렬성
__9.5 더 많은 정보를 원한다면


10장. 명령어 집합 구조
__10.1 명령어 집합 설계의 중요성
__10.2 명령어 설계의 기본적인 목적
__10.3 가상 프로세서 Y86
__10.4 80x86 명령어 인코딩
__10.5 명령어 집합 설계가 프로그래머에게 의미하는 것
__10.6 더 많은 정보를 원한다면


11장. 메모리 구조와 구성
__11.1 메모리 계층
__11.2 메모리 계층의 동작방식
__11.3 메모리 하위시스템에 존재하는 성능 차이
__11.4 캐쉬의 구조
__11.5 가상 메모리, 보호 장치, 페이징
__11.6 스래싱
__11.7 NUMA와 주변 장치들
__11.8 메모리 계층을 고려한 소프트웨어 작성
__11.9 실행 중 메모리의 구성 방식
__11.10 더 많은 정보를 원한다면


12장. 입력과 출력
__12.1 CPU를 외부와 연결
__12.2 포트를 시스템에 연결하는 다른 방법들
__12.3 입출력 메커니즘
__12.4 입출력 속도 계층
__12.5 시스템 버스와 각 데이터 전송률
__12.6 버퍼링
__12.7 핸드쉐이킹
__12.8 입출력 포트의 타임아웃
__12.9 인터럽트와 폴링
__12.10 보호모드 연산과 장치 드라이버
__12.11 PC 주변 장치
__12.12 표준 PC 병렬 포트
__12.13 직렬 포트
__12.14 동기 I/O 와 비동기 I/O
__12.15 I/O 형식의 의미
__12.16 메모리 맵 파일

교환 및 환불안내

도서교환 및 환불
  • ㆍ배송기간은 평일 기준 1~3일 정도 소요됩니다.(스프링 분철은 1일 정도 시간이 더 소요됩니다.)
  • ㆍ상품불량 및 오배송등의 이유로 반품하실 경우, 반품배송비는 무료입니다.
  • ㆍ고객님의 변심에 의한 반품,환불,교환시 택배비는 본인 부담입니다.
  • ㆍ상담원과의 상담없이 교환 및 반품으로 반송된 물품은 책임지지 않습니다.
  • ㆍ이미 발송된 상품의 취소 및 반품, 교환요청시 배송비가 발생할 수 있습니다.
  • ㆍ반품신청시 반송된 상품의 수령후 환불처리됩니다.(카드사 사정에 따라 카드취소는 시일이 3~5일이 소요될 수 있습니다.)
  • ㆍ주문하신 상품의 반품,교환은 상품수령일로 부터 7일이내에 신청하실 수 있습니다.
  • ㆍ상품이 훼손된 경우 반품 및 교환,환불이 불가능합니다.
  • ㆍ반품/교환시 고객님 귀책사유로 인해 수거가 지연될 경우에는 반품이 제한될 수 있습니다.
  • ㆍ스프링제본 상품은 교환 및 환불이 불가능 합니다.
  • ㆍ군부대(사서함) 및 해외배송은 불가능합니다.
  • ㆍ오후 3시 이후 상담원과 통화되지 않은 취소건에 대해서는 고객 반품비용이 발생할 수 있습니다.
반품안내
  • 마이페이지 > 나의상담 > 1 : 1 문의하기 게시판 또는 고객센터 1800-7327
교환/반품주소
  • 경기도 파주시 문발로 211 1층 / (주)북채널 / 전화 : 1800-7327
  • 택배안내 : CJ대한통운(1588-1255)
  • 고객님 변심으로 인한 교환 또는 반품시 왕복 배송비 5,000원을 부담하셔야 하며, 제품 불량 또는 오 배송시에는 전액을 당사에서부담 합니다.