原标题:想做Python开发?过来人告诉你怎么入坑更愉快
有人说,现如今是 Python 的时代,你也许并不同意,还会跳出来反驳我,但不可否认的是:Python 当下真的很火。
在图灵微公众号的后台,读者寻找最多的关键词书单,就是 Python,差距甚至是第二名算法的两倍不止。而图灵出版过的的两本 Python 入门书,也一直占据着三大网店图书销量榜 TOP10 中的两个位置。
PS:网店销量榜 TOP 10 中的两本入门书分别为《Python编程:从入门到实践》《Python基础教程(第3版)》。
Python作为最易上手的编程语言,语法简单,应用广泛,关键是开发效率非常高。如此优秀的语言,也难怪越来越多的人准备入坑。其中当然包括很多想用 Python 搞开发的人。
如果在入坑前,能有个过来人,跟你分享一些他在 Python 开发路上踩过的坑,得到的经验和教训,相信对你来说,是极好的。现在就有这样一本书,它分享了作者从黑客变成软件工程师的经历,因为内容启发了很多人,所以收获了很多五星好评。
这本书其实主要介绍测试,但很快你就会发现,除此之外还有很多其他内容。
为什么是 TDD 的书?
我知道你会问:"你是谁,为什么要写这本书,我为什么要读这本书?”
我至今仍然处在编程事业的初期。人们说,不管从事什么工作,都要历经从新手到熟手的过程,最终有可能成为大师。我要说的是,我最多算是个熟练的程序员。但我很幸运,在事业的早期阶段就结识了一群测试驱动开发(Test-Driven Development,TDD)的狂热爱好者,这对我的编程事业产生了极大影响,让我迫不及待地想和所有人分享这段经历。可以说,我很积极地做出了最近这次转变,而且这段学习经历现在还历历在目,我希望能让初学者感同身受。
我在开始学习 Python 时(看的是 Mark Pilgrim 写的 Dive Into Python),偶然知道了 TDD 的概念。我当时就认为:"是的,我绝对知道这个概念的意义所在。”或许你第一次听说 TDD 时也有类似的反应吧。它听起来像是一个非常合理的方案,一个需要养成的非常好的习惯——就像经常刷牙。
随后我做了第一个大型项目。你可能猜到了,有项目就会有客户,有最后期限,有很多事情要做。于是,所有关于 TDD 的好想法都被抛诸脑后。
的确,这对项目没什么影响,对我也没影响。
但只是在初期如此。
一开始,我知道并不真的需要使用 TDD,因为我做的是个小网站,手动检查就能轻易测试出是否能用。在这儿点击链接,在那儿选中下拉菜单选项,就应该有预期的效果,很简单。编写整套测试程序听起来似乎要花费很长时间,而且经过整整三周成熟的代码编写经历,我自负地认为自己已经成为一名出色的程序员了,我能顺利完成这个项目,这没什么难度。
随后,项目变得复杂得可怕,这很快暴露了我的经验不足。
项目不断变大。系统的不同部分之间要开始相互依赖。我尽量遵守良好的开发原则,例如"不要自我重复”(Don't Repeat Yourself,DRY),却被带进了一片危险地带。我很快就用到了多重继承,类的继承有八个层级深,还用到了 eval 语句。
我不敢修改代码,不再像以前一样知道什么依赖什么,也不知道修改某处的代码可能会导致什么后果。噢,天呐,我觉得那部分继承自这里,不,不是继承,是重新定义了,可是却依赖那个类变量。嗯,好吧,如果我再次重定义以前重定义的部分,应该就可以了。我会检查的,可是检查变得更难了。网站中的内容越来越多,手动点击变得不切实际了。最好别动这些能运行的代码,不要重构,就这么凑合吧。
很快,代码就变得像一团麻,丑陋不堪。开发新功能变得很痛苦。
在此之后不久,我幸运地在 Resolver Systems 公司(现在叫 PythonAnywhere)找到了一份工作。这个公司遵循极限编程(Extreme Programming,XP)开发理念。他们向我介绍了严密的 TDD。
虽然之前的经验的确让我认识到自动化测试的好处,但我在每个阶段都心存疑虑。"我的意思是,测试通常来说可能是个不错的主意,但果真如此吗?全部都要测试吗?有些测试看起来完全是在浪费时间……什么?除了单元测试之外还要做功能测试?得了吧,这是多此一举!还要走一遍测试驱动开发中的"测试 / 小幅度代码改动 / 测试’循环?太荒谬了!我们不需要这种婴儿学步般的过程!既然我们知道正确的答案是什么,为什么不直接跳到最后一步呢?”
相信我!我审视过每一条规则,给每一条捷径提出过建议,为 TDD 的每一个看似毫无意义的做法寻找过理由,最终,我发现了采用 TDD 的明智之处。我记不清在心里说过多少次"谢谢你,测试”,因为功能测试能揭示我们可能永远都无法预测的回归,单元测试能让我避免犯很愚蠢的逻辑错误。从心理学上讲,TDD 大大降低了开发过程中的压力,而且写出的代码让人赏心悦目。
亚马逊读者评价
多年来我买了很多技术书籍,可能是100本或更多。最近拿起了流利的python和几本django和python编程书籍。这绝对是python和django上最好的书之一。
学习TDD,它将解决您在编写您不知道的代码时遇到的问题。
我希望我多年前读过这本书。这会帮助我形成更好的习惯。
本书的作者教授如何使用虚拟环境,以便可以使用所需的每个模块的正确版本来设置环境 - 这是我在其他文本中看不到的方法。
当我第一次开始学习编程时,我阅读了大量的博客文章,其中包括"开发人员希望他们第一次开始时就知道的东西”,每次出现的一件事就是编写自动化测试。
作为一名自学成才的Web开发人员,我获得了许多糟糕的编码和开发习惯。它迫使你重新思考你的工作应用程序的路径,并概述了实现这一目标的连贯,合乎逻辑的步骤。
本书主要目的
这本书的主要目的是要传授一种用于 Web 开发的方法,它可以让 Web 应用变得更好,也能让开发者更愉快。一本书如果只包含一些上网搜索就能找到的知识,那它就没多大的意思了,所以本书不是 Python 句法指南,也不是 Web 开发教程。我希望教会你的,是如何使用 TDD 理念,更加稳妥地实现我们共同的神圣目标——简洁可用的代码。
Test-Driven Development with Python中文版 ↓↓↓
Test-Driven Development with Python 2E
作者:Harry J. W. Percival
译者:安道
定价:119.00元 / 电子书59.99元
原版亚马逊全五星好评
一套完整的Python开发现代Web应用的最佳实践速成课程
掌握TDD理念,让Python代码简洁可用
本书手把手教你从头开发一个真正的Web应用,演示使用Python做测试驱动开发(TDD)的优势。
你将学会如何在开发应用的每一个组成部分之前编写和运行测试,然后再编写最少量的代码让测试通过,最终得到简洁可用的代码。
此外,你还会了解Django、Selenium、Git、jQuery和Mock的基础知识,以及其他目前流行的Web开发技术。
"要使开发者保持头脑清醒,测试可谓至关重要。哈利完成了一项不可思议的工作,他不仅吸引了我们对测试的关注,而且还探索了切实可行的测试实践方案。”
——Michael Foord,Python核心开发者、unittest维护者
"这本书远不只是介绍了测试驱动开发,它还是一套完整的最佳实践速成课程,完整介绍了如何使用Python开发现代Web应用。”
——Kenneth Reitz,Python软件基金会特别会员
"真希望在我们学习Django时,就能有哈利的这本书。它对Django和多种测试实践进行了精彩讲解,难度恰当且不乏挑战性。”
——Daniel Greenfeld和Audrey Roy,Two Scoops of Django作者
作者:哈利·J.W. 帕西瓦尔
TDD积极践行者,曾参与开发电子制作表软件先驱Resolver One;目前就职于PythonAnywhere公司,经常受邀参加TDD和Python开发主题演讲、研讨会和开发者大会;取得了利物浦大学计算机科学硕士学位和剑桥大学哲学硕士学位。
目录
准备工作和应具备的知识
配套视频
致谢
第一部分 TDD和Django基础
第1章 使用功能测试协助安装Django
第2章 使用unittest模块扩展功能测试
第3章 使用单元测试测试简单的首页
第4章 测试(及重构)的目的
第5章 保存用户输入:测试数据库
第6章 改进功能测试:确保隔离,去掉含糊的休眠
第7章 步步为营
第二部分 Web 开发要素
第8章 美化网站:布局、样式及其测试方法
第9章 使用过渡网站测试部署
第10章 为部署到生产环境做好准备
第11章 使用Fabric自动部署
第12章 输入验证和测试的组织方式
第13章 数据库层验证
第14章 简单的表单
第15章 高级表单
第16章 试探Java
第17章 部署新代码
第三部分 高级话题
第18章 用户身份验证、探究及去掉探究代码
第19章 使用驭件测试外部依赖或减少重复
第20章 测试固件和一个显式等待装饰器
第21章 服务器端调试技术
第22章 完成"My Lists”页面:由外而内的TDD
第23章 测试隔离和"倾听测试的心声”
第24章 持续集成
第25章 简单的社会化功能、页面模式以及练习
第26章 测试运行速度的快慢和炽热的岩浆
遵从测试山羊的教诲
附录
参考书目
作者简介
封面介绍
扫一扫,图灵社区购买电子书
小伙伴们有没有用过 TDD 的经历呢?留言和大家分享一下吧,或者分享一些在开发过程中踩过哪些让你印象深刻的坑?或者留言讲讲你想要这本书的理由,精选评论挑 5 人送《Python测试驱动开发(第2版)》,截止2018.8.10。欢迎小伙伴们畅所欲言。
?查看更多Python书返回搜狐,查看更多
责任编辑: