王辉的博客

是什么让我对未知世界始终充满热情?

我也有洁癖,虽然我是一个不拘小节,有些大大咧咧的人。而不干净不整齐的代码常常让我郁郁寡欢。自己范的错误自我纠正即可,可他人如果没有这个追求,我该如何是好?

敢于做批评和自我批评固然是一种优秀品质,但这并不意味着要以融洽的同志关系当做牺牲品来换取。当敏锐的直觉告诉我,此处代码有污迹的时候,与其快刀斩乱麻似的急于重构,倒不如先安下心来仔细的分析一番,为何代码没有带来美的享受。

这样做有不少好处。一是有助于深刻的理解问题的根源所在。特别是读别人的代码的时候,即便找不到合适的方式与他人沟通,至少自己明白问题的症结之后,从别人的代码中吸取宝贵的教训,也能保证自己不犯类似的错误。其次,静心思考,也是给接下来的沟通和辩论收集论据。己所不欲,勿施于人,自己都没搞明白的东西何必强行的去要求别人呢。倘若是由于论据不足而导致说服不了别人,恐怕以后再发言的时候,听众便要不以为然了。

说到这,顺带着讲一下我遇到的不简洁代码。

一是关于对象继承的问题。众所周知,对象继承有利于代码的重用。但并非任何行为都可以通过继承来实现重用。继承应遵守的最重要的原则便是Liskov代换原则。在任何环境下,一个子类总可以代换它的父类。意思是说老子能用的地方,换成是儿子,儿子也能完成所有的任务。若此原则不能遵守,请用组合而非继承。

其次便是DRY(Dont repeat yourself)原则,史上最重要的编程原则,永远不要写重复代码。重复代码是一个梦魇,不仅不利于维护而且不利于代码重用。究其原因,是只看到了问题的表面,而不得其实质。解决方法便是提升抽象的层面。

代码洁癖并无好坏之说,觅得问题的实质,以容易让人接受的方式传达有效的信息才是关键。

Java中的枚举,不仅可以用来列举常量,而且可以实现接口。这第二点很重要,它使得枚举类型具备了多态的特性。但它又有一定的缺陷,特别是遇到枚不胜举的时候。

对于每一个新加入的枚举元素,他都必须实现接口中的所有方法。即便是在一个不大的接口的情形下,当元素数量增加到一定程度的时候,源文件就会变得相当巨大。虽然所有枚举元素,都是在实现同一类方法,但毕竟细节不同,所以把他们列在一起,影响阅读的欢乐性。除此之外,每次增加新的枚举元素,都要对此枚举文件进行修改,不符合开闭原则。

阅读全文 »

Martin Fowler说:“我是一个作家,一个演说家,实质上,我是一个在软件开发领域,爱说敢言的专业评论家。80年代中期,我接触到了新兴的面向对象式的软件开发,从那以后,我就一直工作于软件行业。90年代的大部分时间,我扮演的是顾问和讲师的角色,以企业应用为中心,帮助人们构建基于面向对象的软件系统。2000年,我加入了ThoughtWorks。 我的主要兴趣就是研究如何设计软件,使得它能最大限度的提高开发团队的工作效率。 为此,我学习了优秀的软件设计模式以及有利于软件设计的流程。 后来,我成为了一个敏捷开发的忠实粉丝,专注于行业前沿的软件设计方法。”

之所以对这段自我介绍感兴趣,是因为它启发了我对于一个软件从业人员在职业规划方面的思考。简单的一段话中,出现了不少描写职业的关键词:作家,演说家,评论家,顾问,讲师。这其中,我想重点分析的是作家和顾问。

阅读全文 »

小猫钓鱼,还想着蝴蝶,三心二意,结果,两手空空,终无所获。拿这个家喻户晓的故事当作警示,却常常发现,自己又何尝不是一只三心二意的猫。

初秋的时候,在同事的推荐下,决定读一下佐拉的萌芽(germinal),可迫于书中晦涩的法语,当阅读变成一种训练的时候,转向了广受好评的明朝那些事。这次体验是轻松加愉快,但随着新的想法不断冒出,那些事还没读完七分之一,又开篇尝试,被称为企业家必读之书,艾因兰德的名作,源头。除此之外,平日里,还胡乱的看了一些技术方面的著作。

说的矫情点,这叫培养发散性思维。其实呢,这是典型的浅尝辄止,不求甚解,成不了大业。二十一世纪的今天,互联网的出现和成熟,使信息的传播速度不知道比明朝快了多少万倍。但不可否认的是,它是一把双刃剑,同时加速了注意力的转移速度。舆论的误导诱惑也罢,自身的浮躁短视也好,人们变得越来越耐不住寂寞,越来越沉不下来气,纵向思考。

所谓纵向思考,就是集中精力深入的做好一件事情,善始善终。我想,大凡美好的事物,往往隐藏的很深。没有一颗纵向思考,勇于探索,耐得住寂寞的心,是很难发现它们的。这也许正是它们之所以美丽的原因。

失业在家,闲来无事,终于有时间可以读上几本,在公司里不太适合读的书, 特别是鲍勃大叔的代码简洁之道(clean code)。之所以说它在公司里不适合读,因为这类书的目的不在于帮助解决紧急棘手的问题,而是为了提高程序员的个人修养,特别是对那些不满足能用就行,而中意于在代码中追求美与快乐的人。书中,他提了很多建议,比如说,方法(function)要小的,类(class)要小的,单元测试(unit test)也要小的,可究竟多小才算小,三行,五行,还是十多行?

短小精悍的东西,有很多优点。首先是它看了让人一目了然,看着舒坦,看着愉悦。其次,浓缩的都是精华,它们只专注于应该做的,并且做的最干净利落,最完美无瑕。最后,他们有可能让一切变得更加井井有条,你是喜欢把所有的东西塞进同一层抽屉里,乱如麻,还是归类存放,便入查找,维护和管理?反正我是偏爱后一个。

阅读全文 »

“这周有点可惜,没能把这个功能给发布了”,上面旁敲侧击的对我如是说,其实是在提醒我加快进度。如果沿着铺好的路,老老实实的走,我应该已经完成任务了。但我偏偏,现成的路不走,另辟了斜径,误了行程。

至于为何劳神费心,再铺新路,我觉得是没有真正学会如何尊重他人的劳动成果。不错,用批判性的思维看问题,往往可以把问题分析的更全面,更透彻,但只会批判,不懂得赞许,就很可能封锁视野,看不到他人他物中美好的一面。更何况,对任何人来说,赞许总是比批判显得更加友好,更容易融洽气氛。

阅读全文 »

在博客里,我很少会提到IT技术方面的问题。一是觉得这些东西会很晦涩,不易理解。更主要的是,限于自己的境界,很多想说的话都已经被人给说过了,吃别人嚼过的东西,指定是越嚼越无味。

至于第一个限制,我可以试着慢慢更改,毕竟博客不是写给所有人看的,能遇到一些同行,做些真正深入的交流,总归是一件幸事。至于第二个原因,我仍会很大程度上的去坚持,尽最大努力,不写重复性的东西。但偶尔站在巨人的肩膀上,看到的一些趣事,也许值得用几行文字,做个留念。

实习的时候,老鸟们告诉我,写代码前先写注释,把要做的事情,先用文字表达出来,然后再编码。工作了以后(公司的确是换了),读着老鸟们写下的代码,却没有找到半行注释。彷徨在这个矛盾前,我不禁想问个为什么?

阅读全文 »
0%