程序员修炼之道——从小工到专家(本书十周年纪念新版已出,欢迎购买)
[绝版]基本信息
- 原书名: The Pragmatic Programmer
- 原出版社: Addison Wesley
- 作者: [美]Andrew Hunt,David Thomas
- 译者: 马维达
- 出版社:电子工业出版社
- ISBN:7505397192
- 上架时间:2004-4-15
- 出版日期:2004 年3月
- 开本:16开
- 页码:362
- 版次:1-1
- 所属分类:
计算机 > 电子商务与计算机文化 > 综合
推荐阅读
内容简介回到顶部↑
本书主要介绍了软件开发的原则和方法。本书直指编程前沿,透过日益增长的现代软件开发 规范和技术,对软件开发的核心过程进行了审视——以满足用户为本,针对用户需求来产出高效、可维护的优秀代码。全书涵盖内容广博,从个人责任和职业发展,到保持代码灵活性并使之易于改动和重用,多而不杂。本书采用了有趣的轶事、详实的例子以及诙谐的对话等方式,描述了软件开发方方面面的最佳实践方案和各种缺陷。您从本书所学到的开发技巧、开发习惯以及职业态度,必将帮助您修炼成为一名真正的Pragmatic Programmer!
目录回到顶部↑
第1章 注重实效的哲学
1 我的源码让猫给吃了
2 软件的熵
3 石头汤与煮青蛙
4 足够好的软件
5 你的知识资产
6 交流!
第2章 注重实效的途径
7 重复的危害
8 正交性
9 可撤消性
10 曳光弹
11 原型与便笺
12 领域语言
13 估算
第3章 基本工具
14 纯文本的威力
15 shell游戏
1 我的源码让猫给吃了
2 软件的熵
3 石头汤与煮青蛙
4 足够好的软件
5 你的知识资产
6 交流!
第2章 注重实效的途径
7 重复的危害
8 正交性
9 可撤消性
10 曳光弹
11 原型与便笺
12 领域语言
13 估算
第3章 基本工具
14 纯文本的威力
15 shell游戏
前言回到顶部↑
作为评阅者,我得到了提早阅读你拿在手上的这本书的机会。即使当时还只是草稿,它就已是一本很好的书。Dave Thomas和Andy Hunt有话要说,并且知道怎样去说。我见过他们所做的事情,知道他们所说的将是有效的。我请求让我来撰写这篇前言,以便有机会向你解释其中的原因。
简而言之,本书将告诉你怎样以一种你能够遵循的方式去编程。也许你不认为这是一件困难的事情,但事情却并非如此。为什么?原因之一是,并非所有的编程书籍都是由程序员撰写的。其中有许多是由语言设计者、或是与他们有合作关系的报刊记者编撰而成,意在推销他们的作品。那些书告诉你怎样通过某种编程语言进行表达——这当然很重要,但却只是程序员所做的事情的一小部分。
除了通过编程语言进行表达,程序员还要做些什么?嗯,这是一个更深入的问题。大多数程序员在解释他们所做的事情这个问题上都会有困难。编程是一项充满了各种细节的工作,追踪这些细节需要专注。时间流逝、代码出现,你查看它们,那里全是些语句。如果你不仔细思考,你也许会以为编程不过就是敲入某种编程语言的语句。你当然错了,但找遍书店的编程专柜,你却还是讲不出所以然。
在《程序员修炼之道》一书中,Dave和Andy将告诉我们怎样以一种我们能够遵循的方式编程。他们何以能这样聪明?他们不也是和其他程序员一样,专注于各种细节而已吗?答案是他们在做某件事情时,会把注意力投注在他们在做的事情上——然后他们会试着把它做得更好。
设想你在参加一个会议。或许你在想,这个会议没完没了,你还不如去写程序。而Dave和Andy会想,他们为什么在开会,他们想知道是否可以通过另外的方式取代会议,并决定是否可使某样事情自动化,以使开会的工作推后。然后他们就会这样去做。这就是Dave和Andy思考的方式。开会并非是某种使他们远离编程的事情。开会就是编程,并且是能够加以改善的编程。我之所以知道他们以这样的方式思考,是因为这是书中的第二条提示:思考你的工作。那么再设想一下,他们这样思考了几年。很快他们就会拥有一堆解决方案。现在设想他们在工作中使用这些解决方案,又是几年;他们还放弃了其中太过困难、或者不能总是产生结果的解决方案。噢,这样的途径几乎定义了“pragmatic”(注重实效)的含义。现在设想他们又用了一、两年来写下他们的解决方案。你也许会想,这些信息可真是金矿。你想对了。两位作者告诉我们他们是怎样编程的,并且是以一种我们能够遵循的方式来告诉我们的。但这一陈述的后半部分的含义也许要多于你所想到的。让我来解释一下。作者一直在小心避免提出软件开发理论。这是一件幸运的事情,因为如果他们那样做了,他们就不得不为了捍卫他们的理论而对各章进行“调整”。这样的“调整”是,比如说,物理科学中的传统,在这些学科中,理论不是最终成为定律,就是被静静地丢弃。而另一方面,编程所具有的法则(如果有)却非常少。所以围绕想要成为法则的东西形成的编程建议在纸面上也许显得很好,而在实践中却无法让人满意。这也是那么多方法学书籍误入歧途之处。我研究这一问题已有十多年,并发现一种叫做模式语言(pattern language)的方法最有前途。简而言之,模式就是解决方案,而模式语言就是相互支援的若干解决方案的系统。围绕着对这些系统的探求,已经形成了一整个社群。本书不只是一堆提示。它是一种“披着羊皮”的模式语言。我这样说,是因为每一条提示都汲取自经验、作为具体建议讲授、并与其他提示关联而形成系统。是这些特征使我们能够学习并遵循模式语言。在本书中它们以同样的方式发挥着作用。你可以遵循本书的建议,因为它们是具体的。你不会发现含混不清的抽象。Dave和Andy 直接为你而写,就好像每一条提示都是能给你的编程生涯供给能量的重大策略。他们让提示保持简单,他们讲故事,他们使用轻松的笔触,他们接着还给出了各种问题的解答,这些问题将在你进行尝试时出现。
不仅如此。在你阅读了十或十五条提示之后,你将开始看到工作的另外一个维度。我们有时称之为“QWAN”,也即“quality without a name”(无名的品质)。本书的哲学将渗入你的意识,并与你自己的哲学交融在一起。它不鼓吹,它只是讲述什么可行。这正是本书美之所在:它体现它的哲学,以如此谦逊的方式。
这就是它:一本易于阅读——也易于应用——的关于整个编程实践的书。我一直在不断讲述它为何有效,而你关心的也许只是它的确有效。它的确有效,你会看到的。
简而言之,本书将告诉你怎样以一种你能够遵循的方式去编程。也许你不认为这是一件困难的事情,但事情却并非如此。为什么?原因之一是,并非所有的编程书籍都是由程序员撰写的。其中有许多是由语言设计者、或是与他们有合作关系的报刊记者编撰而成,意在推销他们的作品。那些书告诉你怎样通过某种编程语言进行表达——这当然很重要,但却只是程序员所做的事情的一小部分。
除了通过编程语言进行表达,程序员还要做些什么?嗯,这是一个更深入的问题。大多数程序员在解释他们所做的事情这个问题上都会有困难。编程是一项充满了各种细节的工作,追踪这些细节需要专注。时间流逝、代码出现,你查看它们,那里全是些语句。如果你不仔细思考,你也许会以为编程不过就是敲入某种编程语言的语句。你当然错了,但找遍书店的编程专柜,你却还是讲不出所以然。
在《程序员修炼之道》一书中,Dave和Andy将告诉我们怎样以一种我们能够遵循的方式编程。他们何以能这样聪明?他们不也是和其他程序员一样,专注于各种细节而已吗?答案是他们在做某件事情时,会把注意力投注在他们在做的事情上——然后他们会试着把它做得更好。
设想你在参加一个会议。或许你在想,这个会议没完没了,你还不如去写程序。而Dave和Andy会想,他们为什么在开会,他们想知道是否可以通过另外的方式取代会议,并决定是否可使某样事情自动化,以使开会的工作推后。然后他们就会这样去做。这就是Dave和Andy思考的方式。开会并非是某种使他们远离编程的事情。开会就是编程,并且是能够加以改善的编程。我之所以知道他们以这样的方式思考,是因为这是书中的第二条提示:思考你的工作。那么再设想一下,他们这样思考了几年。很快他们就会拥有一堆解决方案。现在设想他们在工作中使用这些解决方案,又是几年;他们还放弃了其中太过困难、或者不能总是产生结果的解决方案。噢,这样的途径几乎定义了“pragmatic”(注重实效)的含义。现在设想他们又用了一、两年来写下他们的解决方案。你也许会想,这些信息可真是金矿。你想对了。两位作者告诉我们他们是怎样编程的,并且是以一种我们能够遵循的方式来告诉我们的。但这一陈述的后半部分的含义也许要多于你所想到的。让我来解释一下。作者一直在小心避免提出软件开发理论。这是一件幸运的事情,因为如果他们那样做了,他们就不得不为了捍卫他们的理论而对各章进行“调整”。这样的“调整”是,比如说,物理科学中的传统,在这些学科中,理论不是最终成为定律,就是被静静地丢弃。而另一方面,编程所具有的法则(如果有)却非常少。所以围绕想要成为法则的东西形成的编程建议在纸面上也许显得很好,而在实践中却无法让人满意。这也是那么多方法学书籍误入歧途之处。我研究这一问题已有十多年,并发现一种叫做模式语言(pattern language)的方法最有前途。简而言之,模式就是解决方案,而模式语言就是相互支援的若干解决方案的系统。围绕着对这些系统的探求,已经形成了一整个社群。本书不只是一堆提示。它是一种“披着羊皮”的模式语言。我这样说,是因为每一条提示都汲取自经验、作为具体建议讲授、并与其他提示关联而形成系统。是这些特征使我们能够学习并遵循模式语言。在本书中它们以同样的方式发挥着作用。你可以遵循本书的建议,因为它们是具体的。你不会发现含混不清的抽象。Dave和Andy 直接为你而写,就好像每一条提示都是能给你的编程生涯供给能量的重大策略。他们让提示保持简单,他们讲故事,他们使用轻松的笔触,他们接着还给出了各种问题的解答,这些问题将在你进行尝试时出现。
不仅如此。在你阅读了十或十五条提示之后,你将开始看到工作的另外一个维度。我们有时称之为“QWAN”,也即“quality without a name”(无名的品质)。本书的哲学将渗入你的意识,并与你自己的哲学交融在一起。它不鼓吹,它只是讲述什么可行。这正是本书美之所在:它体现它的哲学,以如此谦逊的方式。
这就是它:一本易于阅读——也易于应用——的关于整个编程实践的书。我一直在不断讲述它为何有效,而你关心的也许只是它的确有效。它的确有效,你会看到的。
评论交流
共有101人开贴评论 177人参与评论 95人参与打分 查看
评价等级:







