4月23-25日,我跑到北京参加了Qcon Beijing 2010大会,收获颇丰,在这里总结一下。
这次会议是由InfoQ主办的,由于我是InfoQ架构社区的编辑,所以就有机会免费参加,很不错的机会,毕竟加入到InfoQ以来,还没有见到各位兄弟姐妹们,正好借这个机会和大家见面。而会议邀请到的来做演讲的人,很多都是业界中非常知名的重量级任务,正好让我仰慕一下,发现一下自己的不足,重新设定自己努力的方向和目标。
在会议期间,我和一些高手做了比较深入的交谈,从中我得到了很多,感谢大家!
首先我要提到的是园子里大家都比较熟悉的张逸先生,很幸运我们住在一屋,所以有比较长的时间可以聊天,天南地北。他谈到了他所写的几本书,以及正在计划撰写的书,其中都有他自己的思想在里面,都是很不错的书。他谈到了对设计模式的理解,如何来学习设计模式,该看哪些书。他说,其实GoF的那本最经典的《设计模式》里面有很多重要的思想,但是由于文字有些艰涩难懂,所以被很多人都忽略了。说来很是惭愧,那本书我早在十年前就买了,但是一直束之高阁,每次都是看上50页左右就放弃了,感觉实在是太难理解了。而对于《深入浅出设计模式》,倒是很有兴趣的看完了,然而,为了让大家理解,里面的例子并非是真正能够用在企业级开发中的,所以到现在对于设计模式的应用,我涉及到的还是很少很少。反省一下自己,计划一下,有时间要将设计模式再学习一下,再次试着理解大师们的思想。
接下来要提到的是蔡学镛先生,早在2002年,我就拜读过他所写的《Java夜未眠》,很受启发。之后总是在《程序员》杂志上看到他的身影。很高兴见到了他本人,得知他已经到中国来有段时间了,现在就职于支付宝。蔡学镛的形象就是标准的程序员,没有西装革履,甚至有些时候显得有点儿腼腆,但是睿智的眼睛,敏捷的思维,让我叹为观止。他的两场演讲我都听了,第一感觉就是他对待此次活动的态度是极为认证负责的,每个ppt文稿都修改过很多次,直到自己满意为止。他演讲的主题一个是《Rebol漫谈》,介绍一本少有人用,似乎有些孤芳自赏,但实际上非常实用,旨在追求完美的语言。这个演讲激起了不少人学习这门语言的兴趣,会后好多人都询问如何才能够找到相关的学习资料。另一个主题是《深入浅出复合事件处理》,讲述CEP的一些概念和做法,这种系统或许在将来会成为某种趋势。
还有ThoughtWorks的熊节先生,他也是《重构》一书的译者。他的演讲非常吸引人,其中讲述的是他所经历的一个真实项目,只不过隐去了客户的名字。在其中,他阐述了如何做代码的5S工作,这与车间中的5S工作截然不同。还有一个很有启示意义的故事,那就是《湖水与岩石》。这个演讲对于我们现在的项目很有意义,因为现在我们的代码正是处于混乱之中,而且有很多潜在的问题需要解决。
还有新浪的架构师杨卫华先生,他以平实的语言和大家介绍了新浪微博在扩展性上的特点。新浪微博应该是国内的微博系统中做的比较好的,访问量也非常大,如何处理这种高访问量、大数据量的系统,杨卫华先生讲述了不少经验。
人人网的黄晶先生,也和我们分享了人人网从最开始到现在在技术架构上的演进过程。他还提到目前正在进行的两个项目,一个是key-value形式的数据库,另一个是web control的框架,为了更好地发展,也为了让广大程序员们少走弯路,稍后,人人网会将这两个项目开源,这可能是广大程序员的一个好消息。
还有微软F#团队的Tom,还有Paul King,他是《Groovy in Action》的作者,和他们的交谈过程中,让我领略到了他们对技术的执着。
总之,我得到最多的就是对业界各种新知识,新技术的了解,而采用的方式就是与各位高手们进行交流,真的是不虚此行。下次如果有机会,我还会参加,真的是非常值得,呵呵。
下面的内容是写给公司同事看的,可能更有意思一些:
上周末我到北京参加了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的方式来提高性能等等。然而,这些经验对我们的核心系统来说不是特别适用,我想我们可以吸取其中好的思想,然后根据我们的具体情况作出相应的调整。
以上就是对这次参会简单的总结,总的来说,收获还是不小,也希望能够在今后的工作中有机会应用到从中学到的知识,也希望有机会将这些比较有意思的知识推广给大家,:)