要说我在软件开发中学到了什么,我的答案是抉择与取舍。抉择与取舍,这就是我的实训心得。感觉这和我二十岁时,得到的我活了这二十年的心得一样——我们不能总是随心所欲。

我的实训道路是有点艰辛的。要说我喜欢我现在所做的项目吗?我要说,我喜欢。但是是我最喜欢的吗?不是。这学期开学的时候,我最愁的事情就是实训。我的绩点不够,好在有刘院长原来承诺我在柳州创客实训,我也一直保持和创客空间的接触。创客空间刘老师主要想做3D打印机,希望我和他们合作“远程3D打印”,这个项目从上学期就开始了,我写了一个Demo。但是,直到现在我也没有得到一台供我测试使用的3D打印机。我对创客空间的印象就是,说得多,做得少。

后来我也尝试和创客的林老师合作,他主要想做一个ERP的改进版。可是我觉得也没有什么新意。他比较守旧,坚持使用昂贵的德国进口传感器而忽略物美价廉的国货,坚持使用Windows系统而忽略Linux的巨大优势,也坚持使用老的技术拒绝创新。总之,他的产品成本非常高,我可以说我可以用他1/3价格的设备做出来。他还在ThinkServer上面装Windows7 ,其他我就不说了。

还好我比较幸运的来到润城科技完成我的实训,刘院长将我推到这里的。这是一家校企合作的企业,老板有点愤青,但是属于做事效率很高的那种。我们大概只用了一天就敲定了实训的方向——企业文件管理。 我觉得这个方向不错,尽管不是我最喜欢的,但是却是我能做的。我又花了一个星期的时间进行技术选择。我希望按照Web APP的方式来开发,使用Python作为主要的开发语言。而黄老师希望我使用Java Swing+J2EE进行开发。我知道润澄的主要开发平台是Java,可我不喜欢Java,甚至我的博客里还有一篇攻击Java的文章。我是很想把Java拉下神坛的。

我一开始使用传统的MVC开发模式,Flask+Jinja2+PyMongo开发。我大约用了一周的时间写了一个Demo,实现了基于B/S架构的超大文件上传。使用了HTML5的新技术,包括Blob API和WebSocket。Blob API的使用是为了进行文件分片,WebSocket的使用其实还是想模仿传统C/S架构下的传输,实际上,最后我发现用XMLHttpRequest+JSON解决更方便,我最后放弃使用WebSocket的时候十分的不舍,因为我在学习WebSocket的时候,深入了解了HTML5的新特性,耗费了我很多精力,当然这是后话。 实现了Demo之后,我就在Demo的基础上开始正式版的开发,这是我迄今为止面对的最复杂的项目。我还在用使用ThinkPHP开发网站的思路开发,很快前端代失控了。有js文件超过了1000行,负责分片传输的一个函数就有几百行。每做一次修改都伴随着大量的调试工作。我开始上网找前端代码的组织方案,我对比几个前端框架的网上评价,决定使用AngularJS。

学习使用AngularJS花了我一个星期的时间,非常痛苦的学习。不过期间我的收获也非常大。AngularJS的中文文档停留在1.2版本,而我不想使用旧版(对,我有新版强迫症),我是看着英文文档学习的。而且AngularJS的网站居然还被墙了,简直是讽刺。在前端路由方面,自带的路由功能太弱,而我在使用ui-router遇到了巨大的麻烦,最后我选择使用了New Router of Angular。这是一个准备在AngularJS 2.0发布的组件,我踉踉跄跄的用起来了。

不管怎样,年轻还可以钻研很多东西。而我开发的第一个可运行版本也终于发布了。下面是心得:

我们不可能总是随心所欲。