曹开力 Kaili Cao

观点 · 学习Python

学习Python

写给所有Python学习者的建议,来自我在2022至2023年讲授的免费线上Python课程。

这些建议来自我在2022—2023年讲授的课程,那时AI还没有大量写代码。我没有为此更新这些建议,其中有些可能已经过时。在AI写代码的今天,我认为哪些东西仍然重要、为什么重要,见Python哲学。

学习Python有什么用

我认为,还不会任何编程语言的人,学Python都会大有裨益:

AI时代又多了一个理由:读不懂的代码,你就无法检查;而读懂代码的能力,来自亲手写过一些代码。

Python并不难。只要愿意学,谁都能学到写出实用代码、满足自身需求的程度。对我来说,Python已经成了使用计算机的一种方式。科研中,我用它管理文件、运行模拟,以及读取和分析数据、绘图;学习中,用它计算和画图;生活中,几乎所有计算都交给它,还用它做一些小项目,例如为电子书制作书签,或者用暴力搜索求解一个滑块游戏。

学习方法

掌握基础知识后,要逐渐习惯于“问”已有的资料,而不是问人。这样得到的回答更快,也更靠谱:

你想做的常见操作,比如处理字符串,一定已经有人写好了,所以除非是为了练习,否则不要自己动手写。如今,问起来最快的是AI助手,它很擅长告诉你已经有哪些现成的工具。但AI的回答不是文档。事关重大时,请用help和官方文档核对,并自己试一试。

我的教学方式

46名学生大多来自人文和社会科学、第一次学编程,大多远程上课;其中28名积极参与:分享笔记、提交作业,或者做自己的项目。我根据他们的反馈不断修订学习指南。语法只是手段,主要目的是学会怎样把一个问题想清楚。

这门课分为三个阶段。第一阶段是基础知识:学生以南京大学的一门公开课为纲,配合我编写的学习指南、习题和每周的线上课来学习。第二阶段是实例讲解:我从自己和学生们的实际工作中提炼出实例来讲解,例如从PDF文件中提取网页链接、为电子书制作书签、统计投票数据,以及用暴力搜索求解滑块游戏华容道(可以在这里试玩)。第三阶段是个人项目:每位学生着手做一个自己的小项目,用Python解决实际问题,亲身体会它能为自己省下多少时间。正如陆游所说:“纸上得来终觉浅,绝知此事要躬行。”

  1. 基础知识学习指南、习题、每周的课
  2. 实例讲解来自实际工作的问题,重在思路
  3. 个人项目学生自己的实际问题
我的Python教程的三个阶段(2022—2023年)。借助AI(Claude)制作。

我用四字成语为各个模块命名,从讲Python数据类型的“锅碗瓢盆”,到讲如何分解问题的“庖丁解牛”——典出《庄子》,庖丁顺着牛身上天然的关节下刀。习题力求有趣:用切片从年份列表中取出属于唐朝的年份;找出干支纪年中与2022年同为壬寅的所有年份;或者借助help查到的字符串方法,把“abracadabra”变成“obrocodobro”。

课程不设统一的进度。我不断更正文字文档,如果它与录屏有出入,以文档为准。我关于教学的整体想法,见教学理念;这门课程也列在关于我页面上。在密歇根大学数据与人工智能研究院(Michigan Institute for Data and AI in Society,MIDAS),我希望开设一些短期工作坊,内容包括高性能Python、Git工作流程,以及机器学习中的良好实践。

我向学生推荐过的书和网站: