最近在看一本书 《Think Python》,作者是AllenDowney,到第三版的时候,他将 Think Python 彻底开源,并转换为 Jupyter Notebook 格式,方便读者 边敲代码边阅读(Coding as you read),有意思的是,在他开源的 本书 github repo 中,有一个文件夹是 blank,这里面的 ipynb 文件和 chapters 文件夹中的文件,文件名都是一样的,唯一不一样的地方在于: blank文件夹中Jupyter notebook 中的代码部分全部删去了

image-20250112124221222

在阅读本书一周后,我知道了作者的用意:希望读者能够把书中的代码,从头到尾自己手敲一遍。

chapters 文件夹中有代码的版本和 blank 文件夹中无代码的版本之间的关系,就好像一本教科书和其对应的练习册一样,教科书里给出了源代码和答案,练习册的正文和教科书完全一样,但是把答案全部隐去了,需要读者自己动手写(动手敲)上去。

动手是掌握编程书知识的唯一路径

通过我这一年多的编程实践来看,我才真正明白了:纸上来终觉浅,绝知此事要coding。只有自己敲了,动手了,这知识才内化成你的。只是看了书,了解了概念,没有用。

下面举一例用来说明:

对于学习一门新编程语言的人来说,几乎所有教程演示的第一行代码,就是”Hello world!”,在 Python 中语法是 print("Hello world!"),仅仅这一行看似简单的代码,其实也有很多细节需要留意,譬如:

  • 一不小心,写成中文括号

  • 用中文引号

  • 少了其中的一个括号或者引号

  • 之前熟悉 C 语言编程的,可能会在代码行末尾加上分号;

这些细节如若你只是看,而不动手敲一遍,那么在你日后写更复杂代码的时候,会给你自己预埋下很多坑。所谓“基础不牢,地动山摇”正是这个道理。

基于这个思想,我通过 ChatGPT 写了个批处理程序——用于将一些教程的 Jupyter notebook 版本转换成去掉代码后的版本。处理前和处理后的示意图如下:

左边是 Python tutorial 带代码的版本,右边是去除代码的版本。

SCR-20250112-kjlu

附赠两个经典 Python 教程的无代码版本

为了测试这个批处理程序,我做个两个教程的转换:

一是李笑来老师的《自学是门手艺》,也转换成了无代码的版本,可以点击如下链接获取,供感兴趣的读者自己动手敲代码练习。

二是将官方 Python 教程,也转换为无代码的版本,见 python-tutorial-no-code,供大家动手练习。