王辉的博客

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

0%

程序员的主要任务是让自己成为一个不必要的人。这听起来相当愚蠢,仿佛工作的目的就是要把工作给慢慢作丢了。其实不然,一个不必要的程序员才是一个优秀的程序员。

这话越听越自相矛盾了,但如果理解了不必要的意思,便一切都明朗了。必要与不必要是从代码与代码的维护这一层面讲的。一个优秀的程序员写的代码应该是一目了然,具有自我解释能力的。别人读着赏心悦目的代码,就像聆听作者讲故事一样,只要代码在,作者的存在与否就无关紧要了。

可从人才的角度出发,这个不必要的人是多么的难能可贵。每写一段代码,他都在讲一段故事,这如何能让人不沉醉。

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

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

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

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

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

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

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

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

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

阅读全文 »