【程序员修炼之道】-【注重实效的哲学】

注重实效的程序员特征是什么?我们觉得是他们处理问题、寻求解决方案时的态度、风格、哲学。他们能够越出直接思考的问题去思考,总是把问题放在更大的语境中,总是设法注意更大的图景。

对所做的每件事负责

注重实效的程序员对他或她自己的职业生涯负责,并且不害怕承认物质或者错误,这肯定并非是编程最令人愉悦的方面,但它肯定是会发生——**即使是最好的项目中,尽管有彻底的测试,良好的文档及足够的自动化,事情还是会出错。**交付完了,出现了未曾预见的技术问题。

发生这样的事情,我们要设法尽可能职业化地处理它们,这意味着诚实和坦率,我们可以为我们的能力自豪,但对于我们的缺点——还有我们的无知和我们的错误——我们必须诚实、

责任是你主动担负的东西,你承诺确保某件事情正确完成,但你不一定能直接控制事情的每一个方面,除了尽你所能外,你必须分析风险是否超出了你的控制。对于不可能做到的事情或者是风险太大的事情,你有权不去负责,你必须基于自己的道德准则和判断做出决定。

**如果你确实同意要为某个结果负责,你就应切实负起责任,**当你犯错误或者是判断失误时,诚实的承认它,并设法给出各种选择。不要责备别人或者别的东西,或者是拼凑接口,不要把所有问题都归咎于供应商,编程语言,管理部门,或者是你的同事。也许他们全体或者是某几方在其中扮演了某种角色,但你可以选提供解决方案,而非学找借口。

在你走向任何人,告诉他们为何某事做不到,为何耽搁,为何出问题之前,先停下来,听一听你心里的声音。与你的显示器上的橡皮鸭交谈,或者是与猫交谈。你的辩解听起来合理,还是愚蠢?在你老板听来又是怎样?

