ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Effective Python
    2017. 5. 30. comments
    반응형
    Effective Python 이펙티브 파이썬 : 파이썬 코딩의 기술 - 8점
    브렛 슬라킨 지음, 김형철 옮김/길벗

     

    Python은 매력적인 언어이다. 언어가 주는 간결함 그리고 동적 타이핑, 다양한 내장 기능과 오픈소스 패키지들은 사용하지 않을 수 없게 한다. 하지만 알면 알수록 어려워지는 언어임은 틀림 없다. 모든 개발 언어가 그렇듯이 그 언어의 특성을 이해하고 코드를 "잘" 작성하기 위해서는 몰입과 경험이 필요하다. 어떻게 하면 그 언어스럽게 코드를 잘 작성할 수 있을까? 이에 대한 좋은 답은 Effective 시리즈의 책이라고 생각한다.

     

    나에게 있어 Effective 시리즈의 책들은 그 언어를 더 깊게 이해하게 도와주는 경험의 모음집이다. 그래서 사용 언어에 있어서 Effective 시리즈 책이 새로 나오면 일단 구매해서 보는편이다. 하지만 이 경험 모음집은 생각보다 진입장벽이 높다. 초보자용은 아니라 Python 코딩을 조금 해봐야 한다. 알고리즘 문제를 풀어보든 특정 오픈소스 코드를 자주 읽어보거나 간단한 개인 미니 프로젝트를 해서 그 언어에 대한 익숙함이 필요하다. 익숙함 없이 언어의 깊은 이해는 불가능하기 때문이다.

     

    저자인 브렛 슬라킨은 구글 소비자 설문조사(Google Consumer Surveys)의 엔지니어링 리드이자 공동 설립자다. 2005년부터 구글에 일했으니 벌써 12년차 개발자이다.

    이 글을 적으면서 저자 github에 등록된 ringbuffer 코드를 보는 중인데 책에 나오는 팁들이 반영되어 있는게 보이니 더 재미있는 것 같다.

     

    이 책은 Python에 대한 59개의 팁과 테크닉을 설명하고 있다. 59개의 팁은 크게 8개의 장으로 나눠져 있다.

    • 1장 파이썬다운 생각
    • 2장 함수
    • 3장 클래스와 상속
    • 4장 메타클래스와 속성
    • 5장 병행성과 병렬성
    • 6장 내장 모듈
    • 7장 협력
    • 8장 제품화

    개인적으로 가장 인상 깊었던 부분은 1장, 2장이다. Python 언어가 주는 기능과 간결함을 다시 알게 해주는 부분이다. pep8 규칙부터 시작하여, 리스트 컴프리헨션과 제너레이터 표현식, 병렬 이터레이터 처리를 위한 zip 활용등에 대해서 알 수 있다. 또한 함수 클로져, 제너레이터, 데코레이터까지 Python에서 제공하는 함수의 특징을 설명한다.

     

    Python으로 알고리즘 문제를 풀이하다 보면, C/C++ 대비 메모리 사용량이 꽤 많아지는 것을 종종 경험했다. 그 때는 Python 자체가 메모리 사용이 많은건가 싶었는데 내가 코드를 그렇게 작성한것 같다. 제너레이터를 활용했다면 메모리 사용량이 충분히 줄일 수 있지 않았을까 싶다.

     

    flask 웹프레임워크에서도 url 설정에 대해 데코레이터를 활용한 인터페이스를 제공한다. 데코레이터가 어떤 구조를 가지고 있는지 모른다면 flask에 대한 디버깅이 어려울지도 모른다.

     

    각 항목마다 내용이 끝날 때 마다, "핵심 정리"를 따로 적어두어서 내용을 마무리 학습하는데 도움이 된다.

     

    Python 성능 이야기에 빠지지 않는 GIL 이야기도 나온다. multithread는 메모리 사용면에서도 비싸고 성능도 GIL 공용 락 때문에 병렬성의 이득을 얻을 수도 없다. 

     

    개인적으로 관심이 많은 유닛 테스트에 대한 이야기가 나온다. Python은 unittest가 내장이라 어떤 프로젝트를 시작하던간에 추가 설치 없이 즉시 테스트를 작성할 수 있다. 사실 C/C++로 코드를 작성하면 일단 개발 환경에 어떤 유닛테스트 프레임워크를 사용할지 선택하고 설치를 해야 하는 비용이 들기 때문이다. 특히 알고리즘 코드를 작성할 때는 꽤 편하다. 고민할게 없다. 테스트를 그냥 작성하면 되기 때문이다. 특히 스크립트 언어는 컴파일이 즉시 되지 않아 해당 로직이 실행되기 전까지 문법적인 문제점을 찾지 못할 수 있다. 문법 문제로 이상 동작한다면 그 만큼 허탈한 상황이 있을까. 모든 기능 테스트를 매번 직접할 것 아니라면 유닛테스트는 필수다.

     

    59개의 팁들이 모두 공될만한 내용이라 생각하지는 않지만 대부분은 개인적으로 큰 도움을 받았다. 잘 모르는 부분은 Python 기술 문서를 찾아보는 수고스러움도 필요하지만 그 만큼 열정적으로 보게 된 책이다. 놀라운 점은 봐도 곧 까먹는다는 점이다. 2번 이상 책을 보고 연습하는 훈련시간이 필요하다. 아무래도 팁과 테크닉 위주로 책이 구성되어 있다 보니, 기본 기능들에 대해서는 설명이 부실한 편이다.

     

    마지막으로 이 책은 Python 중급자 진입을 원하는 사람에게 추천한다.

    반응형

    댓글

Designed by Tistory.