转眼研究生学业过半,马上就要去找实习、找工作,回想两年前也是这个时候,觉得自己技术能力一片空白,只有一些玩具性质的学习项目,没有竞赛等亮眼的简历条目。
而今又过了两年,有成长也有思考,自身能力提升的速度跟技术发展速度相比还是小巫见大巫。负责开发的项目多了,框架使用多了,也做了一些技术之外的事情,总体还是对自己的改变感到欣慰。
项目
个人导师项目比较多,研一到研二的变化就是从做部分项目到负责自己的项目。年初的三车项目,年中的警务大数据重构及文档格式检查工具的收尾,年末的桥梁检测系统,每一次都在更进一步。
三车系统
三车项目在实验室已经做了超过 3 年,年初时已基本上线第二版,只包含后端部分。由于甲方前端调整,年初移交了前端网页及 SpringMVC 部分,需要快速上手修改及添加新功能。在这个项目中经验式地学到了 SpringMVC 风格的 JavaEE 写法,没有从书本或官网文档学习,直接从项目源码学习并修改。总体来说,接过来的前端代码比较粗放,亟需重构和简化,然而由于项目过于庞大、甲方需求过于急促,所以直到年底这一需求才被提上日程,重构方案应该会写在明年的年终总结里吧。
警务大数据
已经做了一年的项目,类似三车,我在其中主要做了前端部分的重构,从 Servelet + JSP 技术栈转为 SpringBoot + React。重构过程中学习了 React 技术栈。我的前端学习路线是 jQuery -> Angular1 -> React -> Vue,初次接触 React 着实花了很长时间理解和适应。组件生命周期,Redux 单向数据流,跟 Angular1 相比没有了双向绑定和自由使用第三方库,初期还是很痛苦的。但随着整体技术栈的其他优点,渐渐地也喜欢上了这样的方式。热替换、ES6 语法糖、以及 Webpack 的按需打包等等,要比 Angular1 混合 jQuery,再加 gulp、grunt 打包便利得多。
文档格式检查工具
研一开始中途接的项目,已经进行了一大半,是一个用 C# 程序自动检测并报告 Word 文档中的错误及自动修复错误的工具,我在其中帮助修改其 Web 端服务,主要面向 C# 端做用户交互接口和 Oracle 存储、统计。使用了 JavaEE + Angular1 技术栈,JavaEE 部分纯用 Servlet + MVC 模式,没有使用其他框架,这让我的开发繁琐之余也学到了一些代码重构的思路,基于 DRY 原则,在项目中几乎每次重新开始都需要重构一次。这个项目终于在 17 年验收成功结束了。
桥梁检测系统
年底实验室接的一个新项目,我在其中做 Team Leader。老实说,这是个很难的工作,需要设计整体架构,做技术攻关,协调沟通等等,对我来说是个挑战。这个项目涉及很多桥梁领域知识,难度不大,但工作繁重,有很大的专业知识壁垒,涉及大量不同桥型、构件及评估统计信息。
有了以前的项目经验积累,直接使用了 SpringBoot + Jpa + Vue + Element-UI 的技术栈,前后端分离开发,后端工作量骤减,前端得益于于 Vue 及 Vuex 的便利,在实现上没有遇到什么大难题。这个项目还包含一个运行在平板上的安卓端 app,有两个同学开发安卓,由于一开始没有使用 MVVM 模式的框架,虽然界面开发速度很快,但在需要集成时就变得捉襟见肘。
为了跟进安卓端进度,我简单学习了一周的安卓开发,跟大家商定选择了一个相对容易上手的开发脚手架,MVVMHabit,主要集成了网络请求和 Data Binding,联调和集成比较方便。在 app 端遇到一个技术难题,是关于甲方提出的一个绘制病害示意图(矢量图)的需求。为了实现坐标轴的缩放和按比例绘制图形的两方面需求,我找了一个基于安卓端的可视化库,MPAndroidChart。使用中还遇到很多问题,按下不表。目前这个项目仍处于开发阶段。
其他
参与上述项目之余,我还大大小小参与了一些其他项目,属于中途做技术实现工作,仅负责其中一小部分,有些也学到不少东西。
其中之一就是百度地图 Web 端的离线化,实现普通地图和卫星地图 + 路网的瓦片图离线化及相关功能(信息窗口,绘图等)。关于实现还新开了一个 repo 记录这项工作,以及用爬虫 快速下载百度瓦片图。
在微信小程序刚发布的时候,也趁热学习了一下小程序开发。当时小程序尚不允许个人开发者,所以仅在本地调试预览过效果。小程序刚出来时争论很大,但是开放十分缓慢,一开始几乎什么都不支持,入口很谨慎,生态非常封闭,这也是导致小程序开始备受争议的原因之一。现在小程序经过一年多时间的发展,感觉成熟和开放得多了,也在游戏、工具等方面获得了真正的便利。甚至支付宝跟风,还出现了一个“抄袭”事件。最近在做一个小程序的个人项目,类似 Readhub,主要阅读关注的技术博客。
参与比赛
本科的学业经历让我学到了竞赛的重要性,研究生便了解并参加了一些或大或小的比赛。
华为算法大赛
第一个就是 5 月份华为举办的算法大赛,题目是一道综合性最优化问题,大视频时代·布局,关于服务器配置及满足低成本且满足所有终端用户的需求。由于实验室项目和其他个人原因,一个月的比赛时间一直拖到月底才开始查资料和写代码,用了遗传算法、蚁群、粒子群等等一言以蔽之的算法:瞎 JB 搜算法。主要分两步:第一步选择服务器个数;第二步:用最小费用最大流找出最优的服务器放置位置;第三步:不断重复前两步。结果当然是 GG。
ThoughtWorks 结对编程
第二次是西安 ThoughtWorks 为了校招宣传而举办的一次小型结对编程比赛。大约 40 人随机组队,要求限时完成一个生命游戏的实现。由于刚学习了 React,就用了 Dva + React + Antd 的实现方案,实现过程中遇到了一个组件状态更新问题,向 ThoughtWorks 的工程师求助未果,最后勉强完成了。结果是一个纪念奖,因为使用了一套前端工程化的东西。最后反思一下,这个游戏没有交互,核心是生命演化的规则和逻辑,应该用简单的 React 状态组件就可以了,完全用不上 Redux 和 Stateless 组件。
百度之星 · AI
第三次是百度举办的百度之星开发者大赛,用百度的交互理解平台实现一个特定应用场景的对话机器人,做出产品成果。一开始花了比较长的时间理解百度出的这个产品的使用方法和设计思路,根据示例构建对话样本,训练和验证样本。终于得到一个和官方给的差不多的结果,过了预选赛。决赛需要做出产品,让我们非常纠结,处于 idea 枯竭状态,最后决定就用预选赛训练的电影场景示例做产品,产品形式用了相对 app 更简单的微信公众号,在公众号的对话框里进行交互,结果虽然成功了,但是这个产品实在是太草率了,毫无疑问地 GG。
技术之外
回顾 2017 年,写下上面那些文字,乍看之下,我觉得做得事情还蛮多的,但是还有很多其他时间被我用在编程之外,让我觉得我自己还有“压榨”空间。首先就是健身,年初换了居住环境后,从 Keep 到健身房,花的时间变少了,不过健身效率更高,还能解决洗澡问题。健身的目的之一就是希望自己以后不需要买《程序员颈椎康复指南》之类的书。下半年跟实验室的同学开始热衷于报团登山,登山的过程非常有意思,累并快乐着,尤其是登顶之后的感觉,非常开心。
读书明显减少,感觉自己读书太较真,不会速读。但是也读了几本觉得可以推荐的好书,如吴晓波老师的《跌荡一百年》系列,之前就看过他的《激荡三十年》系列,作为经济企业史通俗读物来看,是十分不错的。技术书籍读了《代码整洁之道》觉得不错,内容虽然是基于 Java 的,但是思想可以推及其他编程语言。终于在 Kindle 上读完了 《1984》,乌托邦三部曲第二部,令人细思极恐,不寒而栗的一本小说。
编程之余总是喜欢用第三个屏刷剧,很少看国产剧的我在 2017 看了不少优秀的国产剧,网剧如《毛骗》、《白夜追凶》,影视剧如《大明王朝 1566》,《人民的名义》。电影也是如此,《羞羞的铁拳》、《战狼 2》都是口碑票房双赢之作。
旅行去了贵州和重庆,出差去了南京,对这些城市感受都很不错。“山水公园省,多彩贵州风。” 黄果树瀑布,西江苗寨,镇远古镇,少数民族风很浓厚,商业化相比其他古镇还可以接受。重庆是一座有味道的城市,不管是从影视剧里,还是舌尖上的中国,都有股麻辣火锅味,真正吃过之后让人难以忘怀。南京的鸭肠、粉丝汤也都很不错。南方城市空气质量相对较高,蓝天白云,青山绿水,令人心驰神往。
2017 小计
- 读书:7 本
- 刷剧:79 部
- GitHub:9 个新 repo
- Keep:4300 分钟
- 扇贝单词:358 天
- 健身:105 次
总结
2017 感觉还是比较充实的,马上就要实习、找工作了,预感 2018 会更加忙碌和充实。希望找到不错的实习和工作。
以上。