2018,逆流而上

终于进入2018年的尾声了。也许是本命年的缘故,这一年里不论是学业还是事业都充满了挑战。在新年的钟声响起之前,我希望在这里回顾过去一年的点点滴滴,分享给大家我的心路历程吧。

学业成绩——走在钢丝上

似乎我和4.50的GPA就这样杠上了。自从第一年终于从4.00爬上4.50之后就寸步难行了。不论是擅长的Human Computer Interaction还是Data Structure都像是商量好似的发挥失常,而不中用的水课Engineer & Society却能拿到A。这些科目像是在和我开玩笑,每当我信心满满地想要冲上4.50之上时,最后的成绩总是要一巴掌把我扇醒:你就好好地待在4.50这条钢丝上吧!

其实也没有什么不好,4.50毕竟是最高等级,Highest Distinction的门槛。但前一步保平安,后一步泯然众人矣。每个学期吊着这块心头大石,着实难受啊。不论如何,2019年还需继续努力,争取上岸,换取心安吧。

投诉讲师——搞个大新闻

今年上半年发生了一件事,着实考验了一把我的抗压能力——我把讲师投诉了。

这位讲师是加拿大人。也许是因为他来自西方,所以有一些另类的教学方法吧。他把所有的教学内容全部写在了PPT上,要求我们阅读,而不像是别的教授会提炼出要点,省去细节,只有在需要时,自行查阅详细知识要点。除此之外,他声称这一门课已经被转成TEL(Technology Enhanced Lectures)了并且不再有Lectures,但他所提供的教学材料竟只有上千页写满密密麻麻理论的PPT而已。相比之下,另一门课CZ2003 Computer Graphics & Visualizations也是TEL的课,但后者除了提炼出要点的PPT之外,还有丰富的视频交互课,可以让我们在线上看教学视频和演示动画。

这些教学质量上的问题着实让我们摸不着头脑。但这毕竟没什么可抱怨的,毕竟除了我们兼读生以外,全读生也是如此。直到在机缘巧合之下,我们发现他教给全读生更多的知识和相关的考试技巧而未教授给我们,并且在课业成绩上对我们极尽打压,给了兼读生全级最差的成绩时,我们想到了他对我们敷衍的教学态度,总是迟到早退不耐烦时,愤怒骤然爆发。

考试之前,我撰写了一封邮件直接发给计算机学院院长、教学主任及兼读生主任并且抄送全体兼读生,投诉该讲师并详情陈述其过失,有理有据。

教学质量差,我们可以接受,毕竟我们自己还可以自学,该学会的知识一样都不会少。但区别对待,坚决不可接受。于是,我放下对搞事情的担忧,不管要掀起多大的波澜,也一定要告他一状,还我们兼读生一个公平。

经过长达两个月的拉锯战,和二十多封跟校方交涉的往来邮件,最终在6月7日的三方调解会上,兼读生主任见证,讲师承认了自己的行为是区别对待。

我也曾想过就这么忍了吧,因为我也是一个不喜欢搞事情,怕麻烦的人。但遇到事情就一定要退缩吗?如果我们有道理,并且人数不少,为何不通过正当渠道反馈并解决问题呢?虽然那五十多个日日夜夜,我每天处于焦虑中——要准备期末考试和应对每日工作中繁重的开发任务时,还要搜集证据,与校方斗智斗勇,但最终一切也都值得,不是吗?

毕业设计——在人工智能的道路上作死

年中的时候我就决定要提前开始计划我的毕业设计了。虽然可以等到年底才选,不过急性子的我倒是想要早点开始早点结束。

对于选题,我其实是很想尝试机器学习的方向。虽然我的工作并不是做AI或者数据科学的,但我其实一直对这个方向都抱有一定的兴趣,将来说不定也会是我职业的发展方向。不过我也不想以后一拍脑袋就换技术栈,风险太大。但如果能再学校里就做一些有关的项目,体验一下这种感觉也不错,于是我便作死地选择了“利用深度学习模型实现中文餐厅评论情感分析”的课题。

嗯,真的很作死。在选这个课题之前,我对AI方面的了解少之又少,更别提如何实现模型、分析数据之类的。但既然这个决定已经做下,那就去做吧。

首先得获取一定量的数据用来计算模型,于是我使用了BeautifulSoup从大众点评新加坡站上爬了5000多条评论下来。大众点评也算是很成熟的网站了,它确实有很多反爬虫机制,比如cookie验证、IP限制等。为了搞定这些问题,我也着实下了一番功夫,这才了解到利用代理、模拟cookie之类的方法。

然后就是要写模型训练数据了。虽说网上的教程一大把,照着做也能做出结果,但真得一行行代码拿出来解释,我可能就只得当场卡壳了。这事也不能急,于是我在Coursera上找了AI大神Prof. Ng的Deeplearning.ai网课,好好研究了一番Tensorflow,终于当上了一名tfboy(笑)。

之后照着教程撸出了模型,也弄明白了每段代码背后的含义。一通数据训练3小时,终于得出一个预测模型了,满怀激动地测试一番,准确度竟然奇差无比!原来是我的数据量实在是太小了,5000条数据远远不够。为了验证我这一想法,我从Kaggle上下载了已经整理好的英文食品评论数据,整整几百万条评论啊!要是有中文的评论数据集就多好……

