Top

Great Code Vol.1 2/e [위대한 코드의 시작 - 컴퓨팅 머신의 이해]

  • 원서명Write Great Code, Volume 1, 2nd Edition: Understanding the Machine (ISBN 9781718500365)
  • 지은이랜달 하이드(Randall Hyde)
  • 옮긴이동준상
  • ISBN : 9791161756486
  • 40,000원
  • 2022년 05월 31일 펴냄
  • 페이퍼백 | 632쪽 | 188*235mm
  • 시리즈 : 소프트웨어 아키텍처

책 소개

요약

소프트웨어 개발에 필요한 컴퓨팅 머신의 작동 원리와 상호작용 방식을 정보 표현 방식, 주요 연산 장치 및 주변 장치의 작동 방식에 대한 전문적인 설명과 시각화 자료, 다양한 레벨의 실습용 코드로 이해하기 쉽게 설명한다. 정보 표현 방식으로서 비트 논리 연산, 부동소수점수, 문자 데이터를 소개하고, CPU 및 메모리, 입출력 장치, 주변 장치버스, 파일시스템 등 컴퓨팅 머신과의 상호작용 방식을 설명한다.

추천의 글

“오늘날 프로그래머는 과도한 업무 부담 속에 신기술을 따라잡느라 힘든 시간을 보내고 있으며, 컴퓨터 아키텍처의 기본이나 프로그래밍 언어의 작동 방식 등을 배울 겨를이 없다. 이 책은 그러한 간극을 채워주는 역할을 할 것이다. 프로그래머에게 적극 추천한다.”
- InformIT.com

“이 책은 시중에 나와있는 프로그래밍 자기 학습서와 다르며, 모든 프로그래밍 언어, 모든 프로그래밍 레벨의 토대를 설명한다. 서둘러 읽어보길 바란다.”
- BayLISA

“별 다섯 개를 줄 만한 책. 컴퓨터 사이언스 전공 과정에서 놓칠 수 있는 프로그래밍의 기본을 명쾌하게 설명한다. 효율적으로 작성한 코드란 무엇인지 알 수 있게 되며, 여러분이 직접 그러한 코드를 작성하게 될 것이다. 이 책은 여러분이 효율적인 소프트웨어를 작성하기 위한 좋은 출발점이 될 것이다.”
- MacCompanion

“읽는 재미가 있는 책”
- VSJ Magazine

“어셈블리 언어를 배우지 않고 프로그래밍 언어에 상관없이 탁월한 코드를 작성하는 방법을 알고자 하는 모두에게 권할 만한 책이다.”
- WebServerTalk

이 책에서 다루는 내용

◆ 효과적으로 머신을 활용하기 위한 숫자, 문자와 그 외 하이레벨 데이터 구조의 표현 방식을 알아보고, 각 데이터 타입의 리소스 비용 설명
◆ 머신이 좀 더 효율적으로 데이터에 접근할 수 있도록 조직화, 체계화하는 방법
◆ 머신의 본질적인 작동 방식을 파악하기 위한 CPU의 작동 방식
◆ 애플리케이션의 성능을 최대로 끌어올리기 위한 각종 I/O 주변 장치의 작동 방식
◆ 프로그램이 최고의 성능을 낼 수 있게 해주는 메모리 계층 구조

이 책의 대상 독자

특정 프로그램 언어에 맞춰 쓴 책이 아니기 때문에 설명하는 개념은 프로그래밍 언어의 종류와 관계없이 적용할 수 있다. 특정 언어를 사용하거나 알지 못해도 이 책을 읽는 데는 지장이 없도록 작성했으며, 이 책의 프로그램 예문은 이해의 폭을 넓히기 위해 몇 가지 언어를 교대로 사용한다. 예시를 설명할 때는 코드에 대한 정확한 설명을 덧붙일 것이므로, 해당 언어에 익숙하지 않더라도 프로그램의 동작 방식을 문제 없이 이해할 수 있을 것이다.

이 책의 구성

