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