프로그램은 어떻게 작동하는가 (문과생도 쉽게 배우는 컴퓨터 프로그램 작동 메커니즘)

프로그램은 어떻게 작동하는가 (문과생도 쉽게 배우는 컴퓨터 프로그램 작동 메커니즘)

$23.00
Description
역설적으로 들릴지도 모르지만, AI 시대에 요구되는 개발자의 능력은 기본기에 있다. 프로그램이 컴퓨터에서 어떻게 작동하는지를 제대로 알고 있어야, 목적에 맞는 프로그램을 만들 수 있고 문제가 발생했을 때도 수월하게 해결한다. 이 책은 메모리에 로딩된 기계어 명령을 CPU가 해석하고 실행하는 과정, 즉 프로그램이 컴퓨터에서 움직이는 진짜 모습을 보여준다.
이 과정에서 컴퓨터가 2진수를 이용하는 방식과 이유, 메모리와 디스크의 상호작용, 소스 코드가 실행 파일로 변환되는 컴파일과 링크 단계, 프로그램의 작동 환경과 주변장치 제어 등을 알아본다. 프로그래밍 입문자나 자기 실력에 깊이를 더하려는 초급 개발자가 컴퓨터 시스템의 본질을 이해하고 응용력을 키울 수 있도록 돕는다.
저자

야자와히사오

저자:야자와히사오
IT전문저자겸강사.대형전자제품제조회사와소프트웨어개발업체에서컴퓨터제조와시스템개발같은다양한업무를경험하며실력을쌓았다.현재는독립해데이터분석애플리케이션개발에종사한다.본업을하는틈틈이여러잡지에IT칼럼을기고하거나관련책을집필하는데에도힘을쏟고있다.특히『IT업무의기본이되는컴퓨터구조원리교과서』『IT업무의기본이되는프로그램구조원리교과서』등은일본에서만수십만부가넘게팔리며컴퓨터와프로그램을공부하는학생과IT업계종사자들에게반드시읽어야할바이블로각인됐다.집필활동외에도IT기업의신입사원이나컴퓨터학과학생들을대상으로강연활동도활발히하고있다.현재야자와주식회사대표이사다.

역자:김현옥
명지대학교일어일문학과를졸업했으며통신기술업체에서다년간번역을담당하고있다.현재번역에이전시엔터스코리아에서전문번역가로활동하고있다.주요역서로는『주말에끝내는PHP프로그래밍:이틀만에개발환경구축부터간단한웹애플리케이션까지』『최신인공지능쉽게이해하고넓게활용하기:인공지능상식에지식더하기!』『프로그래밍천재가되자!:컴퓨터구조부터기초코딩교육까지』등이있다.

목차

들어가는말
책에서해설할주요키워드

제1장프로그래머에게CPU란무엇일까

CPU의내부를살펴보자
CPU는레지스터의집합체
프로그램의흐름을결정하는프로그램카운터
조건분기와반복시스템
함수호출의구조
베이스와인덱스로배열실현하기
CPU가할수있는일은극히단순

제2장데이터를2진수로상상해보자

컴퓨터가정보를2진수로취급하는이유
그나저나2진수란?
시프트연산과곱셈및나눗셈의관계
컴퓨터처리를하기에편리한‘2의보수’
논리우측시프트와산술우측시프트의차이
논리연산에익숙해지는요령

COLUMN여러분이라면어떻게설명할까요?

초등학생에게CPU와2진수설명하기

제3장컴퓨터가소수점수의계산을틀리는이유

0.1을100번더해도10이되지않음
소수점수를2진수로표현하려면
컴퓨터가계산을틀리는이유
부동소수점수는무엇인가
정규표현과초과표현
프로그램에서실제로확인해보자
컴퓨터계산오류를피하려면
2진수와16진수

제4장네모난모양의메모리를둥글게사용하기

메모리의물리적인구조는단순
메모리의논리적인이미지는빌딩
정말간단한포인터
메모리를효율적으로잘사용하기위한기본은배열
스택과큐,링버퍼
요소의추가와삭제를쉽게할수있는리스트
효율적으로데이터를찾을수있는이진탐색트리

제5장메모리와디스크의친밀한관계

메모리에읽어와야실행됨
디스크접속을고속화하는‘디스크캐시’
디스크를메모리의일부로사용하는가상메모리
메모리를디스크로사용하는SSD
메모리를절약하는프로그래밍기법
디스크의물리구조도잘봐두자

제6장내힘으로데이터를압축해보자

파일은바이트단위로기록
런렝스부호화의구조
런렝스부호화의결점
모스부호에서허프먼부호화의기초확인하기
트리를이용해만드는허프먼부호화
허프먼부호화로압축률이대폭향상
무손실압축과손실압축