2장, 4장, 5장에서는 컴퓨터의 기본적인 데이터 표기법을 알아본다. 예를 들어 컴퓨터가 어떠한 방법으로 부호 있는 정수와 부호 없는 정수, 문자, 문자열, 문자 집합, 실수, 분수와 같은 값들을 표현하는지 알아본다. 컴퓨터가 다양한 자료를 어떻게 표현하는지 충분히 이해하지 못한다면, 특정 작업에서 왜 그렇게 많은 시간이 소요되는지 알 수 없을 것이다.
3장에서는 현대적인 컴퓨터 시스템에서 널리 사용하는 2진법의 계산과 비트 연산을 알아본다. 대부분의 프로그래밍 언어가 2진법과 비트 연산을 지원하므로, 이 책에서는 일반적인 프로그래밍 개론 과정에서 잘 다루지 않는 2진법과 논리 연산을 통해 코드의 성능을 향상시키는 방법을 소개한다. 탁월한 코드를 작성하는 프로그래머가 되기 위해서는 2진법 및 비트 연산을 능숙하게 활용할 수 있어야 할 것이다.
6장에서는 (컴퓨터가 메모리에 접근하는 방법과 메모리의 성능에 관련된 특징 등과 같은) 메모리에 대해 알아보며, CPU가 메모리에 있는 다양한 자료 구조에 접근할 때 사용하는 메모리 지정 모드도 살펴본다. 현대적인 애플리케이션의 성능 저하 문제 중 상당수는 프로그램이 메모리에 접근하는 방식을 잘못 지정해 발생하는 메모리 병목 현상과 관련이 있으며, 6장에서는 이러한 문제를 해결할 수 있는 기반 지식을 제공한다.
7장에서는 다시 데이터 표현으로 돌아가서 복합 데이터 타입과 메모리 객체를 다루며, 앞부분의 여러 장에서 다뤘던 내용과 달리 포인터, 배열 레코드, 구조체, 공용체 등과 같은 하이레벨 데이터 타입에 관해 설명한다. 적지 않은 프로그래머가 메모리나 성능상의 문제를 고려하지 않고 대용량의 복합 데이터 구조를 사용하는 경향이 있는데, 7장에서는 이런 하이레벨 복합 데이터 타입을 로우레벨의 관점으로 설명함으로써 프로그램에서 이 기법을 사용할 때 지불해야 할 비용이 얼마인지 알려준다. 이를 통해 이 기법을 좀 더 신중하고 현명하게 사용할 수 있게 될 것이다.
8장에서는 불리언 논리 연산과 디지털 설계를 다룬다. 8장에서는 CPU와 컴퓨터 시스템 요소를 이해하기 위해 필요한 수학적 토대와 논리 연산을 위한 기초 지식을 제공한다. 8장에서는 주로 불리언 표현식을 다루며, 그중에는 if, while 등 범용 하이레벨 언어에서 사용되는 불리언 식을 최적화하는 방법도 포함된다.
9장 역시 8장에 이어 하드웨어와 관련된 내용으로 CPU의 구조를 알아본다. 탁월한 코드를 작성하기 위해 프로그래머는 기본적인 CPU 설계와 연산 방식을 이해하고 있어야 한다. 여러분이 CPU가 코드를 실행하는 방식에 맞춰 코드를 작성할 수 있다면, 더 적은 시스템 자원을 사용해 더 좋은 성능을 얻을 수 있을 것이다.
10장에서는 CPU 명령어 집합 구조를 알아본다. 모든 CPU에서 명령어는 CPU 동작에 가장 기본이 되는 부분이고, 프로그램 수행 시간은 수행되는 명령어의 종류와 수에 직접적인 영향을 받는다. 컴퓨터 구조에서 명령어를 설계하는 방법을 이해하면 어떤 연산이 다른 연산보다 더 많은 시간이 걸리는 이유를 알 수 있다. 여러분이 명령어의 한계와 CPU가 명령어를 해석하는 방식을 이해하면, 형편없는 코드 시퀀스를 탁월한 코드로 탈바꿈시킬 수도 있다.
11장에서는 다시 메모리 주제로 돌아와서 메모리 아키텍처와 메모리 구조를 알아본다. 이 장은 코드의 실행 속도를 높이는 데 큰 도움이 될 것이다. 메모리의 계층 구조와 캐시의 성능을 극대화하는 방법, 다른 고속 메모리 구성 요소 등을 알아본다. 현대 애플리케이션의 일반적인 문제 중 하나인 스래싱(thrashing)을 알아보고, 저성능 메모리 접근 문제를 해결하는 방법도 살펴본다.
12장에서 15장까지는 컴퓨터 시스템과 외부 환경의 소통 방식을 알아본다. 컴퓨터 시스템과 연결된 다수의 입출력 주변 장치(peripheral device)는 CPU나 메모리에 비해 훨씬 느린 속도로 작동한다. 여러분이 작성한 개별 명령 시퀀스의 성능이 탁월하더라도, 이들 입출력 주변 장치의 한계 상황을 알지 못하면 애플리케이션의 전체 성능은 낮은 수준을 벗어날 수 없다. 따라서 책 후반의 네 개 장은 범용 I/O 포트, 시스템 버스, 버퍼링, 핸드셰이킹, 폴링, 인터럽트 등을 다룬다. 이를 통해 여러분은 키보드, 병렬 포트, 직렬 포트, 디스크 드라이브, 테이프 드라이브, 플래시 저장 장치, SCSI, IDE/ATA, USB, 사운드 카드 등 다양한 PC 주변 장치와의 효율적인 소통 방식을 이해할 수 있을 것이다.