参加QCon的总结

上周末我到北京参加了QCon,这是一次技术盛会,有很多业界的思想领袖和技术专家参加,三天之中,我收获很多,现将与公司的系统开发相关的内容提取出来,做个总结。

 

1、 关于代码的5S

这个主题是由ThoughtWors的熊节讲述的,他所讲述的内容是基于一个真实的咨询项目的,这个项目已经进行了半年左右,并且还在进行中。通过对代码的整理,该公司的开发效率、维护效率以及持续集成的效果都有了很大的改进。

5S思想本来来自于日本,指的是:整理、整顿、清扫、清洁、素养。最初是对生产车间的管理,给大家一个整洁的环境,从而提高工作效率,让大家可以更快乐地工作。

熊节将这个思想引申到了软件开发的过程之中,这并非是要我们平时要把自己的桌面清理干净,因为那不是我们工作的现场。我们工作的现场位于我们的个人电脑之中,以及我们的代码库中。如果能够对我们的代码进行整理、整顿、清扫,将其中无用的、冗余的、错误的代码都清除出去,然后对所有的代码都进行清洁,提高它们的可读性和可维护性,最终提高每个开发人员的开发素养,那样最终的结果必定是,开发人员和运维人员都可以开心地工作,应用开发工作的效率也会有一定的提高,因为所有人都能够很容易地找到所要开发或者修改的代码,并且能够很容易就读懂它们。

然而,我们现在的代码中存在不少问题,一方面在于代码的不规范,这也正是我们一直在试图完成的工作,也就是制定并执行代码规范。另一方面,代码库中有大量无用的代码,数据库中也有不少无用的数据表,在数据表中也有不少无用的字段,它们的存在对我们维护代码都会造成很大的困扰。

但是,清理代码会有很大的风险,这需要比较完善的测试代码来保证清理代码没有将既有的功能破坏掉。编写测试代码的前提是对业务比较完整的理解,以及对业务流程中特殊情况的把握。

困难是存在的,而这项工作也应该是比较值得做的,因为它可以保证我们在新开发程序的时候,不会因为“破窗理论”,而不愿意将自己的代码规范化,另外也可以提高系统的可维护性,不至于过了几年之后,我们不得不抛弃现有的系统,仅仅是因为它已经是不可维护的。推迟现有系统报废的时间,本身就是对成本极大的节约。

 

2、 测试驱动开发的应用

这个部分是由台湾的敏捷教练麦天志讲述的,他在其中叙述了如何进行测试驱动开发,还根据自己的经验提出了进行测试驱动开发所需要注意的问题。

我曾经在开发“电话地址变更”和“网上续期缴费”需求的过程中应用了类似的方法,也就是编写了测试代码来保证功能性代码的质量,并且这样可以提高测试效率,每次测试的时候,只需要简单地运行测试代码即可,而不需要从页面上进行。另外,这些测试代码不会位于功能代码的类中,这样也保证了功能代码的整洁。此外,这样做,可以让我们将一个大的功能拆分为多个小的功能点,这样对于调试和维护都是很有好处的。

毕竟我们现在是使用Java开发,尽管很多代码还是使用面向过程的思想,但是还是可以使用测试驱动开发的方式来改善开发的过程,这样可以保证代码的质量,

 

3、 使用其他语言来辅助系统的开发

当前我们几乎所有的系统都是使用Java来开发的,这样做可以保证整体上的统一性,也便于维护。但是针对某些特定的功能,主要是一些非核心业务的程序,我觉得可以使用其他更合适的语言或者工具进行开发,那样,有时会提高工作的效率。

在会上,我听了几个关于其它语言的演讲,一个是蔡学镛讲的《Rebol漫谈》,一个是Paul King所讲述的《Groovy in Action》,另外还有微软的Tom讲的关于函数式语言F#的讲座。这三种语言各有各的特点,在特定的环境中使用的话,会比单纯使用Java更加方便。特别是Groovy,它的目的就是简化Java的代码,而且语法与Java极为相似。

之前在我所做的需求中,我也试图采用了其他的语言,包括在二代稽核系统中使用了C#,在抽奖工具软件和薪资检核程序中使用的VBA,这些语言和工具在特定的场景下,都发挥了非常不错的作用,尤其是抽奖工具软件,我仅仅用了2个小时,就做出了完全满足业务需要的程序,如果采用Java的话,至少需要2天吧,呵呵。

因此,我想我们可以鼓励大家多学习其他的语言,不仅仅是要掌握相关的语法,而是要弄清楚这种语言或者工具最适合在什么情况下使用,那样大家的视野会更宽,解决问题的方法也更多,效果也会更好。

 

4、 构建可扩展的系统

随着公司的发展,系统必定会变得越来越庞大,我们的服务器也必然会随之而改善或者增加,如何保证我们系统的可扩展性,可能是在今后的几年内会出现的问题,主要就在于如何在不修改代码的情况下,就能够对服务器的架构做出必要的调整。

会上很多人都讲述了这个问题,但主要都是大型网站的架构师所做的,有Twitter、Facebook、新浪、人人、豆瓣等等,他们所要做的都是针对博客、微博、社交型网站等等,采用的方式大多是要用key-value型的数据库,采用各种Cache的方式来提高性能等等。然而,这些经验对我们的核心系统来说不是特别适用,我想我们可以吸取其中好的思想,然后根据我们的具体情况作出相应的调整。

 

以上就是对这次参会简单的总结,总的来说,收获还是不小,也希望能够在今后的工作中有机会应用到从中学到的知识,也希望有机会将这些比较有意思的知识推广给大家,:)

posted @ 2010-04-28 14:59  侯伯薇  阅读(1397)  评论(3编辑  收藏  举报