목차

1장 효율적으로 언어 배우기 1.1 비교를 통한 배움 - 규칙은 언어마다 다르다 - C 언어와 Ruby의 참거짓 값 - Java의 참거짓 값 1.2 역사를 통한 배움 - 언어 설계자의 의도를 이해하자 - 어떤 언어를 배워야 하는지는 아무도 모른다 - 언어에 의존하지 않는 보편적인 지식의 습득 2장 프로그래밍 언어를 조감하다 2.1 프로그래밍 언어 탄생의 역사 - 케이블을 연결하다 - 프로그램 내장 방식으로 - FORTRAN의 등장 2.2 프로그래밍 언어 탄생의 목적 - 나태 - 프로그래머의 삼대 미덕 - 언어에 따라 다른 ‘편리함’의 의미 3장 문법의 탄생 3.1 문법이란? - 연산자 우선순위 - 문법은 언어 설계자가 정한 규칙 3.2 스택 머신과 FORTH - 계산 순서 - 연산 순서를 어떻게 표현할까? - 현재도 살아있는 스택 머신 3.3 구문 트리와 LISP - 계산의 흐름 - 계산 순서를 어떻게 표현할까? - 현재도 살아있는 구문 트리 칼럼: 이해력을 확인하기 위해서는 결과물(Output)을 확인한다 3.4 중위 표기법 - 구문 해석기 칼럼: 무엇을 배우면 좋을지 모르는 이유 - 규칙간 마찰 4장 처리 흐름 제어 4.1 구조화 프로그래밍의 탄생 4.2 if가 탄생하기 전 - if는 왜 있는 걸까? - If-else는 왜 있는 걸까? 4.3 while, 반복되는 if를 읽기 쉽게 표현 - while 문을 사용하는 방법 - while 문을 사용하지 않는 방법 4.4 for, 수치를 증가시키는 while을 읽기 쉽게 표현 - for를 사용하는 방법 - for를 사용하지 않는 방법 - foreach, 처리 대상으로 반복 제어 5장 함수 5.1 함수의 역할 - 이해(조직을 예로) - 재사용(부품을 예로) - 프로그램 재사용의 특징 5.2 돌아가는 명령 - 함수의 탄생 - 돌아갈 목적지를 기록하기 위한 전용 메모리 칼럼: 이름 - 스택 5.3 재귀 호출 - 내포 구조 데이터의 효율적 처리 - 내포 구조를 다루는 방법 6장 에러 처리 6.1 프로그램도 실패를 한다 6.2 실패를 어떻게 전달할까? - 반환값으로 실패를 전달한다 - 실패하면 점프한다 6.3 실패할 것 같은 처리를 묶는 구문 - John Good enough의 주장 - CLU에 도입 - C++에 도입 - Windows NT 3.1에 도입 6.4 출구는 하나다 - 왜 finally를 도입한 것일까? - 짝이 되는 처리를 반드시 실행한다 6.5 어떤 경우에 예외를 던질까? - 함수 호출 시 인수가 부족한 경우 - 배열 범위 밖에 있는 것을 취득하려고 했을 때 - 틀리면 바로 예외를 던진다 6.6 예외의 전파 - 예외 전파의 문제점 - Java의 검사 예외 - 검사 예외가 잘 사용되지 않는 이유 컬럼: 구체적인 지식과 추상적인 지식 칼럼: 이빨로 씹다 칼럼: 필요한 부분부터 흡수한다 7장 이름과 스코프 7.1 왜 이름이 필요할까? - 어떻게 이름을 붙일까? - 이름 충돌 - 충돌 피하기 7.2 스코프의 진화 - 동적 스코프 - 정적 스코프 7.3 정적 스코프는 완성체인가? 칼럼: 다른 언어의 스코프 - 내포 함수의 문제점 - 외부 스코프에 재귀속되는 문제 8장 형 8.1 형(型)이란? 8.2 수치를 On과 Off로 표현하는 방법 - 자릿수 발명 - 7 세그먼트 디스플레이 - 주판 8.3 한 자리에 필요한 램프는 몇 개일까? - 10 진수에서 2 진수로 - 8 진수와 16 진수 8.4 실수는 어떻게 표현할까? - 고정 소수점 - 소수점을 어디에 붙일지 정한다 - 부