从当初毕业离开学校,到如今辞职离开东软,又是一个两年过去了。
在学校的四年里,课堂上学到的知识不必多说,最起码一张毕业证就能让我明白,几年下来还是有些收获的。离开学校以后,没有考试,没人给我打分,没人给我发证书。这两年到底有什么收获,只能靠自己好好整理整理了。13年8月初到公司,没两天就把我从C#方向给调配到PHP方向了,自此就再也没在工作中码过C#。
作为一个非计算机专业的毕业生,领导自然会觉得我是啥都不会,只管做好一块砖,哪里需要往哪搬。在PHP之后又改变了几次技术方向,调换了好几个项目组,而且用的技术都没重样。当然,在这个过程中接触到的学习到的东西,对我来说都是新鲜的。如果从一开始就固守在C#这一点而不在意其他的技术,可能我现在也只是个在某一条道上爬得远那么一丁点的井底蛙。而我现在接触过的其他知识,都有助于我对C#更全面地理解。所以我觉得自己还是幸运的。PHP组
在公司写代码的第一天就出现了非常尴尬的情况,我是从那个时候开始才知道单行注释应该写在目标代码的上一行而不是下一行。。。囧
后来又逐渐的认识到了更多的代码规范问题,直到现在,即使是用记事本写一小段脚本也会强迫症般的把所有缩进调整齐,评审别人代码的时候如同人肉checkstyle。。。囧做PHP也是我第一次正式地接触Web开发,通过学习PHP,我终于明白了前端与后端是怎么回事,终于知道了前端HTML是如何动态生成的。
然后又知道了一个东西叫做前端控制器,在认识它之前我一直觉得URL路由都是通过404页面控制的。。。囧
JS组
学PHP大概一个多月后,我们整个组被并入了另一个项目。。。
这个项目里Web服务器是Apache+Resin,后台语言是JS。。。我才刚在PHP组认识了前台JS,结果是花了老久时间我才意识到JS原来还可以跑在服务器端。
也是在这个时候,我觉得Web前端开发也挺有意思的,而后来我才知道当时实在天真。。。
QA组
这是我参与的第一个商品开发项目,做的是QualityAssurance报表,后台Java前台Flex。
这也是我第一次接触到SVN,虽然刚开始用得不熟,干过强制提交把人上传内容给覆盖了的事。。。更重要的是,我开始知道了理解业务的重要性,业务理解上的偏差是不可能靠技术来弥补的。
要清楚地理解业务,有一点非常重要,就是得和客户积极交流。不过和客户交流有时候实在很难,和日本客户交流更难,和日本非技术客户交流更难。。。语言问题靠翻译都能解决,但是部分日本客户看中国人是带着有色眼镜的,这个问题我没有办法解决。这个项目组的规模虽然很小,我待的时间也不长,但是在这个项目组的经历让我初步了解了整个项目开发的流程。
MW组
在这个项目组里我又重新和JS打交道了,虽然后台Java也做了很多事情,但是后台完全不参与页面的事情,整个工程代码有多少JS就可想而知了。
不过我从这个项目收获的东西主要还不是对JS或Java有更多的了解,
而是说,不管设计阶段想得多么周全,还是有一些逻辑漏洞直到测试的时候才会被发现。所以测试是一件非常重要的事情,同时对于设计者而言,一直到测试结束都必须往死里想到底还有没有漏洞存在,因为即使测试者也不能保证覆盖到所有情况,有一些case是需要对整个代码有足够的了解才能想到的。PRM组
这是我待的时间最长的一个项目组,从去年年初到辞职,算起来也是一年多了。这个庞大的系统让我学到了很多技术,领导的信任也让我对自己的能力有了更多的信心。
初入项目组时,我真是被吓到了。。。光是服务端的Java工程就有五六十个,按顺序打个版都得让我脱层皮。。。
而当我要离开的时候,差不多闭着眼睛都能熟练地对这几十个工程指指点点了,然后用来吓唬新进组的同事:D组里的第一个活又让我认识了新东西,WebService这个玩意以前甚至没有听说过。。。为了发布新的接口,还得手写WSDL,这一件事应该是倒数第二的让我觉得恶心的了。
上千行的WSDL很容易就会写错或者写漏了东西,然而wsdl2java绝对不会告诉你有任何问题,并且这些Java代码也可以完美地通过编译,直到在服务器上部署完毕才会发现,有一个接口压根就没发布上。。。囧然而手写WSDL有一个好处,就是可以让我对WSDL的整体结构有更多的熟悉,如果说从一开始就让我用VS来发布一个WebService,可能我到现在还不清楚WSDL里头的Message和Operation是什么玩意。庞大的系统当然也少不了B/S模块了,一旦要应对这个模块,前后台的活就都逃不了了。
后台这一块用了Struts2框架,只有一个S,没有Hibernate和Spring,因为这个项目老早就自己构建了一套对付数据库、事务、工作流等等需求的复杂框架,应用在服务端绝大多数场景。虽然这个框架的业务针对性太强,但是整体结构确实是非常优美,可惜的是由于没有足够多的空闲时间,我一直都没能把这一块内容吃透。前台这块本来有一部分是Flex做的,为了顺应时代的潮流,客户一声令下,我们就得抛弃Flex,重写HTML5。
客户想得很美好,不就是原来写Flex的人照搬着写一遍HTML5嘛,两个月也就够了。然而现实是,当年写Flex的同事离职已多年,组里见过他的人都是一只手就能数过来。。。本来依葫芦画瓢的事,变成了照着瓢的样子种一只一样的葫芦出来。。。于是那两个月我就一边看设计书上的功能点,一边在浏览器里看这个功能的效果,一边对着FlashBuilder翻找功能实现的代码,一边在eclipse里用HTML+JS把功能重造一遍。那两个月里虽然几乎没有加班,但是只要坐在办公桌前,我的脑子就在超频运转,下班以后还在查技术难点,甚至有一天还梦见两个控件在吵架。。。总之实在累得够呛。不过那两个月也是非常开心的一段时间,不用写文档不用和客户沟通不用搭理烦人的维护任务,全身心投入到代码里面,酣畅淋漓地把键盘敲得哗啦响~可是话说回来,Web前台的页面布局绝对是最让我恶心的东西了,即使只是应付IE10和IE11两个浏览器。
一个在10里定位正常的元素,到了11里可能就飞上天了。。。一个在10里宽度正常的元素,到了11里可能就金三胖了。。。甚至在同一浏览器里的两个CSS完全相同的元素,可以有一两个像素的差别,而这些差别累积起来就非常显眼了。在解决了IE10和IE11的兼容问题后,好奇心作祟的我用火狐打开了这个页面,结果是完完全全的惨不忍睹。。。囧在这个组里,我在看代码上花的时间可能和写代码差不多,因为除开开发新的版本,还得同时维护好几个老的版本。
老版本中的代码,久远一点的在五年以上,不久的代码也大多在两年以上,反正就是想找着写了出问题的那段代码的人几乎是不可能的。所以每一次维护,几乎都得一字一句地读代码,有一些上古代码里头的代码规范如同参照了混淆器,每一个变量都得确认类型,因为有人会把File类型的变量叫做filename,而有人又会在get方法里面把这个filename给renameTo了。。。也正是有赖于这些奇葩的代码,我的代码阅读能力如同坐上了火箭,即使现在给我一段用外星文字命名变量和方法的代码我都敢看下去。这个庞大的系统同时也让我认识了分布式处理,封装的数据库服务,从属关系的Windows服务等系统架构模式。
整个系统的模块即使粗略划分,也得有十多个大块。每一个新进组的成员,最先要上的一堂课就是理解这个系统的模块间迁移图。这么多的模块,它们之间的工作该如何划分界线,如何保证顺序,如何传递数据,对于我来说都是收获,或多或少都理解和学习到了一些内容。除开技术上的长进,收获得最多的恐怕就是如何对付客户了:D
从一开始不懂得应该和客户沟通,到想沟通却经常产生误解,再到最后和大多数客户都能顺利沟通。从一开始无脑满足客户列出的所有需求,到对部分不合理的需求提出异议,再到最后学着引导客户改变需求。 写完这些,终于看到了自己在这两年有什么收获,可以安心地给自己发一张毕业证书了~