목차
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 실수는 어떻게 표현할까?
- 고정 소수점 - 소수점을 어디에 붙일지 정한다
- 부