COLUMN여러분이라면어떻게설명할까요?

게임에푹빠진중학생들에게메모리와디스크설명하기

제7장프로그램은어떤환경에서작동하는가

작동환경=OS+하드웨어
CPU이외의하드웨어가가진차이를극복한Windows
OS마다다른API
소스코드를사용해설치하기
어디서든똑같은실행환경을제공하는Java가상머신
클라우드로제공되는가상실행환경
BIOS와부트스트랩

제8장소스파일로실행가능파일을만들기까지

네이티브코드만실행할수있는컴퓨터
네이티브코드의내용을확인해보자
소스코드를변환하는컴파일러
컴파일만으로는실행가능파일을얻을수없다
스타트업과라이브러리파일
DLL파일과임포트라이브러리
실행가능파일을실행할때필요한것은?
로드할때만들어지는스택과힙
살짝어려운Q&A

제9장OS와애플리케이션의관계

역사로보는OS의기능
OS의존재를의식하자
시스템호출과고급언어의이식성
하드웨어를추상화하는OS와고급언어
Windows라는OS의특징

COLUMN여러분이라면어떻게설명할까요?

스마트폰을좋아하는여고생에게OS의역할을설명하기

제10장어셈블리어를통해프로그램의진짜모습이해하기

어셈블리어는네이티브코드와일대일로대응
C컴파일러로어셈블리어의소스코드를출력
유사명령과명령
어셈블리어의구문‘연산코드와피연산자’
가장자주사용되는movl명령
스택에데이터를저장
함수를호출하는구조
호출된함수의구조
전역변수와지역변수의구조
반복처리의구조
조건분기의구조
어셈블리어를경험하는의의

제11장하드웨어를제어하는방법

애플리케이션은하드웨어와상관이없다?
하드웨어와입출력을하는in명령과out명령
인터럽트를요청하는주변장치
인터럽트로실시간처리를실현
대량의데이터를단시간에전송할수있는DMA
문자나그래픽이표시되는시스템

COLUMN여러분이라면어떻게설명할까요?

동네할머니에게디스플레이와TV의차이를설명하기

제12장컴퓨터를학습시키는방법

기계학습이란?
서포트벡터머신
Python의대화모드를사용하는방법
학습데이터준비하기
손글씨숫자데이터의내용확인해보기
기계학습으로손글씨문자인식하기
교차검증해보기

COLUMN여러분이라면어떻게설명할까요?

단골술집주인에게기계학습의종류를설명하기

부록1C언어에도전해보자!

C언어의특징
변수와함수
데이터형
입력,연산,출력
함수만들기/함수사용하기
지역변수와전역변수
배열과반복
그외의언어구문

부록2Python에도전해보자!

Python의특징
모두다객체
데이터형
입력,연산,출력
함수만들기/함수사용하기
지역변수와전역변수
배열과반복
그외의언어구문

맺음말
찾아보기

출판사 서평

본질을이해해야응용할수있다!
AI시대에도경쟁력을잃지않는개발자의힘

인공지능의부상으로개발자의입지가축소되고있다는기사가쏟아지고있다.개발자는앞으로불필요한존재가될까?기업들은‘문제해결능력’을갖춘개발자를더욱더찾고있다.프로젝트의올바른방향을설정하고,숨어있는오류를바로잡으며,예상하지못한변수에대처하는실력을갖춘개발자말이다.그렇다면진짜실력은어디서올까.

만사가그렇지만탄탄한실력은본질,즉기본기를제대로닦는데에서나온다.본질을이해해야응용을할수있으며,어떤문제의원인을파악하거나신기술을익히는일도비교적수월해진다.따라서개발자라면프로그래밍기술뿐만아니라그뒤에숨은프로그램작동원리를훤히알고있어야한다.즉데이터와명령의집합체인프로그램이컴퓨터에서어떻게입력·연산·출력·저장되는지를꿰뚫고있어야한다는말이다.

코딩기술과요령을넘어
프로그램의원리를파악하다

이런의미에서《프로그램은어떻게작동하는가》는개발자지망생또는신입개발자에게강력한무기가될것이다.C언어나파이썬으로작성한소스코드가어떻게컴퓨터가이해할수있는기계어로번역되고(컴파일),메모리에올라가며(로딩),최종적으로CPU에서어떻게해석및실행이되는지를낱낱이파헤치기때문이다.

