2017 搬砖报告

一年很快就又要过去了,去年年底对 2016 做过一些小结,今年也稍微写点东西吧。这篇文章是自己的一些总结,写出来是自己对这一整年的梳理和记录,没有什么干货。

今年感觉对我而言意义蛮大的,从今年年初考完试之后,大学课程基本就完结了,也就是在今年年初开始去实习。先是在一家小有规模的创业公司实习,实习了半年,主要是 Node.JS 和 Vue 这两块。在 7 月底的时候过去另一家初创公司,主要负责 Node.js,也接触了一下 React Native 的开发,这份实习是比较轻松的,可以远程工作,工作时间也非常弹性。然后就是在最近的 10 月底,到阿里这边来实习。

这三份实习经历,对我而言其实都非常宝贵,而且给我的帮助都很多,而且还各不一样。这一年基本都是在实习中度过。我想着重说一说我的三分实习的经历。

在开始实习之前,我的技术主要还是在 AngularJS 上,Vue 刚开始学没多久,前端方面主要是在移动端开发上面,Node.JS 也是半吊子,对服务端开发接触也不多。对 Git 的掌握也只是寥寥常用的几条。

第一份实习

第一份实习持续了 7 个月,其实是我收益最大的一份实习,除了收获了很多东西,这份实习也是我干的最开心的一份。没有什么上下级关系,基本都是 90 后,上班时间早 10 晚 6,基本不加班,薪资还高,每天坐有轨电车上班现在想想还是挺幸福。

第一家实习的公司,主要是开发一些给微商用的系统,包括公司也自己在做微商这一块,用户数量也挺多的,好像是有几万十几万的样子,业务会涉及到一些交易和权限。我觉得该类型的系统开发对技术提高是非常有帮助的。

公司原先的技术选型也是比较时髦的,前端 Vue,后端 Express,数据库主要是 MySQL,部分商品存放的 MongooDB,Redis 也用的很多。项目都是部署在阿里云容器服务上面。团队的规范其实都挺不错的,无论是 Code Review 还是 Git 都有一套流程。

我觉得这份实习的项目,基本都被我当做个人项目来写了。有好几个项目的服务端都是我主导开发,而且这几个项目还各有特色,我主要参与的四个项目:(时间有些久了,有些可能记不太清楚了)

  • 仓库系统

    前端是一个面向用户的电商系统以及一个由客服管理的仓储管理系统。前端方面涉及到 SKU 处理,这一块也是我后来参照淘宝的算法改进的。服务端主要是处理 SKU 和商品。

  • 授权系统

    会有很多权限要判断,有授权操作和授权团队对 Git审核,更改权限也会涉及很多问题,一个用户更改权限是会受到很多条件限制,而且会产生不少消息通知。

  • 下单系统

    订单会分物流和快递两种,有拆单合单的需求,服务端要对接菜鸟网络,七牛,短信服务等多个服务,服务端很多地方也是花了很多功夫去处理。我在这个系统加入了 Joi 对路由参数做校验,减少了出错的可能性。

  • 任务调度系统

    用消息队列(用的 Redis)和 REST 接口来进行跨项目的一些处理如数据库表信息同步和一些延时定时操作,例如订单超时取消(延时任务),各系统用户信息和用户权限同步,用户生日祝福(定时任务)等。

  • 抽奖系统

    要尽可能的避免各种潜在的安全问题,所以在事务和锁以及代码上面要下不少脑筋。我之前是有写过一篇博客在介绍当时开发这个系统的一些经历。这个系统我也是第一次去使用 TypeScript 进行开发,也是我们团队第一个 TypeScript 项目。

更重要的是,上面 5 个系统其实都是有关联的,比如用户数据这一块是每个项目都要有的,而且用户数据的更改可能在多个系统完成。当初这一块也是想过措施优化,但没有比较好的解决方案,后面开发的任务调度系统对数据同步进行了简化。

这样一套下来,其实对我的技术成长帮助非常大,特别是服务端方面,上面五个系统的服务端开发,除了第一个和第二个是部分参与,其余三个都是我主要开发。

我印象比较深刻的是经常会有一些设计被我们 Leader 举例说出不安全的地方,例如多个请求同时进来,事务的隔离级别,Redis 服务器掉 Key。这导致我现在参与服务端开发都非常谨慎,包括不信任前端数据,不信任 Redis 数据(从不存放关键数据),不信任第三方框架和库(事实上,我遇到了很多问题是框架或者库本身的问题)。

简而言之,这份实习让我成为了一个 Node.JS 工程师。

第二份实习

