社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

用 Python 编程 13 年后,我把经验写成了 400 页的书

图灵教育 • 3 年前 • 445 次点击  

我写了一本 Python 语言的编程进阶书:《Python工匠:案例、技巧与工程实践》,本文是关于这本书背后的故事与一些致谢。

我一直觉得编程某种意义上是一门“手艺”,因为优雅而高效的代码,就如同完美的工艺品一样让人赏心悦目。就像一位用锤子敲敲打打了十几年的铁匠,总结出一套“如何锻造出锋利的刀”的经验之谈——我在代码世界也“敲敲打打”了十几年,沉淀下来的便是这本《Python工匠》
我将自己这些年掌握的技巧、经验与编程建议,去粗取精后悉数写入书中,希望它能帮读者朋友们完成从初学者到工匠的跃迁。
书目前已经正式上市,欢迎购买,限时 7 折。

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

结缘 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/Django开发社区
本文地址:http://www.python88.com/topic/127828
 
445 次点击