可能我的运气比较差,曾参与的几个项目,都是大型的、失败的项目。
第一个项目是一个Transform Proxy Server(TPS),一个基于apache的代理服务器软件。移动设备(如PDA、智能手机等)通过它去访问PC网页(HTML),TPS会根据设备的(UserAgent)把HTML转换成适合设备显示的网页(如HDML、CHTML、WML等)。不包括第三方的代码(xerces/xalan/icu/tidy和apache等)有50多万行的C++代码,10多万行的JAVA和JSP代码。其中采用了很多先进的技术,在美国展出时,微软的人看了都叫绝,甚至想OEM到IIS里。但由于稳定性太差,这对于一个服务器软件来说是致命的,调试几年后进入了垃圾箱。
第二个项目是一个网页编辑器,提供移动设备网页的可视化编辑、预览、网站管理功能,该项目也有超过50万行的C++代码。BUG数最后达到17,000多个,到项目被取消时,还剩3,000多个bug没有fix。
第三个项目是一个智能手机,该项目也是个庞然大物,项目推迟一年后发布,其中也是一波三折。因为其功能丰富,在市场上赢得一度之地,但其稳定性、可维护性不敢恭维。
很多人都说,中国缺乏的不是技术人才,而是管理人才。这个断言是否是真实的,我不清楚,毕竟我的经验很少。但从这个三个项目来看,个人认为失败的主要原因不是管理,而是技术(当然,如果你把缓冲区溢出也认为是管理上的失误,也是有道理的)。
曾见过工作四五年的C++软件工程师,连拷贝构造函数都不清楚,把上万行代码的模块放到一个类里,代码乱七糟八,更不清楚什么设计模式、代码重构。有的做事的态度和方法都不太好。我得出一个结论:技术培训非常重要。若认为写代码很简单,交给新手去做,也不给他们培训,项目一定死得很惨。从我带人开始,一直把对组员的技术培训作为重要的事项之一。在这里,会记录一些重要的技术培训。