처음이책이던지는질문은이렇다.프로그래머에게CPU란무엇인가.이질문을시작으로우리는a=1+2;와같은간단한코드한줄이CPU내부에서얼마나역동적인과정을거치는지를목격한다.저자가끊임없이강조하듯개발자가모든하드웨어지식을익힐필요는없다.단지개발자에게필요한CPU지식이란CPU에있는수많은트랜지스터가명령과데이터를잠시보관하는‘레지스터’임을이해하는것이다.

프로그램카운터가다음실행할명령의주소를가리키고,누산기가연산결과를담으며,플래그레지스터의상태에따라프로그램흐름이바뀌는모습을이해하는것.개발자에게필요한CPU의본질은이뿐이다.이지점에서컴퓨터가계산기라는사실을새삼깨닫기도한다.결국컴퓨터는0과1을가지고계산하는기계다.

2진수다루는법을이해하면
프로그램작동원리의본질이보인다

개발자는따라서컴퓨터가세상을인식하는유일한방식인‘2진수’의세계를조금깊게알아둘필요가있다.기본과본질을다루는책답게저자는컴퓨터가왜하필2진수로계산하는지부터설명한다.IC칩은핀하나가0V와+5V라는두가지상태밖에표현할수없고,이런물리적한계가0과1이라는디지털세계를탄생시켰다.저자는이같은설명에서더나아가컴퓨터가2진수를어떻게다루는지,우리가이런컴퓨터의특징을어떻게이용하는지를소개한다.이과정을거치면서음수를표현하기위해‘2의보수’라는기발한아이디어가왜필요한지,왜그토록정확해보이는컴퓨터가0.1을100번더해도10이라는결과를내놓지못하는실수를저지르는지(부동소수점)에대한근본적인답을얻게된다.

내맘대로메모리를다루는
개발자가진짜실력자

CPU와2진수데이터에대한이해를마쳤다면,이제프로그램의주무대인‘메모리’로시선을옮길차례다.개발자라면메모리의물리적구조가주소핀과데이터핀으로구성된IC칩에불과해도,논리적구조를변경하면얼마든지그한계를극복할수있음을알아야한다.책에서는배열이라는기본적인자료구조가스택,큐,링버퍼와같은고차원적인자료구조로어떻게변모하는지를시각자료를동원해설명한다.데이터를넣고빼는순서의차이가전혀다른쓰임새를만들어내는과정은프로그래밍의묘미를느끼게하기에충분하다.

자료구조를설명하는대목에서C언어학습의장벽으로불리는‘포인터’의개념을설명하기도하는데,이부분도인상적이다.포인터는‘데이터가저장된주소’를기억하는변수이며,이를이해하는핵심은데이터형이라는개념에있다고설명하는대목에서아마많은이가포인터개념에품은막연한두려움을떨칠수있을것이다.

어셈블리어와C언어의비교
프로그램이움직이는진짜모습을마주하다

《프로그램은어떻게작동하는가》의백미는어셈블리어와C언어를비교하는부분이다.기계어와일대일로대응하는어셈블리어의특성상,어셈블리어가어떻게작동하는지를알면프로그램이컴퓨터에서작동하는진짜모습을이해할수있기때문이다.C언어로작성된함수호출,반복문(for),조건분기(if)가컴파일을거치면어떤어셈블리어코드로변환되는지를직접살펴보면서,독자는마침내프로그램의실체를마주한다.

고급언어로작성한코드가실제로는movl,addl,cmpl,jmp와같은명령의복잡한조합으로실행된다는사실을확인하는경험은개발실력을극적으로올려줄지도모른다.선명하게보이지않던‘컴퓨터의실제작동’을이해한순간,코드가어떻게메모리와CPU를움직이는지를명확하게파악하기때문이다.

저자또한어셈블리어와C언어코드를비교하는경험을통해“프로그램이작동하는구조가손에잡힐듯이보였다.”라고고백한것처럼,이경험은이전과전혀다른차원에서프로그램을이해하는자신을발견하는계기가된다.

상위1%개발자가추천하는
프로그래밍입문의필독서

AI시대로접어들수록원리중심의학습은더욱중요해졌다.반복적인코딩작업을AI가대체하는현실에서개발자는이제단순코딩을벗어나업무의방향을설정하고,미묘한오류를잡아내며,창의적인해결책을제시할수있어야한다.이모든역량의바탕에는원리,즉본질에대한이해가깔려있어야한다.

결국AI시대에살아남을개발자는스스로질문하고사태를파악해해결할줄아는사람이다.《프로그램은어떻게작동하는가》는변화무쌍한현실문제에서답을찾는지성과통찰력을어떻게하면갈고닦을수있는지를말한다.이책으로프로그래밍코드의실체와작동원리를제대로경험해보자.단순한지식습득을넘어,개발자의깜냥을한단계올리는데소중한디딤돌이된다.