길벗 출판에서 엄청난 책이 나왔다. 이펙티브 파이썬 Effective Python, 똑똑하게 코딩하는 법 - 파이썬 코딩의 기술이다. 저자인 브렛 슬라킨은 구글 소비자 설문조사(Google Consumer Surveys)의 엔지니어링 리드이자 공동 설립자다. 이 책은 파이썬으로 프로그래밍을 할 때에 보다 좋은 방법(Better way)을 제시하는 컨셉으로, 59가지의 Tip을 제공해준다. 이를 통해 개발자는 파이썬 언어의 특별한 강점과 매력을 최대한 많이 활용하게 될 수 있을 것이라는 기대를 할 수 있다. 

실제로 본인도 파이썬 프로그래밍을 본격적으로 접한지 3~4년 정도되었는데, 그 이전에 대학에 입학하여 처음 접했던 C언어 스타일이 몸에 많이 익혀져 있었기에 파이썬을 사용하는데도 불구하고 C 방식의 Loop 를 고집해왔다. 예를 들면

이런 스타일의 C언어 while loop 가 있을 때, 여기에는 i 라는 index 선언이 필요하고, 그것을 종료시키기 위한 조건(i<3)과, 1회 반복이 끝났을 때의 동작(i++)을 정확히 잘 기술해주어야 한다. 그런데 파이썬은..

이렇게 두줄이면 된다. range라는 함수가 자동으로 이러한 경계를 generate 해주기 때문에 프로그래밍 입문자용 숙제인 구구단 같은 것은 파이썬으로 3~4줄만 입력하면 끝난다.


하나의 예시로 설명했을 뿐이지만, 사실 파이썬에는 이러한 파이썬 고유의 발상이 아주 많이 녹아져 있다. 그런데 프로그래머가 파이썬 언어를 제대로 배우지 않고, 기존에 자신이 쓰던 스타일을 고수하는 방식으로 파이썬 문법만 단기 속성으로 배운 경우 이와 같은 불상사가 많이 발생한다. 그런줄도 모르고 프로그래머는 "뭐야? 할만하네? 그냥 이렇게 쓰면 되지 뭐 ㅋ" 하고 넘어가버린다.


그런 의미에서 브렛 슬라긴의 Effective Python Better Way 59는 파이썬의 장점을 최대한 활용할 수 있는 팁들을 제시하는 것이다. 그래서 나와같이 '파이썬을 제대로 배우지 않고, 그냥 매번 구글링해서 조립하는 방식으로 근근히 살아가는 프로그래머'에게 적극 추천한다. 당신이 고수하던 기존의 다른 언어 스타일을 살짝 내려놓고, 파이썬 만의 세계로 초대하는 책이다. C언어에서 배열의 가장 마지막 원소에 접근하기 위해 배열을 쭉 탐색하여 길이를 계산하느라 귀찮았지 않은가? 그런 당신에게 파이썬의 a[-1] 같은 인덱스 접근방식은 신세계를 선사해 줄 것이다. 굳이 과거의 습관을 고집하지 말라!


또한, 프로그래밍의 실수로 인해 다양한 소프트웨어적 버그(결함)이 발생하는 경우가 많다. C언어나 Java의 경우에는 이를 방지하기 위한 Secure Coding Guide가 존재한다. (참고 : CERT Secure Coding Standards) 아직까지 파이썬에서 이러한 수준의 시도는 없었던 것 같은데, 그나마 본 서적에서는 에러 핸들링과 예외처리 등의 스타일을 제시하며 되도록 논리적인 결함이 발생하지 않도록 유도하고, 발생했을 경우에도 이를 적절히 처리할 수 있는 가이드라인을 보여준다. 이는 꼭 소프트웨어보안적 결함은 아니더라도 소프트웨어공학적 관점에서는 상당히 중요한 버그를 제거할 수 있을 것이다.


본 책의 구성은 다음과 같다.

1장 파이썬다운 생각

2장 함수

3장 클래스와 상속

4장 메타클래스와 속성

자신이 보통 수준의 파이썬 유저라면 여기까지만 읽어도 이미 상당한 인사이트를 얻었을 것이다.


이어서 5장은 '병행성과 병렬성'을 다루는데, 사실 그동안 파이썬은 필연적으로 느릴 수 밖에 없다는 생각에 사로잡혀 있던 나는, 그것이 편견이었음을 알게되었다. 파이썬에서도 멀티프로세싱이나 스레딩을 사용할 수 있고, 프로파일링 등을 통해 꼼꼼하게 성능을 체크할 수 있다. 많은 작업을 동시에 실행할 때에는 작업들을 조율하기 위해 파이프라이닝 등으로 병행제어를 할수도 있다. 


6장은 내장 모듈을 다룬다. 파이썬의 표준 라이브러리안에 포함된 중요 모듈들을 살펴본다. 사실 전체 집합은 너무나 방대하기 때문에, 그중 특히 자주 사용되거나(또는 권장할만한) with문을 사용해서 try/finally 동작을 구현한다거나, pickle 등의 객체->바이트스트림 전환 등의 기능들이 소개된다. 자료구조 역시 직접 구현할 필요없이 최대한 내장 알고리즘을 활용하는 것을 추천한다.


마지막 7장과 8장은 단순히 프로그래밍 언에 관한 차원을 넘어 협력&제품화라는 소프트웨어공학적 관점에서의 관리적 부분을 다루고 있다. 사실 파이썬을 정말로 제품화해서 사용하기보다는 급하게 프로토타입을 만든다거나 할 때 glue code 형식으로 사용할 때가 많기 때문에 이런 자세한 제품화 단계는 고려해본적이 없었다. 그러나 아래 그림에서 보듯, 전세계적으로 파이썬의 활용도는 굉장히 높다. 때문에 그냥 테스트용 코드가 아니라, 정말 제품용 코드로의 고민이 반드시 필요한 시점이다. 그래서 이 책의 마지막 단원을 유심히 읽어볼 필요가 있다. Github 등을 통해 오픈소스 커뮤니티에 Contribution 할 때에도 이러한 코딩 스타일과 규칙을 잘 준수하여 협력한다면 아주 평화로운 생태계가 지속되지 않을까?


출처 : http://highcode.tistory.com/16
출처 : http://highcode.tistory.com/16


결론적으로 이 책에 대한 총평을 하자면, 파이썬 언어를 처음 접하는분들 보다는, 이미 다른 언어를 통해 프로그래밍을 배웠다가 뒤늦게 파이썬으로 전향하는 바람에 그럭저럭 코딩은 하지만 파이썬만의 묘미를 아직 잘 못느끼시는 분들에게 적극 추천드린다.

원서 정보 : 

Effective Python: 59 Specific Ways to Write Better Python


이 책에서 사용된 소스코드는 길벗 출판사의 github에서 다운로드 할 수 있다. (참고 : https://github.com/gilbutITbook/006764)


CPUU님의 창작활동을 응원하고 싶으세요?