티스토리 뷰

728x90

리뷰에 앞서

"출판사 영진닷컴으로부터 책을 제공받아 작성된 리뷰입니다."

 

거의 1년 만에 블로그를 포스팅하는 기분이다. 그동안 현생이 너무 바쁘고, 힘든 일도 나를 방문해주어 이를 핑계 삼아 블로그로부터 시선을 애써 돌리고 있었다. 그렇게 동굴 속을 또 한 번 헤매고 있던 와중, 이번 일을 통해 옛날 취준생 시절 열심히 파이썬 공부를 하던 때를 떠올리다 보니 어찌어찌 동굴 밖으로 한 걸음 나오게 되었다. 이번 일을 기회삼아 다시 예전처럼 열심히 현생을 살아보자! (역시 나는 방목해서는 안될 부류인가 보다 ^.^)

 

동물도 코딩을 배우는 IT 열풍이란..

누가 읽으면 좋을까?

책 제목에서부터 언급되어 있듯이 이 책은 파이썬 프로그래밍을 "시작하는" 분들에게 적극적으로 추천할 수 있는 책이다.

 

보통 개발을 처음 시작하는 분들은 대학 강의 또는 온라인 강의 사이트에서 프로그래밍 언어 강의를 수강할 것인데, 언어적인 측면에서 도움이 될 수는 있겠지만 그것이 현업 프로젝트에 도움이 된다거나, 취업 시 코딩 테스트에 많은 도움이 되는 것은 아니다.

 

코딩 테스트를 치르기 위해서는 언어에 대한 개념과 더불어 이를 문제 해결 능력과 연결 지을 수 있어야 한다. 이 책은 그러한 점에서 도움이 되는 책이라 할 수 있는데, 이 책을 읽으면 좋을 분과 그 이유에 대해서 아래에서 설명하겠다.

 

1. 코딩 테스트 또는 프로그래밍 지식이 전무한 분

 

입문자가 처음부터 자료구조와 알고리즘을 심도 있게 공부하면 쉽게 지칠 수 있다. 하지만 이 책은 스택, 큐 등 자료구조에 대한 내용이나 유명한 알고리즘의 개념에 대해서 직접적으로 언급하지 않는다. 각 문제마다 파이썬의 내장 메서드를 통해 자료구조 및 알고리즘을 맛볼 수 있게 함으로써 언어 개념 및 알고리즘 공부를 함께할 수 있는 효과를 준다.

 

특히 다른 강의에서는 상세하게 설명하지 않는 파이썬 설치 방법이라거나 파이썬 쉘 실행방법 등 궁금한데 명쾌하게 알려주는 곳이 없고, 뭐라고 검색해야 할지도 몰라서 경험적으로 깨달아야 하는 부분에 대해서도 상세하게 알려준다. 따라서 프로그래밍을 한 번도 해보지 않은 입문자에게 추천한다.

 

입문자에게 파이썬이 좋을까요?라는 의문점이 들 수도 있다. 이러한 의문이 있는 분은 아래 접힌 글을 펼쳐서 읽어보기를 추천한다.

 

더보기

만약 본인이 개발자는 되고 싶은데 무얼 해야 할지 막막하고 개발의 "개"자도 모른다면 나는 개인적으로 파이썬을 먼저 공부하는 것을 추천한다.

 

프로그래밍에는 정말 다양한 종류의 지식이 필요하다. 여기에는 언어적 문법 이해도도 있을 것이고, 네트워크, OS와 같은 CS 지식과 더불어 현업 도메인 지식이나 TDD, 애자일과 같은 SW 공학 지식도 포함된다.

본인이 목표하는 바가 뚜렷하다면 해당 주제로 검색을 해서 커리큘럼을 짜 나가면 되겠지만, 그렇지 않다면 먼저 코딩이란 무엇이고  이것이 어떻게 동작하는지에 대해서 이해하고 이를 기반으로 다양한 프로젝트를 하며 본인이 흥미를 느끼는 분야를 탐색해야 한다고 생각한다.

 