发表于:2010-8-4 14:50:00
看了此书真的感慨很多,国内要成就还要做很多,比如人文教育等等。
1 我的源码让猫给吃了
不要寻找借口,从自身找原因
2 软件的熵
一句话:不以善小而不为,勿以恶小而为之.
从初期就要做好规范,不要因为是poc这样的前提而放松对代码的规范,现在的项目就
有这种问题,初期的时候有人认为(自己也有这种想法)等到以后正式开发的时候再规范
,而往往还未到正式开发,到处出现不规范的东西.加上拷贝粘贴的大法,亡羊补牢都晚
了.这就是所谓破窗户理论.
3 石头汤与煮青蛙
两个方面,一还是'软件的熵'当中的含义,喜欢书里面的这段话:'大多数的项目的拖
延都是一天一天发生的,系统一个特性一个特性的偏离其规范.一个又一个的补丁被打
到某段代码上,直到最初的代码一点没有留下'. 二是团队的协同合作,这样石头汤也很
鲜美.
4足够好的软件
就是俗话说的一鸟在手胜于二鸟在林.
首先得确保软件可用性,至于亮点,特色,在可用以后才需要考虑.而且还得明确用户需
求(虽然这点始终被强调).大家都知道系统不可能做的完美,但是自己着手开发的时候
总是朝着尽可能完美的方向发展,欺骗自己说,这个功能多么伟大,一定要加上去,那个
功能多么惊天动地,最后反而成为四不像,使项目延期.
在第一次企图做那个todo list的时候,想着把calendar和task两项功能完整的结合,
同时还想着把contact功能也加入,甚至还有ms porject的管理功能,但是一切都太多,
以致于设计了少数几个界面以后就陷入了无止境的功能权衡中,因为太多东西又想完美
.所以第一次最终结果是除了最后那个简陋的复杂的界面,什么东西都没有,当然如今代
码也已经不知道是不是被自己删除,能够留在自己硬盘上并且使用的还是那个简简单单
的GeeTask,功能不多,但是的确对我来说,足够好了,如果还有新的功能,添加就是了,不
用一次就做一个大而全的玩意出来.
也想起在上一个公司参与的第一个项目,房地产的预警系统,先前同事通过研究,不知
道从哪里搞到一些其他人做的预警系统,动用高深的所谓经济学景气循环算法来计算,
艰难的实现这些公式.当然我们自己也不知道这个是不是准.后来我负责去给客户实施,
在客户处,得知了惊人的消息:客户需要的足够好的软件其实就是一个新闻发布功能的
东西,因为他们也不懂,是领导的要求---领导当然也是被上层领导要求.这个例子虽然
特殊,但是也说明了一定要及早知道客户心中的足够好的软件是什么.
5 你的知识资产
关于学习的一个章节,提到了不少如何学习,把学习知识作为投资一样看待,分析的也
很在理.自认为在这方面还是赶上了书中的要求,不然也不会看到这本书了^_^,学习是
一个过程,不会有立杆见影的效果,当然我们不是政客,不需要立马可见的政绩,那么种
种树又何妨呢?学习也要有实践,把学到的知识找机会就应用起来,起码,自己没用到,也
可以看看别人怎么用嘛.学的多了自然有了自己的判断,前两天不小心点开了jdk源码当
中关于Arrays.sort方法的实现.看到内部的合并排序法却不如《算法导论》中描述的
那么简洁,那么具有可读性,这时候,有了判断了,就不至于傻乎乎的研究它的写法,当然
,jdk里面的mergesort又有一些额外的处理(小数组优化),这个又是可以学习的地方.对
了,这一小节里面还有一段关于如何获得答案的方法,和国内论坛风靡一时的《提问的
智慧》一文有多处相似之处,不知道作者是否参考了本书.
1 我的源码让猫给吃了
不要寻找借口,从自身找原因
2 软件的熵
一句话:不以善小而不为,勿以恶小而为之.
从初期就要做好规范,不要因为是poc这样的前提而放松对代码的规范,现在的项目就
有这种问题,初期的时候有人认为(自己也有这种想法)等到以后正式开发的时候再规范
,而往往还未到正式开发,到处出现不规范的东西.加上拷贝粘贴的大法,亡羊补牢都晚
了.这就是所谓破窗户理论.
3 石头汤与煮青蛙
两个方面,一还是'软件的熵'当中的含义,喜欢书里面的这段话:'大多数的项目的拖
延都是一天一天发生的,系统一个特性一个特性的偏离其规范.一个又一个的补丁被打
到某段代码上,直到最初的代码一点没有留下'. 二是团队的协同合作,这样石头汤也很
鲜美.
4足够好的软件
就是俗话说的一鸟在手胜于二鸟在林.
首先得确保软件可用性,至于亮点,特色,在可用以后才需要考虑.而且还得明确用户需
求(虽然这点始终被强调).大家都知道系统不可能做的完美,但是自己着手开发的时候
总是朝着尽可能完美的方向发展,欺骗自己说,这个功能多么伟大,一定要加上去,那个
功能多么惊天动地,最后反而成为四不像,使项目延期.
在第一次企图做那个todo list的时候,想着把calendar和task两项功能完整的结合,
同时还想着把contact功能也加入,甚至还有ms porject的管理功能,但是一切都太多,
以致于设计了少数几个界面以后就陷入了无止境的功能权衡中,因为太多东西又想完美
.所以第一次最终结果是除了最后那个简陋的复杂的界面,什么东西都没有,当然如今代
码也已经不知道是不是被自己删除,能够留在自己硬盘上并且使用的还是那个简简单单
的GeeTask,功能不多,但是的确对我来说,足够好了,如果还有新的功能,添加就是了,不
用一次就做一个大而全的玩意出来.
也想起在上一个公司参与的第一个项目,房地产的预警系统,先前同事通过研究,不知
道从哪里搞到一些其他人做的预警系统,动用高深的所谓经济学景气循环算法来计算,
艰难的实现这些公式.当然我们自己也不知道这个是不是准.后来我负责去给客户实施,
在客户处,得知了惊人的消息:客户需要的足够好的软件其实就是一个新闻发布功能的
东西,因为他们也不懂,是领导的要求---领导当然也是被上层领导要求.这个例子虽然
特殊,但是也说明了一定要及早知道客户心中的足够好的软件是什么.
5 你的知识资产
关于学习的一个章节,提到了不少如何学习,把学习知识作为投资一样看待,分析的也
很在理.自认为在这方面还是赶上了书中的要求,不然也不会看到这本书了^_^,学习是
一个过程,不会有立杆见影的效果,当然我们不是政客,不需要立马可见的政绩,那么种
种树又何妨呢?学习也要有实践,把学到的知识找机会就应用起来,起码,自己没用到,也
可以看看别人怎么用嘛.学的多了自然有了自己的判断,前两天不小心点开了jdk源码当
中关于Arrays.sort方法的实现.看到内部的合并排序法却不如《算法导论》中描述的
那么简洁,那么具有可读性,这时候,有了判断了,就不至于傻乎乎的研究它的写法,当然
,jdk里面的mergesort又有一些额外的处理(小数组优化),这个又是可以学习的地方.对
了,这一小节里面还有一段关于如何获得答案的方法,和国内论坛风靡一时的《提问的
智慧》一文有多处相似之处,不知道作者是否参考了本书.
| 我要写评论 |
| 查看所有评论交流(共101条) |


点击看大图





加载中...