重写 500 Lines or Less 项目 - 前言
对于有一定编程基础、希望提高项目能力的同学来说,500 Lines or Less 无疑是个很好的参考。它的若干实例都是来自实际、具有现实意义的项目,500 行左右的代码规模对初学者来说略有难度但也不至于高不可攀,作为提高级别的学习资料是相当合适的,因此也有不少人推荐过它。
不过在浏览这个项目之后,我也发现一些问题。最大的问题可能是这些文章写成时间较早,代码也有些过时,比如很多示例是用 Python2 写成的,它们如果不经修改的话,在目前的 Python3 上是无法运行的;此外,部分内容也应当更新。比如 Web 服务器的例子讲述到了 CGI,但 CGI 在现代的 Web 服务器上已经很少使用,不太值得再去花时间深究。
另外一个遗憾是作为教材的写作方法。尽管这些代码并不算多——从题目就能知道,都在 500 行以内——但除非你对目标领域非常熟悉,否则是不太可能一次写成的。然而,大部分示例是先讲解原理之后就展示最终的代码。我们既看不到作者思考的过程,也不太日常项目开发的实际情况。因此,我决定不再跟随原文章的节奏,而是自己从头写起,并采用分步骤、渐进式的方法,保持文章和代码同步。这样,你能够看到一个较大的需求是如何从简单的方式入手,一步步扩展成完整的程序的。相信每个人在开发时会有自己的思考方式和具体步骤,如果自己去完成该项目的话,各人的实现会有很大差异,这是完全正常的。所以我也希望大家通过自己的思考去理解代码,当然,有条件的话最好是再自己动手写一遍,这样才能让自己的理解更加深入。
当然,重写这么多篇文章是个宏大的工程,我的力量毕竟有限,不可能面面俱到。原文中大多在开篇时会花一些篇幅来讲解项目设计的基础知识,比如涉及到的网络协议的工作原理等等,这些内容并不过时,基本上也没有更新的必要,因此直接阅读原文即可。本系列的文章一般会先简述背景和内容结构,然后直接进入开发环节。
以上说到了一些问题,但这并不是对原项目的批评。相反,这些作者前辈是非常值得尊敬的,他们乐于向后辈分享知识,并耐心编写了这些颇具深度的学习资料。我所编写的大部分代码也是在他们的基础上进行扩展或改写,换句话说,我也是站在巨人的肩膀上,希望给后来人的学习提供一点微小的贡献。当然,自私地说,对我本人也是一个学习和实践的机会。
示例代码
本文章系列的所有代码都放在 我的 Github 代码库,每个项目使用一个单独的目录,命名和 500 Lines or Less
项目保持一致,以方便查找。但为了方便使用,避免为各个项目及步骤单独创建环境的麻烦,代码根目录下包含了总的入口,比如 Python 代码的入口是 main.py
。部分示例代码如下:
"""
Web Server example.
"""
# Run Step 00: Basic Server
# from web_server.step00_basic_server import main; main()
# Run Step 01: Middlewares
# from web_server.step01_middlewares import main; main()
读者想要运行哪个项目/步骤的代码,只要去掉注释符号即可。大家也会发现,为了让目录成为合法的模块,部分目录名称做了相应的修改,相信对查找代码不会造成障碍。
以下列出分类文章/项目目录以及相关的参考资料,大家可以选择自己感兴趣的主题来阅读。
文章索引
- 重写 500 Lines or Less 项目 - 前言
- 重写 500 Lines or Less 项目 - Web Server
- 重写 500 Lines or Less 项目 - Template Engine
- 重写 500 Lines or Less 项目 - Continuous Integration
- 重写 500 Lines or Less 项目 - Static Analysis
- 重写 500 Lines or Less 项目 - A Simple Object Model
- 重写 500 Lines or Less 项目 - A Python Interpreter Written in Python
- 重写 500 Lines or Less 项目 - Contingent
- 重写 500 Lines or Less 项目 - DBDB
- 重写 500 Lines or Less 项目 - FlowShop
- 重写 500 Lines or Less 项目 - Dagoba
- 重写 500 Lines or Less 项目 - 3D 建模器