2010年1月5日星期二

扫除你的“垃圾代码”

背影1 最近忙着充电,写读书笔记,很久没写一些关于技术的东西,今天想谈一下最近的编码过程中的一个小感悟。七条广为人知的评判代码质量的基本原则:内聚性、松耦合、零重复、封装、可测试性、可读性以及单一职责。但是,长时间的编程过程中,因为自身长期以来积累的“恶习”,在编程过程中常常并不是真正注意并遵守这些原则。最近在重构一个我很久以前用C++编写的大概1万行左右的小项目,虽然代码整体架构还算OK,这次重构不算是伤筋动骨,只是一些小手术--很多的工作在想尽办法消除代码中的重复,在重构的过程中,发现自己写的“垃圾代码”非常多,真是很“汗颜.....”。

这次重构的过程中使用了一些《软件开发沉思录》里的关于“用精炼的代码表达出简单而优美的抽象”的一些规则,现在重构结束后总算是深有感触,这些规则虽然看似简单,但是如果身体力行有一定的难度,当坚持大部分规则后(暂时实在无法坚持所有规则),代码的质量和可读性会有一个质的飞跃,这也非常大的减轻了后面测试的压力。现在想想,我们给代码测试人员留下的很多bug其实就是我们我们编码“不规范”(没有注意“精炼的代码”的重要性,也就是没有重视编程“简单性”原则)造成的。

 

这里对书中这九条规则做出简单的摘要,和大家一起分享:

规则1:方法只使用一级缩进

一个常见的原则是将方法的行数控制在5 行之内。如果每个方法都只关注一件事,而它们所在的类也只做一件事,那么你的代码就开始变化了。由于应用程序中的每个单元都变得更小了,代码的可重用性开始指数增长。一个100 行的,肩负五种不同职责的方法很难被重用。如果一个很短的方法在设置了上下文后,能够管理一个对象的状态,那么它可以应用在很多不同的上下文中。在这样短小的代码段中查找bug 通常会更加容易。

规则2:拒绝else关键字

适当地使用多态;

规则3:封装所有的原生类型和字符串

规则4:一行代码只有一个“.”运算符

规则5:不要使用缩写

缩写会令人迷惑,也容易隐藏一些更严重的问题。尽量保持类名和方法名中只包含一到两个单词,避免在名字中重复上下文的信息。

规则6:保持实体对象简单清晰

这意味着每个类的长度都不能超过50 行,每个包所包含的文件不超过10 个。代码超过50行的类所做的事情通常都不止一件,这会导致它们难以被理解和重用。小于50行代码的类还有一个妙处:它可以在一屏幕内显示。

随着类变得越来越小,职责越来越少,加之包的大小也受到限制,包中的类越来越集中,它们能够协作完成一个相同的目标。包和类一样,也应该是内聚的,有一个明确的意图。保证这些包足够小,就能让它们有一个真正的标识。

规则7:任何类中的实例变量都不要超过两个

不断应用这条规则,可以快速将一个复杂的大对象分解成为大量简单的小对象。

规则8:使用一流的集合

任何包含集合的类都不能再包含其他的成员变量。每个集合都被封装在自己的类中,这样,与集合相关的行为就有了自己的家。

规则9:不使用任何Getter/Setter/Property

如果可以从对象之外随便询问实例变量的值,那么行为与数据就不可能被封装到一处。

其实以上的9个规则就是关于“编程简单性”一个小总结,努力地拥抱“简单性”,那么开发过程会变得更愉快,代码质量提高了,测试的花费就会少了很多,其实项目的整体开发速度也会相应的提高。

PS:今天的配图,是我最近在网上看到的,个人很喜欢的一张照片,感受阳光,简单,舒服,一切都恰到好处。

2010年1月4日星期一

读书:Nnil Fiore《战胜拖拉》 2

Chapter 5. 克服行动的障碍 

三大障碍:对某项任务无法做、做不成功与完不成的恐惧。 
即时习惯策略的工具:(1) 三维思维与逆向日程,用以战胜无从下手的感觉;(2) 忧心处理,用以应对对失败和缺憾的担忧;(2)坚持不懈的开始,用以应对对完不成任务的担忧。

工具一:三维思维和逆向日程 
应避免的几种情形:(1)坚持要知道从哪里着手开始才是正确的;(2)不在项目进行过程中给自己设定时间学习、在每个步骤中建立自信并向别人寻求帮助;(3)自责于仍处于开始状态的现实,并且告诉自己:“我应该已经完成了。”

Chapter 6. 逆向日程表 

逆向日程:逆向日程从项目的整体最后期限开始,然后一步一步地往回推演,知道你现在所处的能够集中精力着手开始的地方。

逆向日程表开始时,以30分钟为目标。