在你的头脑里把谈话预演一遍,其他人可能会说什么?他们是否会问:“你试了这个了吗?”或者是“你没有考虑那个吗?”你将怎样回答?在你去告诉他们坏消息之前,是否还有其他你可以试一试的方法?有时,你其实知道他们会说什么,所以还是不要给他们添麻烦吧!(现实一点,不要自己找骂 ( ̄▽ ̄)")

**要提供各种选择而不是找借口,不要说事情做不到,要说明能够做什么来挽回局面。**必须重新开发?还是给他们讲授重构的价值。你要花时间建立原型,以确定最好的继续前进的方式,你要引入更好的测试,或者自动化,以防止问题再度发生?又或许你需要额外的资源。不要害怕提出要求,也不要害怕承认你需要帮助。

**在你大声说出它们之前,先设法把蹩脚的借口清除掉,**如果你必须说,就先对你的猫说。

软件的熵

熵是一个物理学概念,指的是一个系统中无序的总量。

1、破窗户理论

一扇破窗户,只要一段时间不修理,就会渐渐的给附件的居民带来一种废弃感,一种职权部门不关心这座建筑的感觉。于是又一扇窗户破了。人们开始乱涂乱花。严重的结构损坏开始了。在相对较短的一段时间里,建筑就被损坏的超出了业务愿意修理的程度,而废弃感变成了现实。

不要留着破窗户(低劣的设计、错误的决策、糟糕的代码)不修。发现一个就修一个。如果没有足够的时间修理,就用木板把它钉起来。或许你可以把代码放入注释(注释掉),或显示为实现消息。采取某种行动防止进一步损坏,并说明情势在你的控制之下。

2、灭火
作为破窗户现象的对照…pass

石头汤与青蛙

做变化的催化剂,身先士卒,创建原型

三个士兵从战场返回家乡,在路上饿了。他们看见前面有村庄,就来了精神----他们相信村民会给他们一顿饭吃。但当他们到达那里,却发现门锁着,窗户也关着。经历了多年战乱,村民们粮食匮乏,并把他们有的一点粮食藏了起来。

士兵们并未气馁,他们煮开一锅水,小心地把三块石头放进去。吃惊的村民们走出来望着他们。“这是石头汤。”士兵们解释说。“就放石头吗?” 村民们问。“一点没错,但有人说加一些胡萝卜味道更好……”一个村民跑开了,又很快带着他储藏的一篮胡萝卜跑回来。几分钟之后,村民们又问:“就是这些了吗? ”,“哦” 士兵们说:“几个土豆会让汤更实在。”又一个村民跑开了。

接下来的一小时,士兵们列举了更多让汤更鲜美的配料:牛肉、韭菜、盐,还有香莱。每次都会有一个不同的村民跑回去搜寻自己的私人储藏品。

最后他们煮出了一大锅热气腾腾的汤。士兵们拿掉石头,和所有村民一起享用了顿美餐,这是几个月以来他们所有人第一次吃饱饭。

在石头汤的故事里有两层寓意。士兵戏弄了村民,他们利用村民的好奇,从他们那里弄到了食物。但更重要的是,士兵充当催化剂,把村民团结起来,和他们一起做到了他们自己本来做不到的事情---- 一项协作的成果。最后每个人都是赢家。

你常常也可以效仿这些士兵。

在有些情况下,你也许确切地知道需要做什么,以及怎样去做。整个系统就在你的眼前–你知道它是对的。但请求许可去处理整个事情,你会遇到拖延和漠然。大家要设立委员会,预算需要批准,事情会变得复杂化。每个人都会护卫他们自己的资源。有时候,这叫做“启动杂役”。

这正是拿出石头的时候。设计出你可以合理要求的东西,好好开发它。一旦完成,就拿给大家看,让他们大吃一惊。然后说:“要是我们增加……可能就会更好。”假装那并不重要。坐回椅子上,等着他们开始要你增加你本来就想要的功能。人们发现,参与正在发生的成功要更容易。让他们瞥见未来,你就能让他们聚集在你周围。

记住大图景。确认最初的方向,不忘初心。同时与熵对应,不要被细微变化煮死。

另一方面,石头汤的故事也是关于温和而渐进的欺骗的故事。它讲述的是过于集中的注意力。村民想着石头,忘了世界的其余部分。我们都是这样,每一天。事情会悄悄爬到我们身上。

我们都看见过这样的症状。项目慢慢地、不可改变地完全失去控制。大多数软件灾难都是从微不足道的小事情开始的,大多数项目的拖延都是一天一天发生的。系统一个特性一个特性地偏离其规范,一个又一个的补丁被打到某段代码上,直到最初的代码一点没有留下。常常是小事情的累积破坏了士气和团队。

我们没有做过这个----真的,但有人说,如果你抓一只青蛙放进沸水里,它会一下子跳出来但是,如果你把青蛙放进冷水里,然后慢慢加热,青蛙不会注意到温度的缓慢变化,会呆在锅里直到被煮熟。

足够好的软件

现实世界不会让我们制作出十分完美的产品,特别是不会有无错的软件。时间、技术和急躁都在合谋反对我们。

让你的用户参与权衡

许多用户宁愿在今天用上有一些“毛边”的软件,也不愿等待一年后的多媒体版本。许多预算吃紧的IT部门都会同意这些的说法。今天的了不起的软件常常比明天的完美软件更可取。如果你给用户某种东西,让他们及早使用,他们的反馈常常会把你引向更好的最终解决方法。先用再慢慢优化。

知道何时止步

不要因为过度修饰和过于求精而毁损完好的程序。继续前进,让你的代码凭着自己的质量站立一会儿。它也许不完美,但不用担心;它不可能完美。

你的知识资产

有实效的资产是价值随着时间的流逝而逐渐减少的资产

经营你的资产

1、定期投资。就像金融投资一样,你必须定期为你的知识资产投资,即使投资量很小,习惯自身也和总量一样重要。

2、多元化。你知道的不同的事物越多,你就越有价值。作为底线,你需要知道你目前所用的特定技术的各种特性。但不要就此止步。计算技术的面貌变化真快——今天的热门技术明天就可能变近乎无用(或至少是不再枪手)。你掌握的技术越多,你就越能更好地进行调整,赶上变化。

3、管理风险。从高风险、可能有高回报,到低风险、低回报,技术存在于这样以一条谱带上,把你所有的金钱都投入可能突然崩盘的高风险股票并不是一个好主意;你也不应太保守,错过可能的机会。不要把你所有的技术鸡蛋放在一个篮子里。

4、低买高卖。在新兴的技术流行之前学习它可能就和找到被低估的股票一样困难,但所得到的就和那样的股票带来的收益一样。在Java刚出现时学习它可能有风险,但对于现在已步入该领域的顶尖行列的早期采用者,这样做得到了非常大的回报。

5、重新评估和平衡。这是一个非常动荡的行业。你上个月开始研究的热门技术现在也许已像石头一样冰冷。也许你需要重温你有一阵子没有使用的数据库技术。又或许,如果你之前试用过另一种语言,你就会更有可能获得那个新职位…

发布了69 篇原创文章 · 获赞 2 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/hq8399/article/details/104143140