忙碌的5月

2008年的5月是难以忘怀的,有人戏称是上帝的手机不小心开了震动模式了,权当是我们勇敢面对明天的一点自我安慰吧,逝者已矣。这么大的事件,我没帮上什么忙,也没帮上什么倒忙,除了捐了自己微薄的一个月工资以外,几乎什么都没有作,有些惭愧,但我也没闲着,原先考虑的.NET还是PHP?问题基本被消灭掉了,灾要救,其余的工作也要继续,不是么?

这个项目我最终选择了用PHP来作,原因不再说了,正确性让时间去证明吧。工作内容大体分两部分,一个比较简单的子系统和另外一个大一点,逻辑关系和计算规则比较复杂,专业性也较强的子系统。之所以说是子系统,这次开发的内容仍然要和原来.NET的系统一起使用,换个说法就是只升级了一部分,而原来的系统就是.NET和Java混合着用的,现在.NET、Java、PHP全到齐了:-)。

因为只是子系统开发、升级,所以用户管理、验证部分仍然使用原系统中的,省去了这部分的工作量,但需要作一些焊接的工作。

数据库方面,原系统仍然使用Sybase,新系统换到mysql库,为此专门搞了一个单向同步数据的模块,放到cron中每隔5分钟执行一次,效果还可以接受,同步过来的数据也算是对原Sybase的一个备份。不过库结构的命名是全新的,并且除字典表以外,主键全面从identity转向uuid。自定义的uuid按时间排序,还分配了可自定义部分,目前感觉使用效果应该比identity要好,还是需要时间证明了。uuid的调试是麻烦些,需要一点小技巧和烂笔头,还有phpMyAdmin这个好工具。

时间上,大概是从4月初开始的,刚开始连我4个人,其中1个PHP还没学会,另外2个是今年的应届毕业生(项目过程中,5月底左右,才完成论文答辩,领了毕业证)。我除了项目还有其它工作,刚开始帮他们起了个头,中间一直到5月中下旬才全面投入项目。PHP还没学会的这个后来主攻文档和测试、项目协调。

一开始花了大概10天的时间构建系统框架、连入adodb,smarty等类库,以及非常重要的开发规范制定。然后开始作那个比较小的子系统,一来可以不断完善系统框架,二来也算是锻炼队伍。原计划4月底完成,拖到了5月10号左右。

然后开始较复杂的子系统,由于时间太紧迫,又请了两位外援,一位是几乎全能的老手,除了专业业务不熟悉,别的前、后台都没问题,另外一位是一年经验的PHP开发者,速度虽然略慢但代码质量还可接受。

从5月15号开始,几乎是封闭式开发了,每天除了吃饭睡觉和大概一个小时的休息(乒乓球)时间,每天都工作到24点以后。原计划5月底开始测试(并非完成),跳票到了6月10号,还算是在可接受范围之内吧,只是一些非重点非必要的辅助功能都被我们留在以后作了。

项目基本上就是这些情况吧,谈几点感受:

  • 石家庄这种鬼地方,一半用户是微软的盲目崇拜者,一半用户是Java的盲目信仰者,PHP及其它开源技术的土壤简直就是盐碱地。
  • 在较成熟的PHP应用环境下,或者开发团队中有PHP熟练者的情况下,即使是.NET和Java的高手也是可以快速熟悉起来产生生产力的。
  • 不要信仰工具,不管是用什么开发工具,没有我们后来请的两位外援,再有2月也拿不出东西来。
  • 工作经验的确很重要,不仅仅是工作质量的差别,毕业生和有工作经验的人相比,工作精神、压力承受程度、解决问题的思维方式都有很大差别的。好在我们的团队成员在工作态度上还都是一流的,这一点我得感谢他们。
  • 欠缺的知识:在开发工作量测量、开发时间测量上还没有太好的方式,代码质量也没有很好的检查方法。需求表达、结构设计基本上靠文字描述和口头讲解(当然也有时间的原因),没有趁手的case工具。数据库结构设计和维护从原来的PowerDesigner又回归到了原始的sql文件+维护版sql文件,感觉用起来虽然不太方便,效率也不低,多服务器的环境下尤其好用。
  • 花一些时间搭建高仿真的测试环境很重要,我们的测试环境已经运行了3年多,系统和数据都是和生产环境一样的,对开发起到了很好的作用。
  • 拍脑门定工期的方式真的是后患无穷,但也没有更有说服力和科学依据的更好方式,头疼,系统分析这块当年没学好,就是学好了这么多年的发展也用不得了。

小结:很辛苦,但有所得,也很快乐,按照葛优的话说就是即完成了任务,又锻炼了队伍,呵呵。

与所有默默开垦盐碱地的同志们同勉,并对给予我默默支持的家人和同事致以无限感激。