◈이책에서다루는내용◈
◆효과적으로머신을활용하기위한숫자,문자와그외하이레벨데이터구조의표현방식을알아보고,각데이터타입의리소스비용설명
◆머신이좀더효율적으로데이터에접근할수있도록조직화,체계화하는방법
◆머신의본질적인작동방식을파악하기위한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장까지는컴퓨터시스템과외부환경의소통방식을알아본다.컴퓨터시스템과연결된다수의입출력주변장치(peripheraldevice)는CPU나메모리에비해훨씬느린속도로작동한다.여러분이작성한개별명령시퀀스의성능이탁월하더라도,이들입출력주변장치의한계상황을알지못하면애플리케이션의전체성능은낮은수준을벗어날수없다.따라서책후반의네개장은범용I/O포트,시스템버스,버퍼링,핸드셰이킹,폴링,인터럽트등을다룬다.이를통해여러분은키보드,병렬포트,직렬포트,디스크드라이브,테이프드라이브,플래시저장장치,SCSI,IDE/ATA,USB,사운드카드등다양한PC주변장치와의효율적인소통방식을이해할수있을것이다.
◈옮긴이의말◈
이책은40년경력의소프트웨어엔지니어인랜달하이드(RandallHyde)가집필한『WriteGreatCode』시리즈의첫번째책이며,1980년대이전부터현재에이르기까지소프트웨어산업에존재해온개발방법론,프로젝트운영전략,실무이론그리고개발조직운영전략의집대성이라할수있다.저자는현재3권까지출간된시리즈를통해혁신적으로발전해온컴퓨팅머신의작동원리,로우레벨로생각하고하이레벨로코딩하는방법그리고개발자의소프트웨어개발프로젝트수행방법과유용한도구에대해설명한다.
저자는소프트웨어개발업무를작가주의의산물이아닌엔지니어링측면에서접근한다.이로인해공감에기대어설명할수밖에없었던부분을정량적으로,체계적으로설명할수있게됐으며,소프트웨어개발모델부터테스트,문서화까지일관된예시와흐름으로설명한다.
저자가소프트웨어엔지니어로입문했을당시에각광받던개발주제(예:원자로제어)는현재클라우드,인공지능,양자컴퓨팅,블록체인등의주제로바뀌었다.개발접근전략또는방법론역시좀더세분화되거나맥락이아예바뀐부분이있다.그러나좀더좋은소프트웨어,위대한소프트웨어에대한갈망은개발자인우리모두의공통된특징이아닐까생각한다.
시리즈1권인이책은위대한코드를작성하려는개발자라면가장먼저봐야할부분이라고할수있는연산머신으로서컴퓨터의작동원리를설명한다.하지만컴퓨터아키텍처보다는좋은소프트웨어를작성하려고할때필수적으로알아야할컴퓨터의작동원리와상호작용방법에초점을맞추며,CPU및메모리아키텍처와상호작용방식,비트논리연산,부동소수점수,문자데이터,입출력,주변장치버스,파일시스템등에대해소개한다.또한거의모든이론설명에는세심하게정리한참조표와이미지를제공하고,어셈블리또는C등로우레벨언어기반의핸즈온을통해독자의이해를돕는다.
이책은소프트웨어개발경력자에게는근원이되는소스코드의가치를평가할수있는기회가될것이고,개발입문자에게는소프트웨어에대한토대를단단히다질수있는계기가될수있으리라생각한다.