制度:无忧休闲。高质量工作。逆向日程表。

使用逆向日程表(逆向日程表。可以给各种活动选用不同的颜色。):

1. 只安排下列时间

    a. 先前已经决定好的时间,比如吃饭,睡觉,开会。

    b. 自由时间,休闲,休闲阅读。

    c. 交往,和朋友吃午饭,晚饭。

    d. 健身运动。

    e. 常规事物,比如沟通,上课。

2. 只有当你完成了至少30分钟之后,再把有关项目的工作列入逆向日程表当中。

3. 只对哪些代表着至少30分钟不间断工作的工作时间段予以好评

4. 在每个时段的工作结束之后,奖励自己休息一次,或者是换到另一件更为愉快的工作任务中

5. 跟踪每一天,每一个星期用于高质量工作的时间。

6. 每个星期始终流出一天的时间,用于休闲和处理任何你希望处理的杂务。

7. 在决定前往参加某项休闲活动或者公益活动之前,拿出仅30分钟的时间用于项目中的工作。

8. 集中于开始。(把所有有关完成的思想都去掉,换成对可以何时,何地,以何事开始的考虑。)

9. 着眼于小处。(仅以30分钟的高质量专注工作为目标。)

10. 保持开始状态。(忘记工作的完成。)

11. 别在最后倒下。

Chapter 7. 喷发状态

高效而专注的状态: 
(1)多用大脑:你要进行创造性的工作,那么大脑中的批判与逻辑的功能(通常被归因于左半脑)就必须暂时搁置起来,让创新的功能(通常被归因于右半脑)引发你所需要的创意与灵感。 
(2)只是你的初稿:时刻提醒自己这是初稿,不拿去和理想、终极的目标进行过于苛刻的比较,这样有助于克服因完美主义而造成的拖拉。 
学会集中注意力:进行专注性练习 
(3)专注性练习:(1) 放松:端坐在椅子上,脚掌平放在地面上,双手搁在大腿上,注意力集中在呼吸,深吸一口气,屏住一段时间,再缓慢吐出,如此三次,想象自己的紧张感随空气吐出了。(2)躺下:注意力转移到椅子上,让自己瘫倒,只让椅子支撑自己,放松所有紧张的肌肉,把注意力转移到双脚上。继续呼吸,呼出残余的紧张感,尽量放松,让身体赐予你更多的轻松和支持。(3)眼睑:继续放松,感觉到眼睑的沉重,让它缓慢滑下,当你闭上眼的时候,让放松感向下流动,充盈于整个身体。(4)自我对话:让过去消失(深呼吸3次,过去对于工作的看法、刚刚做的事情、一直告诉自己该做或不该做的事情,你的身心不再被过去牵绊);让未来消失(深呼吸3次,不可预知的后果、对未来工作和最后期限的焦虑,你的身心不再被未来牵绊);集中于当前(深呼吸3次,给自己积极的心理暗示)。 
(4)将喷发状态融入计划

Chapter 8. 对进展进行微调

(1)计划中的倒退:能够帮助反省 
(2)弹性与刚性:(1) 弹性:恢复的能力,从不如意和挫折中迅速恢复,随时准备调整;(2)刚性:决心、控制和挑战三种人格品质的结合,抵抗和避开潜在危险的能力; 
(3)集中注意力——克制杂念:杂念至少存在5种类型:(1)强烈的情绪:这是值得立即关注的,抽出十分钟思考,并处理它。(2)危险的警示:建立起安全网,把威胁清除掉,减轻对压力的反应,减弱它让人分心的警示信号;(3)想着“要做的事情”:突然蹦出来的杂事,将它记在记事本上,等高效率工作完成之后,在做这些杂事当作奖励。(4)逃避现实的幻想:记录下来,等工作完成之后对自己的奖励,记得推迟满足感的能力。(5)模糊的创意:记录下来,或者让它自由发展。——综上:通过辨清和记录这些杂念,能最大程度降低你工作中断的可能性。 
(4)精神演练和预先设计 
(5)有效目标设置:要有能力放弃那些在近期内不可能实现或者开始着手去实现的目标,从而能够专注于当前某个可以实现的、能给你带来成就感的目标。记住,你是目标的主人;不要让不现实的目标成为自我批评,并且把自己当成一个拖拉者的原因。作为一个高效者,你知道哪些目标需要全心全意地去追求,哪些目标需要不屑一顾地放弃。 
(6)避免受挫:保持一种刚性以处理任何目标实现的过程中必然出现的挫折:(1)认清拖拉的付出;(2)自由选择整个目标;(3)树立实用且现实的目标;

Chapter 9. 和拖拉者一起生活