다양한 언어 중 파이썬이라는 언어는 책에도 언급되어 있지만, 타 언어에 비해 더 구조적이고 읽기 쉽다. 또한 다른 언어에서 사용할 수 없는 많은 기능들을 포함한다. 따라서 사용자가 보다 쉽게 프로젝트를 구현할 수 있다는 장점이 있다. 또한 이 언어는 특이하게도 웹, 임베디드 시스템, 데스크탑 앱, 게임 등 다양한 영역에서 사용될 수 있기에 아직 목표가 정해지지 않은, 또는 목표가 쉽게 바뀔 수 있는 입문자에게 적극적으로 추천한다.

 

2. 다른 언어 개발 경험이 조금 있지만 파이썬으로 코딩 테스트를 응시하고 싶은 분

 

내가 바로 이 케이스에 속한다. 나는 IoT SW 엔지니어로서 대부분의 프로젝트에서 C/C++을 사용했었다. 하지만 C/C++을 사용해 코딩 테스트를 치는 것은 상당히 어려울 수 있다. 특히 문자열 처리가 매우 악랄한데 파이썬에서는 문자열 처리는 물론 BFS, DFS 알고리즘도 단 몇 줄이면 완성할 수 있다. 그래서 코딩 테스트에 있어 상당히 간편하고 쉬운 파이썬이 많이 추천되고는 한다.

 

그렇지만 코딩 테스트 하나를 위해 두꺼운  파이썬 책 하나를 사서 현업에 필요도 없는 깊은 내용까지 공부하는 것은 상당히 비효율적이다. 중요한 것은 위에서 언급했듯이 이 언어의 개념을 문제 해결 능력과 어떻게 연결 짓는가이기 때문이다. 그러한 점에서 이 책은 파이썬 자체의 깊은 개념보다는 파이썬의 각 핵심 개념들을 코딩 테스트 문제 풀이에 어떻게 적용하는가에 초점을 맞추고 있기에 추천한다.

 

이런 분들은 아쉬울 수 있어요

재차 얘기하지만 이 책은 파이썬 프로그래밍을 "시작하는" 분들에게 적극적으로 추천할 수 있는 책이다. 따라서 이미 파이썬에 대해 잘 알고 있었던 분이나 알고리즘 자체에 대해 좀 더 공부하고 싶은 분에게는 다소 아쉬울 수 있다. 따라서 이 책을 읽을 시 아쉬움을 느낄 수 있는 분과 그 이유에 대해서 아래에서 설명하겠다.

 

1. 파이썬에 대해 더 깊게 배우고 싶은 분

 

파이썬에 대해 조금 더 깊게 배우고 싶은 분들은 아마 이미 파이썬의 핵심 개념들에 대해서는 통달했을 것이다.

 

예를 들어 파이썬의 GIL이 어떻게 동작하는지, 리스트 컴프리헨션을 어떻게 사용하는지, 바이트 코드가 어떻게 변환되는지, 제너레이터를 어떻게 어떤 상황에서 사용하면 좋은지 등등 이러한 내용을 찾는 분이라면 번지수를 잘못짚었다. 사실 이러한 내용에 대해서 잘 모르더라도 파이썬으로 코딩 테스트를 치르는 데에는 문제없다. 이 책은 파이썬의 핵심 개념을 코딩 테스트에 어떻게 활용하는가에 집중되어 있으므로 다른 책을 살펴보는 것이 좋을 듯하다.

 

2. 더 다양하고 깊은 지식을 요구하는 알고리즘과 자료구조를 공부하고 싶은 분

 

