来公司将近两年,从一开始的前端开发,到现在的ASP.NET Web开发、.NET客户端工具开发,跨度比较大。目前的状态是技术研究不够深,多数停留在表层,没能强制自己做好学习总结工作。项目工作内容也没用一个传承接代的过程,项目中需要你做什么,那你就得去干,下面主要梳理下这两年的工作内容和技术成长过程。


一、智能电子书项目

刚来公司接触的第一个项目就是教学软件的html5化,一开始面对HTML5/CSS3/JS,这些当时以为比较low的技术,难免有些心浮气躁,但是接触到前端模块化开发后,我的观念马上就转变了,不管哪门技术,都有它的适用场景和优点,不能一棒子打死。前端模块化(SeaJS)让JavaScript变得跟C++等其他高级语言一样可以方便的进行团队协同开发,一下子提高了生产力,纠正了我以前认为的JavaScript仅能实现某些特效的错误思想。还有jQuery的出现,帮助前端开发人员解决了浏览器兼容性的头疼问题。

这个时候我恶补JavaScript、jQuery的知识,网络收集jQuery的各种教程,其中从零开始学习jQuery系列让我快速上手jQuery开发,同时也学习Google JavaScript 编码规范指南

同时阅读相关的经典书籍也不能落下,在图书馆借来的书单如下:
1. JavaScript DOM编程艺术
2. 编写可维护的JavaScript
3. 精彩绝伦的CSS
4. 编写高质量代码--Web前端开发修炼之道
5. 响应式Web设计实践

这一阶段算是比较轻松的经过了3个月的试用期,在转正答辩会上,我也提出希望能有更多挑战的工作机会。结果研发经理就安排我去了现在的考试产品研发线,开始了苦逼的模考之旅。


二、模考数据可视化软件开发

调入新的考试业务线做研发后,感觉项目的紧张程度比以前更高了,先了解了模考数据可视化软件的功能后,我发现该项目算是大系统中的一个子项目,可能就你一人负责,相比之前多人同时开发一个项目,任务更重了。该项目基于Chromium 嵌入式框架(CEF)内置网页的HybridApp,需要对考试任务数据进行分析和读取,然后根据可视化要求及计算公式,得到最终的数据,最后利用可视化图表库Highcharts进行展现。

该项目有多个奇葩的地方:

  1. 前端代码表现、行为、内容没有做到完全分离
  2. 前端JS代码没有进行模块化组织
  3. 前端JS代码无法调试(CEF控件集成有误,不支持JS调试)

我的做法:

  1. 针对目前已有的代码不进行重构工作,但是在增加的代码中尽量做到前端代码的HTML/CSS/JS分离
  2. 不进行SeaJS前端代码改造,改用闭包的形式分离代码模块
  3. 通过打印关键对象值的调试信息进行调试

做完这个项目后,发现已有的业务逻辑代码较多,自己也无更大的精力去改造。有空要研究下JavaScript的数据处理功能,包括性能以及实现方式。目前知道的方式有:

  1. 将数据处理放在后端,并结合HTML5中的WebWorker,防止UI卡死。
  2. 对于不支持HTML5的浏览器,则将需要大量处理数据的过程分割成很多小段,然后通过JavaScript的计时器来分别执行,就可以防止浏览器假死,详情见该链接内容

三、基于互联网的自动化评分系统

这个项目是考试业务线的大项目,主要分两阶段:
1. 考试数据收集,上传至公司服务器
2. 对当前的两个评分系统(人工评分和机器评分系统)进行自动化调度,根据考生音频评测情况自动分发打分任务,提高考试成绩发布速度

我在第一阶段的任务是:

  1. 开发数据收集Restful接口,提供给考试客户端调用,利用ASP.NET WebAPI、对象关系模型(ORM)框架Entity Framework,这一阶段已经逐渐转向后台开发了,重温了SQL以及C#。
  2. 同时开发后台监管系统,也是基于ASP.NET MVC框架搭建。
  3. 为了适应开发的需要,我买了一本《ASP.NET MVC4 Web编程》,断断续续读完了,该书较完整的介绍了利用ASP.NET MVC开发网站的技术,涉及前后台的设计与开发,还包括性能优化、web安全等方面的知识。