(1)引入承诺,而不是要求顺从。 
(2)专注于开始,而不是专注于结束。 
(3)给予赞扬,而不是批评。 
(4)清晰陈述你的优先事项;果断;回报要公平、频繁;给予建设性意见。

2010年1月3日星期日

读书:Nnil Fiore《战胜拖拉》 1

战胜拖拉读到这本书时,真是爱不释手。我就有拖延症,看了这本书后,才了解到,其实拖延本身只是一系列心理问题的结果。其实,拖延是一种逃避方式,让我们可以暂时远离痛苦和压力。但拖延是极度有害的,去战胜它吧。

看完这本书后,正如书中最后一节所说的,现在我也正试着,“实践本书中的技巧,对它们做一些调整,以适应自身的风格和具体环境。保持开放的心态,保证用即时习惯策略提供的新工具去替换旧有的的拖拉习惯和不太好的工作成绩。把即时习惯策略作为自己的助手,期待对工作拥有一种积极的态度,摈弃拖拉的毛病,经受得起挫折,并拥有一种全新的作为高效者的自我身份加以认知。”

话不多说,以下是部分读书笔记,因为记录比较多,为了提高可读性,这里分两次给出:

 

 

Chapter 1-2. 为何拖拉, 拖拉是如何进行的

能够让我们分散注意力的东西越来越多。把自己从一个拖拉者变成一个工作生活实现平衡的高效者。

那么,拖延的根源是什么呢? 因人而异。包括自卑、完美主义、对工作的负面认知、自我认知不对、无效目标设置、模糊的时间观念、容易放弃的精神等等。 

对于拖拉的原因之一,最严厉的批评者就是自己,内心的冲突造成恐惧和不安全感。要把注意力引导到手头的工作任务中,而不是对自己的能力和价值提出疑问。

要系统的利用即时习惯策略。

我们之所以会拖拉是是因为:当我们把自己的价值与工作等同起来是,出于保护性的防卫心理,我们当然不愿直面挑战并担当风险。如果你相信对你的工作的评价即是对你本人的评判,那么求全责备和拖拉就成为一种自我保护的必要形式。

拖拉常被用来表达憎恨:对上司、当权者的憎恨。
拖拉常被用来抵御对失败的恐惧。
拖拉常被用来逃避对成功的恐惧。

记下花费时间的方式,将会使你注意到许多浪费掉的时间段。

建立安全感:走出拖拉的第一步。

遵循多数成功人士的榜样,你可以摔倒多次,一次次地使用你的安全网使自己重新振作起来,继续为下一次成功而努力。有一张把你兜住的安全网,失败与过错都不能阻止你,因为你不会让它们带走你的自我价值感和采取行动的动力。

Chapter 3 进行自我对话 

反效率的信息:(1) “不得不”——压力信息(2)“应该”——抑郁信息
选择的力量:(1)选择的力量(2)从抵触到承诺(3)学会说“不”
 

发现并使用选择的力量: 每当你发现自己在某个项目上失去干劲时,就是你的思想里找一找隐藏着的“不得不”,然后就在那一刻做出决定,要么是欣欣然接受它,接受它本来的样子,而不是你认为应该如何的样子,要么是放弃他,由你选择。    

拖拉者区别于高效者的五种自我陈述:

拖拉者 高效者
我不得不做 我选择做 
我必须完成 我什么时候开始
这个项目大而且重要 我能走出一小步 
我必须做到十全十美 我完全是个凡人 
我没时间玩 我必须花时间玩

 Chapter 4. 无忧休闲,高质量的工作 

作者关于在加州伯克利大学博士生的研究,令我很有兴趣。书中谈到: 玩得越开心,工作效率越高。

博士生中,进步很快,很快完成论文的人,对于闲暇时间也都很专注和投入。对他们而言,自己的健康和休闲都是很重要的事项,也是高质量完成论文这个计划中不可或缺的一部分。他们必须几乎是天天游泳,跑步或者跳舞。他们必须每个星期都和朋友聚几次餐。从休闲这个词的最初意义上讲他们真的是“重振”了。通过“重振”,他们一直保持着对项目没星期花费15,20或25个小时高质量时间的动力和兴趣。他们的生活是充实的。他们不认为工作对自己有任何损害,相反,一心一意地工作与一心一意地休闲,在享受人生方面是密不可分的。他们现在已经是在享受生活,而不是在等到工作完成之后再去享受。

我们拖拉的原因之一,是因为我们害怕一旦开始工作,就再也没有时间去休闲,工作会剥夺我们玩耍和享受生活的权利。无忧休闲策略强烈要求你在每周的计划中都安排进休闲活动,以此提供一条解决问题的方法。把休闲当成生活中的一个优先事项,是学会战胜拖拉的一个重要部分。

无忧休闲在工作与玩耍之间建立起联系,其中,它们相互推动着各自质量的提高。