이 책에서 코딩 테스트 내용을 다루기는 하지만, 아쉽게도 알고리즘과 자료구조에 대해 깊은 내용을 설명하고 있지는 않다. 물론 빅오 계산법이라거나 간단한 정렬 및 탐색 알고리즘에 대해서는 소개하고 있다. 그렇지만 백준 골드나 플래티넘 이상에서 필요로 하는 보다 심화된 알고리즘에 대해서 배우고 싶다면 다른 책을 살펴보는 것을 추천한다.

 

본격적인 리뷰 시작

위에서 이 책을 읽으면 좋을 분과 아쉬울 수 있는 분에 대해 설명하였다. 지금부터는 이 책이 어떤 식으로 구성되어 있고, 어떤 특징을 갖고 있는지를 설명해보겠다.

 

목차

목차는 아래와 같이 구성된다.

 

총 10개의 챕터로 구성되어 있다

 

목차에서 볼 수 있듯이 각 챕터마다 파이썬의 핵심 개념들에 대해 설명하고 있으며, 이러한 개념들을 실제로 어떻게 사용할 수 있는지, 코딩 테스트에서는 어떻게 활용할 수 있는지에 대해 설명하고 있다. 또한 목차 제목에는 포함되어 있지 않지만, 파이썬의 기능 중 하나인 모듈 패키지를 어떻게 사용하는지, 문자열을 어떻게 다루는지, 이터러블 객체의 인덱싱 등에 대해서도 잘 설명되어 있다.

 

언어적 핵심 개념 외에 "6장. 함수를 사용한 프로그램 디자인"에서 하향식 설계라는 개념을 통해 프로그램을 모듈식으로 설계하고 구현하는 방법이나 "10장. Big-O와 프로그램의 효율성"에서 런타임 최적화와 타이밍 지표에 대해서도 많은 페이지를 할애하여 설명하고 있다. 프로그래밍은 문제를 분할하여 논리적으로 해결하는 것이며, 단순 구현에 그치지 않고 효율을 어떻게 끌어올릴까에 대해 끊임없이 고민해야 하므로 입문자에게 있어서 좋은 내용이라 생각한다.

 

구성

각 챕터 내에서는 아래와 같은 구성 방식을 가진다.

 

문제 - 테스트 케이스 탐구 - 문제 풀이에 필요한 개념 설명 - 개념 확인용 객관식 문제 - 문제 해설 - 연습 문제

 

이때 좋은 점은 개념 설명에 앞서 문제를 먼저 제시하여 독자가 스스로 문제에 대해 고민해볼 시간을 준다는 점이다. 예제로 제공되는 문제가 극악무도한 난이도를 가지는 것은 아니라서 "테스트 케이스 탐구"에서 제공되는 힌트를 곁들인다면 어렵더라도 시도해 볼 수 있는 문제라고 생각한다. 

 

독자는 문제에 대해 고민해본 다음에 뒷 장에 이어 나오는 "문제 풀이에 필요한 개념 설명"을 통해 개념에 대해 숙지하고, "개념 확인용 객관식 문제"를 통해 앞서 배운 개념에 대해 간단히 테스트할 수 있다. 그리고 문제 해설을 통해 문제를 어떤 식으로 풀이하면 되는지에 대해 확인할 수 있는데, 이때 문제 풀이에서는 중요한 행마다 번호를 부여해서 순차적으로 아주 상세하게 풀이 과정을 설명하고 있다. 따라서 입문자도 충분히 내용을 이해하기 쉬울 것이라 생각한다. 하지만 문제 풀이 과정이 너무 줄글로 작성되어 있어서 읽는데 피로도가 쌓일 수는 있을 것 같다.

 

문제 풀이과정

 

마지막으로 연습 문제를 통해서 앞서 배운 개념들에 대해 복습할 수 있다. 연습 문제에 대한 풀이는 없지만, 답안(코드)에 대해서는 해당 문제 출제 온라인 사이트에서도 확인할 수 있고, 또는 영진닷컴에서 전체 예제 및 문제에 대한 답안(코드)을 한 번에 다운로드할 수도 있다.

 

