intoduction programming and computing
마티아스 펠라이젠 2011 "프로그램 디자인, 어떻게 할 것인가"
(마티아스 펠라이젠 2011)
프로그래밍 언어를 익히기 전에 프로그래밍을 배우다『프로그램 디자인, 어떻게 할 것인가』는 컴퓨터 프로그래밍을 처음 접하는 사람들에게 프로그램을 ‘디자인’하는 방법을 가르치는 책이다. 여기서 말하는 ‘디자인’이라는 용어는 단순히 프로그램을 설계한다는 의미를 넘어...
책소개
프로그래밍 언어를 익히기 전에 프로그래밍을 배우다
『프로그램 디자인, 어떻게 할 것인가』는 컴퓨터 프로그래밍을 처음 접하는 사람들에게 프로그램을 ‘디자인’하는 방법을 가르치는 책이다. 여기서 말하는 ‘디자인’이라는 용어는 단순히 프로그램을 설계한다는 의미를 넘어, 이론적으로나 구조적인 내용을 파악하여 예술적인 경지에 이르도록 주의 깊게 프로그램을 ‘만든다’는 것을 뜻한다.
이 책에서는 구조체, 트리, 그래프와 같은 기본적인 프로그래밍에 필요한 자료 구조 및 알고리즘에 대해서도 설명하고 있다. 이러한 개념들은 예를 통해 제시되며, 반복적으로 살펴봄으로써 프로그래밍의 수준을 점점 높여 나가는 방식을 취하고 있다. 또한 구조적으로 프로그래밍할 수 있도록 자주 쓰이는 디자인 방법들을 모아 ‘디자인 레시피’라는 이름으로 제시한다. 프로그래밍을 할 때, 이 디자인 레시피 가운데 필요한 것을 선택하여 템플릿을 만들고, 이 템플릿에 내용을 채워 넣기만 하면 된다.
목차
옮긴이의 글
서문 왜 모든 사람이 프로그래밍을 배워야 하는가 디자인 레시피 Scheme과 DrRacket의 선택 이 책의 구성 감사의 글
1부. 간단한 형태의 데이터 처리 1장 학습자, 교육자, 컴퓨터 2장 수, 표현, 간단한 프로그램 2.1 수와 연산 2.2 변수와 프로그램 2.3 응용 문제 2.4 오류 2.5 프로그램 디자인 3장 프로그램은 함수+변수 졍의다 3.1 함수 조합 3.2 변수 정의 3.3 함수 구성에 관한 연습문제 4장 조건문과 함수 4.1 불린과 관계 4.2 조건을 검사하는 함수 4.3 조건과 조건문 5장 기호 정보 5.1 기호에 관한 몸풀기 문제 6장 복합 데이터 1: 구조체 6.1 구조체 6.2 추가 연습문제: 간단한 그림 그리기 6.3 구조체 정의 6.4 데이터 정의 6.5 복합 데이터를 다루는 함수 디자인 6.6 추가 연습문제: 원과 사각형 움직이기 6.7 추가 연습문제: 행맨 단어 맞히기 7장 데이터의 다양성 7.1 데이터를 혼합하고 구분하기 7.2 혼합 데이터를 다루는 함수 디자인 7.3 함수 조합 다시 보기 7.4 추가 연습문제; 도형 움직이기 7.5 입력 오류 8장 쉬어가기 1: 구문과 의미 8.1 Scheme의 어휘 8.2 Scheme의 문법 8.3 Scheme의 의미 8.4 오류 8.5 불린 표현 8.6 변수 정의 8.7 구조체 정의
2부. 임의의 큰 자료 처리 9장 복합 데이터 2: 리스트 9.1 리스트 9.2 임의 길이의 리스트에 대한 데이터 정의 9.3 임의 길이의 리스트 다루기 9.4 자기 참조 데이터 정의에 대한 함수 디자인 9.5 간단한 리스트를 다루는 다양한 예 10장 리스트 처리 더 보기 10.1 리스트를 출력하는 함수 10.2 구조체를 포함하는 리스트 10.3 추가 연습문제: 그림 옮기기 11장 자연수 11.1 자연수의 정의 11.2 임의 길이의 자연수 다루기 11.3 추가 연습문제: 리스트 작성 및 함수 테스트 11.4 자연수에 대한 또 다른 데이터 정의 11.5 자연수의 성질에 관한 보다 자세한 논의 12장 함수 조합 다시 보기 12.1 복잡한 프로그램 디자인하기 12.2 재귀 보조 함수 12.3 문제 일반화, 함수 일반화 12.4 추가 연습문제: 단어 재배열하기 13장 쉬어가기 2: 리스트 축약
3부. 임의의 큰 데이터 처리 더 보기 14장 자기 참조 데이터 정의 더 보기 14.1 구조체의 구조 14.2 추가 연습문제: 이진 검색 트리 14.3 리스트 내의 리스트 14.4 추가 연습문제: Scheme 계산 15장 상호 참조 데이터 정의 15.1 구조체 리스트, 구조체 내의 리스트 15.2 상호 참조 정의를 다루는 함수 디자인하기 15.3 추가 연습문제: 웹페이지 더 보기 16장 반복적 개선을 통한 개발 16.1 데이터 분석 16.2 데이터 집합 정의하기 및 개선하기 16.3 함수 및 프로그램 개선하기 17장 두 복합 데이터 다루기 17.1 두 리스트 동시에 다루기: 경우 1 17.2 두 리스트 동시에 다루기: 경우 2 17.3 두 리스트 동시에 다루기: 경우 3 17.4 함수 단순화 17.5 복잡한 두 개의 데이터를 입력받는 함수 디자인 17.6 복잡한 두 입력을 다루는 예 17.7 추가 연습문제: Scheme 계산하기, 두 번째 17.8 통일성과 테스트 18장 쉬어가기 3: 지역정의와 유효 영역 18.1 local을 이용한 함수 조직 18.2 유효 영역과 블록 구조
4부. 디자인 추상화 19장 정의 사이의 유사성 19.1 함수 사이의 유사성 19.2 데이터 정의 사이의 유사성 20장 함수는 값이다 20.1 구문과 의미 20.2 추상 함수 및 다형적 함수에 대한 계약 21장 예에서 추상화 디자인하기 21.1 예에서 추상화 끌어내기 21.2 추상화 리스트 함수를 다루는 몸풀기 문제 21.3 추상화와 유일한 관리 지점 21.4 추가 연습문제: 움직이는 그림 다시 보기 21.5 참고: 템플릿으로부터 추상화 디자인하기 22장 함수를 출력하는 함수를 이용한 추상화 디자인 22.1 함수를 출력하는 함수 22.2 값으로서의 함수를 이용한 추상 함수 디자인 22.3 GUI 맛보기 23장 수학 예제399 23.1 수열과 급수 23.2 등차수열과 급수 23.3 등비수열과 급수 23.4 함수 내 면적 23.5 함수의 기울기 24장 쉬어가기 4: 즉석에서 함수 정의하기 24.1 람다 표현의 구문 24.2 람다의 영역과 의미 24.3 람다의 활용
5부. 발생적 재귀 25장 새로운 형태의 재귀 호출 25.1 테이블 위의 공 모델링하기 25.2 빠르게 정렬하기 26장 알고리즘 디자인하기 26.1 종료 26.2 구조적 재귀 대 발생적 재귀 26.3 선택하기 27장 주제에 의한 변주곡 27.1 프랙탈 27.2 파일에서 선으로, 리스트에서 리스트를 갖는 리스트로 27.3 이진 검색 27.4 뉴턴 방법 27.5 추가 연습문제: 가우스 소거법 28장 역추적하는 알고리즘 28.1 그래프 순회 28.2 추가 연습문제: 퀸 체크 29장 쉬어가기 5: 컴퓨팅 연산 비용과 벡터 29.1 구체적 시간, 추상 시간 29.2 ‘차수’의 정의 29.3 벡터 맛보기
6부. 지식 축적527 30장 지식의 손실 30.1 구조적 처리의 문제점 30.2 발생적 재귀의 문제점 31장 축적기 방식의 함수 디자인하기 31.1 축적기의 필요성 인식하기 31.2 축적 방식의 함수 31.3 함수를 축적 방식으로 바꾸기 32장 축적의 다른 용도559 32.1 추가 연습문제: 트리에서의 축적기 32.2 추가 연습문제: 선교사와 식인종 32.3 추가 연습문제: 보드 솔리테어 33장 쉬어가기 6: 근사값의 본질 33.1 고정 길이 수 연산 33.2 오버플로 33.3 언더플로 33.4 DrRacket의 수
7부. 변수의 상태 바꾸기 34장 함수의 메모리 35장 변수의 할당 35.1 작업에서의 간단한 할당 35.2 순차적 표현 연산 35.3 할당과 함수 36.4 유용한 첫 예제 36장 메모리를 갖는 함수 디자인하기 36.1 메모리의 필요성 36.2 메모리와 상태 변수 36.3 메모리르 초기화하는 함수 36.4 메모리를 바꾸는 함수 37장 메모리 사용 예 37.1 상태 초기화 37.2 사용자의 행동으로 인한 상태 변화 37.3 재귀 호출로부터의 상태 변화 37.4 상태 변화에 관한 몸풀기 문제 37.5 추가 연습문제: 장소 탐험 38장 쉬어가기 7: 최종 구문과 의미 38.1 상급자용 Scheme의 어휘 38.2 상급자용 Scheme의 문법 38.3 상급자용 Scheme의 의미 38.4 사급자용 Scheme에서의 오류
8부. 복합 값 바꾸기 39장 캡슐화 39.1 상태 변수가 있는 추상화 39.2 캡슐화 연습하기 40장 변경 가능한 구조체 40.1 함수로부터의 구조체 40.2 변경 가능한 함수 구조체 40.3 변경 가능한 구조체 40.4 변경 가능한 벡터 40.5 변수 바꾸기, 구조체 바꾸기 41장 구조체를 변경하는 함수 디자인하기 41.1 왜 구조체를 변경하는가 41.2 구조적 디자인 레시피와 변경 1 41.3 구조적 디자인 레시피와 변경 2 41.4 추가 연습문제: 그림 움직이기 3 42장 동일성 42.1 외면적 동일성 42.2 내포적 동일성 43장 구조체, 벡터, 객체 바꾸기 43.1 벡터 더 연습하기 43.2 순환되는 구조체 집합 43.3 상태 역추적
에필로그 컴퓨팅 프로그래밍 더 나아가기
찾아보기
최고의 함수형 언어 개론서라고 한다.
[2023-10-27 Fri 10:49] https://htdp.org/
출판사 리뷰
프로그래밍 언어를 익히기 전에 프로그래밍을 배우다.
프로그래밍을 배우려는 대다수 사람들은 유행하는 언어 혹은 비전 있어 보이는 언어의 문법을 익힌 다음 프로그램을 작성하는 방법으로 공부를 시작한다. 하지만, 이렇게 언어의 문법만 익히는 식으로는 제대로 프로그래밍하기가 힘들다. 많은 학습자들이, 문법은 알겠는데 이 문법들을 어떻게 구성하여 프로그래밍해야 하는지 갈피를 잡지 못하는 경험을 하며, 혼자서는 넘기 힘든 벽에 부딪힌다.
『프로그램 디자인, 어떻게 할 것인가』는 컴퓨터 프로그래밍을 처음 접하는 사람들에게 프로그램을 ‘디자인’하는 방법을 가르치는 책이다. 여기서 말하는 ‘디자인’이라는 용어는 단순히 프로그램을 설계한다는 의미를 넘어, 이론적으로나 구조적인 내용을 파악하여 예술적인 경지에 이르도록 주의 깊게 프로그램을 ‘만든다’는 것을 뜻한다.
이 책에서는 구조체, 트리, 그래프와 같은 기본적인 프로그래밍에 필요한 자료 구조 및 알고리즘에 대해서도 설명하고 있다. 이러한 개념들은 예를 통해 제시되며, 반복적으로 살펴봄으로써 프로그래밍의 수준을 점점 높여 나가는 방식을 취하고 있다. 또한 구조적으로 프로그래밍할 수 있도록 자주 쓰이는 디자인 방법들을 모아 ‘디자인 레시피’라는 이름으로 제시한다. 프로그래밍을 할 때, 이 디자인 레시피 가운데 필요한 것을 선택하여 템플릿을 만들고, 이 템플릿에 내용을 채워 넣기만 하면 된다.
프로그래밍은 이론만 알고 있다고 해서 완성되지 않는다. 직접 구현하면서 이론만으로는 해결할 수 없는 어려운 부분도 만나게 되고, 특정한 문제를 해결하기 위해 기발한 아이디어를 이용해야 할 수도 있다. 이 책에서는 다양한 연습문제를 통해 이러한 연습을 직접 해 볼 수 있도록 도와준다. 이 연습문제들을 살펴보는 것만으로도 이 책의 진가를 확인할 수 있을 것이다.
저자 소개
저자 : 마티아스 펠라이젠 Matthias Felleisen 펠라이젠은 현재 보스턴 메사추세츠에 위치한 노스이스턴 대학교의 컴퓨터정보과학과 명예교수다. 인디애나 대학교에서 대니얼 프리드먼으로부터 박사 학위를 받았다. 그의 주요 관심사는 프로그래밍 도구 디자인, 웹 프로그래밍 등이다. 펠라이젠은 PLT와 TechScheme! 프로젝트를 시작하여 초보자들에게 프로그램 디자인 원칙을 가르치고, Scheme을 활용해 큰 규모의 시스템을 만들 수 있도록 돕고 있다. 저자 : 로버트 브루스 핀들러 Robert Bruce Findler 보통 ‘로비’라 불리며 현재 노스웨스턴 대학교에서 강의하고 있는 컴퓨터 과학자다. PLT의 회원으로, DrRacket을 만들었으며 유지보수를 책임지고 있다. TeachScheme! 프로젝트의 선임 멤버이기도 하다. 저자 : 매튜 플랫 Matthew Flatt 현재 솔트레이크 시티에 위치한 유타 대학교에서 강의를 하고 있는 컴퓨터 과학자다. 그 역시 PLT의 회원으로, Racket을 만들었으며 유지보수를 담당하고 있다. 라이스 대학교에서 마티아스 펠라이젠의 지도 아래 박사 학위를 취득했다.
Related-Notes
References
마티아스 펠라이젠. 2011. 프로그램 디자인, 어떻게 할 것인가. https://www.yes24.com/Product/Goods/4853907.