Think Python, 제3판
(allendowney.github.io)- 프로그래밍을 처음 배우거나 이전 학습에서 어려움을 겪은 사람을 위한 Python 입문서로, 제3판 인쇄본과 전자책을 주문할 수 있음
- 책 전체가 Jupyter 노트북 형태라 텍스트 읽기, 코드 실행, 연습문제 풀이를 한 흐름에서 진행할 수 있음
- 각 장 노트북은 Colab에서 바로 실행할 수 있어 별도 설치 없이 학습을 시작하기 쉬움
- 제3판은 본문 개정, 일부 장 순서 조정, 연습문제 확대를 통해 학습 흐름을 다시 정리함
- 장 끝의 ChatGPT와 Colab AI 활용 제안은 막히는 지점에서 추가 설명과 연습문제 도움을 얻는 보조 수단으로 쓰임
처음 배우는 사람을 위한 Python 입문서
- Think Python은 프로그래밍을 처음 접하는 사람, 또는 이전에 시도했지만 어려움을 겪은 사람을 위한 Python 입문서임
- 제3판 인쇄본과 전자책은 Bookshop.org와 Amazon에서 주문할 수 있음
- Green Tea Press의 책 랜딩 페이지는 Think Python 3rd Edition에서 볼 수 있음
- 제3판은 책 전체를 Jupyter 노트북으로 구성해 텍스트, 실행 가능한 코드, 연습문제를 한곳에서 다룸
- 노트북은 Colab에서 실행할 수 있어 설치 부담이 줄어듦
- 본문이 상당히 개정되고 일부 장 순서가 재배치됨
- 연습문제가 더 많아짐
- 각 장 끝에는 ChatGPT와 Colab AI를 학습과 연습문제 풀이에 활용하는 방법이 들어감
Colab 노트북과 수업 활용 자료
-
장별 노트북
- 전체 노트북은 19개 장으로 제공됨
- 1장: Programming as a way of thinking — Colab에서 실행
- 2장: Variables and Statements — Colab에서 실행
- 3장: Functions — Colab에서 실행
- 4장: Functions and Interfaces — Colab에서 실행
- 5장: Conditionals and Recursion — Colab에서 실행
- 6장: Return Values — Colab에서 실행
- 7장: Iteration and Search — Colab에서 실행
- 8장: Strings and Regular Expressions — Colab에서 실행
- 9장: Lists — Colab에서 실행
- 10장: Dictionaries — Colab에서 실행
- 11장: Tuples — Colab에서 실행
- 12장: Text Analysis and Generation — Colab에서 실행
- 13장: Files and Databases — Colab에서 실행
- 14장: Classes and Functions — Colab에서 실행
- 15장: Classes and Methods — Colab에서 실행
- 16장: Classes and Objects — Colab에서 실행
- 17장: Inheritance — Colab에서 실행
- 18장: Python Extras — Colab에서 실행
- 19장: Final Thoughts — Colab에서 실행
-
교사용 자료
- 해답이 포함된 노트북은 ThinkPythonSolutions GitHub 저장소에서 다운로드할 수 있음
- 각 장 퀴즈와 전체 책에 대한 종합 퀴즈는 요청을 통해 제공됨
- Jupyter를 수업에서 효과적으로 쓰는 방법은 온라인 책 Teaching and Learning with Jupyter에서 읽을 수 있음
- 노트북 기반 수업에서는 강사가 코드를 작성하고 학생이 자기 노트북에서 따라 하는 라이브 코딩 방식을 활용할 수 있음
- 프로그래밍 교육을 위한 교사 훈련 자료는 The Carpentries의 Instructor Training에서 볼 수 있음
- 원문 텍스트는 유지하되 대부분의 코드를 제거한 빈 노트북은 학습자가 빈칸을 채우는 따라 하기 연습에 유용하며, blank notebooks에 정리되어 있음
댓글과 토론
Hacker News 의견들
-
이 소식이 정말 반가움. Jupyter Notebook으로 Practical Deep Learning for Coders를 출간했을 때, Allen과 그의 몇몇 책도 같은 방식으로 만들자는 얘기를 했었음
이제 실제로 진행되고 있고, 더 좋게는 노트북 안에서 인라인 그래픽을 보여주는 Jupyter 기반 turtle 같은 멋진 도구까지 더했음
출시되면 Python 프로그래밍을 배우는 최고의 방식이 될 가능성이 높다고 봄
예전에 이 책 2판 일부를 nbdev 노트북으로 변환하는 개념 증명도 보여줬던 게 기억남: https://github.com/fastai/nbdev_cards/blob/master/01_deck.ip...
그 노트북은 이 HTML로 렌더링됨: https://fastai.github.io/nbdev_cards/deck.html- Think Bayes와 Think Stats를 정말 좋아했지만, 다른 모두가 노트북을 쓰고 있을 때는 약간 어긋난 느낌이 있었음
AdventOfCode 같은 걸로 새 언어를 배울 때 첫 작업은 항상 그 언어용 Jupyter 이미지를 만드는 것임 - 이렇게 숨길 수 있는 코드는 문서화에 아주 좋아 보임. 한동안 이런 걸 찾고 있었음
- Think Bayes와 Think Stats를 정말 좋아했지만, 다른 모두가 노트북을 쓰고 있을 때는 약간 어긋난 느낌이 있었음
-
Think Python 2판은 내 삶의 방향을 바꿨음. Java 수업을 하나 들었다가 너무 싫어서 프로그래밍을 포기했었는데, 몇 년 뒤 네트워크 엔지니어로 일하다가 스크립트로 풀 수 있어 보이는 문제가 생겼고, Think Python을 집어 든 뒤 Python과 프로그래밍 자체에 빠지게 됨
- 딱 지금 읽어야 했던 내용임
내 삶의 방향을 커뮤니티/메이커/교사 역할 쪽으로 바꾸는 걸 고민 중이고, 가르치는 일을 위한 프리랜서/소규모 사업 아이디어가 있는데 “느슨한 커리큘럼” 자료가 필요함
전문 웹 개발자로 일하는 동안 Python이 필요했던 적이 없어 이제 배우는 중임. Perl과 Ruby를 포함해 웹 중심 언어는 거의 다 써봤음
Python은 일반적인 개념을 가르치기에 적절한 언어로 보이고, 참고할 수 있는 책이 있으면 도움이 될 듯함 - 반례로, bash/Perl로 시작해서 Python으로 넘어갔고 처음엔 정말 좋았지만, 동적 타입 때문에 문제가 생기기 시작했음
그 무렵 팀의 주 언어가 Java로 정해졌고, 정적 타입의 장점을 본 뒤로는 돌아갈 수 없었음
이후 Python도 선택적 타입 지원과 이를 강제해주는 IDE 덕분에 많이 발전했지만, 지금은 정적 타입 언어 쪽으로 완전히 편향돼 있음
유틸리티 스크립트를 쓸 때는 bash만 쓰는 것보다 훨씬 다듬어진 Python을 여전히 좋아함. 다만 완성형 애플리케이션에 쓸 언어를 고를 수 있다면 Java/Scala 등을 선호함. Rust도 훌륭하지만 대부분의 보통 사람에게 학습 곡선이 너무 가파름
PyCharm 같은 도구가 지원하는 Python 선택적 타입을 직접 써본 적은 없어서, 도구 덕분에 정적 타입 언어와 비슷한 경험이 됐을 가능성은 있음. IntelliJ Community Edition에서 Python 타입 강제를 켜고 써본 사람이 있다면 경험을 듣고 싶음 - 나도 비슷했음. Java, Matlab, C, Perl을 조금씩 배웠지만, Think Python 2판을 읽고서야 완전히 붙잡혔고 이후 여러 책을 읽으며 소프트웨어 커리어로 전환했음
- 나도 그랬음. 도시를 옮기고 일자리를 찾던 중 이 책을 출력해서 장별로 읽기 시작했고, 이 책 덕분에 소프트웨어 엔지니어가 됨
- C++ 수업, Java 수업 등을 거친 뒤에도 이해하지 못했던 객체 지향 프로그래밍을 Think Python 덕분에 처음으로 제대로 이해했음
- 딱 지금 읽어야 했던 내용임
-
Think Python을 좋아하고, 많은 학습자에게 추천해왔음. 새 프로그래머를 위한 책이 신경 써야 할 여러 요소의 균형을 정말 잘 잡음
Allen Downey는 비슷한 접근의 다른 책도 여럿 냈음: https://greenteapress.com/wp/
일부는 엄밀함을 낮추는 쪽으로 조금 과하게 갔다고 보지만, 내가 살펴본 책들은 전반적으로 꽤 좋았음
예전에 컨퍼런스에서 Allen과 같은 테이블을 쓴 적이 있는데, 내가 그의 책을 얼마나 자주 추천하거나 사줬는지 말했더니 허풍이라고 생각한 것 같았음- 친구 아들이 대학 졸업반인데 내가 추천한 Olin에 갈지도 모름. Olin을 알게 된 것도 Think Python 덕분이었음
-
주제를 살짝 바꿔서 미안하지만, 실무 경험은 이미 있고 일하면서 쌓는 중이라고 할 때, 중급/고급 Python 개발자에게 비슷한 품질의 자료가 있을까?
언어나 표준 라이브러리에서 내가 모르는 큰 덩어리가 항상 있는 느낌임- Python 1.5.2 때 공식 문서로 배우기 시작했는데, 지금도 좋은 자료라고 생각함
https://docs.python.org/3/tutorial/index.html
https://docs.python.org/3/library/index.html
새 버전이 나올 때마다 What’s New 문서를 읽음
그 외에는 표준 라이브러리와 인기 있는 서드파티 패키지의 소스 코드를 읽는 걸 좋아함. 이 조언은 Python뿐 아니라 새 언어를 배우거나 다시 익힐 때도 대체로 적용됨 - Effective Python이 좋았음. 사용 사례와 적용 예가 붙은 추천들이 담긴 팁 형식의 책임
- Fluent Python은 그 수준에 좋은 책이고, 일하면서 참고서로 쓰기에도 좋음
- https://effectivepython.com/을 좋아함
그리고 Norvig의 매년 Advent of Code 구현을 읽는 것만으로도 우아하고 간결한 Python 코드를 쓰는 법에 대한 통찰을 얻을 때가 많음 - Fluent Python과 Effective Python이 좋은 책임. 전자는 아주 두껍고, 사실상 여러 권이 한 권에 들어간 책에 가까움
- Python 1.5.2 때 공식 문서로 배우기 시작했는데, 지금도 좋은 자료라고 생각함
-
저자는 최신 Python 프로젝트들, 주로 베이즈 데이터 분석 작업을 https://www.allendowney.com/blog/에 블로그로 올리는데, 꽤 재미있게 보고 있음
-
Python 중급에서 고급 프로그래밍을 위한 책은 뭐가 있을까? Python과 프로그래밍 일반은 이미 알고 있지만 Python 실력을 더 키우고 싶음
지금 읽고 있는 Fluent Python과 CPython Internals 정도만 알고 있음- 실제 실용 코드에서 기법이 어떻게 적용되는지 보여주는 책을 고려해볼 만함
예를 들어 Effective Pandas 2는 표 형식 데이터를 다루는 흔한 패턴을 보여줌. 그 과정에서 컴프리헨션, 람다, 언패킹 등을 쓰고, pytest로 리팩터링하는 방법과 데이터를 이해하기 위한 시각화 활용도 보여줌
참고로 내가 저자임 Fluent Python이면 충분함. 나머지 언어 기능은 공식 참조 매뉴얼을 읽으면 이해하게 됨- 더 일반적인 알고리즘과 자료구조 책이나 설계 관련 책도 볼 수 있음
https://www.redblobgames.com/에도 아주 재치 있는 글이 많음 - Cristina Videira Lopes의 Exercises in Programming Style 2판도 살펴볼 만함
잘 알려지진 않았지만, 서로 다른 제약 아래에서 같은 문제를 푸는 여러 프로그래밍 스타일을 탐구하는 책임 - 결국 문서와 소스 코드 아닌가?
어느 정도 숙련도, 즉 기본적인 실무자 수준을 넘어서면 남는 건 코드를 읽고 쓰는 것뿐임
- 실제 실용 코드에서 기법이 어떻게 적용되는지 보여주는 책을 고려해볼 만함
-
관련 글:
Think Python 2e - https://news.ycombinator.com/item?id=35421096 - 2023년 4월, 댓글 30개
Think Python: How to Think Like a Computer Scientist - https://news.ycombinator.com/item?id=1586000 - 2010년 8월, 댓글 9개 -
운이 좋음. 막 Python 멘토링을 시작했는데, 나는 Downey의 열렬한 팬임. 정말 뛰어난 교육자이자 르네상스형 인물임
이 책을 꼭 지켜볼 예정임 -
나도 프로그래밍을 처음 배울 때 이 책이 삶을 바꿨음. 커리어 전환이라기보다, 책이 쓰인 방식과 몇몇 개념이 완전 초보였던 내게 갑자기 이해되게 만든 점이 컸음
이제 10~15년 뒤 3판을 보니 향수가 크게 느껴지고, 이 책은 아무리 추천해도 부족함 -
이전 판 Think Java에서 특히 이 구절을 좋아했음: https://files.catbox.moe/v1vgdc.jpg
또 멋진 부분은 이거임:다음에 일어난 일이 멋진 부분이다. 버지니아의 고등학교 교사 Jeff Elkner가 내 책 [Think Java]를 채택하고 Python으로 번역했다. 그는 번역본을 보내줬고, 나는 내 책을 읽으며 Python을 배우는 특이한 경험을 했다.