부록CD 다운로드를 클릭하면 전체 답안(코드)을 한 번에 다운로드 받을 수 있다

 

특징

위에서 많이 언급했지만, 이 책의 특징을 꼽으라면 다음과 같을 수 있겠다.

 

1. 각 챕터마다 배운 파이썬 핵심 개념을 코딩 테스트 문제에 연결 지을 수 있다.

 

보통 프로그래밍 언어 강의 또는 도서를 듣고 읽을 경우, 그래서 이 개념을 코딩 테스트에 어떻게 적용하면 되는데?라고 생각하는 경우가 있다. 마치 학창 시절의 수학 문제를 풀 때와 같다. 수학 공식을 외웠음에도 문제 접근 방법을 몰라 수학 시험지에서 비가 내리던 옛날 추억이 떠오른다..

 

이 책에서는 "테스트 케이스 탐구"에서 문제 접근 방법을 정리하고, "개념 설명"을 통해 어떠한 개념이 왜 필요하며, 어떤 식으로 사용되는지에 대해 설명하고 있다. 마지막으로 "문제 해설"에서 실제로 코딩 테스트 문제에 앞서 배운 개념을 적용하여 독자가 개념 이해 및 코딩 테스트 문제 풀이를 보다 쉽게 할 수 있도록 도와준다.

 

2. 독자가 최대한 이해하기 쉽게 익숙한 용어를 사용하며, 풀이 과정을 상세하게 설명한다.

 

아무래도 책의 주된 대상이 입문자이다 보니 많이 어려운 용어를 사용하지 않으며, 추상적인 용어도 마치 옆 자리 친구가 설명하듯이 최대한 풀어서 설명한다. 특히나 "문제 풀이"의 풀이 과정은 매우 친절한데, 중요한 행마다 번호를 부여하여 아주 상세하게 설명한다. 예를 들자면 아래와 같은 내용이 있다.

 

⑤ 우리의 다음 임무는 데크의 각 카드를 보고 플레이어에게 점수를 주는 것입니다. 일반적인 for 루프를 사용하면 현재 카드를 볼 수 있습니다. 그러나 그것만으로는 충분하지 않습니다. 현재 카드가 높은 카드라면 이후의 카드도 볼 수 있어야 합니다. 이를 용이하게 하기 위해 범위 기반 for 루프를 사용합니다.

 

⑥ 이 루프를 반복할 때마다 데크에서 가져온 카드를 기반으로 현재 플레이어에게 부여되는 점수를 결정합니다. 점수를 얻는 각 규칙은 데크에 남아 있는 몇 장의 카드에 의해 결정됩니다. remaining 변수가 남은 카드의 수를 알려 줍니다.

 

for i in range(NUM_CARDS):        # 5
    card = deck[i]
    points = 0
    remaining = NUM_CARDS - i - 1 # 6

	... (생략)

 

위에서 볼 수 있듯이 이 행에서 왜 이러한 코드를 작성했고, 이 코드의 역할은 무엇인지에 대해서 자세하게 설명하고 있는 것을 확인할 수 있다.

 

3. 파이썬 핵심 개념 외에 기초적인 프로그래밍 지식도 함께 기술되어 있다.

 

앞서 언급했듯이 파이썬 핵심 개념 외에 하향식 설계 방법, docstring을 작성하는 방법, 프로그램의 런타임을 확인할 수 있는 지표는 무엇인지와 같은 기초적이지만 필수적인 프로그래밍 지식도 함께 기술되어 있다. 물론 책 주제로부터 벗어나는 내용이다 보니 그리 상세하게 기술되어 있지는 않다. 하지만 이와 같은 개념들을 실제로 어떻게 적용할 수 있는지 이해하는 데에는 문제없다고 생각한다. 보다 심도 깊은 내용을 원한다면 이 책에서 알게 된 키워드를 바탕으로 검색하면 될듯하다.

728x90