200101
책 제목은 ‘자료구조와 알고리즘’이지만, 다루는 내용은 ‘파이썬으로 배우는 컴퓨터공학 기초’에 가깝다.
책 제목은 ‘자료구조와 알고리즘’이지만, 다루는 내용은 ‘파이썬으로 배우는 컴퓨터공학 기초’에 가깝다.
Python의 기본 자료구조, collection 자료구조뿐만 아니라 모듈, 데코레이터, 멀티프로세싱에 유닛 테스트까지 다양한 범위를 커버한다.
Python 자체에는 익숙하지만 프로그래밍 언어로써는 아직 생소한 사람들에게 적합한 책. 다만 설명은 상세하지 못하다.
개인적으로, 파이썬이 개발자나 컴퓨터공학 전공자 수준을 넘어 대중화된 계기는 프로그래밍 언어로써의 효용성과 가치가 재발견되었기 때문이 아니라, 빅데이터 유행에 R과 함께 데이터분석 도구로 각광받다가 파이썬의 딥러닝 프레임워크가 크게 흥했기 때문이라고 보고 있다. 스크립트 언어라서 개발환경 설치가 까다로운 것도 아니고 기본적인 문법도 어렵지 않기 때문에, 많은 사람들이 직간접적으로 파이썬을 접한다. 개발 자체에 조금 더 흥미를 들이면, 딥러닝 프레임워크나 데이터분석 라이브러리뿐만 아니라 서버 개발, 웹 개발 라이브러리를 배울 수도 있다.
그러나 파이썬으로 할 수 있는 것들을 이것저것 해보다 보면 답답한 느낌이 들기 마련이다. 프레임워크 사용법을 배우지만, 프레임워크에서 접하게 되는 파이썬의 새로운 문법이나 표현식은 생소하기 때문이다. 내 경우는 django로 웹 개발을 하면서 decorator라는 개념을 처음 접했는데, 당장 구현은 해야 하니 어떻게든 활용할 수는 있어도 ‘정확히 어떤 개념에서 파생된 문법이며, 왜 필요한지’ 와 같은 의문은 해결하지 못했다.
책 제목은 ‘파이썬 자료구조와 알고리즘’이지만, 책 내용을 정확히 표현하자면 ‘파이썬으로 배우는 컴퓨터공학 기초’에 가깝다. 첫 장부터 부동소수점 float의 이진수 표현, 제너레이터가 등장하고, 모듈 부분에서 ‘활성 레코드’ 개념설명이 등장하며, 디자인 패턴과 unit testing, 멀티프로세스와 멀티쓰레딩의 예시까지도 다룬다.
모듈을 실행할 때 스택, 힙, 데이터에 각각 어떤 것들이 들어가는지 소개하고, 멀티프로세스와 멀티쓰레드를 설명하며 데드락과 스핀락, 뮤텍스와 세마포어를 이야기한다. 객체지향 개념을 다루며 다형성과 특수성을 구현한 코드를 사례로 들고 있다. 이 개념들은 컴퓨터공학의 운영체제나 프로그래밍 언어론 등에서 다루는 내용들이다. 파이썬의 리스트, set, dictionary, 튜플 같은 자료구조와 정렬 알고리즘, 탐색 알고리즘도 소개하고 있지만, 책의 전반적인 구성은 오히려 컴퓨터공학 수업에서 다룰 법한 내용들이다.
하지만, 총 355페이지에 불과한 책 분량에서 알 수 있듯 설명이 상세하거나 친절하지는 않다. 파이썬 코드만으로는 이해할 수 없는 개념이 상당히 등장하는데, 책 내용 대부분이 ‘파이썬 공식 docs를 참고하라’며 부가적인 설명을 거의 하지 않기 때문이다. 빵빵한 컴퓨터 자원으로 jupyter notebook에서 데이터분석 위주로 파이썬을 사용하던 사람이 Unit testing의 의미가 뭔지, 왜 필요한지를 이해할 가능성은 높지 않다. 라이브러리 위주로 파이썬을 접한 사람들은 라이브러리에서 제공하는 멀티프로세스와 멀티쓰레드 구현함수를 쓰지, 파이썬 내장모듈인 subprocess나 threading을 불러와서 멀티프로세스나 멀티쓰레드를 작업하지는 않는다. 데드락과 스핀락 같은 용어는 운영체제나 데이터베이스 시스템에서 접하지 않으면 거의 등장하지 않는 용어다.
그렇기 때문에, 이 책은 파이썬 초보자나 기본 문법에 익숙한 사람, 또는 라이브러리를 다루는 데 능숙하지만 컴퓨터 시스템에는 관심이 없는 사람이라면 큰 도움이 되지 않으리라 생각한다. 파이썬의 기본 문법이나 파이썬으로 구현한 정렬 알고리즘, 트리 구현방법은 인터넷이나 다른 서적에서 더 상세하고 친절한 설명을 찾을 수 있다. 중간에 있는 객체지향 언어론 / 디자인 패턴 / 단위 테스트 같은 개념은 이 책의 텍스트를 읽는다고 해서 한 번에 이해될 개념이 아니다. 컴퓨터공학 학부 전공에서 한 학기를 들여 배우는 내용들이기 때문이다.
읽다가 알게 된 사실인데, 링크드 리스트는 Abstract Data Type이면서 동시에 Data Structure였다. 작년에 읽고 리뷰했던 ‘한 권으로 그리는 컴퓨터과학 로드맵’에서는 Linked List, Double Linked L:ist를 전부 Data Structure 범주에 넣어 설명했었다. 그런데 이 책에서는 Linked List를 Abstract Data Type (ADT) 범주에 두고 설명하고 있었다. 왜 두 책의 설명에 차이가 있나 싶어 구글에 검색해본 결과 Linked List는 ADT이면서 동시에 Data Structure라고 하더라...
이 책 설명의 소소한 오류를 하나 꼽자면, map() 함수는 반환값이 리스트가 아니라 map 객체다. Map함수 결과값에 list 함수를 씌워 리스트로 변환하거나, tuple 함수를 씌워 튜플로 변환해 사용한다. 또는 map함수 결과값 개수에 맞게 변수를 할당해서 값을 대입해야 한다. 책의 예시는 전부 list(map(함수, 시퀀스))로 되어 있으므로 반환값이 리스트일 뿐이다.
프로그래머 입장에서 이 책 최대 장점은 ‘Pythonic한 코드 작성법’이 군데군데 스며 있다는 점이다. 구글에서 제시하는 Python 코드 가이드를 중간중간 제공하고, unit testing 샘플 코드나 멀티쓰레딩 / 멀티프로세싱 코드도 책과 github (git.io/fj0II)에 등록되어 있다.
만약 파이썬으로 프로그래밍을 시작했지만 컴퓨터공학 쪽에 흥미가 생긴 비전공자이거나, 이런저런 라이브러리에서 튀어나오는 파이썬 특유의 문법들 (제너레이터, 언패킹, 데코레이터 등)이 어떤 의미인지 궁금했다면 이 책은 괜찮은 출발선을 제공한다. ‘이런 개념이었구나 수준의 이해는 제공하지만, 내것처럼 자유자재로 활용할 만큼의 깊이 있는 이해를 원한다면 다른 책을 더 참고해야 할 것 같다.
|
'세줄요약 독서' 카테고리의 다른 글
돈의 속성 (0) | 2020.07.11 |
---|---|
숫자를 돈으로 바꾸는 데이터 읽기의 기술 (0) | 2020.01.15 |
내 운명은 고객이 결정한다 (0) | 2019.12.11 |
협력의 진화 (1) | 2019.09.03 |
MCN 백만 공유 콘텐츠의 비밀 (0) | 2019.08.17 |