Py学习  »  Python

13 年 Python 编程经验,编写成书,是一种什么体验?

Python猫 • 2 年前 • 402 次点击  

最近,国内出版了一本重磅的 Python 进阶书籍:《Python工匠:案例、技巧与工程实践》!该书作者朱雷(piglei)目前是腾讯的蓝鲸工具 PaaS 平台负责人,猫哥曾多次转载他的系列文章。

这是一本值得反复翻读的书,经得起时间考验,将会成为 Python 学习者/使用者/研究者的案上经典,强烈推荐你列入购买书单!

本文是作者讲述写作背后的故事,猫哥很荣幸也成为了被致谢对象之一。

读者福利:抽奖送出 4 本新书,请在 Python猫 公众号内发送消息“工匠”,即刻参与。人生苦短,学习 Python 工匠写出更地道的代码! 

我一直觉得编程某种意义上是一门“手艺”,因为优雅而高效的代码,就如同完美的工艺品一样让人赏心悦目。就像一位用锤子敲敲打打了十几年的铁匠,总结出一套“如何锻造出锋利的刀”的经验之谈——我在代码世界也“敲敲打打”了十几年,沉淀下来的便是这本《Python工匠》。

我将自己这些年掌握的技巧、经验与编程建议,去粗取精后悉数写入书中,希望它能帮读者朋友们完成从初学者到工匠的跃迁。

书目前已经正式上市,欢迎购买。

本文主要内容来自书中的“前言”部分,略有删改。

结缘 Python

我初次接触 Python 是在 2008 年末。那时临近大学毕业,我凭着在学校里学到的一丁点儿 Java 知识四处求职。我从大学所在的城市南昌出发去了北京,借宿在一位朋友的出租屋里,他当时在巨鲸音乐网上班,用的主要编程语言正是 Python。

得知我正在寻找一份 Java 相关的工作,那位朋友跟我说:“写 Java 代码有啥意思啊?Python 比 Java 好玩多了,而且功能还特别强大,连 Google 都在用 !”

在他的热情“传道”下,我对 Python 语言产生了好奇心,于是找了一份当时最流行的开源教程 Dive into Python,开始学起 Python 来。

实话实说,之前在学校用 Java 和 C 语言编程时,我很少体会到编程的快乐,也从未期待过自己将来要以写代码为生。但神奇的是,在学了一些 Python 的基础知识,并用它写了几个小玩意儿以后,我突然意识到原来自己很喜欢编程,并开始期待找到一份以 Python 为主要编程语言的开发工作——也许这就是我和 Python 之间的缘分吧!

幸运的是,在当时的 CPyUG(中国 Python 用户组)邮件组里,正好有一家南昌的公司在招聘全职 Python 程序员。看到这个消息后,我立马做出了决定:结束短暂的“北漂”生活,回到学校准备该职位的面试。后来,我成功通过了面试,最终在那家公司谋得了一份 Python 开发的实习工作,并从此开启了后来十余年的 Python 编程生涯。

为什么写这本书

回顾自己的从业经历,我从中发现一件有意思的事:编程作为一项技能,或者说一门手艺, 给新手带来的“蜜月期”非常短暂。

一开始,我们对一门编程语言只是略懂些皮毛,只要能用它实现想要的功能,就会非常开心。假如再学会语言的一些高级用法,比如 Python 里的装饰器,把它应用在了项目代码里,我们便整天乐得合不拢嘴。

但欢乐的时光总是特别短暂,一些类似的遭遇似乎总会不可避免地降临到每个人头上。

在接手了几个被众人称为“坑”的老项目,或是亲手写了一些无人敢接手的代码后;在整日忙着修 bug,每写一个新功能就引入三个新 bug 后……夜深人静之时,坐在电脑前埋头苦干的我们总有那么一些瞬间会突然意识到:编程最初带给我们的快乐已悄然远去,写代码这件事现在变得有些痛苦。更有甚者,一想到项目里的烂代码,每天起床后最想干的一件事就是辞职。

造成上面这种困境的原因是多方面的,而其中最主要、最容易被我们直观感受到的问题就是:烂代码实在是太多了。 后来,在亲历了许多个令人不悦的项目之后,我才慢慢看清楚:即便两个人实现同一个功能,最终效果看上去也一模一样,但代码质量却可能有着云泥之别。

好代码就像好文章,语言精练、层次分明,让人读了还想读;而烂代码则像糊成一团的意大利面条,处处充斥着相似的逻辑,模块间的关系错综复杂,多看一眼都令人觉得眼睛会受伤。

在知道了“代码也分好坏”以后,我开始整日琢磨怎么才能把代码写得更好。我前前后后读过一些书——《代码大全》[1]《重构》[2]《设计模式》[3]《代码整洁之道》[4] ——毫无疑问,它们都是领域内首屈一指的经典好书,我从中学到了许多知识,至今受益匪浅。

这些领域内的经典图书虽好,却有个问题:它们大多是针对 Java 这类静态类型语言所写的, 而 Python 这门动态类型的脚本语言又和 Java 大不一样。这些书里的许多理念和例子,假如直接套用在 Python 里,效果不尽如人意。

