转眼到了6月,是时候对过去近一年中所做的这个项目做个总结了。按照合同书上所写,昨天,因该是项目截止的日期,但由于种种原因,系统还没有最终交付。项目组的研究生师兄这几天估计还需要加班修改下代码然后再次Release给客户测试。
项目的名称叫某放大器性能仿真系统,是我们学校和某激光研究所合作开发的一套用于军工的仿真软件系统。但对方出资,对方使用。我是从去年8月初介入这个项目的,从最开始到项目结束,我们学校这边的项目组不算上两位老师,最多有五个人,最少时有三个人。有一位研一的师兄任组长,其余全是大三的,我是除了组长外介入最早的人员。
听项目的名称,感觉很晕。因为涉及到军工上的一些涉密信息,我们可以获得的资料也非常少,因此刚开始的时候也完全不知道它是干什么的。就在这么一头雾水的情况下,大概是去年8月初,项目组的主管老师杨老师开始给我们三个人划分任务,并做前期准备,加上之后和几位研究所负责这个项目的大牛们(他们是光学大牛……当然,有两个写Matlab和Ansys程序也很牛,但是他们对于软件工程,可以说是完全不了解)交流了几次后,我们也渐渐的对我们大概要做什么有了一定的认识。
因为涉及到涉密信息,细节不变多说,但整个系统的的大概作用就是模拟由某物理过程。它主要分为几个阶段,各个阶段之间有一定的联系。其实这之中的各个模块如果抽出来各自作为独立的子软件使用。那类似功能的软件在外国已经做的比较成熟,并且他们之前也就是这么用的,但他们现在想做的就是,把这几个子软件的中他们所用到的功能重新做到一个大的软件中,这样他们用起来一来比较方便,二来也算是他们的那个更大的项目中的一项成果。
按照老师的分工,我负责的是GUI、三维模型的处理和参数数据流这一部分,研究生师兄负责项目的整体、Ansys混编等,另一位同学负责的是Matlab混编、结果数据的后续处理等。
作为一个之前只参与过学校各种科技活动项目小打小闹的大三新生,我对这个项目是很慎重的。整个8月加上9月的前十几天,我们三个人都在学习各自负责的那一块,争取在九月中旬拿出第一个Demo。界面方面,我和师兄大概商量了一下,变按照老师的一条指示,使用某界面库搭建出了一个界面原型,忘了说了,这个歌系统框架是在MFC上做的,当时也只会这个,而且,MFC虽然貌似在企业中过时了,但它在学校中任然是霸主地位。之后我就专心开始研究三维这一部分,在老师的指点下,我开始关注法国的一款三维开源引擎,OpenCASCADE,它有很强的三维模型处理能力,对于几何逻辑的处理也很强,何况我们项目中对于这一块的需求也仅仅是导入几种格式的三维模型(IGES/STEP/SAT等等),把他们显示出来,能够实现三维操作,能够获取点线面信息等,用OpenCASCADE完全可以实现。确定了目标后就开始学它,但是,虽然它进入中国有几年了,可居然没有成体系的中文学习资料,90%的资料是英文的,而且是那种很高手的官方帮助文档,而且原理性的东西居多,工程的东西太少,官方提供的Demo很难发现有价值的代码。就这样,结合着国内一篇翻译过来的文档、官方英文文档、官方Demo、官方网站、国内的几个BBS、Google,在8月底,我把OpenCASCAD添加到了框架中,并且实现了IGES、STEP两种模型的导入,实现了点线面的选取,剩下没实现的功能是:1导入SAT格式文件、2实现清除模型、3最重要的是,实现模型的几何数据信息(点线面)和模型的物理数据信息关联,也就是说假如选中了模型的某一条线,那么就可以得到它的空间几何信息和它对应的物理信息。第二点应该是最容易实现的,但当时是因为一个Bug一直没找到解决方法就先搁置了,第一个实现起来太困难了,因为OpenCASCADE的SAT格式文件导入功能居然是收费的!!!当时真是骂自己前期的侦查工作没有做细致,开源框架居然还有收费的子模块!!!怪我少见多怪了……收来想出三个解决方案:1看对方是否必须这个功能,2如果必须这个功能,就增加经费,买这个子模块3如果必须这个功能而且不想增加经费,就只能我去试着模拟SAT文件的解析和导入。当然,最后显然是选了第3条,就这样,我花了大概不到两周的时间开始研究,从SAT文件结构,到SAT文件的试解析等,最终以失败告终。这期间经历的各种困难不是几句话能概括的。没经历过的真的是没法体会那种你遇到困难却找不到人帮助的煎熬,看了不下10篇英文的资料,感觉很有用但可能是自己英文水平太差,看完还是没怎么懂,看了几篇中文论文,感觉完全是在扯淡,写的全是理论,就那水平我也可以轻而易举堆出来好几篇,完全没有一点使用价值,不得不替国内现在的学术氛围和国家的前途担忧。
SAT格式文件解析失败后,就尝试解决上面提到的第三点--现模型的几何数据信息(点线面)和模型的物理数据信息关联,经过一段时间对OpenCASCADE模型数据结构的学习,终于实现了点线面的获取,并获得了他在当前空间中的几何信息(斜率那些),但是对于IGES和STEP这两种格式的文件,怎么在文件数据中添加上物理信息并使他们和空间几何信息对应上,成了一个大问题,在与对方讨论了两次后,根据第一阶段的需求,决定暂时搁置这个技术点,等第二阶段需要这个功能时再继续研究。就这样,待Matlab那边也差不多完成后,我们的第一个Demo出炉了。
这时候大概已经快10月了吧,就这样,一直到11中旬,项目都是在一种很松散的氛围中进行着,但我总感觉他没有继续往前推进。因为按照杨老师的计划,待原型Demo完成后,最多和对方再交流两三次,就需要明确需求,然后我们就根据需求开始规划设计这个系统了。可是,对方好像突然不着急了,其实在次年3月之前他们就没着急过,好像一直都是我们这边很着急,按照老师的想法,我们想在年前把第一阶段结束(那时候我还不知道项目的第一阶段签的交付日期是2011年6月)。就这么一直耗着,耗着,交流几次,对方就说,你们就按照你们的思路先做吧,先做吧,问他们建议之类的,也是含糊的很,更别说明确的需求了,我们倒是在11月初拿出了一份需求分析,但这完全是我们三个人按照我们对项目和激光这个领域写的,至于后来有没有发给对方修改、确认,我就不知道了。
到这里,有必要再把整个项目介绍一下,其实这个时候我已经对这个结构很明确了。项目中的仿真步骤大概有4个部分,后台的物理实现模块是对方提供的(基本全是Matlab程序,其中3个是一位他们那的博士后做的,另一个部分可能是由于比较难,暂时做不了,就打算请中科大的一位教授做)。但因为在12月底之前我们一直拿不到这些物理模块,导致我们这边一直没法推进,本想和他们讨论下物理模块和前台的接口问题,也好明确后两方都可同时推进,可讨论的结果是他们完全不懂得软件工程的开发流程,根本不明白什么是接口!况且,对方是出资方,我们这边在整个态势上都比较低,每次讨论的最后都是在没有讨论出多少有实质价值的东西后就上了饭桌。
你可以想象么?从10月中到12月底,这么长的时间内我们项目几乎停滞不前,而且最让我们恐惧的是没有确认的需求,对方随时都可能变更,随时都会提出他们新的想法。
快到11年的时候吧,4个物理模块过来了三个,经过一两天的调试,我们把它加到了系统中(可怕的是,这时的系统还是最初的那个原型Demo,代码杂乱无章,根本就是个肮脏的代码堆!但没办法,为了赶时间,只能这样,因为之前我们没有需求,没法做设计,拿到物理模块后对方又催的紧,来不及重构)。就这样,除了缺少中科大教授那个物理模块外,算是齐全了。然后就春节了。
到了2011年3月,开学后,对方突然变的紧张了,几乎一周跑过来3次,过来的是那位博士后(我们拿到的三个物理模块是他做的)。还是这么在没有需求的情况下,我们开始为系统添加功能了。基本上是,以物理模块为牵引,根据他自己的一些想法,让我们添加功能,而且每一轮迭代的时间少则3天多则一周,根本没时间做设计,完全就是堆代码实现功能,我相信除了我们三个人外没人能看懂。一个cpp文件3000多行….我的天。某个功能加上去了,就把对方在这个项目的总负责人喊过来看看,但是他只要一过来,我们必然有事干,因为之前的很多操作过程或者功能都是他不满意的,他有一套自己的想法,然后我们就又要改,就这样无休止的改,从三月一直改到4月28号。中间杨老师和对方貌似商量了,说想在五一前把第一阶段项目结了。然后不完善的地方第二阶段再做,因为又一个物理模块一直没做出来的嘛。就在4月28号那位总负责人过来看软件,我们都认为这是最后的交付时,他又提出了一些改进要求!不得不说的是,每次他提出的改进要求,有至少35%是推翻了上一次他提出的改进要求。
时间转眼到了5月中旬,终于,没啥要改的了,我们Release并测试了之后拿到他们那装系统配置环境,结果又出了一些很诡异的问题,因为是保密单位,我们不能带电脑进去,而且他们的电脑不能上网,导致解决问题很困难。更令我无法想象的是,这么一个国家军工研究所,用的电脑之破旧令你瞠目!
关于项目中间的纠结就先写到这吧,因为我现在又像4月那段时间天天无休止的改没有明确需求、杂乱无章、不断推翻不断推翻的代码的时候一样暴躁了。
这是我的第一个真正意义上的项目,一个商业项目,可以为学院赚钱的项目。但觉的很失败,我本想这种真正意义上的项目,会想软件功能那样一步步的推进,做好原型,做好需求,做好设计,再去编码,最终验收,虽然中间会有很多困难,但主线条会很清晰,可没想到就是这样一个几十万的项目,居然会这么杂乱无章。我没有在公司实习过的经验,不知道商业公司在软件开发的过程中是不是也是这样没有谨遵软件功能的开发思想。如果真的是只把它当做教学生的书而没有用于实际的话,那我真是太失望了。
其实我也不怪开发过程中的“对方”,作为激光领域的专家,他们不能理解我们的开发节奏也是可以理解的,隔行如隔山么,我们在昨晚了整个项目后不也是始终看不懂那些设计光学、物理界的Matlab代码。只能说,在做产品的时候,面对的“对方”会是形形色色的,他们可能是国企这些有财力但很刻板的,可能是个体,可能是学校这种可以很好沟通的,可以是政府部门的形式主义…..我只想说,不论怎么样,都要坚持自己的原则,不能因为对方强势别人是掏钱的,就感觉我们在低位上低他们一头,这样不敢于大声说出自己的想法,不予以他们正确的建议,到头来只能害了自己。
说实在的,虽然说这个项目挺失败的,但我还是学到了很多很多,技术上的非技术上的。
技术上,可以说,这一年中都是这个项目驱动着我去学习一些东西,这也是我希望并适合的学习方式,我喜欢这种有目的的学习,喜欢既得利益,希望我付出了时间和精力就会马上看到收益,所以我喜欢有目的的学习,不会什么需要什么就马上去学什么。所以说我不适合做研究,而适合做产品,呵呵。在这一年中,首先是MFC的理解和使用比之前提高了不止3个档次,可以说是精通了。此外,学习OpenCASCADE这个库,研究它的那段时间,首先是英语锻炼了,然后更重要的是那是一段时间的磨练,在几乎得不到帮助的情况下,凭自己一个人去学习一个较为崭新的知识领域,在探索的过程中,不仅获得了知识,而且明白了该怎样去寻找资源,怎样去学习这些较新的、资料较少的东西。为了理解OpenCASCADE的架构,在杨老师的见一下,学习了设计模式,虽然四人帮的那本经典还是不懂,但是在学习了《大话设计模式》《Head First》《设计模式精解》后,对于一些常用的设计模式基本掌握了,也直接在学习OpenCASCADE上帮了我。然后还学习了两三个界面库,虽然都是浅尝辄止,但很实用,在以后需要用的时候可以拿来就用。此外,在系统集成的过程中,耳濡目染的对Matlab、Ansys以及他们的混编有了一定的了解吧。此外还有XML、UML、SVN了这些就多了。最重要的当然就是上面说的最多的,真真正正的理解了软件工程思想的重要,真的。如果没有吃过这上面的亏,没有吃过这方面的苦,是不会了解的。更当然,小的程序也体会不到它的价值。
好了,就写到这吧,这个历时一年的项目对我来说算是了解了。纵然觉得很失败,但也是自己的第一个商业项目。结果不管了,过程的才是重要的。学到的东西才是重要的。
机器视觉团队张草
2011-6-2