• 2004-01-15

    惯性思维

    有没有压力的感觉果然不一样。

    经过近乎疯狂的编码,项目顺利拿出手,一根紧绷了近一个月的弦一下子松了下来。这两天感觉整个人特别懒散,什么都不想干,就连blog都懒得写了。

    在我们传统的开发方式中,比如用C/C++,我们会把自己应用的所有东西放到自己应用的目录下,比如bin下放可执行文件,conf下放配置。通常顶层目录则是由我们任意指定。
    对于J2EE部署,我的认识基本上是,把所有class和部署描述符打成一个包,可能是EAR、可能是WAR,然后部署到应用服务器上。一般部署的结果就是放到了应用服务器的目录上。
    这是我脑子里一直难以解开的一个结,我们无法按照传统的方式部署我们的应用。

    我们的新系统中,一个同事创造性的解决了这个问题,使我们按照传统的方式部署我们的应用。具体做法很简单:部署时,只把描述符部署到应用服务器上。而我们应用的class文件打成一个JAR文件,把它配置到应用服务器的classpath中。至于可能用到JAR文件,我们也不像原来一样打入应用的包中,而是单独部署,放到我们应用的lib下,然后也是配置到应用服务器的classpath中。至于配置,程序会读一个环境变量确定配置文件的位置,于是配置文件的位置也成了可配的。

    由此,我们的应用彻底与应用服务器分开,我们可以按照传统的方式组织自己的应用。

    或许从表面上并不能看出这种做法的好处,如果你能够亲身经历一次打包发布的漫长煎熬,现在这种只要自己手工就可以简单完成打包,发布变成了一个FTP的过程,估计就能体会我们用这种方法的幸福。另外,我们的实施人员更习惯于原本的那种部署方式,而并非J2EE那种一切尽在应用服务器的方式。

    最初接触到这种做法,我惊讶的嘴都合不上了,太精妙了。回过头来想想,其实这只是一个惯性思维的问题,太过于习惯现有的东西,有些很好的解决办法其实只要简单的转化一下思路就OK了。

    突然想起前不久调系统的一个bug,费了好大的劲,最终的bug是出在一个已经用了几个月的类上。这是一个读XML配置文件的类,现在的系统用了多个配置文件,一读就错。最终发现一个成员被写成了静态的,所以第二加载的时候会覆盖掉第一个,之所以以前没错,因为以前只有一个配置文件。

    调这个bug费了好大的劲并不是因为这个bug如何之难以找到,关键是因为我根本没有想到这个类会错,因为它已经是我多次维护过,并且稳定运行了好长一段时间了。这还是一个惯性思维的问题。

    偶尔跳出三界外,一片海阔天空。

  • 成为Blogger以来,头一次这么长时间没有留下只言片语,一个字,忙!

    以前的系统,相对来说,我并不是个中心人物,完成自己手头的工作也就罢了。成为“架子工”之后,对于系统担负的责任一下子大了起来。系统上线的日期一天天临近,压力也就越来越大。

    我们的元旦假期是三天,我背着笔记本回家休息,除了元旦当天是真正在休息以外,假期都在写代码中度过。直到今天,我的弦都是绷得紧紧的,每天工作到晚上11点。现在的感觉,无论精神还是身体,都是非常累的。

    累是累了些,收获还是蛮大的。毕竟这个系统的整个设计是由我完成,并且完成了其中很大一部分的代码。自我感觉编码能力又有了一些长进,对代码也有了更好的感觉。

    Uncle Bob的《敏捷软件开发》中一个附录的标题是《源代码就是设计》,我的看法是编码能力和设计能力是个相互影响的过程。缺乏编码实践的人,设计能力很难有大的提升。随便在网上转转,许多关于编程的金玉良言都有多写代码的忠告,由此可见,在这点上大家是多么的有共识。这和我们应试教育的题海战术有着异曲同工之妙。

    以前没想通这个道理,以为多看书多学习就能提高自己的水平,于是书买了不少,也看了不少,实际经验的缺乏使得阅读过程痛苦不堪,而且收效甚微。2003年,在经过一段时间的实战之后,我拜读了《敏捷软件开发》,阅读此书不时可以感受到其中奥妙,于是常常大呼过瘾。现在再来看设计模式、再来讨论重构等等,就不像从前那样纸上谈兵,不知所云了,“实践是检验真理的唯一标准”。

    这次开发本来只是需要添加一些新功能,如果我们基于原有系统进行开发,恐怕几天就搞定了。由于原来系统从结构上来说很差,于是新负责人决定另起炉灶,重新设计。换句话说,我们要再不到一个月时间里,把原来系统完全实现出来,还要增加新的功能,现在看来,当时确实有些冒进了。就我的性格而言,我是比较喜欢挑战的,原有系统已经让我有些厌恶了,为它写代码对我来说,只能是折磨自己。

    原有系统最大的问题在于重复代码过多,结果造成发现一个bug改了一个地方,同样的问题还会出现。

    2004年第一期的《程序员》有一篇文章名为《代码地震》,有这个词来形容原有系统再恰当不过了。单从代码量的角度考虑,就可以看出新系统和旧系统的差别,原来的系统纯代码量(不算注释、空行等)一共4万多,而新系统的纯代码截至到我写篇blog的时候,还不到2万,也就是连原来的一半都没用上。

    这两天大家一起奋战的时候,负责人和我说,现在的代码结构看起来舒服多了。

    当然,并不是说新系统有多么多么完美无暇。随着编码的深入,新系统的问题也逐渐的暴露出来。显然不能指望马上修改新系统解决不理想的地方,真要是那么做了,恐怕我们的系统永远也开发不完。改进只能是有限度的。

    今天累了,准备休息了。关于这次设计开发,我还有很多心得,留下的话当然是且听下回分解。

  • 明天就是2003年的最后一天了,鉴于我多半会选择明天下班之后立刻回家,所以,估计今天的blog就是我2003年的终结之作了。

    最近和大学的一个老师联系,得知她现在正在翻译《Linux Kernel Development》,于是厚着脸皮问她要来部分译稿看看。由于不能辜负了老师对我的信任,所以,看的同时当然要提一些意见。我是个书虫,有事没事闲逛于各大图书网站之间,网上对于图书翻译的精彩论战着实见识了不少。很早以前,总以为翻译对懂外语的人来说是件轻而易举的事。曾经尝试翻译过一些东西,险些吐血,明明一句懂得不能再懂的英文,转成中文之后,自己都觉得不知所云,深感翻译工作之艰辛。这次阅读译稿,进度是相当缓慢的,一晚上只能读一点点。把一些自己觉得别扭的话作为意见提出来,在没有原文的情况下读译稿,好处在于可以不受原文的干扰,全心于译稿,劣势在于遇到糊涂的地方,连个参照都没有。

    做技术的人大多在意的是技术,对于自己的表达工具——文笔和口才——重视确实不够。现在已经不是“酒香不怕巷子深”的年代了,好的水平需要配以好的表达才能尽显风采。最明显的一个例子就是我的梦想风暴。虽然,我对自己码字的功力多少有点自信,但没有很好的宣传使得梦想风暴的访问率一直居低不上(等梦想风暴再壮大一些,我就得宣传一下了。^_^)。笔和嘴其实并不是很难练,多动足矣!这和写程序是一个道理。看看林锐的《大学十年》,他从笨嘴拙腮到伶牙俐齿的经历就是最好的证据。

    这两天对我来说,另外一件不同以往的事是头一次电子购物的东西到了。虽然是借用的是别人的帐号,虽然一切的操作过秤都是那哥们替我完成,但最终的钱出自我的腰包。自己算起来也是个网虫,每天泡在网上的时间也不算短,但电子购物却是头一次,多少有些落伍了。电子购物的感觉?没有感觉,这和刷卡消费差不多,没有亲手送出钞票,好像钱不是自己的一样,也难怪有那么多人喜欢电子购物。这话说出来,真对不起我无产阶级和穷人孩子的身份。不过,电子购物确实方便,足不出户,东西进门。当然,对这东西的需求急不得,我决不会在饿得眼冒金星的时候,选择上网去买方便面。:)

    虽然还有一天,提前送上新年的祝福,想必没有人反对,新年快乐!
    2003年,再见吧!

  • 2003-12-28

    部门活动

    年关岁末,部门活动。

    大概平时给人太多闹将的印象,这种时候是绝对无法逃脱的,即便工作很忙,即便我自己的心中期待的是悄无声息蒙混过去。我清楚,100%的逃避是不现实的,于是第一个找我演节目的同事出现提出让我一起去唱歌的时候,我毫不犹豫的答应了。没想到的是,还有第二个,让我演广告。我们的广告实际上就是个小品,只是捎带了自己的产品。鉴于去年的部门活动,我曾经扮演一头奶牛,演绎了一段还算精彩的光明牛过秤的广告,部门的同事在今年考虑广告人选的时候,一下子就定位到我了。这次是聪明智慧人见人爱的“猪八戒”,有人戏言,我从牛魔王升级到天蓬元帅。罢了罢了,演就演。我真希望这就是终点,我愿未遂。主持节目?我怎么会又被牵连进去了,难道我就这么全才吗?我自己都没有对自己这么相信过,怎么会有这么多人相信我。

    昨晚的联欢对我而言,是最混乱的一个联欢,不是联欢混乱,是我的事太多了。联欢是在大家酒足饭饱之后立刻开始的,我甚至都来不及考虑紧张的问题,就已经站在了台上。一会主持节目、一会去演广告、一会去唱歌,基本上,我的角色就是去搞笑。运气还算不错,联欢中的抽奖,我中了二等奖,一个128M的U盘。我还不够时尚,还没有自己的U盘,这下有了。大概我唯一比较正经的时候,是得知部门颁发的“青年突击手”奖有我一份时。奖品是一台DVD,记得今年家里买VCD时,我曾极力劝谏老妈购买DVD,结果,提议被否,现在看来,我还是无法媲美老妈的远见卓识。

    我记不大清楚昨晚曾经我站在台上具体说过些什么了,只记得说出了今年最大的心得,工作时注意一下身体。

    狂欢中的我们不再是一个个程序员,而只是一个个普普通通的人。尽情体现着我们最真实的一面,尽情的笑,尽情的叫。

    一年一次如此狂欢,难得悠闲。

  • 2003-12-25

    圣诞快乐!

    今天是圣诞节。

    先祝所有看过和没看过梦想风暴的朋友和我自己圣诞快乐!

    印象中,前几年圣诞节还是传说中西方人的节日,而今中国人已经开始把它当作一个自己的节日像模像样庆祝起来。唯一的差别可能是由于圣诞节尚未列入法定节日而不得因故休息吧!

    不能休息不等于不是节日。

    昨天的平安夜,同住的兄弟们相约共同庆祝,实际上是给大家一个聚会的机会,平时工作繁忙,平安夜也就成了一个充分放松自己的理由。

    如果说今年的平安夜于我而言,有什么收获的话,那应该是进了一趟教堂。在我看来,平安夜去教堂就如吃饺子讲究的原汤化原食一样,在于一个味道。虽然来去匆匆,虽然我并不信基督耶稣,但那种感觉,加上恰如其分的时间,美妙极了!

    圣诞之于西方人,等价于春节之于我们中国人。

    几个兄弟在街上信步而行,人山人海的壮观景象让我们突然产生了一种过春节的感觉。街上的人,脸上无不洋溢着喜庆的神情,更有甚者,放起了烟花爆竹。估计兄弟们由于春节大多会选择回家,在一起过春节的机会几乎为零,于是大家调侃,就把平安夜当成兄弟们一起过的除夕夜吧!

    近来工作忙了一些,有机会放松一下才让自己认识到,我不仅仅是个程序员。虽然写程序是我所爱,但它并不是我生命中的一切。很多大师都是多才多艺,博学多才,所以他们才能广开思路,创造出一个个旷世经典。

    于是,我告诉自己,程序技术之外,还应该来点别的调剂一下。

    圣诞已至,新年还会远吗?又是一个狂欢的理由。