第二份实习其实是第一份实习团队里面的一个技术挺厉害的同事出去创业,想让我过去帮手,我处理完了手头上的事情,8 月份就过去了。这份实习时间不长,8 月到 11 月,而且这份实习是可以远程的工作。我大部分时间都是在家里或者在学校里办公。薪资按时计,也没有要求一天要上多少个钟。

第一个收获可能就是让我体验了一把远程办公的好处和坏处。

在这份实习,我负责的也是服务端 Node.JS 这一块,上一份实习的抽奖系统是我最后一个项目开发,也是我第一个使用 TypeScript 的项目。尝了 TypeScript 的甜头我就回不去了,所以我这边也是用 TypeScript 去写。主要收获是熟悉了很多 TypeScript 的库例如 TypeORM 和 routing-controller 等的使用。使用 TypeORM 还遇到不少库本身的问题,我也给这个库分别提过两个 PR 修复问题。关于 TypeScript 项目开发,其实我前面博客不少写到了,还是跟传统的 JavaScript 开发可以有很大区别的。之所以说是可以有,是因为你完全也可以在 TypeScript 里面使用很多静态检查不完备或者甚至没有的用 JavaScript 写的库。如果你几乎都是使用静态检查完备或者 TypeScript 写的库(就像上面提到的 TypeORM 和 routing-controller),那么代码看起来就会很贴近 C# 或者 Java,静态类型检查完备,可靠性强。

期间也参与了一点点 React Native 的开发,目前来说只能算了解吧,还是挺有意思的,不过坑不少,后来那个项目内测,问题很多,而且这些问题都是这台机器有那台机器没有,受移动端机器系统,版本,浏览器影响很大。

临走前,还开发了一个后台管理系统,用的 React + Mobx 开发,也是用的 TypeScript 来写。

简而言之,这份实习让我开始使用 React,熟悉了 TypeScript。

第三份实习

第三份实习就是现在在阿里的实习了。其实也才刚不久,一个多月,计划实习到春节前。

可能是这边业务线比较忙的原因,我进来后发现前端工程化方面还是比较传统的,所以我做了很多改进。一开始的项目还是基于 AngularJS 框架去开发的,这个是历史遗留和基建的原因。

不过最近我正开始负责一个新项目开发,已经开始使用 React 来进行了,我是我们组第一个吃螃蟹的人,美滋滋。但是我们使用的是 dva,而我对 redux 的一些库如 redux-saga 和 reselect 并不熟悉。其实我是比较反感 Redux 的,太复杂了,开发得蛋疼,用 mobx 多清爽,而且还更高效,redux 总避免不了一些非必要的重新渲染计算(对此社区引入了很多库处理这个问题,更繁琐了)。但我并不拒绝,试试新东西也不错,我其实是比较原因去接触一些我没接触过的东西的,这样才能学习到东西。

目前接触的基本都是纯前端的东西,Node 主要是前端工程化的方面。除了业务还有基建这一块,对基建这一块我也非常有兴趣参与,阿里大大小小的前端团队基本都有自己的技术沉淀。另外按照主管和组内其他人的说法,后面我们还要使用 Node 来做中间层,这也是我被招进来的一个原因之一。我还是非常期待参与到这个过程来的。

最后

三份实习经历就这样,2017 也就是这样。等等,去年总结 2016 的时候说的要学习 Angular,要去旅游呢???惭愧,Angular 完整的看过两遍文档,写过一个 demo,但是就是提不起兴趣。旅游,哎,现在对旅游没什么兴趣呢。。。

最近在杭州实习,对杭州这个城市多多少少有了一些了解,不过因为我都是在余杭区这边,还是相对偏僻的,没有在城区待过一段时间,也没有到处逛杭州,所以估计还是没资格评价杭州的。但是对于我生活工作的这一块还是可以说说的。总的来说就是交通不方便,公交难等,没地铁,打的难,气温低,天气冷,东西难吃且贵。对没有一个好评。当然这是我拿来跟我在广州对比的结果,在广州特别是学校里面,实在不要太方便。

马上就要 2018 了。2018 上半年是在学校最后的时间,六月份就要毕业了;2018 下半年,回到阿里正式入职,到时应该是去云栖小镇了。2018 年,想想还是挺激动的。如果要说规划,去年对今年的规划一半都没有做到,所以我也不想做什么规划了。反正就是简简单单生活,对我来说,目前主要的时间还是应该放在学习上面(包括业余时间的技术学习和在工作中的学习)。

其实 2017 还做了很多有意思的事情,比如参加 Girls Coding Day 等活动,也逛了一些新地方,吃了不少新花样,学到了很多技术之外的东西,毕竟有了收入可以花时间去提高一些生活品质。但是这些东西我感觉,没什么好说的。行吧,总结就到这里。