[美]DavidThomas《程序员修炼之道(第2版)》作品简介与读书感悟

时隔二十年,《程序员修炼之道:从小工到专家》出第二版了!《程序员修炼之道:从小工到专家》(ThePragmaticProgrammer:FromJourneymantoMaster)初版于1999年1

时隔二十年,《程序员修炼之道: 从小工到专家》出第二版了!

《程序员修炼之道: 从小工到专家》(The Pragmatic Programmer: From Journeyman to Master)初版于1999年10月。出版后,对于软件工程实践产生了很大影响。该书在Amazon上有369个评分,平均4.5分。按照 Amazon 畅销书排名表,它在计算机软件类的书籍中排第31名。它也被多人评为编程和软件工程领域最有影响力的书籍之一。它的中文版由电子工业出版社于2004年出版。

该书作者是 Andrew Hunt 和 David Thomas。他们都是敏捷宣言的17个创始者之一。Andrew还是敏捷联盟(Agile Alliance)的创始人。David则是著名的DRY(Don't Repease Yourself) 一词的发明者。

现在本书第二版刚刚在美国上市,国内尚未有中文介绍,更不用说中文译本。所以本文可说是国内第一个对于该书的介绍。

本文将比照第一版和第二版之间的章节的增删变化,试图从中找出软件工程领域从1999年到2019年这二十年之间的沧桑变迁,当然也一窥两位大师的心路变化,以便我们能更好地理解行业动态和学习开发最佳实践。

书名变化

两个版本章节变化

下面, 我们来看看这两个版本的章节变化,包括变化章节的大概介绍,一叶窥秋,从一个小侧面来看二十年行业变迁。

先来看看第一版中被删除或改变的章节:

第20节 代码生成器

第24节 何时使用异常

异常是改善程序结构的很有用的语言特性,但是要防止滥用。对于在正常运行中有不小的概率可能出现的情况,最好还是使用错误代码而不是异常。

我觉得这一章节的内容到今天也没有过时,如何在程序中表达和返回错误仍然是程序员必须做出的重要决定之一。所以我只能猜想作者移除本章的原因可能因为异常和错误代码的正确使用模式已经更为普及,而且其重要性也比当年有所下降。

第27节 元程序设计

这一节在新版中被直接改换标题为“配置”,更清晰地表明将程序行为配置化的重要性。

第29节 它只是视图

这一节描述用事件机制解耦合。可以使用发布/订阅机制,或是 MVC 模式。

这一节在第二版中改写为“现实世界中的多面手”,关注于如何处理来自用户和环境的实时事件流处理。MVC 模式现在已经是家喻户晓了,所以不必重提,而随着大数据兴起的流处理则是新的前沿。

第35节 邪恶的向导(wizard)

在二十年前,不少开发工具提供了各种自动生成代码的wizard,只需要在几个文本框里输入若干文字,点击几个按钮, 就可以生成复杂的功能的骨架代码。但是过分依赖wizard,尤其是在没有真正理解那些生成的代码的原理的情况下,它们可能给项目带来不可控的风险。简而言之,不要使用你不理解的代码wizard。

这类代码工具的使用在二十年以后依然流行,而且功能更加强大,如 Spring Boot 和 Django 框架的自动代码生成。随着应用程序功能的强大和越来越多的功能被第三方库所实现,自动代码框架成为必不可少的工具。这二十年的实践应该证明了作者当年担忧的负面效果并不是很大,所以这一节在新版中被删去。

第38节 等你准备好

软件开发不是科学,有经验的开发者的直觉判断也是有价值的。为了改进项目成功的机会,在对于项目的目标和路径有疑虑的情况下,应该使用原型构建来解决那些疑虑。

这一节在第一版里也是很短的一章,感觉内容不是很充实,所以在第二版中被删掉了。

第39节 规范陷阱

为一个应用编写需求规范是很重要的开发步骤,但是不要走极端。因为很难以文字的形式将一个复杂系统的所有行为和特性的细节都规定下来,即使能够做到,但其创建成本和维护成本会很高,而且也难以随着需求改变而迅速更新。应该把需求搜集、设计、实现看做一个过程的不同侧面,不要陷入瀑布式开发模式的困境。

这一节在1999年是很有用,那时候敏捷开发刚出现不久,还没有达到广泛的接受。而现在敏捷开发的理念和实践都广为流传,所以第二版就直接以 “敏捷的精华”一章替代之。

第40节 圆圈与箭头

圆圈和箭头是指软件开发方法论中的图形表达(其代表是UML)。在几十年的软件工程实践中,各种软件开发方法论各领风骚数年,但是最后都不是能包治百病的银弹妙药。所以,作者特意告诫大家,不要成为形式方法的奴隶,不要把画设计图当成软件开发本身。

在1999年,UML刚刚推出不久,各种开发形式方法仍然有很多市场,所以作者特意写作本章来提醒程序员不要本末倒置,陷入文牍图海而不能自拔。在2019年的今天,随着敏捷开发的流行,也随着各种图形形式开发方法论的无效性已经充分体现出来,大家对于形式开发方法论基本已经免疫了。所以作者就干脆删掉了本章。

第42节 无处不在的自动化

这一节和下一节“无情的测试”在第二版合并成为“注重实效的起步套餐”。

第43节 无情的测试

测试是程序员工作的有机组成部分,而且是非常重要的部分。对于注重实效的程序员而言,编程工作直到所有测试都跑过之后才算完成。测试包括单元测试、集成测试、和验证校验测试,还要考虑资源限制和极端情形。作者详细介绍了多钟类型的测试,可见他们对于测试的重要性的确很重视。

第44节 全都是写作

这是关于编写文档的一章。作者建议尽量将文档和代码合为一体,以良好的代码编写形式来作为描述行为(what)的文档,而代码注释主要用来解释设计的一些背景和理由(why),然后可以利用自动文档生成器来将注释提取出来,并以web的形式提供实时更新的在线文档。

我觉得这一节的内容其实在现在依然适用。二十年后的程序员们依然不喜欢写文档,依然需要专门学习如何写出优美和可读性高的代码。我只能猜想作者删除本节的原因是由于篇幅原因。

第45节 极大的期望

项目成功有两个方面:开发者所提供的功能 + 用户的期望值。用户如果有过高的不切实际的期望,那么开发者即使做出了一个不错的产品,也可能无法得到用户的认可。所以,管理用户期望是很重要的,可以通过持续的与用户交流,包括经常性的产品演示,来让用户不至于与实际项目的结果脱节。但是,开发者也不能满足于此,还是要做些超出用户预期的额外的事情作为出彩的亮点。

这一节在第二版改变标题为“让你的用户开心”。新的标题能更好地表达出与用户关系的终极目标。

下面,来看看第二版新增加的章节( 章节号是第二版中的):

[美]DavidThomas《程序员修炼之道(第2版)》作品简介与读书感悟

第 1 节 你的生活

你的生活,你做主。现在是程序员的黄金时代,采取主动,是成功的第一步。如Martin Fowler所说:“你可以改变你的公司或者改换你的公司”。

第8节 良好设计的本质

好设计就是容易改变的设计。后面所说的很多方法,其目的都是为了实现设计的易变性。易变性是一种价值观,而不仅仅是一个规则。它应该引导整个设计过程的各个决策点。

加入这节的原因是需要它来统领后面很多具体设计技巧,提供一个整体的思维框架和指导原则。

第22节 工程日记

养成记工作日记的习惯,而且是用笔和本子记录。它除了能防止忘记工作中的事情意外,而且写字记录的过程本身也能帮助潜意识进行回顾总结。而且,作者很幽默的说道,“即使没有任何其他好处,它起码能让你在变成富豪或名人后写回忆录时容易一点。”。

第27节 不要跑出你的手电筒光束的尽头

不要太相信任何人(包括你自己)做的长期预测。就像在黑夜中的手电筒的光亮只能照射到一定距离,太长远的未来总是笼罩在未知和未定的迷雾之中,所以,最好采取小步快跑多反馈的模式,以避免陷入大坑之中。

第29节 实际世界中的多面手

这是一个具体讲述如何实现一个能迅速对用户和环境信息事件流做出反应的程序。作者列出了四种策略来支持这类应用:有限状态机;观察者设计模式;发布/订阅机制;反应式编程和流式处理。

第30节 转换式编程

第31节 遗产税

这一章以一个出人意料的感叹句开始:“你在用面向对象语言编程吗?你使用继承机制吗?如果是的话,别那样做!” 作者然后在后面详细讲解了OO语言中以继承机制来复用代码会造成的问题,特别是多继承的问题。作者提出三种不同的选项:接口和协议;委托;mixin和特性。

这一章在2019年的出现, 应该是业界过去二十年使用OO设计所积累的经验之谈,值得好好体会。

第32节 程序配置 (部分来自第一版中的元程序设计一章)

将程序中可变的部分都变成外部配置。配置的模式可以是静态的文本文件,或是更高级的配置服务

第34节 共享状态是不正确的状态

这是很技术性的一章,讨论资源共享时如何确保并发程序逻辑的正确可靠。有若干资源互斥访问机制,但是要设计出很可靠并高效的并发访问控制系统仍然是一个难题。作者以后面两章具体描述两类可靠的并发机制。

在第一版中,作者讨论了黑板机制,但是没有花这么多的笔墨来讨论并发问题。这说明这二十年来应用程序的并发处理开发已经成为程序员的基本技能,必须好好了解其原理和解决方案。

第35节 Actor和进程

Actors是一种无共享状态的并发处理机制。Actor之间除了message队列外不共享任何东西。所有的交互都是通过传递message。而且每个Actor都是单线程的,在任何时刻都只能处理一个信息。这虽然看来是一个很笨的机制,但是在若干个高并发高可靠性编程语言中已经得到成功实践。Erlang就是基于Actor 模式,它的后续函数语言 Elixir、基于JVM的 Akka都是新一代的Actor编程语言。

第37节 听从你的直觉

这章是关于如何利用个人直觉来帮助开发。直觉是人类重要的思维和认知模式,是从长期实践中获得的对于模式的潜意识中识别和反应。尽管编程和开发是讲究精确的活动,但是直觉仍然可以帮助我们识别出设计或代码中的微妙错误。

这次作者加入这章,可能是基于自己的实践中的一些体会吧。

第42节 基于特性的测试

这一章描述了一种新的测试方法。它使用基于产品需求规范来自动生成测试输入数据和相应的结果预期。这种方式比传统单元测试的优点在于它的测试用例是基于产品需求自动生成,较难受开发者的思维角度的约束。它也有助于让开发者考虑代码执行后的不变量和合约条件。

第43节 安全生存指南

[美]DavidThomas《程序员修炼之道(第2版)》作品简介与读书感悟

正如作者所言,新时代有新问题,而程序员的技能集也需要与时共进。

第44节 如何取名

《程序员修炼之道:从小工到专家》百度网盘pdf最新全集下载:链接:https://pan.baidu.com/s/1Z0LKxuJbF-s_U8Mp4ki5Hg ?pwd=hmqd 提取码:hmqd简介:由一系列独立的部分组成,涵盖的主题从个人责任、职业发展,直到用于。

这一章讨论程序中如何给各种程序结构(如变量、函数、类等)取名字。名字是程序可读性和可理解性的重要因素,所以不可小视。名字应该描述那个东西在代码中的角色和存在目的而定。思考如何取一个恰当的名字的过程,也就是设计的过程。一个函数难以取名,往往是因为它的设计不对,也许做了太多,也许功能残缺。在一个系统中,命名法应该遵守统一的规范,以便利于多人在代码层面的协作。

作者: 【美】David Thomas / Andrew Hunt 出版社: 电子工业出版社 出版年: 2020-4 页数: 348 内容简介 《程序员修炼之道》之所以在全球范围内广泛传播,被一代代开发者奉为圭臬,盖因它可以创造出真正的价值:或编写出。

在第二版中作者加入本章,应该是意识到在编程工具已经极大便利了开发者和大大提高生产率的今天,编程在本质上依然是人类的思维活动,所以必须采取各种手段以提高思维过程的效率和正确性。

第47节 合作

这一章建议开发者应该尝试结对编程,在把相互讨论和探讨揉入实际写代码的过程中。同时也应该把用户结合到开发过程中,最好能不断获取用户的实时反馈。

结对编程是随着极限编程方法同时出来的具体技巧,在本书第一版出版时刚好也出版了第一本关于极限编程的书。作者在二十年后的第二版中再特意加入本章,想必是通过自己的实践而感到这种技巧很有用处。

第48节 敏捷的本质

敏捷开发已经推行了二十余年,有很多成功的实践。但是也出现了有害的“打包敏捷"的做法。有些号称采用敏捷的公司却出现了更多的管理层级和更正式的报告。这些做法与敏捷原则背道而驰。作者觉得有必要重新强调敏捷宣言的四大基本原则。敏捷是个原则,其本质是应对变化,而不是固化的流程。他们甚至认为,“永远也不会有敏捷流程“。他们提供的敏捷模式是极其简单的反馈过程:评估当前局势;采用有意义的最小步骤往目标推进一步;评估结果,修正任何发现的问题;然后重复以上步骤直到最后成功。在作者看来,快速反馈循环应该应用在开发的各个层面上,从最底层的代码修改到最高层的项目规划,也包括团队流程。

第50节 不要东施效颦

这一章是关于因地制宜的重要性。很多公司采用了自己的方法取得了成功,它们的成功会吸引别的公司也采用同样的做法。学习他人是必要的,但是不要只学形式而忘记实质。更重要的是,要考虑到其他公司取得成功所需要的条件和环境,再考虑自己是否有类似的条件。在学习时,先小范围实验,看看它的成效,然后取长补短,只将真正适合自己的做法继续下去。

《Ruby程序员修炼之道第2版》百度网盘pdf最新全集下载:链接:https://pan.baidu.com/s/1k6hnORSDF2YmcCA6y1OiLA ?pwd=tlco 提取码:tlco简介:这是一本深受好评的书。它不仅是一本纯Ruby的书,也不仅是一本纯Rails。

第51节 注重实效者的基本工具

这一章里,作者列出了他们认为最基本和最重要的开发实践:

版本控制

连续不断的回归测试

全面自动化

第二版新加的内容

第二版新加的内容可以概括为以下方面:

并发编程 (流处理,无共享,Actor,)

函数编程

OO编程的改进(少用继承)

安全开发

敏捷原则和实践(小步快跑,结对,本质,因地制宜)

以人为本 (主动性,工程日记,直觉,取名)

这些方面的确都是现代软件工程实践中的新主流,所以作者们对于潮流的把握的确很到位。

要点

以下就是这33个要点的清单。其中的编号是第一版时的编号:

1 我的源码让猫给吃了

2 软件的熵

3 石头汤与煮青蛙

4 足够好的软件

5 你的知识资产

6 交流!

7 重复的危害

8 正交性

9 可撤消性

10 曳光弹

《程序员修炼之道:从小工到专家》内容简介:《程序员修炼之道》由一系列独立的部分组成, 涵盖的主题从个人责任、职业发展,知道用于使代码保持灵活、并且易于改编和复用的各种架构技术, 利用许多富有娱乐性的奇闻轶事、有思想性的例子及有。

11 原型与便笺

12 领域语言

13 估算

14 纯文本的威力

15 shell游戏

16 强力编辑

17 源码控制

18 调试

[美]DavidThomas《程序员修炼之道(第2版)》作品简介与读书感悟

19 文本操纵

21 按合约设计

22 死程序不说谎

23 断言式编程

26. 解耦与德墨忒尔法则

28. 时间耦合

30. 黑板

31. 靠巧合编程

32. 算法速率

33. 重构

34. 易于测试的代码

36. 需求之坑

37. 解开不可能解开的谜题

41 注重实效的团队

46 傲慢与偏见

这些要点的内容这里就不介绍了。有兴趣的读者可以直接去读第一版的中文版,或第二版的英文版 。

我们会每周推送商业智能、数据分析资讯、技术干货和程序员日常生活,欢迎关注我们头条号&知乎号“微策略中国”或微信公众号“微策略 商业智能”。

上一篇 2022年12月29 14:42
下一篇 2022年12月25 21:26

相关推荐

  • ip设置地址输入多少,ipv4设置ip地址是多少

    夏普复印机该怎么设置固定IP了,对于夏普2348n系列设置ip,只要掌握方法就不难。下面小编就告诉大家!操作方法:这个没有特别要求,通常默认都是192.168.1.X,X一般设置范围在2-254,可以

    2023年04月08 269
  • 怎么冻结账号,强制冻结qq号

    哪些情况下银行有权冻结你的个人账户?珍姐财税。如果你的个人账户被冻结,首先不用质疑银行是否有权冻结,而是应该及时了解冻结的原因,强制冻结qq号,及早排除冻结因素才是根本。这是了解财税的一个有关知识点。

    2023年06月05 270
  • qq管理员怎么禁言,qq群管理员怎么禁言一个人

    短说社区禁言功能介绍为维护良好的社区环境,需要对论坛发布灌水、违规内容的账号禁言处理;版主、超级版主、管理员支持前台禁言用户、前后台解禁用户。禁言配置禁言时长管理员可以在后台设置禁言时长,可按小时、天

    2023年05月19 237
  • hp激光打印机多少钱,双面自动打印

    眼下由于疫情的反复,很多地方不得已采取了延迟开学的措施。为了不耽误日常的学习,很多学生只能开启线上教育的学习模式。与此同时,打印的需求也在同步上涨。为了让打印变得更加方便,给家里添置一台打印机就显得很

    2023年03月14 267
  • 骁龙835多少钱一个,骁龙855芯片多少钱一个

    8月22日,国内一家手机厂商发布了旗下两款新品。其中搭载骁龙625的一款售价为4999元,骁龙855芯片多少钱一个,而另一款搭载骁龙835的则售价9999元。,那么,是什么让它把手机卖这么贵呢?原来它

    2023年04月07 282
  • 联通怎么短信查流量,联通怎么短信查流量剩余

    一位从事反电信诈骗工作多年的公安机关人士向澎湃新闻介绍,物联网卡流向社会主要存在两个隐患,一是流量限制技术不成熟,被人破解后会变成无限制上网卡;二是伪实名制的问题,联通怎么短信查流量剩余,和普通电话卡

    2023年05月15 213
  • 为什么加群请求发送失败,qq加群请求发送失败

    随着家长对孩子成长教育的重视家长与老师的联系也越来越紧密QQ加群提交请求失败的原因是\x0d\x0a1、网络不稳定;\x0d\x0a2、加群友次数太多,\x0d\x0a3、你的QQ属于对方黑名单,无法

    2023年04月19 221
  • vivoy67能卖多少钱,vivoy67a回收能卖多少钱

    vivoy67a回收能卖多少钱,oppo、vivo一直是主打拍照和音乐,骁龙660的推出,使得ov机型在性能上也得到提升,但是目前ov的一些主流660手机,二手价位普遍还是在2000多以上,今天不聊贵

    2023年04月06 289
  • 上岛川电动扳手多少钱,大艺电动扳手电池多少钱

    大艺电动扳手电池多少钱,电动扳手是指拧紧和旋松螺栓及螺母的电动工具,是一种拧紧高强度螺栓的工具。用于钢结构桥梁、厂房建筑、化工、发电设备安装大六角头高强度螺栓施工的初拧、终拧和扭剪型高强度螺栓的初拧,

    2023年04月04 205
  • 怎样做电商视频教程

    2019年40集全套电商小白运营技巧0基础视频教程+6000份电子方案,希望帮到你在文章末尾教程的领取方式、按照以下步骤就可以得到2019年电商小白运营技巧教程电商是互联网未来发展的趋势,2019年很

    2022年12月26 283
  • qq邮箱怎么设置密码,手机qq邮箱没有独立密码选项

    在之前的文章中,小编为大家介绍了QQ邮箱设置独立密码的方法,设置独立密码可以让我们的邮箱更加的安全。但是也有的小伙伴会觉得,自己在登录QQ邮箱时,手机qq邮箱没有独立密码选项,一次得输入两回不一样的密

    2023年05月10 254
  • 路由器怎么设置上网,路由器密码正确为什么连接不上

    前言大家好,我是林总,今天我们一起来看下无线路由器上网是如何设置的,你了解有多少呢?正文连接设置方法之一:1.设置无线路由器,接通电源,计算机连接上无线路由器(通过有线或者无线方式都可以),按照默认的

    2023年05月30 219
  • wifi怎么认证,wifi怎么认证才能上网

    不管是家用环境还是商用环境,越来越多的设备需要加入到无线网络中,wifi怎么认证才能上网,如果在接入网络的时候,没有访问权限设置和防御机制,让一些非法终端接入到了企业网络中,不仅会降低正常上网终端的网

    2023年05月23 283
关注微信