2010年1月2日星期六

读书:Kent Beck 《Test Driven Development》

书评:

生动简单的例子和清晰详细的解释分析,读这本书时绝对不会感到有什么困难。个人认为,其实不用把这本书当成一本纯粹的技术书来阅读,大可以当成一本改变思考方式的技术八卦看看,也许在开发中你还是不会使用TDD(test-driven development),但是用一种极为轻松的方式系统地了解一下TDD,也是大有益处的。
如果只是想单纯地了解一下TDD(粗浅了解一下TDD的实现步骤,以及它充满吸引力的优点),那么看看第一部分(Section I: Money Example)就可以。如果正在进行TDD,或已经有了一些TDD实践,那么可以看看这本书的第二,第三部分,这对TDD的在项目中的具体实践和对提高TDD的认识会很有帮助。
看完这本书也改变了我一些固有印象,其实TDD不是绝对和极限编程一样。书中有一句话令人印象深刻:TDD is an awareness of the gap between decision and feedback during programming, and techniques to control that gap.
书中常常提到The goal is clean code that works. 我非常赞同,其实不管使用什么选择的开发策略(或者是否认可使用TDD,我的很多朋友就不是很认可TDD),其实我们的目的都是写出“整洁”的代码得到使我们的软件在质量和产出方面,得到可观的改善。

读书笔记:

简单地记录一下本书中关于TDD的一些概念:

编写TestCase(不可运行) --> 实现TestCase(可运行) --> 重构(重构)

1. Red—write a little test that doesn’t work, perhaps doesn’t even compile at first

2. Green—make the test work quickly, committing whatever sins necessary in the process

3. Refactor—eliminate all the duplication created in just getting the test to work Red/green/refactor. The TDDs mantra.

TDD的节奏大概就是:

1. Quickly add a test

2. Run all tests and see the new one fail

3. Make a little change

4. Run all tests and see them all succeed

5. Refactor to remove duplication

一般而言TDD的周期就是:

• Write a test

• Make it compile, run it to see it fail

• Make it run

• Remove duplication

如果我们读完这本书,其实我们,可以开始,哈:D

• Start simply

• Write automated tests

• Refactor to add design decisions one at a time

2009年12月31日星期四

2009年末小感悟

忙忙碌碌,而似乎又无所事事地过了令人兴奋2009年。2009令人兴奋的是因为项目的需要进入了一个对我来说全新的领域--软件工程,它极大地拓宽了我的眼界。需求分析,结构设计,代码开发,测试,重构代码,等等,每一块对我来说都是充满挑战又激动人心。本来想写一个2009年末总结,但是想写的东西太多,思路还没有理清楚,把一些总结先暂存在google doc里。

在2008年我花了一年的时间才了解到“知识积累,独立自主的判断力还有创新的重要性”,才知道“做研究在一定程度上说是一个感受失败的过程,所以必须静下心来要沉得住气。”然而2009年,我又花了一年的时间才大概知道:如何进行知识积累和如何做所谓创新,2009年总是进行着积累-->做项目,积累-->做项目的过程。多读书,多看papers,寻找并补足周边知识,然后思考并进行记录,似乎是对我来说最有效的积累的方法。积累的过程是相对痛苦的,然而,随着积累量的增多,做项目的效率越来越高,在做项目的过程中也感受到了很多的快乐。就像当时学德语一样,学的时候很辛苦,但是现在感受到了学会它的好处,快乐,它已经变成了一种技能,融入自己的体内,如果需要它的时候可以快乐,轻松地使用它。“大道至简”,很惭愧,这个简单的大道理,到了现在了才比较深刻地体会它,这个道理适用生活工作的很多方面,譬如学习编程,学的时候一定不会很轻松,然而当它变成一种自己的技能,但当我们再次使用它的时候,会有一种特别的快乐,那种快乐如同小时候刚学会骑自行车后,骑着车疯狂地在路上狂奔的一般,世界变大了,可以随着车轮的转动去追逐风,最重要的是这时不再是坐在父亲的自行车上,而是自己完全掌控的属于自己的自行车。哈,这就是2009年,我的一点小感悟。

再加两个刚刚闪过脑中的小感想,随手记下:其实R&D的工作常常就是将简单的事情重复做,不停地进行分析学习积累然后实现它,但是一个懂得重复的力量的人会拥有决定性的优势。对于和我一样做R&D的工程师而言,看似简单,无聊的生活之所以具有观赏性,那是拜我们的梦想所赐,我们需要跟极力延伸的心灵触角而让我们的生活具有更多的可能性。延伸心灵的触角吧,兴奋地去感受即将到来的2010吧。

刚刚吃完年末传统龙虾“大餐”,哈,已经可以听见外面的零星的烟花声了,赶紧祝大家,元旦快乐,Happy 0X7DA!