第二阶段的主要任务是:
1. 开发评分系统调用服务,利用Redis通信来调度人工评分系统和机器评分系统,我们将评分流程分为基础数据准备阶段、机器评分阶段、人工评分阶段、成绩汇总阶段,每个阶段对应一个服务,同时还有一个流程监控调度服务,负责消息的转发和控制。涉及到的知识点有:.NET多线程、sqlite数据库操作、报表操作等。
2. 改进后台监管系统,增加试卷资源的管理,并基于Bootstrap和SeaJS改造系统界面,特别针对大量列表格数据的呈现进行可视化优化和用户体验,即合并列数据、数据分层分级、显示最重要的数据、隐藏不太重要的数据。
3. 这段时间重点看的书是介绍前端MVC的书《基于MVC的JavaScript Web富应用开发》,不过有些概念理解的不是很深刻,该书较全面的介绍了MVC在前端开发中的应用。


四、统一模考平台

进入2014年11月,新的项目又开始了,主要是对口考网进行改版,并且将考试操作搬到Web上,方便教师进行考试,且可以查看成绩报告等;在这个项目中我的主要工作是负责前端框架的搭建和设计,协调其他两名前端开发人员进行网站的前端开发,另外还涉及到后台接口的设计与需求讨论。

在实际开发过程中,也出现了许多问题:
1. 需求不具体,花费太多时间讨论需求,导致开发进度一度落后延迟
2. 代码质量没有得到很好的保证,单元测试没有做好,后来尝试使用前端测试框架QUnit
3. 与UI的配合不够默契,界面优化工作耗时费力

主要使用到的技术有:
1. ASP.NET MVC框架,前端还是使用seajs、jQuery模块化开发,同时利用模板引擎artTemplate生成表格数据 2. 后台使用 Redis缓存,数据库索引技术
3. 后期尝试使用Grunt打包上线网站,不过还没有全部完成


五、模考试卷制作工具

加入考试业务线之后,就一直跟试卷制作打交道,发现里面坑很深,牵涉到语音资源部和其他开发小组同事,一开始制作试卷均是手动操作,后来我开发工具进行快速转换,主要是文本资源内容的拷贝、替换,音频的转换,图片和ppr文件的拷贝,甚至还有sqlite数据库的读写。

目前已经支持全国各地几十种试卷资源的转换,代码急需重构,重构方向有如下:
1. 将对试卷模板xml的解析按照模块划分,下次制作资源时直接根据模板来组装
2. 利用策略者模式或者是单例模式来改造代码,梳理出试卷转换操作的主要流程,并做到自动化。
3. 另外试卷原始资源制作及验证过程主要交由语言资源部同事来进行,容易出现一些细节错误,这时就得我这边来寻找问题,经常会占用许多工作时间


六、总结

从以上项目及技术实践看来,前后端技术都接触到了,不过主要的精力都投入到业务开发中,需及时总结遇到的技术难点和解决方案,后续我会逐步梳理出可以总结的部分,以博文的形式发布出来,方便记忆。


七、广告时间

当然这两年最重要的感悟就是,不管工作怎样,都要好好对自己,特别是自己的身体;女友很体谅我整天对着电脑工作,让我能每天坚持吃一个苹果;最近还开了一家网店,淘宝店铺名称叫“爱吃苹果的姑凉”,她家有个苹果园,每年10月份是苹果的收获季节,刚摘下的苹果新鲜可口,又甜又脆;如果大家读到这里,希望大家前往淘宝店铺看看,同时也希望大家能捧场^-^,在此先谢谢各位童鞋啦.

淘宝店铺二维码 enter image description here