프로그래머처럼 생각하기 [문제 해결과 논리적 사고 훈련을 통한 프로그래밍 학습]
- 원서명Think Like a Programmer: An Introduction to Creative Problem Solving (ISBN 9781593274245)
- 지은이안톤 스프라울
- 옮긴이김무항
- ISBN : 9788960776142
- 25,000원
- 2014년 09월 26일 펴냄 (절판)
- 페이퍼백 | 348쪽 | 188*250mm
- 시리즈 : 프로그래밍 언어
판매처
- 현재 이 도서는 구매할 수 없습니다.
책 소개
요약
이 책은 프로그래밍 입문자를 위한 책인 동시에 어떤 문제에 대한 해결책을 프로그래밍으로 구현하려 할 때 막막함을 한 번이라도 느껴본 적이 있는 모든 이들을 위한 책이다. C++의 개념과 문법만을 학습하기 위한 참고서 형태의 책이 아니다. 어떤 문제를 해결하기 위한 논리적 사고 과정과 문제 해결 기법을 학습하고 여기서 도출된 해결책을 C++라는 도구를 사용해 어떻게 프로그래밍할 것인가에 대해 학습한다. 이러한 과정 중에 자연스레 C++의 개념과 문법을 학습함으로써 이후에 독자들이 C++라는 언어를 실제 업무나 과제 중에 등장하는 문제를 해결하는 데 적용할 수 있게 돕는다.
이 책에서 다루는 내용
■ 문제를 해결하기 쉽게 만들기 위해 개별적인 구성요소로 나누는 법
■ 함수와 클래스, 라이브러리를 이용하여 코드 재사용을 최대한 활용하는 법
■ 특정 작업에 가장 적합한 데이터 구조를 선택하는 법
■ 재귀와 동적 메모리와 같은 고급 프로그래밍 도구 활용법
■ 특정한 유형의 문제를 해결하기 위해 생각을 정리하고 전략을 개발하는 법
이 책의 대상 독자
시행착오를 겪으면서 배우기보다는 체계적인 방법으로 문제 해결 능력을 배울 수 있다. 이 책은 그러한 문제 해결 능력을 배우기 위한 지침서다. 이 책을 통해 여러분은 생각을 정리하는 기법과 해결책을 찾아내는 과정, 특정한 부류의 문제에 적용하기 위한 전략을 배울 수 있다. 이러한 접근법을 배우는 동시에 여러분의 창의성을 끌어낼 것이다. 더 이상 실수는 없을 것이다. 프로그래밍은 창의적인 활동이다. 특히 문제 해결은 더욱 그러하다. 창의성은 신비한 것이며 창의적인 사고가 동작하는 방식에 대해 정확하게 말할 수 있는 사람은 없다. 그러나 우리가 작곡을 배우거나 창의적인 글쓰기에 대한 조언을 얻거나 그림 그리는 법을 배울 수 있다면 프로그래밍 문제를 창의적으로 해결하는 방법 또한 배울 수 있다. 이 책은 여러분이 무엇을 해야 할지 상세히 알려주지는 않는다. 하지만 여러분의 잠재적인 문제 해결 능력을 개발해서 여러분 스스로 무엇을 해야 할지 알 수 있도록 도울 것이다. 다시 말해 여러분이 꿈꿔왔던 프로그래머가 될 수 있도록 도와줄 수 있는 책이다.
이 책의 구성
이 책에서 다루는 주제는 많은 신입 프로그래머들이 어려움을 겪어온 분야들이다. 또한 이 책은 프로그래밍 초반과 중반 무렵 다양한 영역에서 발생하는 대표적인 모습들을 폭넓게 제시한다. 그러나 이 책은 알고리즘에 대해 예제 위주로 설명한 ‘요리책(Cookbook)’ 스타일의 책이거나 특정 문제를 해결하기 위한 패턴에 대한 책이 아니라는 점을 거듭 강조하고 싶다. 책의 후반부에서 잘 알려진 알고리즘과 패턴을 어떻게 적용할지에 대해 논의를 하겠지만, 이 책을 특정 문제를 해결하기 위한 커닝 페이퍼로 사용하거나 여러분이 현재 겪고 있는 문제에 직접적으로 관련된 장에만 집중하지 않았으면 한다.
목차
목차
- 1장 문제 해결 전략
- 고전 퍼즐
- 여우와 거위, 옥수수
- 타일 밀기 퍼즐
- 스도쿠
- 콰라시 열쇠
- 일반적인 문제 해결 기술
- 항상 계획을 세워라
- 문제를 다른 방식으로 표현해보자
- 문제를 나누어라
- 아는 것부터 시작하라
- 문제를 축소하라
- 유사점을 찾아라
- 실험하라
- 좌절하지 말자
- 연습문제
- 고전 퍼즐
- 2장 기본 퍼즐
- 2장에서 사용할 C++ 살펴보기
- 출력 패턴
- 입력 처리
- 문제 분할
- 조각들을 하나로 합치기
- 상태 추적
- 결론
- 연습문제
- 3장 배열을 이용한 문제 해결
- 배열에 관한 기본 지식
- 저장
- 복사
- 회수와 검색
- 정렬
- 통계 계산
- 배열을 사용한 문제 해결
- 리팩토링
- 고정 데이터 배열
- 비 스칼라 배열
- 다차원 배열
- 배열을 사용해야 하는 경우
- 연습문제
- 배열에 관한 기본 지식
- 4장 포인터와 동적 메모리를 사용한 문제 해결
- 포인터에 관한 기본 지식
- 포인터의 이점
- 런타임 시 크기를 결정할 수 있는 데이터 구조
- 크기 변경이 가능한 데이터 구조
- 메모리 공유
- 포인터를 사용해야 하는 경우
- 메모리
- 스택과 힙
- 메모리 크기
- 수명
- 포인터 문제의 해결
- 가변 길이 문자열
- 연결 리스트
- 결론과 다음 과정
- 연습문제
- 5장 클래스를 사용한 문제 해결
- 클래스에 관한 기본 지식
- 클래스 사용 목적
- 캡슐화
- 코드 재사용
- 문제 세분화
- 정보 은닉
- 가독성
- 표현성
- 간단한 클래스 작성
- 기본 클래스 프레임워크
- 지원 메소드
- 동적 데이터를 사용하는 클래스
- 노드 추가
- 연결 리스트 재배열
- 소멸자
- 깊은 복사
- 전체적인 관점에서 동적 메모리를 사용하는 클래스 살펴보기
- 피해야 할 실수
- 가짜 클래스
- 한정된 용도를 지니는 클래스
- 연습문제
- 6장 재귀를 사용한 문제 해결
- 재귀에 관한 기본 지식
- 전방 재귀와 후방 재귀
- 첫 번째 접근법
- 두 번째 접근법
- 체계적인 재귀 적용 방식
- 일반적인 실수
- 매개변수 과다
- 전역 변수
- 동적 데이터 구조에 재귀 적용
- 재귀와 연결 리스트
- 재귀와 이진 트리
- 래퍼 함수
- 재귀를 사용해야 하는 경우
- 재귀를 반대하는 이유
- 연습문제
- 7장 코드 재사용을 통한 문제 해결
- 올바른 재사용과 잘못된 재사용
- 구성요소란 무엇인가?
- 코드 블록
- 알고리즘
- 패턴
- 추상 데이터 타입
- 라이브러리
- 구성요소에 대한 지식 쌓기
- 탐색 학습
- 필요에 따른 학습
- 구성요소 타입 선택
- 실제 구성요소 선택하기
- 결과 비교
- 연습문제
- 8장 프로그래머처럼 사고하기
- 자신만의 종합 계획 만들기
- 자신의 장단점에 따라 전략 세우기
- 종합 계획 세우기
- 어떤 문제든 효율적으로 대처하기
- 속이기 위한 방법 찾기
- 행맨 게임에서 플레이어 2를 속이는 데 필요한 연산
- 초기 설계
- 코딩 초기 단계
- 초기 구현에 대한 분석
- 문제 해결 기술
- 새로운 프로그래밍 기술 학습
- 새로운 언어
- 이미 친숙한 언어에 관한 새로운 기술 익히기
- 새로운 라이브러리
- 수업을 들어라
- 결론
- 연습문제
- 자신만의 종합 계획 만들기
도서 오류 신고
정오표
정오표
2 5 3 10