2009年12月29日星期二

读书:保罗·梅耶/迪克·卢赫《知道做到》

圣诞新年假期已经过了一半,愉快的读书时光飘过,这应该是我这个假期读的最后一本书,因为从明天开始对我而言轻松的假期结束了,迫于项目压力,接下来的五天我会比较忙,有一些代码需要重构,软件中有一个功能必须添加,还有两篇论文需要修改。读完一本好书后,写一篇读书笔记总是令人开心的,豆瓣上找到的想读的书已经有上百本了,家中,书架上的书,图书馆借的书,电脑里的电子书,还没有读的也有十几本。在这十几本好书中挑一本来读,也似乎是一个艰难的选择。最后我选择《知道做到》这本探讨提高“学习能力”的一百多页的小书,因为它最薄,呵呵,然后伴随着我喜欢的美国smooth jazz钢琴家Jim Chappell的专辑,泡一杯绿茶,开始本读书之旅。
以下是部分书摘:


#坚持记笔记,24小时之内重读笔记,把自己学到的知识传达给别人(要想开始应用新知识,最好的途径之一就是把它传授给别人。)。(看来我坚持做读书笔记是正确的。:D)
#可如果我们总是在接触新知识,却没有停下来去整合它们,并将其付诸实践,问题就来了。如果继续这样不停地接触新知识,我们的大脑就会堵塞。
#要想掌握一样东西,你必须完全沉浸其中,直到将其完全吸收。你必须慢慢地咀嚼、消化,直到它变成自己的一部分。
#要想真正了解一个领域,你必须透彻地吸收一些重要信息,而不是盲目地接触大量信息。
#人们没能学以致用的原因,1. 信息超载,2. 消极过滤,3. 缺少跟进。
#对于那些只接触过一次的信息,我们通常只能记住其中一小部分。
#我们应该少而精而非多而浅地去学习。
#要想掌握某件事,我们必须首先选择一些关键点,隔段时间就重复一下,让自己完全沉浸其中,并不断提高自己的知识和技能。关键在于间隔性重复。
#一旦真正透彻地掌握了自己的工作,人们就会变得更有创造性,甚至能够创造奇迹。
要想多留住一些自己所学到的东西,关键就在于要带着一种开放、积极的心态去聆听:
#不要带有任何偏见或先入之见;
#带着一种学习的态度,对新的信息感到兴奋;
#带着积极的期待;
#手里拿支笔,准备做记录;
#带着强烈的欲望,不仅要仔细聆听对方的讲话内容,还要努力激发出自己的想象力;
#带着一种“我该如何应用这些”的态度。


一个小时就可以读完的小书,所谈的道理也很简单就是:“知道,就一定要做到。做到,就一定要有结果。”但是还是挺值得花上一个小时去翻翻它。

2009年12月26日星期六

读书:Robert C. Martin《 Clean Code》

第一感觉:很有趣又非常实用的一本书,“Uncle Bob”的文笔相当幽默生动。代码质量与其整洁度成正比,大家都知道,但是如何打磨这些代码让它们变得整洁,这就是Bob大叔这本书所要传授的,在看本书的同时回忆一下自己是平时是如何编程的,会使阅读过程变得更有趣。

这本书前三章谈到了大量的小技巧和规则,例如使用可搜索的名称,分解函数,修改名称,消除重复,函数的第一规则是要短小,第二条规则是还要更短小,函数应该只做一件事,功能集中,有一个好名字(可以使用长而具有描述性的名称),它所带的最理想的参数数量是零。还有,类名和对象名应该是名词或名词短语,而方法名应当是动词或动词短语,减少代码依赖关系,让代码易读,等等。 其实这些小技巧和规则大家都知道,但是如何坚持使用和贯彻,这才是难点。

Chapter 4 Comment(注释),我很喜欢本章的引言“Don’t comment bad code—rewrite it.”—Brian W. Kernighan and P. J. Plaugher。还有一句话也说印象深刻“Keep in mind, however, that the only truly good comment is the comment you found a way not to write.”还有关于Position Markers位置标记的讨论,我个人就常常滥用Position Markers,书中谈到“ So use them very sparingly, and only when the benefit is significant. If you overuse banners, they’ll fall into the background noise and be ignored.” 这章还提到”Few practices are as odious as commenting-out code. Don’t do this!”,看完非常惭愧,我常常注释代码。

Chapter 5 Formatting(格式),这里有关于Vertical,Horizontal Formatting等等的讨论,这里摘抄一段话"It appears to be possible to build significant systems(FitNesse is close to 50,000 lines) out of files that are typically 200 lines long, with an upper limit of 500. Although this should not be a hard and fast rule, it should be consideredvery desirable. Small files are usually easier to understand than large files are."

