图形开发
我 是在虹软快速发展的阶段进入这家公司的,进入公司后被安排在公司的Photo studio产品开发组,这个产品一直以来是公司PC上的核心产品。接着公司进入战略重组阶段,开始渐渐从网络产品淡出,进军移动市场。一个星期后,我被 告知被调入新成立的移动部门,被安排在移动平台图形引擎开发小组。公司很重视该引擎的开发,小组成立之初有4个成员,两个博士,一个硕士,还有我,这是一 个充满挑战的工作,对于刚走走出校门我来说,也是一个非常不错的学习过程。我非常荣幸能进入这个充满热情的小组,每个人都积极分享自己的思想,每个人都希 望能尽早看到公司的第一个图形产品的问世。由于引擎是针对移动平台的,所以有三个问题我们不得不面对:内存、性能和渲染质量。经过一段时间的开发,我们陆 续推出了该引擎的1.0版本,然2.0版本和3.0版本,这也是公司第一个图形技术专利产品。由于该图形引擎需要大量的测试资源,当时流行的Flash便 成为了我们的矢量数据资源。所以在图形引擎推出的同时,我们也开发出了针对移动平台的Flash player。
开发出了图形引擎后,我们 进入了图形产品的开发:SVG(Scalable Vector Graphic) Player的开发,SVG这是一个开放标准的矢量文件格式,也是一种新兴的文件格式,标准由制作HTMIL标准的W3C组织制定,至今被认为将是3G手 机上一个很重要的应用。SVG是基于XML语法的的文本矢量格式文件,支持动画,动画是基于SMIL语法的,这意味着用户将很容易的在HTML中插入动 画,并可以通过DOM(Document Object Model)来实现与Web页面的交互。这是我负责的第一个比较大的项目,由于事先对SVG并不了解,所以这个项目的开发也是从学习开始,准确地说,整个 项目的开发都伴随着学习过程,所有开发成员都是边理解,边开发。最终我们完成了SVG1.1版本中针对移动平台的SVGT(Tiny)和SVGB (Basic)版本。(http://www.arcsoft.com/products/mobiledevicesolution/multimediaplayer.asp)
这 段时间是非常值得怀念的,这是一个非常不错的团队,工作上,小组成员间有着非常活跃的交流,不论是多年的程序前辈,还是新手,不论是博士,硕士,还是学 士,大家都在积极分享自己的思路,并努力来将我们的产品不断完善。生活上,大家也都是挚友。这是一段充满挑战而又充满快乐的日子。
图像开发
接 下来的日子,部门开始一些改革,取消了所有部门经理职务,只保留程序经理,并且希望所有程序员随时能在多个产品线间切换,而且能高效的工作,这意味着每个 人将不在是在一个稳定的开发团队中,随时都可能因为高优先级产品的需要而被调动。这种模式有点像车间生产线。但这种模式并没有像预计的那样达到明显提高工 作效率的效果,反而还失去了团队,并由于过多地调动,也失去了一些员工。在这个阶段,大家开玩笑时都称自己为游击队员和消防队员。
我也在这 个阶段被调往image小组,做的第一个image产品是FunnyFace I,该产品在Dr. Wang带领完成。利用这个产品,用户可以很容易的将人物相片中人物的表情进行变换,支持哭、笑等表情,通过调整强度,还能达到一定的搞笑效果,这个产品 后来也被申请了技术专利。在很长的一段日子,Dr. Wang经常跟我提起这个项目,他说这是一个很成功的项目,自从技术开到产品,代码基本上没有做修改。
这是Dr.Wang的第一个项目, Schedule定得比较紧,整个开发过程很紧张,大家都在努力去做完并做好这个项目。这个项目开发过程给我的印象也比较深,上班就开始写代码,到了吃饭 时间,最快速度吃晚饭,吃完饭后赶紧继续写。当时Wang还觉得进度慢,记得当时我情绪有些激动,说了句:“程序员是人,又不是牛”。我跟他提到,不讲究 代码质量,很快就能完成任务,但我个人不希望这样,后来也得到了他的理解,这个项目是我们第一次合作,从这以后,我们也成为了很要好的朋友。
随 后部门内部刚刚提出ADK(Application Development Kit)的概念,关于ADK,官方解释:An Application Development Kit (ADK) is a set of software components, application logic flow, reference UIs and development documents allowing handset makers and service providers to rapidly deploy compelling multimedia functionality on mobile devices. ArcSoft offers ADKs for Imaging, Video, Messaging and Media Player. Whichever solution you choose, you can quickly have powerful multimedia solutions tailored to your specific requirements and market positioning; all based on a proven and flexible platform.
(原文链接:http://www.arcsoft.com/products/mobiledevicesolution/adk.asp) 简单来说,这是一个包含了部分应用程序逻辑的SDK,目的是希望应用程序开发人员只需调用几个简单的接口便能完成一个多媒体应用程序,不再被卷入到繁琐的 内存和性能优化过程中。我也在这时被调往了公司第一个ADK产品的开发:Mobile image ADK。在这个项目中,我主要完成框架的设计,以及部分功能模块的开发。
在完成Image ADK的1.0版本后,被调往其他项目组,负责FunnyFace II ADK的开发。在FunnyFaceII中,在FunnyFace II中,我们添加了人脸识别技术,在FunnyFace I中可能需要进行简单的交互才能达到表情变换的目的。而在这个新版本中,无需任何交互,用户便可以轻松完成表情的变化。并且在这版本中添加了一个新的功 能,我们称之为Visual surgery,用户可以根据需要,更换自己的一些脸部器官,或是给自己戴上眼镜、添加胡须,而这些添加物会无缝的吻合到指定相片的脸部,有点像电影《变 脸》中那样。
在完成FunnyFace II开发后,继续被调回image ADK小组,这时ADK小组也遇到前所未有的困难,由于与客户同步开发,过于追求功能,因此内部缺少必需的模块设计,每一个改动都显得很棘手,而且不得不 面对改不完的bug,更令人痛苦的是每次bug的修复都可能导致更多地新bug,内部模块的设计已经势在必行。而我这时的使命便是完成内部模块的设计,经 过抽象、提炼,在image ADK内部逐渐形成了几个公用模块,来负责相关公用逻辑,由于这些公用模块已经覆盖了所有功能模块所需的关键逻辑,所以随着这些模块的完善,bug渐渐减 少,整个ADK也趋于稳定。
这时部门似乎已经意识到我们更需要稳定的团队来进行一些核心产品线的开发,部门内部也开始强调稳定团队的建设, 而image团队便是其中一个,作为这个团队的一员,我也正在憧憬着该团队能成为一个理想的团队:成员间积极协作与交流,所有人都在努力提升产品的竞争 力,并且大家都很快乐的工作着。即使这些目前跟现实还存在着一定的差距
回首这四年的软件开发过程,有经验,也有教训。整个软件开发的过程对于我来说,也是一个不断学习的过程。希望自己能够通过不断的总结,来积累经验和吸收教训。非常感谢在这四年里,曾一起奋战过的同事们,从他们每一个人身上,我都学到了很多。