[서평] 러닝파이썬과 함께하는 중급자 입문

By | 2018/07/14

러닝파이썬

2009년 학부시절, 친구들과 함께 새로운 프로그래밍 언어를 공부해보려고 알아보던 중, 당시 공개된지 몇 달 되지 않았던 파이썬3를 알게 되었다. 이 때부터 파이썬3로 여러 토이 프로젝트도 진행해보고, 대학원에 진학해서는 지금까지 데이터 분석이나 웹 개발 등으로 아주 유용하게 써먹고 있다. 계속해서 파이썬에 관심을 갖고 공부하다보니 현재 파이썬 관련 책만 20여권 정도 소유하고 있다. 이렇게 파이썬을 자주 사용하고 공부하면서도 내가 파이썬에 대해 깊이 이해하고 있다는 생각이 들지 않았다. 뭔가 더 공부해보고 싶어도, 시중에 나온 중급자를 위한 책이라고는 파이썬을 활용한 데이터분석이나 웹개발 관련 책들이 대부분이고, 파이썬 언어자체를 좀 더 깊이 이해해보고자 하는 중급자를 위한 파이썬 책은 매우 드물었다. 가지고 있는 책들 중엔 Effective Python(한글 번역판 제목: 파이썬 코딩의 기술) 이나 파이썬 완벽가이드 정도가 그나마 내가 원하는 책인 것 같다. 이 와중에 O'Reilly사의 Learning Python 국내 번역판이 나왔다는 소식을 들었다. 책의 두께가 무려 2,000페이지 (상/하권 각 1,000페이지). 그 두께의 압박에 구매를 망설이던 중, 운 좋게 제이펍의 이벤트에 당첨되어 책을 받아보게 되었다. 무료로 받은 책이긴 하지만, 워낙에 보고 싶었던 책이고 내용의 깊이도 만족스러웠기에 예제 소스까지 책 내용을 나름 꼼꼼하게 챙겨보았다 (하루에 1-2시간 정도씩 읽었는데도 1달 좀 넘게 걸렸다).

책의 두께에서 짐작할 수 있듯, 이 책은 파이썬에 대해 매우 방대한 양을 아주 깊게 다루고 있다. 특히 마음에 들었던 점은 외부 라이브러리보다는 파이썬의 언어 자체에 대해 아주 깊이 다루고 있다는 점이다. 예를 들면, 파이썬의 표준 출력 메커니즘이나 이터레이터/제너레이터의 상세 동작 원리, 쿨래스 등, 시중에 쏟아지는 파이썬 입문자용 책에선 다루지 않는 매우 중요한 내용들에 깊이 깊이있게 설명하고 있다. 보통 프로그래밍 언어 입문자용 책이 300-500 페이지 정도 되는 편인데, 이 책에서는 try/except를 활용한 예외처리 설명만해도 이미 100페이지에 달할 정도이다. 데코레이터는 일반 입문자용 책에서는 설명 자체를 하지 않는 경우가 많은데, 이 책에서는 약 100페이지 정도를 할애하여 상세하게 설명한다. 클로저에 대한 설명도 상당히 재밌었다. 단순히 변수의 스코프 설명 수준을 넘어, 클로저가 왜 필요하며 어떻게 동작하는지 다양한 예제를 이용하여 상세하고 친절하게 설명하고 있다. 클래스를 설명하는데는 무려 300페이지 이상 할애하였다. 이 책의 깊이가 어느 정도인지 이정도면 상상이 가는가?!

이런 점이 큰 장점이긴 하지만, 초보자에게는 큰 장벽일 수도 있겠다는 생각이 들었다. 특히 다른 프로그래밍에 대한 경험이 없는 파이썬 입문자에게는 이해가 불가능 한 수준이니, 파이썬을 처음 공부해보고자 하는 사람은 이 책으로 파이썬에 입문할 생각은 말아야겠다. 초보자에게 이 책을 추천하지 않는 다른 이유가 한가지 더 있다. 이 책의 초반부에서 파이썬의 기초적인 문법들을 간단하게 언급하기는 하지만, 파이썬을 공부해 본 사람들을 위한 워밍업으로 간단히 언급하는 수준이다. 특히, 뭔가를 설명할 때, 아직 앞부분에서 설명하지 않은 내용을 자꾸 미리 언급한다. 예를 들면, 변수 타입 설명하는데 벌써부터 연산자 오버로딩, 다형성에 대해 언급하고, For문도 제대로 배우지 않았는데 컴프레헨션식을 언급한다. 이러면서, "좀 더 자세한 내용은 뒷 장의 XX장에서 살펴보겠지만” 이런 식이니, 초보자는 당췌 무슨 말인지 혼란스러울 것이다. 단언컨데, 입문자는 절.대.로. 이 책을 제대로 이해할 수 없다. 파이썬 경험이 없더라도 최소한 C++이나 JAVA 와 같은 객체지향 프로그래밍 지식이 반드시 필요하다. 이 책의 서문에서는 입문자도 고려했다고 이야기하지만... 차라리 처음부터 이 책의 컨셉을 중급자를 위한 책으로 잡았어야 하지 않았을까라는 생각이 든다.

파이썬에 대한 깊은 이해를 제공한다는 점에서 개인적으로는 매우 만족스럽지만 몇가지 아쉬웠던 점이 있다.

첫번째로 과도한 버전별 차이 설명이다. 이 책에서는 각 기능들을 설명할 때, 해당 기능이 파이썬2와 3에서 어떻게 다르게 동작하는지도 친절하게 설명하고 있다. 심지어 같은 파이썬3 내에서도 3.2에서는 되지만 그 이후로는 다르게 써야한다 등의 하위 버전별 차이까지 상세하게 설명하고 있다. 파이썬의 발전과정을 이해하는데 도움을 줄 수도 있고, 파이썬의 다양한 버전을 관리하는 사람들에게는 큰 도움이 될수도 있겠지만, 개인적으로는 그냥 파이썬3.6 기준으로만 설명했어도 파이썬의 동작 원리에 대해 이해하는데 충분했을 것 같다. 이런 버전별 차이까지, 너무 많은 것을 담으려하다보니 간혹 머리가 혼란스러웠다.

또한 종종 보이는 오타와 자연스럽지 못한 번역들이 책을 읽는 내내 거슬렸다. 그나마 다행인건 파이썬에 대한 기본 이해가 있는 사람이 예제소스까지 차근차근 읽으면서 공부하면 틀린 부분을 찾아낼 수 있을 정도의 수준이다. 오타야 정오표가 나오면 참고하면 되겠지만, 문제는 번역인데, 번역의 특성상 아주 자연스럽게 번역한다는건 어렵다는 것을 알고 있다. 하지만 독자가 어떻게 이해할 것인가를 생각하기보다는 어떻게 직역을 할 것인가에 초점을 맞춘 듯 한 아주 부자연스러운 번역은 이 책의 최대 단점이다.

결론적으로, 이 책의 깊이는 이런 몇몇 단점들을 덮기에 충분하다. 써드파티 라이브러리 설명없이, 순수하게 파이썬 언어 그 자체에 대한 설명으로 약 2,000페이지 분량이다. 파이썬 입문 수준을 넘어, 파이썬 언어에 대해 깊은 이해가 필요한 초중급 이상의 개발자에게 이 책을 강력 추천한다. 두께에 쫄지말고, 강력한 의지로 이 책에 도전한다면 확실히 달라진 자기 자신을 볼 수 있을 것이다.