对程序员最有影响每个程序员都该阅读的书程序员修炼之道中文版.doc

上传人:豆**** 文档编号:17556861 上传时间:2022-05-25 格式:DOC 页数:70 大小:333.50KB
返回 下载 相关 举报
对程序员最有影响每个程序员都该阅读的书程序员修炼之道中文版.doc_第1页
第1页 / 共70页
对程序员最有影响每个程序员都该阅读的书程序员修炼之道中文版.doc_第2页
第2页 / 共70页
点击查看更多>>
资源描述

《对程序员最有影响每个程序员都该阅读的书程序员修炼之道中文版.doc》由会员分享,可在线阅读,更多相关《对程序员最有影响每个程序员都该阅读的书程序员修炼之道中文版.doc(70页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流对程序员最有影响每个程序员都该阅读的书程序员修炼之道中文版.精品文档.程序员修炼之道1 我的源码让猫给吃了32 软件的熵53 石头汤与煮青蛙74 足够好的软件95 你的知识资产116 交流!167 重复的危害218 正交性299 可撤消性3710 曳光弹4011 原型与便笺4412 领域语言4813 估算5414 纯文本的威力5915 shell游戏6416 强力编辑6817 源码控制7118 调试7419 文本操纵8120 代码生成器8421 按合约设计(1)8721 按合约设计(2)9222 死程序不说谎9923 断言式编程10124 何

2、时使用异常10425怎样配平资源1081 我的源码让猫给吃了 注重实效的程序员的特征是什么?我们觉得是他们处理问题、寻求解决方案时的态度、风格、哲学。他们能够越出直接的问题去思考,总是设法把问题放在更大的语境中,总是设法注意更大的图景。毕竟,没有这样的更大的语境,你又怎能注重实效?你又怎能做出明智的妥协和有见识的决策?他们成功的另一关键是他们对他们所做的每件事情负责,关于这一点,我们将在“我的源码让猫给吃了”中加以讨论。因为负责,注重实效的程序员不会坐视他们的项目土崩瓦解。在“软件的熵”中,我们将告诉你怎样使你的项目保持整洁。大多数人发现自己很难接受变化,有时是出于好的理由,有时只是因为固有的

3、惰性。在“石头汤与煮青蛙”中,我们将考察一种促成变化的策略,并(出于对平衡的兴趣)讲述一个忽视渐变危险的两栖动物的警世传说。理解你的工作的语境的好处之一是,了解你的软件必须有多好变得更容易了。有时接近完美是惟一的选择,但常常会涉及各种权衡。我们将在“足够好的软件”中探究这一问题。当然,你需要拥有广泛的知识和经验基础才能赢得这一切。学习是一个持续不断的过程。在“你的知识资产”中,我们将讨论一些策略,让你“开足马力”。最后,我们没有人生活在真空中。我们都要花大量时间与他人打交道。在“交流!”中列出了能让我们更好地做到这一点的几种途径。注重实效的编程源于注重实效的思考的哲学。本章将为这种哲学设立基础

4、。1 我的源码让猫给吃了在所有弱点中,最大的弱点就是害怕暴露弱点。J. B. Bossuet, Politics from Holy Writ, 1709依据你的职业发展、你的项目和你每天的工作,为你自己和你的行为负责这样一种观念,是注重实效的哲学的一块基石。注重实效的程序员对他或她自己的职业生涯负责,并且不害怕承认无知或错误。这肯定并非是编程最令人愉悦的方面,但它肯定会发生即使是在最好的项目中。尽管有彻底的测试、良好的文档以及足够的自动化,事情还是会出错。交付晚了,出现了未曾预见到的技术问题。发生这样的事情,我们要设法尽可能职业地处理它们。这意味着诚实和坦率。我们可以为我们的能力自豪,但对于

5、我们的缺点还有我们的无知和我们的错误我们必须诚实。负责责任是你主动担负的东西。你承诺确保某件事情正确完成,但你不一定能直接控制事情的每一个方面。除了尽你所能以外,你必须分析风险是否超出了你的控制。对于不可能做到的事情或是风险太大的事情,你有权不去为之负责。你必须基于你自己的道德准则和判断来做出决定。如果你确实同意要为某个结果负责,你就应切实负起责任。当你犯错误(就如同我们所有人都会犯错误一样)、或是判断失误时,诚实地承认它,并设法给出各种选择。不要责备别人或别的东西,或是拼凑借口。不要把所有问题都归咎于供应商、编程语言、管理部门、或是你的同事。也许他(它)们全体或是某几方在其中扮演了某种角色,

6、但你可以选择提供解决方案,而非寻找借口。如果存在供应商不能按时供货的风险,你应该预先制定一份应急计划。如果磁盘垮了带走了你的所有源码而你没有做备份,那是你的错。告诉你的老板“我的源码让猫给吃了”也无法改变这一点。提示3Provide Options, Dont Make Lame Excuses提供各种选择,不要找蹩脚的借口在你走向任何人、告诉他们为何某事做不到、为何耽搁、为何出问题之前,先停下来,听一听你心里的声音。与你的显示器上的橡皮鸭交谈,或是与猫交谈。你的辩解听起来合理,还是愚蠢?在你老板听来又是怎样?在你的头脑里把谈话预演一遍。其他人可能会说什么?他们是否会问:“你试了这个吗”,或是

7、“你没有考虑那个吗?”你将怎样回答?在你去告诉他们坏消息之前,是否还有其他你可以再试一试的办法?有时,你其实知道他们会说什么,所以还是不要给他们添麻烦吧。要提供各种选择,而不是找借口。不要说事情做不到;要说明能够做什么来挽回局面。必须把代码扔掉?给他们讲授重构的价值(参见重构,184页)。你要花时间建立原型(prototyping),以确定最好的继续前进的方式(参见原型与便笺,53页)?你要引入更好的测试(参见易于测试的代码,189页;以及无情的测试,237页)或自动化(参见无处不在的自动化,230页),以防止问题再度发生?又或许你需要额外的资源。不要害怕提出要求,也不要害怕承认你需要帮助。在

8、你大声说出它们之前,先设法把蹩脚的借口清除出去。如果你必须说,就先对你的猫说。反正,如果小蒂德尔丝(Tiddles,BBC在19691974年播出的喜剧节目“Monty Pythons Flying Circus”中的著名小母猫译注)要承受指责2 软件的熵尽管软件开发几乎不受任何物理定律的约束,熵(entropy)对我们的影响却很大。熵是一个来自物理学的概念,指的是某个系统中的“无序”的总量。遗憾的是,热力学定律保证了宇宙中的熵倾向于最大化。当软件中的无序增长时,程序员们称之为“软件腐烂”(software rot)。有许多因素可以促生软件腐烂。其中最重要的一个似乎是开发项目时的心理(或文化)

9、。即使你的团队只有你一个人,你开发项目时的心理也可能是非常微妙的事情。尽管制定了最好的计划,拥有最好的开发者,项目在其生命期中仍可能遭遇毁灭和衰败。而另外有一些项目,尽管遇到巨大的困难和接连而来的挫折,却成功地击败自然的无序倾向,设法取得了相当好的结果。是什么造成了这样的差异?在市区,有些建筑漂亮而整洁,而另一些却是破败不堪的“废弃船只”。为什么?犯罪和城市衰退领域的研究者发现了一种迷人的触发机制,一种能够很快将整洁、完整和有人居住的建筑变为破败的废弃物的机制WK82。破窗户。一扇破窗户,只要有那么一段时间不修理,就会渐渐给建筑的居民带来一种废弃感一种职权部门不关心这座建筑的感觉。于是又一扇窗

10、户破了。人们开始乱扔垃圾。出现了乱涂乱画。严重的结构损坏开始了。在相对较短的一段时间里,建筑就被损毁得超出了业主愿意修理的程度,而废弃感变成了现实。“破窗户理论”启发了纽约和其他大城市的警察部门,他们对一些轻微的案件严加处理,以防止大案的发生。这起了作用:管束破窗户、乱涂乱画和其他轻微违法事件减少了严重罪案的发生。提示4Dont Live with Broken Windows不要容忍破窗户不要留着“破窗户”(低劣的设计、错误决策、或是糟糕的代码)不修。发现一个就修一个。如果没有足够的时间进行适当的修理,就用木板把它钉起来。或许你可以把出问题的代码放入注释(comment out),或是显示“

11、未实现”消息,或是用虚设的数据(dummy data)加以替代。采取某种行动防止进一步的损坏,并说明情势处在你的控制之下。我们看到过整洁、运行良好的系统,一旦窗户开始破裂,就相当迅速地恶化。还有其他一些因素能够促生软件腐烂,我们将在别处探讨它们,但与其他任何因素相比,置之不理都会更快地加速腐烂的进程。你也许在想,没有人有时间到处清理项目的所有碎玻璃。如果你继续这么想,你就最好计划找一个大型垃圾罐,或是搬到别处去。不要让熵赢得胜利。灭火作为对照,让我们讲述Andy的一个熟人的故事。他是一个富得让人讨厌的富翁,拥有一所完美、漂亮的房子,里面满是无价的古董、艺术品,以及诸如此类的东西。有一天,一幅挂

12、毯挂得离他的卧室壁炉太近了一点,着了火。消防人员冲进来救火和他的房子。但他们拖着粗大、肮脏的消防水管冲到房间门口却停住了火在咆哮他们要在前门和着火处之间铺上垫子。他们不想弄脏地毯。这的确是一个极端的事例,但我们必须以这样的方式对待软件。一扇破窗户一段设计低劣的代码、团队必须在整个项目开发过程中加以忍受的一项糟糕的管理决策就足以使项目开始衰败。如果你发现自己在有好些破窗户的项目里工作,会很容易产生这样的想法:“这些代码的其余部分也是垃圾,我只要照着做就行了。”项目在这之前是否一直很好,并没有什么关系。在最初得出“破窗户理论”的一项实验中,一辆废弃的轿车放了一个星期,无人理睬。而一旦有一扇窗户被打

13、破,数小时之内车上的设备就被抢夺一空,车也被翻了个底朝天。按照同样的道理,如果你发现你所在团队和项目的代码十分漂亮编写整洁、设计良好,并且很优雅你就很可能会格外注意不去把它弄脏,就和那些消防员一样。即使有火在咆哮(最后期限、发布日期、会展演示,等等),你也不会想成为第一个弄脏东西的人。相关内容:l 石头汤与煮青蛙,7页l 重构,184页l 注重实效的团队,224页挑战l 通过调查你周边的计算“环境”,帮助增强你的团队的能力。选择两或三扇“破窗户”,并与你的同事讨论问题何在,以及怎样修理它们。l 你能否说出某扇窗户是何时破的?你的反应是什么?如果它是他人的决策所致,或者是管理部门的指示,你能做些

14、什么?3 石头汤与煮青蛙三个士兵从战场返回家乡,在路上饿了。他们看见前面有村庄,就来了精神他们相信村民会给他们一顿饭吃。但当他们到达那里,却发现门锁着,窗户也关着。经历了多年战乱,村民们粮食匮乏,并把他们有的一点粮食藏了起来。士兵们并未气馁,他们煮开一锅水,小心地把三块石头放进去。吃惊的村民们走出来望着他们。“这是石头汤。”士兵们解释说。“就放石头吗?”村民们问。“一点没错但有人说加一些胡萝卜味道更好”一个村民跑开了,又很快带着他储藏的一篮胡萝卜跑回来。几分钟之后,村民们又问:“就是这些了吗?”“哦,”士兵们说:“几个土豆会让汤更实在。”又一个村民跑开了。接下来的一小时,士兵们列举了更多让汤更

15、鲜美的配料:牛肉、韭菜、盐,还有香菜。每次都会有一个不同的村民跑回去搜寻自己的私人储藏品。最后他们煮出了一大锅热气腾腾的汤。士兵们拿掉石头,和所有村民一起享用了一顿美餐,这是几个月以来他们所有人第一次吃饱饭。在石头汤的故事里有两层寓意。士兵戏弄了村民,他们利用村民的好奇,从他们那里弄到了食物。但更重要的是,士兵充当催化剂,把村民团结起来,和他们一起做到了他们自己本来做不到的事情一项协作的成果。最后每个人都是赢家。你常常也可以效仿这些士兵。在有些情况下,你也许确切地知道需要做什么,以及怎样去做。整个系统就在你的眼前你知道它是对的。但请求许可去处理整个事情,你会遇到拖延和漠然。大家要设立委员会,预

16、算需要批准,事情会变得复杂化。每个人都会护卫他们自己的资源。有时候,这叫做“启动杂役”(start-up fatigue)。这正是拿出石头的时候。设计出你可以合理要求的东西,好好开发它。一旦完成,就拿给大家看,让他们大吃一惊。然后说:“要是我们增加可能就会更好。”假装那并不重要。坐回椅子上,等着他们开始要你增加你本来就想要的功能。人们发现,参与正在发生的成功要更容易。让他们瞥见未来,你就能让他们聚集在你周围1。提示5Be a Catalyst for Change做变化的催化剂村民的角度另一方面,石头汤的故事也是关于温和而渐进的欺骗的故事。它讲述的是过于集中的注意力。村民想着石头,忘了世界的其

17、余部分。我们都是这样,每一天。事情会悄悄爬到我们身上。我们都看见过这样的症状。项目慢慢地、不可改变地完全失去控制。大多数软件灾难都是从微不足道的小事情开始的,大多数项目的拖延都是一天一天发生的。系统一个特性一个特性地偏离其规范,一个又一个的补丁被打到某段代码上,直到最初的代码一点没有留下。常常是小事情的累积破坏了士气和团队。提示6Remember the Big Picture记住大图景我们没有做过这个真的,但有人说,如果你抓一只青蛙放进沸水里,它会一下子跳出来。但是,如果你把青蛙放进冷水里,然后慢慢加热,青蛙不会注意到温度的缓慢变化,会呆在锅里,直到被煮熟。注意,青蛙的问题与第2节讨论的破窗

18、户问题不同。在破窗户理论中,人们失去与熵战斗的意愿,是因为他们觉察到没有人会在意。而青蛙只是没有注意到变化。不要像青蛙一样。留心大图景。要持续不断地观察周围发生的事情,而不只是你自己在做的事情。相关内容:l 软件的熵,4页l 靠巧合编程,172页l 重构,184页l 需求之坑,202页l 注重实效的团队,224页挑战l 在评阅本书的草稿时,John Lakos提出这样一个问题:士兵渐进地欺骗村民,但他们所催生的变化对村民完全有利。但是,渐进地欺骗青蛙,你是在加害于它。当你设法催生变化时,你能否确定你是在做石头汤还是青蛙汤?决策是主观的还是客观的?4 足够好的软件欲求更好,常把好事变糟。李尔王

19、1.4有一个(有点)老的笑话,说一家美国公司向一家日本制造商订购100 000片集成电路。规格说明中有次品率:10 000片中只能有1片。几周过后订货到了:一个大盒子,里面装有数千片IC,还有一个小盒子,里面只装有10片IC。在小盒子上有一个标签,上面写着:“这些是次品”。要是我们真的能这样控制质量就好了。但现实世界不会让我们制作出十分完美的产品,特别是不会有无错的软件。时间、技术和急躁都在合谋反对我们。但是,这并不一定就让人气馁。如Ed Yourdon发表在IEEE Software上的一篇文章You95所描述的,你可以训练你自己,编写出足够好的软件对你的用户、对未来的维护者、对你自己内心的

20、安宁来说足够好。你会发现,你变得更多产,而你的用户也会更加高兴。你也许还会发现,因为“孵化期”更短,你的程序实际上更好了。在继续前进之前,我们需要对我们将要说的话进行限定。短语“足够好”并非意味着不整洁或制作糟糕的代码。所有系统都必须满足其用户的需求,才能取得成功。我们只是在宣扬,应该给用户以机会,让他们参与决定你所制作的东西何时已足够好。让你的用户参与权衡通常你是为别人编写软件。你常常需要记得从他们那里获取需求2。但你是否常问他们,他们想要他们的软件有多好?有时候选择并不存在。如果你的工作对象是心脏起搏器、航天飞机、或是将被广泛传播的底层库,需求就会更苛刻,你的选择就更有限。但是,如果你的工

21、作对象是全新的产品,你就会有不同的约束。市场人员有需要信守的承诺,最终用户也许已基于交付时间表制定了各种计划,而你的公司肯定有现金流方面的约束。无视这些用户的需求,一味地给程序增加新特性,或是一次又一次润饰代码,这不是有职业素养的做法。我们不是在提倡慌张:许诺不可能兑现的时间标度(time scale),为赶上最后期限而削减基本的工程内容,这些同样不是有职业素养的做法。你所制作的系统的范围和质量应该作为系统需求的一部分规定下来。提示7Make Quality a Requirements Issue使质量成为需求问题你常常会处在须要进行权衡的情形中。让人惊奇的是,许多用户宁愿在今天用上有一些“

22、毛边”的软件,也不愿等待一年后的多媒体版本。许多预算吃紧的IT部门都会同意这样的说法。今天的了不起的软件常常比明天的完美软件更可取。如果你给用户某样东西,让他们及早使用,他们的反馈常常会把你引向更好的最终解决方案(参见曳光弹,48页)。知道何时止步在某些方面,编程就像是绘画。你从空白的画布和某些基本原材料开始,通过知识、艺术和技艺的结合去确定用前者做些什么。你勾画出全景,绘制背景,然后填入各种细节。你不时后退一步,用批判的眼光观察你的作品。常常,你会扔掉画布,重新再来。但艺术家们会告诉你,如果你不懂得应何时止步,所有的辛苦劳作就会遭到毁坏。如果你一层又一层、细节复细节地叠加,绘画就会迷失在绘制

23、之中。不要因为过度修饰和过于求精而毁损完好的程序。继续前进,让你的代码凭着自己的质量站立一会儿。它也许不完美,但不用担心:它不可能完美(在第6章,171页,我们将讨论在不完美的世界上开发代码的哲学)。相关内容:l 曳光弹,48页l 需求之坑,202页l 注重实效的团队,224页l 极大的期待,255页挑战l 考察你使用的软件工具和操作系统的制造商。你能否发现证据,表明这些公司安于发布他们知道不完美的软件吗?作为用户,你是会(1)等着他们清除所有bug,(2)拥有复杂的软件,并接受某些bug,还是会(3)选择缺陷较少的更简单的软件?l 考虑模块化对软件交付的影响。与以模块化方式设计的系统相比,整

24、体式(monolithic)软件要达到所需质量,花费的时间更多还是更少?你能找到一个商业案例吗?5 你的知识资产知识上的投资总能得到最好的回报。本杰明富兰克林噢,好样的老富兰克林从不会想不出精练的说教。为什么,如果我们能够早睡早起,我们就是了不起的程序员对吗?早起的鸟儿有虫吃,但早起的虫子呢?然而在这种情况下,Ben确实命中了要害。你的知识和经验是你最重要的职业财富。遗憾的是,它们是有时效的资产(expiring asset)。随着新技术、语言及环境的出现,你的知识会变得过时。不断变化的市场驱动力也许会使你的经验变得陈旧或无关紧要。考虑到“网年”飞逝的速度,这样的事情可能会非常快地发生。随着你

25、的知识的价值降低,对你的公司或客户来说,你的价值也在降低。我们想要阻止这样的事情,决不让它发生。你的知识资产我们喜欢把程序员所知道的关于计算技术和他们所工作的应用领域的全部事实、以及他们的所有经验视为他们的知识资产(Knowledge Portfolios)。管理知识资产与管理金融资产非常相似:1. 严肃的投资者定期投资作为习惯。2. 多元化是长期成功的关键。3. 聪明的投资者在保守的投资和高风险、高回报的投资之间平衡他们的资产。4. 投资者设法低买高卖,以获取最大回报。5. 应周期性地重新评估和平衡资产。要在职业生涯中获得成功,你必须运用同样的指导方针管理你的知识资产。经营你的资产l 定期投

26、资。就像金融投资一样,你必须定期为你的知识资产投资。即使投资量很小,习惯自身也和总量一样重要。在下一节中将列出一些示范目标。l 多元化。你知道的不同的事情越多,你就越有价值。作为底线,你需要知道你目前所用的特定技术的各种特性。但不要就此止步。计算技术的面貌变化很快今天的热门技术明天就可能变得近乎无用(或至少是不再抢手)。你掌握的技术越多,你就越能更好地进行调整,赶上变化。l 管理风险。从高风险、可能有高回报,到低风险、低回报,技术存在于这样一条谱带上。把你所有的金钱都投入可能突然崩盘的高风险股票并不是一个好主意;你也不应太保守,错过可能的机会。不要把你所有的技术鸡蛋放在一个篮子里。l 低买高卖

27、。在新兴的技术流行之前学习它可能就和找到被低估的股票一样困难,但所得到的就和那样的股票带来的收益一样。在Java刚出现时学习它可能有风险,但对于现在已步入该领域的顶尖行列的早期采用者,这样做得到了非常大的回报。l 重新评估和平衡。这是一个非常动荡的行业。你上个月开始研究的热门技术现在也许已像石头一样冰冷。也许你需要重温你有一阵子没有使用的数据库技术。又或许,如果你之前试用过另一种语言,你就会更有可能获得那个新职位在所有这些指导方针中,最重要的也是最简单的:提示8Invest Regularly in Your Knowledge Portfolio定期为你的知识资产投资目标关于何时以及增加什么

28、到你的知识资产中,现在你已经拥有了一些指导方针,那么什么是获得智力资本、从而为你的资产提供资金的最佳方式呢?这里有一些建议。l 每年至少学习一种新语言。不同语言以不同方式解决相同的问题。通过学习若干不同的方法,可以帮助你拓宽你的思维,并避免墨守成规。此外,现在学习许多语言已容易了许多,感谢可从网上自由获取的软件财富(参见267页)。l 每季度阅读一本技术书籍。书店里摆满了许多书籍,讨论与你当前的项目有关的有趣话题。一旦你养成习惯,就一个月读一本书。在你掌握了你正在使用的技术之后,扩宽范围,阅读一些与你的项目无关的书籍。l 也要阅读非技术书籍。记住计算机是由人你在设法满足其需要的人使用的,这十分

29、重要。不要忘了等式中人这一边。l 上课。在本地的学院或大学、或是将要来临的下一次会展上寻找有趣的课程。l 参加本地用户组织。不要只是去听讲,而要主动参与。与世隔绝对你的职业生涯来说可能是致命的;打听一下你们公司以外的人都在做什么。l 试验不同的环境。如果你只在Windows上工作,就在家玩一玩Unix(可自由获取的Linux就正好)。如果你只用过makefile和编辑器,就试一试IDE,反之亦然。l 跟上潮流。订阅商务杂志和其他期刊(参见262页的推荐刊物)。选择所涵盖的技术与你当前的项目不同的刊物。l 上网。想要了解某种新语言或其他技术的各种特性?要了解其他人的相关经验,了解他们使用的特定行

30、话,等等,新闻组是一种很好的方式。上网冲浪,查找论文、商业站点,以及其他任何你可以找到的信息来源。 持续投入十分重要。一旦你熟悉了某种新语言或新技术,继续前进。学习另一种。是否在某个项目中使用这些技术,或者是否把它们放入你的简历,这并不重要。学习的过程将扩展你的思维,使你向着新的可能性和新的做事方式拓展。思想的“异花授粉”(cross-pollination)十分重要;设法把你学到的东西应用到你当前的项目中。即使你的项目没有使用该技术,你或许也能借鉴一些想法。例如,熟悉了面向对象,你就会用不同的方式编写纯C程序。学习的机会于是你狼吞虎咽地阅读,在你的领域,你站在了所有突破性进展的前沿(这不是容

31、易的事情)。有人向你请教一个问题,答案是什么?你连最起码的想法都没有。你坦白地承认了这一点。不要就此止步,把找到答案视为对你个人的挑战。去请教古鲁(如果在你们的办公室里没有,你应该能在Internet上找到:参见下一页上的方框)。上网搜索。去图书馆。如果你自己找不到答案,就去找出能找到答案的人。不要把问题搁在那里。与他人交谈可以帮助你建立人际网络,而因为在这个过程中找到了其他不相关问题的解决方案,你也许还会让自己大吃一惊。旧有的资产也在不断增长所有阅读和研究都需要时间,而时间已经很短缺。所以你需要预先规划。让自己在空闲的片刻时间里总有东西可读。花在等医生上的时间是抓紧阅读的好机会但一定要带上你

32、自己的杂志,否则,你也许会发现自己在翻阅1973年的一篇卷角的关于巴布亚新几内亚的文章。批判的思考最后一个要点是,批判地思考你读到的和听到的。你需要确保你的资产中的知识是准确的,并且没有受到供应商或媒体炒作的影响。警惕声称他们的信条提供了惟一答案的狂热者那或许适用、或许不适用于你和你的项目。不要低估商业主义的力量。Web搜索引擎把某个页面列在最前面,并不意味着那就是最佳选择;内容供应商可以付钱让自己排在前面。书店在显著位置展示某一本书,也并不意味着那就是一本好书,甚至也不说明那是一本受欢迎的书;它们可能是付了钱才放在那里的。提示9Critically Analyze What You Read

33、 and Hear批判地分析你读到的和听到的遗憾的是,几乎再没有简单的答案了。但拥有大量知识资产,并把批判的分析应用于你将要阅读的技术出版物的洪流,你将能够理解复杂的答案。与古鲁打交道的礼节与教养随着Internet在全球普及,古鲁们突然变得像你的Enter键一样贴近。那么,你怎样才能找到一个古鲁,怎样才能找一个古鲁和你交谈呢?我们找到了一些简单的诀窍。l 确切地知道你想要问什么,并尽量明确具体。l 小心而得体地组织你的问题。记住你是在请求帮助;不要显得好像是在要求对方回答。l 组织好问题之后,停下来,再找找答案。选出一些关键字,搜索Web。查找适当的FAQ(常见问题的解答列表)。l 决定你是

34、想公开提问还是私下提问。Usenet新闻组是与专家会面的美妙场所,在那里可以讨论几乎任何问题,但有些人对这些新闻组的公共性质有顾虑。你总是可以用另外的方法:直接发电子邮件给古鲁。不管怎样,要使用有意义的主题(“需要帮助!”无益于事)。l 坐回椅子上,耐心等候。人们很忙,也许需要几天才能得到明确的答案。最后,请一定要感谢任何回应你的人。如果你看到有人提出你能够解答的问题,尽你的一份力,参与解答。挑战l 这周就开始学习一种新语言。总在用C+编程?试试SmalltalkURL 13或SqueakURL 14。在用Java?试试EiffelURL 10或TOMURL 15。关于其他自由编译器和环境的来

35、源,参见267页。l 开始阅读一本新书(但要先读完这一本!)。如果你在进行非常详细的实现和编码,就阅读关于设计和架构的书。如果你在进行高级设计,就阅读关于编码技术的书。l 出去和与你的当前项目无关的人、或是其他公司的人谈谈技术。在你们公司的自助餐厅里结识其他人,或是在本地用户组织聚会时寻找兴趣相投的人。6 交流!我相信,被打量比被忽略要好。Mae West, Belle of the Nineties,1934也许我们可以从West女士那里学到一点什么。问题不只是你有什么,还要看你怎样包装它。除非你能够与他人交流,否则就算你拥有最好的主意、最漂亮的代码、或是最注重实效的想法,最终也会毫无结果。

36、没有有效的交流,一个好想法就只是一个无人关心的孤儿。作为开发者,我们必须在许多层面上进行交流。我们把许多小时花在开会、倾听和交谈上。我们与最终用户一起工作,设法了解他们的需要。我们编写代码,与机器交流我们的意图;把我们的想法变成文档,留给以后的开发者。我们撰写提案和备忘录,用以申请资源并证明其正当性、报告我们的状态、以及提出各种新方法。我们每天在团队中工作,宣扬我们的主意、修正现有的做法、并提出新的做法。我们的时间有很大一部分都花在交流上,所以我们需要把它做好。我们汇总了我们觉得有用的一些想法。知道你想要说什么在工作中使用的更为正式的交流方式中,最困难的部分也许是确切地弄清楚你想要说什么。小说

37、家在开始写作之前,会详细地构思情节,而撰写技术文档的人却常常乐于坐到键盘前,键入“1. 介绍”,并开始敲入接下来在他们的头脑里冒出来的任何东西。规划你想要说的东西。写出大纲。然后问你自己:“这是否讲清了我要说的所有内容?”提炼它,直到确实如此为止。这个方法不只适用于撰写文档。当你面临重要会议、或是要与重要客户通电话时,简略记下你想要交流的想法,并准备好几种把它们讲清楚的策略。了解你的听众只有当你是在传达信息时,你才是在交流。为此,你需要了解你的听众的需要、兴趣、能力。我们都曾出席过这样的会议:一个做开发的滑稽人物在发表长篇独白,讲述某种神秘技术的各种优点,把市场部副总裁弄得目光呆滞。这不是交流

38、,而只是空谈,让人厌烦的(annoying)空谈。要在脑海里形成一幅明确的关于你的听众的画面。下一页的图1.1中显示的WISDOM离合诗(acrostic)可能会对你有帮助。假设你想提议开发一个基于Web的系统,用于让你们的最终用户提交bug报告。取决于听众的不同,你可以用不同的方式介绍这个系统。如果可以不用在电话上等候,每天24小时提交bug报告,最终用户将会很高兴。你们的市场部门可以利用这一事实促销。支持部门的经理会因为两个原因而高兴:所需员工更少,问题报告得以自动化。最后,开发者会因为能获得基于Web的客户服务器技术和新数据库引擎方面的经验而感到享受。通过针对不同的人进行适当的修正,你将

39、让他们都为你的项目感到兴奋。选择时机这是星期五的下午六点,审计人员进驻已有一周。你的老板最小的孩子在医院里,外面下着滂沱大雨,这时开车回家肯定是一场噩梦。这大概不是向她提出PC内存升级的好时候。为了了解你的听众需要听到什么,你需要弄清楚他们的“轻重缓急”是什么。找到一个刚刚因为丢失源码而遭到老板批评的经理,向她介绍你关于源码仓库的构想,你将会拥有一个更容易接纳的倾听者。要让你所说的适得其时,在内容上切实相关。有时候,只要简单地问一句“现在我们可以谈谈吗?”就可以了。图1.1 WISDOM离合诗了解听众 What do you want them to learn? What is their

40、interest in what youve got to say? How sophisticated are they? How much detail do they want?Whom do you want to own the information? How can you motivate them to listen to you? 你想让他们学到什么?他们对你讲的什么感兴趣?他们有多富有经验?他们想要多少细节?你想要让谁拥有这些信息?你如何促使他们听你说话?选择风格调整你的交流风格,让其适应你的听众。有人要的是正式的“事实”简报。另一些人喜欢在进入正题之前高谈阔论一番。如果

41、是书面文档,则有人喜欢一大摞报告,而另一些人却喜欢简单的备忘录或电子邮件。如果有疑问,就询问对方。但是,要记住,你也是交流事务的一方。如果有人说,他们需要你用一段话进行描述,而你觉得不用若干页纸就无法做到,如实告诉他们。记住,这样的反馈也是交流的一种形式。让文档美观你的主意很重要。它们应该以美观的方式传递给你的听众。太多程序员(和他们的经理)在制作书面文档时只关心内容。我们认为这是一个错误。任何一个厨师都会告诉你,你可以在厨房里忙碌几个小时,最后却会因为饭菜糟糕的外观而毁掉你的努力。在今天,已经没有任何借口制作出外观糟糕的打印文档。现代的字处理器(以及像LaTeX和troff这样的排版系统)能

42、够生成非常好的输出。你只需要学习一些基本的命令。如果你的字处理器支持样式表,就加以利用(你的公司也许已经定义了你可以使用的样式表)。学习如何设置页眉和页脚。查看你的软件包中包含的样本文档,以对样式和版式有所了解。检查拼写,先自动,再手工。毕竟,有一些拼写错误是检查器找不出来的(After awl, their are spelling miss streaks that the chequer can knot ketch)。让听众参与我们常常发现,与制作文档的过程相比,我们制作出的文档最后并没有那么重要。如果可能,让你的读者参与文档的早期草稿的制作。获取他们的反馈,并汲取他们的智慧。你将建立

43、良好的工作关系,并很可能在此过程中制作出更好的文档。做倾听者如果你想要大家听你说话,你必须使用一种方法:听他们说话。即使你掌握着全部信息,即使那是一个正式会议,你站在20个衣着正式的人面前如果你不听他们说话,他们也不会听你说话。鼓励大家通过提问来交谈,或是让他们总结你告诉他们的东西。把会议变成对话,你将能更有效地阐明你的观点。谁知道呢,你也许还能学到点什么。回复他人如果你向别人提问,他们不做出回应,你会觉得他们不礼貌。但当别人给你发送电子邮件或备忘录、请你提供信息、或是采取某种行动时,你是否经常忘记回复?在匆忙的日常生活中,很容易忘记事情。你应该总是对电子邮件和语音邮件做出回应,即使内容只是“

44、我稍后回复你。”随时通知别人,会让他们更容易原谅你偶然的疏忽,并让他们觉得你没有忘记他们。提示10Its Both What You Say and the Way You Say It你说什么和你怎么说同样重要除非你生活在真空中,你才不需要能交流。交流越有效,你就越有影响力。电子邮件交流我们所说的关于书面交流的所有东西都同样适用于电子邮件。现在的电子邮件已经发展成为公司内部和公司之间进行交流的主要手段。它被用于讨论合约、调解争端,以及用作法庭证据。但因为某种原因,许多从不会发出低劣的书面文档的人却乐于往全世界乱扔外观糟糕的电子邮件。我们关于电子邮件的提示很简单:l 在你按下SEND之前进行校

45、对。l 检查拼写。l 让格式保持简单。有人使用均衡字体(proportional font)阅读电子邮件,所以你辛苦制作的ASCII艺术图形在他们看来将像是母鸡的脚印一样乱七八糟。l 只在你知道对方能够阅读rich-text或HTML格式的邮件的情况下使用这些格式。纯文本是通用的。l 设法让引文减至最少。没有人喜欢收到一封回邮,其中有100行是他原来的电子邮件,只在最后新添了三个字:“我同意”。l 如果你引用别人的电子邮件,一定要注明出处。并在正文中进行引用(而不是当做附件)。l 不要用言语攻击别人(flame),除非你想让别人也攻击你,并老是纠缠你。l 在发送之前检查你的收件人名单。最近华尔街日报上有一篇文章报道说,有一个雇员通过部门的电子邮件散布对老板的不满,却没有意识到老板也在收件人名单里。l 将你的电子邮件你收到的重要文件和你发送的邮件加以组织并存档。如Microsoft和Netscape的好些雇员在1999年司法部调查期间所发现的,e-mail是永久性的。要设法像对待任何书面备忘录或报告一样小心对待e-mail。总结l 知道你想要说什么。l 了解你的听众。l 选择时机。l 选择风格。l

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