解惑

解己之惑,解人之惑

标签:效率

提升项目组的开发效率

通过几年的实际工作,也参与了规模不一的多个项目,但是项目组的开发效率一直不高,一直都在思考这个问题的症结,最近换了一个公司,由于刚刚去,也不能修改比较核心的代码,就给他们修改bug,在修改其中一个比较有共性的问题时接触了很多他们原来写的代码,发现代码中充斥着很多完全相同或者几乎完全相同的代码,最典型的就是获得数据库连接以及关闭数据库连接的代码,有的类会封装一个自己用的方法,有的就是干脆每次重复,有的更是有相关的方法但是代码的其它地方却没有用,这个现象给了我比较大的触动,现在仔细想想,其实影响一个项目组的开发效率的很大的因素就是代码共享和知识共享太缺乏了。但是代码共享和知识共享又确实是比较困难的事情,共通的功能如何使用,需要什么约束条件,能够完成什么功能等等都需要有比较完善的文档,而一旦这样的功能多起来以后你要从这些功能中找到需要的功能有时候确实是比较困难的,特别是有些功能去查是否有现成的代码所花费的时间可能比自己写一个还多。

根据我的经验,有几个地方注意一下就可以比较好的解决: 
 
共通的内容要易于使用和理解,例如定义的方法名要比较贴切。 
要写比较详细的说明文档,例如给大家发邮件或者发布到内部使用的论坛系统中。 
在公布之前经过充分的测试,否则使用的时候总是有各种问题会导致大家不敢再用共通的代码。 
对于类似的功能有其共通的代码,例如使用struts的系统有自己的系统的顶层的BaseAction,在这个BaseAction中定义系统中的子类需要实现的业务逻辑方法入口,而BaseAction要实现structs要求的execute方法,并完成所有的共通任务,例如是否登录的检查,session是否超时等 
业务功能要比较少的关心杂项共通功能,例如定义logger,获取数据库连接,关闭数据库连接,异常处理等,这些功能都可以定义在BaseAction或者是系统的顶层基类中。 
  而且通过使用共通功能也可以很大程度提高系统的质量,因为通过这些年的实践发现,很多新人由于开始不理解系统的要求,很多地方就是先抄袭别人甚至完全拷贝别人的代码,如果别人的代码是有问题的,那么在没有出问题之前是很难被自己发现的,而到了发现的时候已经积重难返了,而通过顶层类的封装,底层的类的空间就狭窄了,犯错误的可能性就小多了,因为很多系统的共通要求在顶层类中已经实现了。

学会懒惰

记得有人说过最好的程序员是最懒的程序员,这个懒并不是真正的懒惰,而是学会高效率、低重复的工作。其实对于大多数程序员而言,都是在一个固定的框框里面写一些看似不同实际相同的代码,那么你有没有想过使用什么方法能够不写那些完全一样或者几乎完全一样的代码呢?很多人可能更多的是复制,特别是在IDE的帮助下,拷贝一个类,它会自动帮你替换一些相关的东西。这个方法是不对的。你的代码中如果存在一段代码重复三次以上的情况,你就要想办法不这样重复了。我常用的有两种,一种就是写工具类,还有就是使用Template method模式,基本上可以解决90%的问题。
另外一点就是写代码能够做的事情不要自己一遍一遍的重复做,例如这次我写的EJB单元测试框架,其实我可以要求大家写单元测试的时候自己发布EJB,只发布自己需要的,但是我可以从项目的配置文件中读取到这些信息,就应该让框架自己来做;Entity Bean的finder方法MockEJB不支持,我提供了基础代码可以自己写Finder的实现,但是80%以上的finder的实现都很简单,就是两三行代码重复一下,换个字符串就可以了,但是我费了很多时间写正则表达式去解析这些finder,只有很少一些SQL使用了比较复杂的语法(288个里面只有34个)。
也有很多人说程序员很苦很累经常要加班,就我而言,我工作五年多来只加班过三个月,而且不是因为写代码,而是因为我一个人要解决40个人遇到的问题,我解决不了的或者解决方案会影响项目进度的我就要发邮件到我们的上游承包商的人,每天必须阅读和回复的邮件超过100封,而且要使用我并不是很好的英语写。而且我从来没有通宵加班过,最晚的一次是到半夜两点,还是陪项目组的人发布,我自己其实并不需要加班。
学会懒惰,学会思考,学会更深入的研究问题,你慢慢的会发现程序员其实不需要加班也可以搞定。

© 2024 解惑

本主题由Anders Noren提供向上 ↑