于是,话又说回来,要写出好的 Python 代码,究竟得掌握哪些知识呢?在我看来,问题的答案可分为两大部分。

第一部分:语言无关的通用知识,比如变量的命名原则、写注释时的注意事项、写条件分支语句的技巧,等等。这部分知识放之四海而皆准,可以运用在各种编程语言上,不光是 Python。第二部分:与 Python 语言强相关的知识,比如自定义容器类型来改善代码、在恰当的时机抛出异常、活用生成器改善循环、用装饰器设计地道的 API,等等。

当然,上面这种回答显然过于简陋,略去了太多细节。

为了更好地回答“如何写出好的 Python 代码”这个问题,从 2016 年开始,我用业余时间写作了一系列相关的技术文章,起名为“Python 工匠”——正是这十几篇文章构成了本书的骨架。此外,本书注重故事、注重案例的写作风格也与“Python 工匠”系列一脉相承。

如果你也像我一样,曾被烂代码所困,终日寻求写好 Python 程序的方法,那么我郑重地将本书推荐给你。这是我多年的经验汇集,相信会给你一些启发。

本书推荐语

致谢

在我写作“Python 工匠”系列的过程中,许多媒体转发了我的文章,帮助提高了整个系列的影响力。它们是“腾讯技术工程”知乎专栏[5]董伟明[6](@dongweiming)的 Python 年度榜单, 以及以下微信公众号:“蓝鲸”“Python 猫”“Python 编程时光”“Python 开发者”“腾讯 NEXT学院”等。由于名单过长,如果你的媒体也曾转发过“Python 工匠”系列,但没有出现在上面的列表中,还请见谅。

感谢我的前同事与朋友们。当我在朋友圈转发“Python 工匠”系列文章时,他们总是毫不吝惜地给予我赞美与鼓励。虽然受之有愧,但我的确深受鼓舞。

特别感谢我在腾讯蓝鲸团队的所有同事与领导,他们在我写作“Python 工匠”系列的过程中, 提供了许多积极反馈,并且不遗余力地转发文章。这些善意的举动,为本书漫长而充满磨炼的写作过程,注入了强大的驱动力。

感谢参与审阅本书初稿的所有人。他们中有些是我相识多年的同事与朋友,更多则是我从未谋面的“网友”。因慕名各位在开源世界的贡献,我邀请他们审阅本书内容,无一例外, 所有人都爽快地答应了我的请求,并围绕本书的内容和结构提出了许多精准的修改意见和建议。他们是赖信涛(@laixintao)[7]李者璈(@Zheaoli)[8]林志衡(@onlyice)[9]王川(@fantix)[10]laike9m[11]冯世鹏(@fengsp)[12]伊洪(@yihong0618)[13]明希(@frostming)[14]李卫辉(@liwh)[15]

尾声

《Python 工匠》是我的第一本书,因此,它对我而言意义重大。虽然在写作过程中,我已经竭尽所能地让它容易阅读、容易理解,并努力做到只将那些“最有用”的知识置入其中。但我也深知自身能力有限,无法处处做到完美。假如你在阅读本书时,对内容有所疑问或发现错漏,欢迎通过邮件与我交流(我的邮箱是:piglei2007@gmail.com[16])。

人们在讨论 Python 时,常常评价它是一门实用的编程语言。在我看来,“实用”这个评价其实相当高。所以,希望在几个月后,大家在谈到 Python 相关的书籍时,也能有一两个声音说:“《Python 工匠》是一本实用的编程书。”那样对我而言便是最好的鼓励了。


直接购买:

下载样章:

点击“查看原文”,访问《Python 工匠》的图灵社区主页,可下载样章 PDF 文件试读。

References

[1] 《代码大全》: https://book.douban.com/subject/1477390/
[2] 《重构》: https://book.douban.com/subject/30468597/
[3] 《设计模式》: https://book.douban.com/subject/1052241/
[4] 《代码整洁之道》: https://book.douban.com/subject/4199741/
[5] “腾讯技术工程”知乎专栏: https://www.zhihu.com/org/teng-xun-ji-zhu-gong-cheng
[6] 董伟明: https://www.dongwm.com/
[7] 赖信涛(@laixintao): https://www.kawabangga.com/
[8] 李者璈(@Zheaoli): https://manjusaka.itscoder.com/
[9] 林志衡(@onlyice): https://blog.zhiheng.io/
[10] 王川(@fantix): https://github.com/fantix
[11] laike9m: https://laike9m.com/
[12] 冯世鹏(@fengsp): https://github.com/fengsp
[13] 伊洪(@yihong0618):  https://github.com/yihong0618
[14] 明希(@frostming): https://frostming.com/
[15] 李卫辉(@liwh): https://github.com/liwh
[16] piglei2007@gmail.com: mailto:piglei2007@gmail.com

参与抽奖:

请给 Python猫 公众号发送消息,发送两字“工匠”,长按识别抽奖码后,进入抽奖小程序中抽奖。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/128502
 
402 次点击