选取了正面评论和负面评论各自10000条,一通操作之后,得到的预测模型准确度高达86%。嗯,果然应该就是数据量的问题了。做到这里,都已经快2019年了,来年还得继续加把劲啊!

升职加薪——新的舞台大展拳脚

在职场上,2018年最大的成就莫过于7月的升职加薪了吧。

我加入现在这家公司已经快两年了,在一年半的时候升职为高级软件工程师。这对于我来说,还是挺玄幻的。虽然我得到了这个头衔,但我自认为我还并没有达到业界里高级软件工程师的水平。

为什么能升职,我认为两个因素必不可少。其一,是我确实兢兢业业,2017年和2018上半年为公司做了不少项目,也深得管理层的赞赏。其二,是我在前端上的水平,的确已经成长为团队里最好的。但从技术水平上来说,我自认为还没有达到高级软件工程师的标准。于是在升职之后便更加严格地要求自己,让自己去接触更多的技术,并且勤于思考如何用学到的东西帮助公司的项目。

在这段时间里,我先后接触了前端三大框架,Vue,React和Angular。一开始我是很青睐Vue的,因为它轻,好用,也很好学。并且我用Vue也完成了好些小型项目,比如给公司顾问向顾客展示自己工作成果的web app和对外的工作申请App等。

后来,新任CIO加入团队,希望能够构造一个新的企业资源管理平台。思考了很久的技术选型,我最终还是决定使用Angular,它更适合我们的团队。为什么?React首先被排除在外。虽然React很强大,生态也很优秀,但在我看来,它并不适合初级团队。上手门槛太高,新手上React太容易踩坑,更何况是企业资源管理平台这样的大项目。而Vue虽然简单好学,但平台系统是一个很大系统,内部也许会有许多状态管理,模块依赖等。这样一来,在Vue里添加各种各样的插件必不可少。假以时日,项目变得臃肿不堪就惨了。最终,我的目光还是落在了Angular身上。因为它全面,该有的东西它都有,大多数大项目需要的功能它都已经帮你配置好了。虽然它总是被人诟病太重,太全面,太臃肿,但对初级团队做大型应用来说,这根本就是大优势。上了TypeScript之后,只要做好App架构,想把代码写差都很难。

下半年的时间里,我也慢慢地改变了自己,从一个只能按部就班完成需求的初级软件工程师,成长为了一个需要做技术选型、考虑团队、设计架构的高级软件工程师了。但即使是这样,我也时常告诉自己将目光放得更远。因为这个世界上,还有无数比自己优秀的人,当真不能为眼前的一点小成就而沾沾自喜。2019年,希望我能成为一个当之无愧的技术leader。

告别房东——自由的生活和繁杂的琐事

除开工作和学习,生活也非常重要,需要劳神劳力。而今年,最大的一个变化就是——我不再跟房东住在一起了。

7月的时候,前房东卖房,虽然我与他们相处愉快,但也不得不说再见。于是搬去新的一户人家,也是和房东一起住。房东是新加坡人,但常年在缅甸做生意,不常在家。而在我们入住不久之后,一个来自马来西亚的陪读妈妈带着两个小孩就搬了进来。生活的冲突促然爆发——霸占厨房和厕所、讲话阴阳怪气、充满恶意的小心眼让平时本就忙碌生活和工作的我们无比煎熬。

痛定思痛,我问自己:都24岁了,也能挣些钱了,为什么还要受这等闲人气?做人为什么要吃这么多苦,不就是为了让自己生活得好一点吗?

于是,与房东协商,搬出去,我们再重新找房。房东自然是不高兴的,房间现在空住了,又损失了中介费,其中曲折按下不表,将来有机会我再细细道来。

我终于还是下定了决心,不再想过寄人篱下的生活了。咬咬牙,租个整套吧!一个月贵了三百新币,换得生活舒适安宁,未尝不好。接着,经过中介朋友介绍,住进了现在的地方。

在新家里,果然自由。无拘无束,再也不用提心吊胆担心房东敲门,嫌东嫌西有意见。想在房间就在房间,想躺沙发躺沙发,爽哉妙哉。不过,生活的压力扑面而来。首先是更高的房租,其次则是水电网费都得自己承担,还得每个季度请人为空调做维护。这就算了,最痛苦的莫过于自己得做清洁。平日里工作读书都那么忙了,放假休息的时候哪里还会想着做家务?虽然平时都已经很爱卫生了,但不知怎的,蚂蚁们成群结队地也搬进我家住。先是厕所,再是厨房,就连客厅现在也快被占领了。

不过,尽管生活压力更大,我还是更喜欢现在的生活状态。这让我感觉自己是一个独立的个体,不依附于别人。如果生活紧张,那就多赚点钱吧。2019,我希望生活顺心。

零点钟声响起之前……

最后,马上就是2019年了。2018年尽管有很多不愉快,也有许多是非曲折,但我知道,我学到了更多的东西,也慢慢走向成熟。2017年底,我也是写了一篇总结,现在回过头去看,果然我也没有辜负自己对自己的期望。2019年,希望我的朋友们都要过得比2018年更好!