[리뷰] 실무에 바로 적용하는 파이썬 코드 레시피 302
in Review on Review, Book, 파이썬, 레시피, 문법, 예제, 변수, 제어문, 함수, 클래스, 예외, 런타임, 개발, 파일, 수치, 텍스트, 자료형, Db, Http, 분석, 넘파이, 팬더스, 자동화
제이펍
출판사의"실무에 바로 적용하는 파이썬 코드 레시피 302(구로즈미 다카유키 저/김모세 역)"
를 읽고 작성한 리뷰입니다.
Python 기초 문법을 활용 용도에 따라 사전식으로 정리한 책으로 80%의 빈도로 자주 활용하는 20%의 핵심을 잘 담고 있으며 Pythonic한 활용에 특화되었다는 점이 장점이다.
본 도서의 가장 큰 장점이라면 Python 문법을 필요에 따라 찾아 쓸 수 있도록 용도나 목적에 맞게 사전식
으로 잘 정리한 구성을 꼽을 수 있겠다.
추상적인 설명은 이해하기 어려울 수 있으니 예를 들어 184절 “리스트를 N개로 분할하기”를 살펴보자.
기본적인 구성은 상단에 먼저 Syntax로 대략적인 문법의 기술형태를 정리한 후 이에 대한 간단한 처리방법을 설명한다. 다음으로는 직접 어떻게 활용하는지 심플한 예제 코드가 등장한다.
이어서 소스 코드의 실행결과를 표현한 후 부가 설명을 작성하는 순서로 기술된다. 이런 형식은 이 책에서 다루고 있는 302개 절에서 공통적으로 차용하고 있는 구조이다.
이러한 구성 방식이 마음에 드는 이유는 차후에는 본인이 기억하지 못하는 특정 부분을 형광펜
으로 그어놓고 기억이 떠오르지 않을 때 마다 빠르게 접근할 수 있기 때문이다.
처음 접하는 문법이나 용도라면 모든 내용을 전부 읽어야겠지만 백문이 불여일타라고 한 번 심도 있는 사고 과정을 거쳐 프로그램으로 구현한 내용은 머릿속에 오래 기억이 남기에 다음번에 참조할 때는 기억하기 어려운 부분만 남게 된다.
이를 잘 메모하여 빠르게 찾을 수 있게 책을 단권화하거나 자신만의 방법으로 잘 인덱싱한다면 즉, 자신의 경험과 책이 하나로
합쳐진다면 차후에 매우 편리하게 활용할 수 있을 것이다.
따라서 이 책을 잘 활용하기 위해선 목차를 얼마나 입체적, 구조적으로 파악하고 있는지가 중요하다. 302개의 절로 이루어진 각각의 용도는 결코 적지 않은 숫자이기 때문에 302개의 키워드 별로 단순히 책에서 분류한 24장의 접근법으로 활용하는 것 외에 자신만의 재구성
이 있다면 좋을 듯하다.
예를 들면 18장에서 23장에 이르는 내용은 데이터 과학 혹은 분석에서 자주 사용하는 라이브러리들의 주제를 담고 있다. 넘파이나 팬더스 같은 라이브러리는 데이터 분석에서 빼놓지 않고 활용하는 라이브러리이므로 데이터 특성을 타지 않는 애플리케이션을 개발할 때는 주로 활용할 일이 없을 것이다.
반대로 데이터와 관련된 연산 처리를 할 경우에는 다른 어느 챕터보다 자주 활용하게 되는 장이 될 것이기에 스스로 필요로 하는 용도별로 빨리 접근하는 방식을 정리해 놓는 것이 유용하다.
본 도서를 다양한 개발 경험 과정에 익히고 녹여나가면 아마 잘 외워지지 않는 복잡한 문법이나 패턴만 남게 될 것이고 이를 종이 몇 장 정도로 단권화 할 수 있다면 이 책을 잘 습득했다고 평가할 수 있을 것 같다.
이 책이 단순히 문법을 사전식으로 열거한 구성에 지나지 않는다면 책의 효용은 절반으로 떨어질 것이다. 사전식으로 쉽고 빠르게 찾아볼 수 있다는 점 외에도 몇가지 장점이 더 있다.
우선 위 184절의 내용에도 몇가지 숨은 저자의 노력을 발견할 수 있다.
보통 다른 언어에서 리스트나 배열을 분할할 때는 별도의 함수를 활용하는 등의 방법으로 몇 줄에 달하는 별도의 소스 코드가 필요함을 직관적으로 느낄 수 있을 것이다.
하지만 Python은 다른 언어와는 다른 리스트 컴프리헨션이라는 장치가 있기에 단 한 줄의 코드로 이를 직관적으로 표현할 수 있다. 이처럼 단순히 문법을 열거한 것이 아니라 Python만의 장점, 독특한 기능, Pythonic한 장점들은 거의 빠지지 않고 명시
되어 있기에 다른 언어의 고정관념에서 탈피하는데도 이 책은 많은 도움이 된다.
또 하나의 장점은 입문자가 Python에 능숙해지기 위한 일종의 학습 플랜의 범위를 좁혀주는 효과
도 있다.
Python의 기본 문법 책을 익혀 본 독자라면 공감하겠지만 구조화되지 않은 책을 절차식으로 쭉 읽어나가다보면 기억이 오래 남지 않는다는 점, 기억은 나는데 가물거려서 필요 내용을 찾기위해 한참 책을 검색했던 경험들이 있을 것이다.
그리고 처음엔 이런 기초 문법들이 등고선 형태로 입체적으로 그려지지 않아 각각의 내용이 다 평범해 보인다. 즉, 내용별로 주제별로 가중치가 보이지 않기 때문에 어떤 내용을 더 중점적으로 학습해야하는지 어떤 내용은 빨리 뛰어넘고 필요할 때 찾아봐야 하는지 판단하기가 어렵다.
이는 학습 효율이 많이 떨어질 수 있는 부분이다. 나중에 경험과 내공이 쌓인 후에야 ‘아.. 이 부분은 괜히 열심히 외웠구나..’ 혹은 ‘이건 엄청 자주 활용되는 부분인데 처음부터 그냥 암기하는 편이 나았겠구나..’등의 판단을 하며 학습의 비효율성을 실감할 것이다.
반면 이 책은 가장 중요한 부분, 가장 활용도가 높은 부분의 주제를 뽑아 놓은
책이다. 수 많은 학습 범위를 무조건 알아야 하는 부분으로 한정하여 학습 범위를 좁혀주는 셈이다.
입문자라면 괜히 모든 내용을 다 살펴볼 것 없이 가장 자주 활용하는 본 도서만 일단 익히는 것을 목적으로 해도 학습 능률이 결코 떨어지지 않을 것이다.
위 예제인 184절 전후로는 리스트와 관련된 문법과 패턴들이 배치되어 있다. 리스트는 Python에서 정말 자주 활용하는 중요한 자료구조로 반드시 다양한 형태의 활용법을 익혀두어야 한다.
그렇지 않을 경우 타 언어를 읽고 해석하는 독해력이 떨어짐은 물론 스스로 비 효율적인 코드를 생산해 내어 추후 리팩토링을 필요로 하는 기술적인 부채를 안게 되거나 타 개발자와의 협업에 오버헤드를 발생시킬 수 있다.
리스트를 생성하는 방법, 정렬, 일괄처리, 분할, 추출, 셔플, 중복요소 제거 등 어떤 형태의 데이터 리스트가 주어져도 엑셀보다 빠르게 사칙연산 다루듯 즉각적인 처리를 위한 훈련이 필요한데 약 10년 간 Python을 익히며 암기하듯 중요하다 생각한 패턴이 거의 다 담겨있어 놀랐다.
이렇듯 이 책은 놓치지 말아야 할 중요한 특징들, Python만의 장점을 십분 활용할 수 있는 80%의 빈도로 자주 활용하는 20%를 잘 담고 있다
평하고 싶다.
또 이 책은 단순히 문법적인 요소나 활용 예제만을 담고 있는 것은 아님을 소개하고 싶다. 아래 그림은 118절에 등장하는 “안티 패턴 개선하기” 절의 일부분이다.
보다시피 단순한 문법 보다는 개발자가 피해야 할 패턴을 소개하며 보다 Pythonic한 개발 습관
을 익히는데 도움을 준다. 삼항 연산자를 잘 활용하면 보기에도 깔끔한 것은 물론 코드량을 줄여줘 에러율을 줄이고 유지보수 확장성 측면에도 품이 줄어든다. 책에 명시한 것 처럼 재대입을 방지하는 것도 장점이다.
또, 제너레이터나 데커레이터와 같은 Python 기초 문법 중 꽤 난이도가 있는 부분도 빠르게 학습하는 데
도움된다. 이런 부분들은 얼마나 깊이있게 학습하느냐에 따라 본 도서에서 다루고 있는 부분의 수십 배의 분량을 더 읽고 익혀야 할 필요가 생길 수도 있다.
하지만 이런 난이도 있는 주제를 처음 접하는 독자라면 아무리 수백 페이지의 학습에 빠져들었다 할지라도 한 달만 지나면 중요한 키워드 몇개만 머리속에 남는 다는 사실을 발견하게 될 것이다.
그 몇개만 남은 주요 키워드가 이 책에 단 2 ~ 3페이지로 압축되어 있다고 보면 된다. 이를 먼저 익히고 보다 자세한 활용방법을 익혀간다면 보다 적은 노력으로도 기억에 오래 남길 수 있고 보다 편하게 학습할 수 있을 것 같다.
24개의 장은 마치 프로그래밍 언어 전공 과목을 실전적으로 재구성한 것처럼 보인다. Python으로 다룰 수 있는 거의 모든 영역
이 담겨있다.
개발환경 구성에서 부터 함수, 변수, 제어, 함수, 클래스, 객체와 같은 기초 문법에서 부터 데이터 분석 관련 라이브러리, 수치 및 문자열 처리, 리스트 등의 Python에 특화된 자료구조, 거의 모든 확장자 파일을 다룰 수 있는 IO 처리와 데이터베이스, 크롤링을 비롯한 HTTP 영역에의 활용, 자동화 등 Python의 활용력을 높여주는 것 이상으로 프로그래밍의 세계를 체계적인 안목으로 정리할 수 있는 기회도 주어지는 셈이다.
무엇보다 Python 외 다른 언어에 능숙한 사람에게는 이 책이 Python 학습 효율을 극도로 높여줄 수 있을거라 생각한다. 그 외에도 프로그래밍의 기초 정도는 알고 있는 사람이라면 이 책으로 Python을 첫 출발하는 것도 아주 좋은 선택이 될 것 같다.
이 두 후보군 만큼은 아니겠지만 그 외에 Python을 능숙하게 다루고 싶은 독자 누구에게나 추천하고 싶은 도서이다.
Python에 능숙해지고 나면 자신의 머릿속에 나름의 구조화된 키워드들이 정리되어 있을텐데 이 책의 구성과 비교하고 정반합하는 과정에서 더 효율적인 Python 접근 방식을 정리할 수 있을 것이라 확신하기 때문이다.