从毕业至今,在互联网行业从事软件研发工作,将近五年。这五年间,做过后端开发、前端开发、大数据处理等,使用过的编程语言包括:Python、PHP、Go、Java、JavaScript 等。
虽说编程语言各异,但我使用它们来写各种项目的代码却一直坚持两点:代码可读性和自解释性/自文档性(self-documentation)。这很大程度上应该是受到 Python 语言设计哲学的影响 - 追求简单易读易懂的代码。
很多人可能会认为这两点其实是一点 - 代码可读性,但我想做点区分:代码可读性突出对代码阅读者视觉上的影响,是否存在不必要的理解干扰,比如:必要的空行、变量定义与使用之间的距离、函数体/逻辑分支是否过长、逻辑表达是否直观等等。可读性高的代码通常都非常漂亮、赏心悦目。自解释性代码则更突出语义层面,比如:变量名称/函数名称/类名是否恰当、函数/方法/API 是否单一职责、工程目录结构/包/模块拆分是否符合“高内聚低耦合”原则等等。长期追求这两点,可以极大地提升个人,特别是团队的工作效率和工作质量。
本书作者 Kenneth Reitz 于 2011 年发布 Requests 这个 HTTP 请求工具库,提出“for humans”的理念,强调软件/工具库应该对人类友好易用,这一理念本质上是对 Python 哲学(特别是上述两点)的一种引申和发扬。之后 Reitz 在一些 Python大会上做技术分享,宣扬“for humans”理念,对 Python 社区产生巨大影响。我在第一次用过 Requests 库之后,便很少使用 Python 标准库中的 urllib 和 urllib2,现在标准库文档中也特别建议开发者使用 Requests。
因为对“for humans”理念的认同,也因为经常使用 Requests,所以当 Reitz 在 Github 上邀请我翻译 Requests 文档中文版时,我欣然接受,和另一个 Python 开发者共同翻译了 Requests 文档的首个官方中文翻译版。这“另一个 Python 开发者”也就是本书的另一个译者。
在 Reitz 发起 “The Hitchhiker's Guide to Python!” 项目(也就是本书的社区开源版)后,我一直持续跟进阅读,收获巨大。后来得知这本开源书籍正式出版,欣喜若狂,辗转咨询多人,联系到刘皎老师 ,申请了本书的翻译工作。
但是,后来发现翻译的工作量远远超出预估,除了个人的一些主观原因,主要因为本书内容的广度和深度:
- 广度:本书由 Python 社区数百人共同创作而成,可以视作 Python 小百科全书。1-3章指导读者按照自己的需求选择安装配置 Python 版本/发行版、开发环境等。7-11章则针对不同的应用场景,从多个维度甄选对比了大量的 Python 库,读者可以“按图索骥”地做出自己的选择,从而节约大量的时间精力。因为译者的 Python 开发经验主要集中在 Web 开发和数据处理,对于很多应用场景下的 Python 库不太熟悉,所以翻译之前花费了大量时间来学习理解。
- 深度:针对 Python 中手的核心需求,本书探讨了大量的最佳实践。其中4-5章通过大量示例具体地阐释了“Python 之禅”的句句箴言,如何编写高质量的 Python 代码,并精选若干高质量的知名 Python 开源项目,详细介绍如何通过阅读源码来提升编程技术水平。虽说 Python 社区几乎人人皆知“Python 之禅”,但如何落地到开发实践估计极少有人说得清楚。对照书中的实例阐释,译者几经调整推敲“Python 之禅”的译文,最终敲定的译文也不是特别令自己满意。
相比原计划,本书最终延期近一年才得以翻译完成。除了歉意,我内心满是感谢:感谢邦杰中途友情加入,帮忙翻译了4-6章初稿,这三章的难度和长度都非常大;感谢编辑老师刘皎对我拖稿的次次容忍和耐心等待;感谢妻儿的理解,我对你们缺少了太多的陪伴。
虽说我已尽自己所能地保证译文质量,但错误瑕疵难免,在此也请读者原谅。希望你们阅读愉快!
至此,我如释重负。
夏永锋
写于上海