观点 · 学习Python
学习Python
写给所有Python学习者的建议,来自我在2022至2023年讲授的免费线上Python课程。
这些建议来自我在2022—2023年讲授的课程,那时AI还没有大量写代码。我没有为此更新这些建议,其中有些可能已经过时。在AI写代码的今天,我认为哪些东西仍然重要、为什么重要,见Python哲学。
学习Python有什么用
我认为,还不会任何编程语言的人,学Python都会大有裨益:
- 如果你的工作需要处理数据,无论是数值还是文本,Python都是有力的工具。
- 学会编程后,你用电脑做的很多工作都可以自动化,把时间留给需要人来做的事。
- 学习编程可以训练一种思维方式,帮助你更好地在信息化时代生存。
AI时代又多了一个理由:读不懂的代码,你就无法检查;而读懂代码的能力,来自亲手写过一些代码。
Python并不难。只要愿意学,谁都能学到写出实用代码、满足自身需求的程度。对我来说,Python已经成了使用计算机的一种方式。科研中,我用它管理文件、运行模拟,以及读取和分析数据、绘图;学习中,用它计算和画图;生活中,几乎所有计算都交给它,还用它做一些小项目,例如为电子书制作书签,或者用暴力搜索求解一个滑块游戏。
学习方法
- 先做好准备。安装一款集成开发环境(IDE),学会Python的两种运行方式:脚本用于实际工作,交互式Shell用于尝试。万事开头难,一旦卡住,就尽快求助。我不推荐初学者使用Jupyter Notebook,因为在其中更难看清输入和输出的对应关系。
- 每个例子都自己试一遍,然后修改它,看看会发生什么。只有当你确实能预知它的结果时,才可以不试。
- 知道自己需要达到哪个层次。有些内容需要掌握到会写,有些只需理解到能读,还有很多只需了解,知道有这回事即可。等工作需要时再学细节。
- 用
help。键入help(print),或者对方法键入help(str.split),就能看到代码自带的文档。要养成这个好习惯。 - 看代码运行。Python Tutor可以一步一步地演示程序的运行。每走一步之前,先猜猜接下来会发生什么。
- 带着批判的眼光阅读教学材料。我所用的课程里,有些例子本可以写得更简洁、更Pythonic;改写这些例子就是我布置的练习之一。对网上的代码和AI写的代码,也应如此。
- 做一个项目。围绕自己遇到的实际问题做一个小项目,你会明白学这些究竟有什么用,也会对自己的能力更有信心。
到哪里找答案
掌握基础知识后,要逐渐习惯于“问”已有的资料,而不是问人。这样得到的回答更快,也更靠谱:
help函数;- Python语言和你所用的各种程序包的文档;
- 编程论坛。初学者遇到的问题,几乎都已经有人遇到并讨论过了;不过能不能找到这些讨论是一门技巧,取决于你搜索时怎么措辞。能读英文的话,用英文搜索往往能找到更多讨论。
你想做的常见操作,比如处理字符串,一定已经有人写好了,所以除非是为了练习,否则不要自己动手写。如今,问起来最快的是AI助手,它很擅长告诉你已经有哪些现成的工具。但AI的回答不是文档。事关重大时,请用help和官方文档核对,并自己试一试。
我的教学方式
46名学生大多来自人文和社会科学、第一次学编程,大多远程上课;其中28名积极参与:分享笔记、提交作业,或者做自己的项目。我根据他们的反馈不断修订学习指南。语法只是手段,主要目的是学会怎样把一个问题想清楚。
这门课分为三个阶段。第一阶段是基础知识:学生以南京大学的一门公开课为纲,配合我编写的学习指南、习题和每周的线上课来学习。第二阶段是实例讲解:我从自己和学生们的实际工作中提炼出实例来讲解,例如从PDF文件中提取网页链接、为电子书制作书签、统计投票数据,以及用暴力搜索求解滑块游戏华容道(可以在这里试玩)。第三阶段是个人项目:每位学生着手做一个自己的小项目,用Python解决实际问题,亲身体会它能为自己省下多少时间。正如陆游所说:“纸上得来终觉浅,绝知此事要躬行。”
- 基础知识学习指南、习题、每周的课
- 实例讲解来自实际工作的问题,重在思路
- 个人项目学生自己的实际问题
我用四字成语为各个模块命名,从讲Python数据类型的“锅碗瓢盆”,到讲如何分解问题的“庖丁解牛”——典出《庄子》,庖丁顺着牛身上天然的关节下刀。习题力求有趣:用切片从年份列表中取出属于唐朝的年份;找出干支纪年中与2022年同为壬寅的所有年份;或者借助help查到的字符串方法,把“abracadabra”变成“obrocodobro”。
课程不设统一的进度。我不断更正文字文档,如果它与录屏有出入,以文档为准。我关于教学的整体想法,见教学理念;这门课程也列在关于我页面上。在密歇根大学数据与人工智能研究院(Michigan Institute for Data and AI in Society,MIDAS),我希望开设一些短期工作坊,内容包括高性能Python、Git工作流程,以及机器学习中的良好实践。
延伸阅读
我向学生推荐过的书和网站:
- David Amos、Dan Bader、Joanna Jablonski和Fletcher Heisler,Python Basics: A Practical Introduction to Python 3(Real Python,2021):简明易懂的入门教材。其中有一节讲如何在列表、元组和字典之间作选择,只有一页,单独拿出来读也很值得。
- Dan Bader,Python Tricks: The Book(2017):适合学完基础之后阅读。
- Harold Abelson和Gerald Jay Sussman,Structure and Interpretation of Computer Programs,以及John DeNero的Composing Programs(相当于这本书的Python版):适合想要深入学习的读者。
- Aditya Bhargava,Grokking Algorithms(中文版《算法图解》,袁国忠译,2017年):一本图文并茂的算法入门书。
- 吴军,《数学之美》(第3版,2020年):讲述数学如何驱动信息技术,尤其是自然语言处理。
- 麻省理工学院的The Missing Semester of Your CS Education:介绍代码之外的各种工具。