Chapter 6 Objects and Data Structures (对象和数据结构)个人很喜欢这章,谈到了Data/Object Anti-Symmetry----数据、对象的反对称性,还有一些法则例如Data Transfer Objects(数据传送对象)

chapter 7 Error Handling (错误处理),谈到了使用异常而非返回码还有给出异常发生的环境说明等等。

chapter 8 Boundaries(边界),讨论了使用第三方代码,整洁的边界等等问题。

chapter 9 Unit Tests(单元测试),个人非常喜欢这章,非常实用,这里讨论了Test-Driven Development,The Three Laws of TDD,这里摘书中几句“What makes a clean test? Three things. Readability, readability, and readability. Readability is perhaps even more important in unit tests than it is in production code.” “Tests are as important to the health of a project as the production code is. Perhaps they are even more important, because tests preserve and enhance the flexibility, maintainability, and reusability of the production code. So keep your tests constantly clean.”

Chapter 10 Classes,谈到了类的组织和内聚等等问题,有一句话令人印象深刻,The first rule of classes is that they should be small, the second rule of classes is that they should be smaller than that.哈够深刻吧。

chapter 11 Systems,引言中的话非常精妙,““Complexity kills. It sucks the life out of developers,it makes products difficult to plan, build, and test.”—Ray Ozzie, CTO, Microsoft Corporation”。 其实无论是设计系统或单独的模块,永远要忘记使用可以用的“最简单的东西”。

Chapter 12 Emergence(迭进),谈到了通过迭进设计,以达到整洁目的等等。 

Chapter 13 Concurrency(并发编程),我觉得这章写的非常好,简单生动,如果对Concurrency programming有兴趣,推荐可以直接阅读这章。

chapter 14 Successive Refinement (关于逐步改进),从这章里摘抄一句话“So the solution is to continuously keep your code as clean and simple as it can be. Never let the rot get started.” 

Chapter 15 JUnit Internals(JUnit框架的内幕)和Chapter 16 Refactoring SerialDate,关于(重构SerialDate),跳过,没有阅读。 Chapter 17 Smells and Heuristics,翻阅,没有仔细阅读。

个人一点小感想,如果本书能再出一个“精华简化版”(例如去掉一些例子和说明,去掉第15章,减少第17章 Smells and Heuristics(味道与启发)的篇幅,并把附录的大部分砍掉),缩减到大概200左右就完美了,200页的小册子可以放在身边,作为程序员编程时的童子军规则随时查阅 :D。刚刚发现这本书已经有了中文版,读中文版一定更愉快体会“Uncle Bob”想要告诉我们的简单而又重要的大道理“Writing clean code is what you must do in order to call yourself a professional. There is no reasonable excuse for doing anything less than your best.”。

2009年12月24日星期四

2009平安夜

前几天大概是来到这个德国小城五年来最冷的一天(哦,可能不是最冷,但是一定是体感气温最低的一天,电脑桌面gadget显示最低温有-18度)。现在,平安夜户外大概有1度,户外还有一点前几天的积雪,就算是半个白色圣诞节吧,这也算是这五年来第一个“半个白色圣诞节”,可能是地球气候暖化吧,这五年来圣诞节时根本看不到雪。
平安夜对我来说就是收礼物的日子,不管多大还是很喜欢从身边“Santa Claus”得到礼物的感觉,刚刚拿到了lin给我的礼物:一条zara围巾,朋友寄给我的礼物居然被“粗心或是偷懒”的hermes快递员寄到邻居家(我家前天明明有人),邻居代为签收了,我隔天去拿时,邻居已经回老家过圣诞节,哈,有部分圣诞礼物要变成新年礼物了。
刚刚和lin吃了极度清贫的"圣诞大餐",一菜一汤,中餐:D。今天另一收获是终于有时间可以一口气看完的big bang theory的第一季。
现在正在读一个德国朋友去年给我的圣诞礼物,一本名叫generation doof的德文小书,还挺有趣的,居然放了一年没翻过,哈,不喜欢读德文书的原因是阅读德文的速度大概为我读英文的一半,中文的四分之一,真的实在很慢,很缺乏训练。书架上的这几年通过各种途径“被动”积累的德文“闲书”可能够我看上好几年:D。圣诞假期,有大块时间可以宅在家里读一些闲书,的确是一大快事,作为应景,圣诞夜我听的是Taylor Swift(我个人2009年度最喜欢的歌手)的Sounds of the Season专辑,六首歌从Last Christmas唱到White Christmas,够应景吧。
好了,最后祝大家:Frohe Weihnachten! Merry Christmas!

2009年12月23日星期三

读书:《洛克菲勒留给儿子的38封信》

