Head First Programming - 파이썬으로 처음 배우는 프로그래밍 Head First 시리즈
폴 베리 & 데이빗 그리피스 지음, 강권학 옮김 / 한빛미디어 / 2011년 3월
평점 :
절판


읽은 기간: 5/23 ~ 5/28(머리와 눈으로 일독하는데 3시간 53분 걸림, 현재 머리와 손가락으로 재독 중)
총평: 매우 좋다!

일단 이 책은 파이썬 프로그래밍 언어에 대한 책이 아니다. 당연하다. 그럼 프로그래밍 방법론에 대한 책인가? 그렇다고 말할 수 없다. 방법론도 약간 소개되고 있지만 주된 내용은 아니다. 그럼 무엇에 관한 책인가? 물론 프로그래밍이다. 아다시피 프로그래밍이란 요구조건에 맞추어 논리 구조를 짜고 그것을 구현하는 것이다. 이 책은 실제의 바로 그 프로그래밍에 집중하고 있다.

제1장은 숫자 맞추기 게임을 만드는 과정을 통해 데이터 타입 변환, if 문, while 문, 라이브러리 사용법 등을 소개한다. 물론 문법 구조로서가 아니라 일종의 패턴(이디엄)으로서다. 그리고 곧 이러한 간단한 개념들만 알고 있는 독자들에게 다양한 요구 조건에 맞춰 프로그래밍할 과제들이 쏟아져 들어온다.

예를 들면 이렇다. 웹 페이지를 주시해서 가격 정보를 체크하라. 해당 웹 페이지의 전체 문자열에서 가격 정보 부분 문자열의 인덱스를 읽어서 해결. 그런데 웹 페이지가 동적이라서 인덱스가 계속 변한다. 어떻게 해야 하나? 가격 정보 부분 문자열을 검색하는 것으로 코드를 바꿔서 해결. 그런데 가격이 4.74 달러 이하일때 살 수 있도록 알람을 해주면 좋겠는데? 4.74를 while 문에 걸어서 계속 웹 페이지를 긁어대는 것으로 해결. 그런데 그렇게 했더니 상대 서버가 과부하로 다운됐다!(이 부분 읽으면서 빵 터짐) while 문의 주기를 조정하는 것으로 해결. 4.74 달러보다 비싸더라도 재고가 없으면 사야 하지 않겠어? if 문을 써서 긴급 구매 조건을 처리하는 것으로 해결. 난 외근이 잦으니까 가격 정보를 트위터로 볼 수 있게 해줘. 트위터 API를 써서 해결. 휴~

이런 식이다. 이것이 앞서 말한 "실제의 바로 그 프로그래밍에 집중하고 있다"는 말의 의미다. 프로그래밍에서 뿐 아니라 일반적인 학습도 이러해야 한다고 나는 주장한다. 왜냐하면 첫째, 아이가 말을 배우는 과정이 바로 이렇기 때문이다. 아이에게 내적 혹은 외적 요구가 발생하면 아이는 자신이 가진 개념들을 조합하여 실험적으로 구사해 본다. 기대했던 반응이 주변(엄마)으로부터 오는지를 체크하면서 아이는 자신의 언어를 발전시켜 나가는 것이다. 둘째, 신이 세상을 만들어 가는 과정도 그랬다. 신이 처음부터 완벽한 세상을 창조했던가? 아니다. 신은 세상에 과제를 주고 세상이 그 과제를 해결하면서 성장하도록 했던 것이다.

이 책의 저자들은 개념에 앞서 문제를 준다. 문제를 해결하는 과정에서 개념이 등장하는 것이다. 아, 얼마나 많은 사람들이 이 과정을 등한시 하고 있는가! 이런 사람들은 먼저 개념을 갖고 온다. 다른 사람들이 만든 개념들. 예를 들면 외국에서 수입된 개념들. 그리고 그에 맞는 문제, 상황을 찾으려 한다. 못찾겠으면 문제, 상황을 개념에 두드려 맞추려고 한다. 고로 현실은 없고 개념만 있게 된다. 혹은 왜곡된 현실과 왜곡된 개념만 있게 된다. 먼저 문제 위에 서야 한다. 아니, 문제를 발견하여야 한다. 개념은 거기서 생성된다.    
 
책으로 돌아가자. 다양한 요구 조건을 아우르려 하다보면 하나의 코드가 여러 곳에 반복될 수 있다. 코드가 반복되면 나중에 수정할 때, 즉 유지 보수할 때 힘들어 진다. 이에 대한 해결책으로 이 책은 함수라는 개념, 장치를 도입한다. 나에게 커다란 파일이 하나 주어져 있다. 이 파일 안에 적혀 있는 항목들에 접근하려면 어떻게 해야 하나? 배열이라는 장치를 사용한다. 항목들이 사람-몸무게 식으로 연관되어 있다. 이 항목들을 별개의 배열에 담으면 연관 구조가 깨어진다. 어떻게 해야 하나? 연관 배열을 사용한다. 이런 식이다. 물론 별로 참신함을 느끼지 못하는 사람도 있을 것이고 뻔한 얘기를 돌려서 얘기한다고 답답해 하는 사람도 있을 것이다. 아무튼 책 전체가 이런 식으로 사고를 일깨우는 구조로 되어 있다. 나는 감탄.

그렇다고 이 책이 완벽하다는 것은 아니다. 스토리를 만들려다 보니 어색한 장면도 있고(예를 들면 전역 변수, 지역 변수를 설명하는 부분. 왜 이런 얘기를 꺼내나 싶었다), 코드가 심하게 못생긴 부분도 있다(예를 들면 함수 안에다 파일에 접근하는 경로명을 직접 적어 놓은 부분. 저자들은 스토리 진행을 우선으로 생각하기 때문에 별 탈 없이 돌아가는 코드에는 가급적 손을 안대려 하는 것 같다). 걸리적 거리기는 하지만 흥을 깰 정도는 아니다.

이 책은 프로그래밍 과정에 집중하고 있기 때문에 프로그래밍 툴(파이썬과 파이썬의 통합개발 환경인 IDLE)에 대해서는 많은 정보를 제공하고 있지 못하다. 다시 말하면 이 책은 파이썬에 대한 책이 아니다. 그래서 이 책을 읽고 뭔가를 해보려 한다면 파이썬과 같은 프로그래밍 언어에 대한 별도의 책이 필요하다. 그 문 앞까지 인도하는 것이 이 책의 역할인데 탁월하게 잘 해낸 것 같다.

저자들이 실습용 언어로 파이썬을 선택한 것도 정말 잘한 일인 것 같다. 파이썬 코드가 깔끔해 보인다는 점에서도 그렇고 IDLE에 모든 것이 통합되어 있어서 자질구레한 것에 신경 쓸 일이 전혀 없다는 점에서도 그렇다. 예를 들면 tkinter라는 GUI 라이브러리나 SQLITE3 라이브러리를 따로 설치하고 설정해 줄 필요가 없다. import 문 하나면 바로 사용가능하다.    
 
나는 이 책을 빠르게 한 번 읽고 나서 재독 하고 있다. 재독을 하면서는 "하루에 1시간 이하, 또는 하루에 한 챕터 이하"란 규칙을 정하고 하나 하나 프로그래밍을 해보고 있다. 프로그래밍하면서 책장을 넘기다 보면 어느새 한 챕터가 끝나 있는 경우가 있다. 그럴 때면 난 혼잣말을 한다. "어, 벌써 끝났네!"

댓글(0) 먼댓글(0) 좋아요(2)
좋아요
북마크하기찜하기 thankstoThanksTo