상세정보
미리보기
한 권으로 읽는 컴퓨터 구조와 프로그래밍
- 저자
- 조너선 스타인하트 저/오현석 역
- 출판사
- 책만
- 출판일
- 2021-06-14
- 등록일
- 2021-10-13
- 파일포맷
- PDF
- 파일크기
- 27MB
- 공급사
- 예스이십사
- 지원기기
-
PC
PHONE
TABLET
웹뷰어
프로그램 수동설치
뷰어프로그램 설치 안내
책소개
대부분의 개발자들은 자신이 만든 프로그램을 움직이는 하부 기술에 대해 잘 알지 못한다. 코드가 잘 도는데 구태여 근원적인 하부 기술에 신경을 써야 할까? 그렇다. 하부 기술을 밑바닥부터 이해하면, 프로그램이 잘 작동하게 만들 수 있고 찾기 어려운 버그에 당황하지 않게 된다. 자신이 작성한 코드가 보안 문제로 인해 9시 뉴스에 나오기를 원하는 사람은 없을 것이다. 수많은 기술에 대한 상세 자료가 이미 온라인에 존재한다. 하지만 대부분 이런 자료들은 잘 정리되어 있지 않으며, 한꺼번에 정리해 모아둔 곳을 찾기도 어렵다. </br></br>백전노장 엔지니어인 조너선 스타인하트가 쓴 『한 권으로 읽는 컴퓨터 구조와 프로그래밍』은 컴퓨터의 토대가 되는 개념을 밀도 있게 탐구한다. 또한 컴퓨터 하드웨어의 내부 구조는 물론, 하드웨어 위에서 소프트웨어가 작동하는 원리, 그리고 소프트웨어 기술 발전과 함께 역사 속에서 사람들은 기술을 사용해 어떻게 문제를 풀어왔는지 등의 다양하고도 심도 있는 내용을 다룬다. 저자는 컴퓨터라는 기계에서 프로그램 코드가 실행될 때 벌어지는지 일들에 대해 여러분이 미처 몰랐던, 혹은 잊었던 이야기들을 들려준다. 더 나은 소프트웨어와 효율적인 코드를 작성하는 법을 깨우치는 데 필요한 탄탄한 기초를 다질 수 있는 책이다.
저자소개
1960년대부터 엔지니어링을 해왔다. 중학교 때 하드웨어 설계를 시작했고, 고등학교 때 소프트웨어 설계를 해본 경험 덕분에 여름 단기 아르바이트로 벨 전화 연구소에서 일하는 기회를 얻을 수 있었다. 클라크슨 대학교에서 1977년 전자 공학 및 컴퓨터 과학 학사(BSEE)를 취득했으며, 졸업 후 텍트로닉스(Tektronix)에서 일하다가 스타트업을 창업했다. 그래픽스 하드웨어와 소프트웨어를 설계하고, CAD 시스템, 그래픽스 워크스테이션, 회로 시뮬레이터, 발전소, IC 설계용 언어 등을 만들었으며, 1987년에는 안전이 중요한 크리티컬 시스템 엔지니어링에 초점을 맞춘 컨설턴트가 되어 애플, 인텔, 썬, 웰치알린, 룰루 등의 기업을 컨설팅했다. 1990년대부터는 전업을 조금 줄이고, 포 윈즈 비냐드(Four Winds Vineyard)라는 와인 농장 경영도 겸업하고 있다.
목차
<b>1장. 컴퓨터 내부의 언어 체계 </br>컴퓨터는 어떤 말을 사용할까 </b></br></br>언어란 무엇인가</br>문자 언어</br>비트</br>논리 연산</br>___불리언 대수</br>___드모르간의 법칙</br>정수를 비트로 표현하는 방법</br>___양의 정수 표현</br>___2진수 덧셈</br>___음수 표현</br>실수를 표현하는 방법</br>___고정소수점 표현법</br>___부동소수점 표현법</br>___IEEE 부동소수점 수 표준</br>2진 코드화한 10진수 시스템</br>2진수를 다루는 쉬운 방법</br>___8진 표현법</br>___16진 표현법</br>___프로그래밍 언어의 진법 표기법</br>비트 그룹의 이름</br>텍스트 표현</br>___아스키 코드</br>___다른 표준의 진화</br>___유니코드 변환 형식 8비트</br>문자를 사용한 수 표현</br>___출력 가능하게 변경한 인코딩</br>___베이스64 인코딩</br>___URL 인코딩</br>색을 표현하는 방법</br>___투명도 추가</br>___색 인코딩</br>정리</br></br><b>2장. 전자 회로의 조합 논리</br>컴퓨터는 어떤 논리로 비트를 다루는가</b></br></br>디지털 컴퓨터의 사례</br>___아날로그와 디지털의 차이</br>___하드웨어에서 크기가 중요한 이유</br>___디지털을 사용하면 더 안정적인 장치를 만들 수 있다</br>___아날로그 세계에서 디지털 만들기</br>___10진 숫자 대신 비트를 사용하는 이유</br>간단한 전기 이론 가이드</br>___전기는 수도 배관과 유사하다</br>___전기 스위치</br>비트를 처리하기 위한 하드웨어</br>___릴레이</br>___진공관</br>___트랜지스터</br>___집적 회로</br>논리 게이트</br>___이력 현상을 활용한 잡음 내성 향상</br>___차동 신호</br>___전파 지연</br>___출력 유형</br>게이트를 조합한 복잡한 회로</br>___가산기</br>___디코더</br>___디멀티플렉서</br>___셀렉터</br>정리</br></br><b>3장. 메모리와 디스크의 핵심: 순차 논리</br>컴퓨터는 비트를 어떻게 기억하는가</b></br></br>시간 표현과 상태 기억</br>___발진자</br>___클록</br>___래치</br>___게이트가 있는 래치</br>___플립플롭</br>___카운터</br>___레지스터</br>메모리 조직과 주소 지정</br>___임의 접근 메모리</br>___읽기 전용 메모리</br>블록 장치</br>플래시 메모리와 SSD</br>오류 감지와 정정</br>하드웨어와 소프트웨어 비교</br>정리</br></br><b>4장. 컴퓨터 내부 구조</br>컴퓨터 하드웨어는 어떻게 구성되는가</b></br></br>메모리</br>입력과 출력</br>중앙 처리 장치</br>___산술 논리 장치</br>___시프트</br>___실행 장치</br>명령어 집합</br>___명령어</br>___주소 지정 모드</br>___조건 코드 명령어</br>___분기 명령어</br>___최종 명령어 집합 구성</br>마지막 설계</br>___명령어 레지스터</br>___데이터 경로와 제어 신호</br>___데이터 흐름 제어</br>RISC와 CISC 명령어 집합</br>GPU</br>정리</br></br><b>5장. 컴퓨터 아키텍처와 운영체제</br>컴퓨터는 어떻게 프로그램과 메모리를 조직적으로 관리할까</b></br></br>기본적인 구조 요소들</br>___프로세서 코어</br>___마이크로프로세서와 마이크로컴퓨터</br>프로시저, 서브루틴, 함수</br>스택</br>인터럽트</br>상대 주소 지정</br>메모리 관리 장치</br>가상 메모리</br>시스템 공간과 사용자 공간</br>메모리 계층과 성능</br>코프로세서</br>메모리상의 데이터 배치</br>프로그램 실행</br>메모리 전력 소비</br>정리</br></br><b>6장. 입출력과 네트워킹 </br>컴퓨터는 외부와 어떻게 상호작용하는가 </b></br></br>저수준 I/O</br>___I/O 포트</br>___버튼을 눌러라</br>___빛이 있으라</br>___빛, 동작, 그리고 상호 연동</br>___밝기 조절</br>___그레이의 2n가지 그림자</br>___쿼드러처</br>___병렬 통신</br>___직렬 통신</br>___파동에 올라타라</br>___범용 직렬 버스</br>네트워킹</br>___최근의 LAN들</br>___인터넷</br>아날로그 처리 방법</br>___디지털을 아날로그로 변환</br>___아날로그를 디지털로 변환</br>___디지털 오디오</br>___디지털 이미지</br>___비디오</br>휴먼 인터페이스 장치</br>___터미널</br>___그래픽 터미널</br>___벡터 그래픽</br>___래스터 그래픽</br>___키보드와 마우스</br>정리</br></br><b>7장. 데이터 구조와 처리</br>어떻게 해야 프로그램에서 데이터를 잘 구성하고 처리할까 </b></br></br>기본 데이터 타입</br>배열</br>비트맵</br>문자열</br>복합 데이터 타입</br>단일 연결 리스트</br>동적 메모리 할당</br>더 효율적인 메모리 할당</br>가비지 컬렉션</br>이중 연결 리스트</br>계층적인 데이터 구조</br>대용량 저장장치</br>데이터베이스</br>인덱스</br>데이터 이동</br>벡터를 사용한 I/O</br>객체 지향의 함정</br>정렬</br>해시</br>효율성과 성능</br>정리</br></br><b>8장. 프로그래밍 언어 처리</br>컴퓨터는 프로그램을 어떻게 해석하고 변환하는가</b></br></br>어셈블리 언어 </br>고수준 언어</br>구조적 프로그래밍</br>어휘 분석</br>___상태 기계</br>___정규식</br>단어에서 문장으로</br>누구나 프로그래밍 언어를 만들 수 있는 시대</br>파스 트리</br>인터프리터</br>컴파일러</br>최적화</br>하드웨어를 다룰 때 주의하라</br>정리</br></br><b>9장. 웹 브라우저</br>추상적인 컴퓨터를 이해하기 위한 가상 머신</b></br></br>마크업 언어</br>균일 자원 위치 지정자</br>HTML 문서</br>DOM: 문서 객체 모델</br>___트리 관련 용어</br>___DOM 처리</br>CSS</br>XML 등의 마크업 언어</br>자바스크립트</br>jQuery</br>SVG</br>HTML5</br>JSON</br>정리</br></br><b>10장. 애플리케이션 프로그래밍과 시스템 프로그래밍</br>고수준 언어와 저수준 언어 프로그래밍 방식 비교</b></br></br>동물 추측 프로그램 버전 1: HTML과 자바스크립트 프로그램</br>___애플리케이션 수준의 뼈대</br>___웹 페이지 본문</br>___자바스크립트</br>___CSS</br>동물 추측 게임 버전 2: C 프로그램</br>___터미널과 명령줄</br>___프로그램 빌드</br>___터미널과 장치 드라이버</br>___문맥 전환</br>___표준 I/O</br>___원형 버퍼</br>___추상화를 활용한 코드 개선</br>___런타임 라이브러리와 표준 입출력</br>___버퍼 오버플로</br>___C 프로그램</br>___훈련</br>정리</br></br><b>11장. 성능 향상을 위한 알고리즘 기법</br>계산을 간소화하는 프로그래밍 트릭</b></br></br>표 찾기</br>___변환</br>___텍스처 매핑</br>___문자 종류 판별</br>정수를 사용한 계산 방법</br>___직선</br>___곡선 다루기</br>___다항식</br>재귀적 분할</br>___나선</br>___구성적인 기하</br>___시프트와 마스크</br>계산을 회피하는 그 밖의 수학적 기법들</br>___멱급수 근삿값 계산</br>___CORDIC 알고리즘</br>무작위성과 관련 있는 예제들</br>___공간을 채우는 곡선</br>___L 시스템</br>___스토캐스틱 기법</br>___양자화</br>정리</br></br><b>12장. 병렬성과 비동기성 </br>컴퓨터는 어떻게 한 번에 많은 일을 하는가 </b></br></br>경합 조건이란 무엇인가</br>공유 자원</br>프로세스와 스레드</br>락</br>___트랜잭션과 작업 크기</br>___락 대기</br>___교착 상태</br>___단기 락 구현</br>___장기 락 구현</br>브라우저 자바스크립트</br>비동기 함수와 프로미스</br>정리</br></br><b>13장. 컴퓨터 보안</br> 컴퓨터는 어떻게 데이터를 안전하게 지키는가 </b></br></br>보안과 프라이버시 개요</br>___위협 모델</br>___신뢰</br>___물리적 보안</br>___통신 보안</br>___모던 타임즈</br>___메타데이터와 감시</br>___사회적 맥락</br>___인증과 권한부여</br>크립토그래피</br>___스테가노그래피</br>___치환 암호</br>___전치 암호</br>___더 복잡한 암호</br>___일회용 패드</br>___키 교환 문제</br>___공개키 암호</br>___전방향 안전성</br>___암호학적 해시 함수</br>___디지털 서명</br>___공개키 인프라</br>___블록체인</br>___패스워드 관리</br>보안을 위한 소프트웨어 예방 조치</br>___올바른 대상을 보호하라</br>___로직은 세 번 체크하라</br>___오류를 검사하라</br>___공격 표면을 최소화하라</br>___경계 내부에 머물러라</br>___좋은 난수를 생성하기는 힘들다</br>___네 코드를 알라</br>___극단적인 영리함은 여러분의 적이다</br>___눈에 보이는 것을 이해하라</br>___과다수집하지 마라</br>___모아두지 마라</br>___동적 메모리 할당은 여러분의 친구가 아니다</br>___가비지 컬렉션도 여러분의 친구가 아니다</br>___코드 역할을 하는 데이터</br>정리</br></br><b>14장. 세상을 바꾸는 기계 지능</br> 미래를 열어가는 인공지능, 머신러닝, 빅데이터 </b></br></br>개요</br>머신러닝</br>___베이즈</br>___가우스</br>___소벨</br>___캐니</br>___특성 추출</br>___인공 신경망</br>___머신러닝 데이터의 활용</br>인공지능</br>빅데이터</br>정리</br></br><b>15장. 훌륭한 프로그래머가 되기 위한 팁과 경험담</br>알아두면 좋은 실무 상식과 조언 </b></br></br>가치 제안</br>소프트웨어 개발의 발자취</br>___간추린 역사</br>___오픈소스 소프트웨어</br>___크리에이티브 커먼즈</br>___이식성의 발전</br>___패키지 관리</br>___컨테이너</br>___자바</br>___노드</br>___클라우드 컴퓨팅</br>___가상 머신</br>___이동식 장치</br>프로그래밍 환경</br>___초보 프로그래머도 경험을 얻는 방법</br>___추정하는 방법 배우기</br>___프로젝트 스케줄링</br>___의사결정</br>___성향이 다른 사람들과 함께 일하기</br>___직장 내 문화 다루기</br>___정보를 얻은 상태에서 선택하기</br>개발 방법론</br>프로젝트 설계</br>___생각을 글로 써보자</br>___빠른 프로토타이핑</br>___인터페이스 설계</br>___코드를 재활용할 것인가, 직접 작성할 것인가</br>프로젝트 개발</br>___나이 든 개발자의 잡설</br>___이식성이 있는 코드</br>___소스 코드 제어</br>___테스트</br>___버그 보고와 추적</br>___리팩토링</br>___유지보수</br>스타일을 지켜라</br>기존 프로젝트를 활용하라</br>정리