居然今天才发现这本好书(五星级的好书),还好有豆瓣。书中的观点很贴近真实的人性和现实的世界,十九世纪初的洛克菲勒写给儿子的这38封信,今天看来仍旧可以深切地感受到他所分享的真正的大智慧,还可以深刻体会他对工作的态度,对生命的感悟还有他在商场上成功的秘诀。以下是部分书摘:

 

享有特权而无力量的人是废物,受过教育而无影响的人是一堆一文不值的垃圾。(Men of privilege without power are waste-material. Men of enlightenment without influence ate the poorest kind of rubbish.) 一个真正快乐的人,是能够享受他的创造的人。那些像海绵一样,只取不予的人,只会失去快乐。

如果你视工作为一种乐趣,人生就是天堂;如果你视工作为一种义务,人生就是地狱。         

一个人只有自己依靠自己,他才不会让自己失望,并能增加自己控制命运的机会。聪明人只会去促使事情发生。人生中最令人感到挫折的,莫过于想做的事太多,结果不但没有足够的时间去做,反而想到每件事的步骤繁多,而被做不到的情绪所震慑,以致一事无成。我们必须承认,时间有限,任何人都无法做完所有的事情。聪明人知道,并非所有的行动都会产生好的结果,只有明智的行动才能带来有意义的结果,所以聪明人只会汲取做了以后获得正面效果的工作,做与完成最大目标有关的工作,而且专心致志,所以聪明人总能做出最有价值的贡献,并捞到很多好处。

每个人都有失去自信,怀疑自己能力的时候,尤其是在逆境中的时候。但真正懂得行动艺术艺术的人,却可以用坚强的毅力克服它,会告诉自己每个人都有失败的时候,有失败得很惨的时候,会告诉自己不论事前做了多少准备、思考多久,真正着手做的时候,都有难免会犯错误。然而,被动的人,并不把失败视为学习和成长的机会,却总在告诫自己:或许我真的不行了,以致失去了积极参与未来的行动。

不论是要赢得财富,还是要赢得人生,优秀的人在竞技中想的不是输了我会怎样,而是要成为胜利者我应该做什么。

梦想+失败+挑战=成功之道。

智慧之书的第一章,也是最后一章,是天下没有白吃的午餐。如果人们知道出人头地,要以努力工作为代价,大部分人就会有所成就,同时也将使这个世界变得更美好。而白吃午餐的人,迟早会连本带利付出代价。

知识原本是空的,除非把知识会付诸行动,否则什么事都不会发生。而且,教科书上知识,几乎都是那些皓首穷经的知识匠人在象牙塔里编撰出来的,它难以帮你解决实际问题。世界上只有两种人头脑聪明:一种是活用自己的聪明人,例如艺术艺术家、学者、演员;一种是活用别人的聪明人,例如经营者、领导者。后一种人需要一种特殊的能力——抓住人心的能力。但很多领导者都是聪明的傻瓜,他们以为要抓住人心,就得依据由上而下的指挥方式。在我看来,这非但不能得到领导力,反而会降低很多。要知道,每个人对自己受到轻视都非常敏感,被看矮一截会丧失干劲。这样的领导者只会使部属无能化。 装傻带给你的好处很多很多。装傻的含义,是摆低姿态,变得谦虚,换句话说,就是瞒住你的聪明。越是聪明的人越有装傻的必要,因为就像那句格言所说的——越是成熟的稻子,越垂下稻穗。

一个人越是成功,越不会找借口。百分之九十九的失败都是因为人们惯于代寻借口。我鄙视那些善找借口的人,因为那是懦弱者的行为,我也同情那些善找借口的人,因为借口是制造失败的病源。一旦一个失败者找出一种“好”的借口,他就会抓住不放,然后总是拿这个借口对他自己和他人解释:为什么他无法再做下去,为什么他无法成功。起初,他还能自知他的借口多少是在撒谎,但是在不断重复使用后,他就会越来越相信那完全是真的,相信这个借口就是他无法成功的真正原因,结果他的大脑就开始怠惰、僵化,让努力想方设法要赢的动力化为零。但他们从不愿意承认自己是个爱找借口的人。很多人都迷信所谓的知识就是力量。在我看来这句话只说对了一半。拿才智不足当借口的人,也是错解了这句话的意义。知识只是一种潜在的力量,只有将知识付诸应用,而且是建设性地应用,才会显出它的威力。

我一直视“努力工作定会致富”为谎言,从不把为别人工作当作积累可观财富和上策,相反,我非常笃信为自己工作才能富有。我采取的一切行动都忠于我的伟大梦想和为实现这一梦想而不断达成的各个目标。

在做生意时,你绝对不能想把钱赚得一干二净,要留一点钱给别人赚。

成功不是以一个人的身高、体重、学历或家庭背景来衡量,而是以他思想的“大小”来决定。我们思想的大小决定我们成就的大小。这其中最重要的一条就是我们要看重自己,克服人类最大的弱点——自贬,千万不要廉价出卖自己。你们比你们想像中的还要伟大,所以,要将你们的思想扩大到你们真实的程度,绝不要看轻自己。

世界上有两种人永远不会富有:第一种是及时行乐者,第二种人,喜欢存钱的人。

我厌恶我的手下人说“不可能”。“不可能”是失败的用语,一旦一个人被“那是不可能的”想法所支配,他就能生出一联串的想法证明他想得没错。

我在读书时就记得这样一句话:“最完美的人就是那彻底投身于自己最擅长的活动的人。”后来,经我改造,将其变为我管理上的一个理念:最能创造价值的人就是那彻底投身于自己最喜欢的活动的人。

你是否听到过伐木者的产量会下降,只因为他没有抽出时间来磨利他和斧头?我们花钱,以及很多时间,去修饰头脑的外表,刮胡须、理头发,我们有没有必要花同样的时间和金钱,来化妆头脑的内部呢?当然有,而且可以做到。事实上,精神食粮随处可得,例如书籍。经由伟大的心灵撞击而写成的书籍,没有一本不是洗涤并充实我们心灵的食粮,它们早已一劳永逸地为后人指明了方向,而我们可以其中任意挑选我们想要的。伟大的书籍就伟大的智慧树,伟大的心灵之树,我们将在其中得以重塑。让我们学会既聪明又谦逊,既谦逊又聪明吧。

思考最多、感觉最高贵、行为也最正当的人,生活也过得最充实!           

2009年12月22日星期二

读书:Thomas A.Limoncelli《时间管理》

这本书其实不仅仅是给予系统管理员关于时间管理实战经验的建议,我们这些“IT民工”翻翻这本书也是很有助益的。本书讨论的策略其实也是很简单,也许你和我已经每天都在使用,例如:每天早上花5分钟计划一天。如果是每天要完成的事情,早一点完成它。清理实际办公桌和计算机的桌面。工作不要上网看新闻,信息(这点我总是做不到,改正中),远离即时通软件。每天使用例如google calender以计划好的工作,完成的Tasks以“X”标识(我每天下班时看到所有的Tasks被X掉总是很开心:D。)等等时间管理的方法。

以下是这本书中我最喜欢的观点:

(1)职场生涯的网络,也需要维护,而不是找新工作时候才联系,必须维护与他们的人际关系。

(2)休假是为了维持你的心里健康。拖延休假时间就像是拖延刷牙。现在跳过看起来很方便,但长远看来就不健康了。如果你浪费休假时间而用一天去跑差事,就无法达到减压目的。(深有感触啊,绝对是真理)

(3)例行公事可以节省工作,想一次,做许多事。

(4)浪费时间的事件,就是收益和时间付出的比值太低的活动。不要想用更有效率的方式把这些活动做完,最好的方法是试着将其排除掉。

(5)每件事都应该有某种益处。花五小时电子游戏有娱乐的益处,然而其他有益处的事可能对你更有价值。例如,花同样的时间做些家中维护工作来增加你的生活质量,这比炸掉几百万个古怪的外星人更有长期的益处。有些浪费时间的事件就是很难抗拒。所以,只好“一切适度”。(对于这一点我深有感触,以前我每天花很多时间阅读rss订阅,现在我每星期安排一个小时或几个小时(或者每天几分钟)阅读rss订阅的内容的时间。能看多少就看多少。这样,我每天获得至少一个小时。)


“工作时间 X 工作效率 = 工作的成果”,想获得最好最高的工作成果,我们所要做的就是首先提高时间效率(这是最重要的,很多人自认为投入了不少时间在工作,但是成果很小,这就是因为他投入的是“低效率”的时间),其次是使用一些策略来节约时间。心理学家说,养成一个新习惯需要花21天,21天重复做同样的事情会让你的大脑毫不费力地把这件事情变成习惯。其实关于时间管理的方法大家几乎都知道,也有很多比本书的方法更有效的方法,时间管理也是因人而异,但是如何坚持使用它们,并养成习惯,这才是关键,以下是书中提出的时间管理的方法,特此摘抄出来,与“众IT民工”共勉:


给时间管理的信息一个“数据库”(使用笔记)。将脑力留给最重要的事(节省内存)。(清晰的头脑很重要。胡乱的思路充满分散力,无法让你保持专心。)开发例行公事并持之以恒(程序代码函数库再利用,不要重新发明既有的东西)形成习惯与信念(以预先计算的结果取代运行时的计算)。在“项目期间”保持专心(就像一个核心信号)。以工作生活上的工具管理社交生活(社交生活不是一个可选功能)。