2017年度总结与2018年度计划
今年事情比较多,重要的事情有两件,一是还有 6 个月就要毕业,这意味着留给我在学校里纯粹打磨技术的时间已经不多了;二是确定了自己的职业生涯将会从阿里开始,这意味着什么我暂时还不确定。去年此时,我认为自己一定会去试水一大堆公司,但是实际上我只投了寥寥几个,整个过程比我预想的要顺利,我想究其原因自然离不开这几年几乎不间断的积累,但是也有运气的成分在。
上半年读了不少 paper 和技术书籍。在阅读的过程中,我喜欢在学习到一个新的知识点后,尽可能的通过一段程序去验证,那么理解的程度很可能会从「 意会」变成「 感同身受」。因此,当我在若干次阅读 JVM 虚拟机规范时都被冗长的 Class 文件格式搞得想困觉时,我做出了一个决定:自己编程实现 Class 文件的解析,这也是 ClassAnalyzer 诞生的原因。写完 ClassAnalyzer 后,春节结束,我便动身回到了学校。
回学校不久,一位我曾经联系过的淘宝工程师(其实是技术专家)给我打了电话,不过当时时间尚早,阿里的实习生招聘工作并未开始,我们聊了一会儿并互加了微信。其实,当时和我期望最匹配的是阿里中间件、阿里云或者腾讯 TEG,对别的公司或团队我并不感冒。我咨询了曾在阿里实习的师姐,她很强烈的向我推荐了菜鸟网络,「 做网络也 OK,我对计算机网络也挺感兴趣的」,我当时想。于是我便内推了菜鸟网络,几天后,我得知菜鸟网络做的原来是「物流网络」,而不是「计算机网络」……当然这是后话了。另外,我还内推了腾讯 TEG、美团基础架构部、网易游戏、华为和今日头条。
二月底,我收到了网易游戏的电话面试邀请,一面面试官和我聊得非常投机,我们交流了许多并发和 JVM 相关的内容,最后意犹未尽的挂了电话。晚上我收到了杭州现场面试的邀请,但是时间极其仓促,我人在广州,极有可能无法准时参加面试,我询问 HR 能否把我安排在下一轮面试,HR 遂给我安排了两轮电话面试,我也欣然接受。于是现场面试当天,我在宿舍面了两轮电话面试,聊了一些项目,但是面试官并没有问到点上,两轮面试体验总体感觉一般。那天是周五,周末估计员工不加班,周末过后,第四轮面试如约而至,面试官和我聊了一些基础且常规的话题,这些话题其实任何面试者都能说上几句,但是如果要回答的让面试官和我自己满意,我认为需要有感同身受的理解,这正是我擅长的。又过了一天,我便收到了第一个实习 offer。
腾讯 TEG 的现场面试效率颇高,一天就可以完成所有的技术面试。相比于其他公司,腾讯给我的感觉是面试官更加关注面试者对底层知识的理解。我的第一轮面试持续了近 80 分钟,其中前 10 分钟做了一道算法题,我写了一些伪代码,后 70 分钟重点针对虚拟内存(尤其是 mmap 系统调用)进行了较为深入的探讨。我认为这一轮面试是我生涯为数不多的面试中最纯粹、最享受的一轮面试,不仅暴露出我的知识体系中的不少漏洞,也大大增加了我对 TEG 的好感度。二面面试官和我聊了做技术的态度以及人生,他觉得我应该更加 open 一些,我认可他的说法,在遇到问题时,有时候换个思路,从业务的角度,而非技术的角度去解决,或许能达到事半功倍的效果。
都是同行的承托,阿里的面试效率低到让我累觉不爱,五轮面试,持续了近两个月。并且,令人吃惊的是,我已然不记得五轮面试都问了我些什么……
回顾三月和四月,我的状态比较不错,除了需要应对某些突如其来的面试,我仍然保持着读 paper 和看书以及 coding 的习惯。
当需要决定去哪儿实习时,我致电了几个好友,TA 们倾向于我选择腾讯,理由从本文第三至六段也能看出个大概。然而我选择了去阿里实习,我想,既然是实习,那就意味着有试错的机会,待我前去一探究竟,到时候再投奔他家不迟。我便接受了阿里的实习 offer,并通过邮件或电话的方式真诚的婉拒了其他公司。
五月,我依旧进行着我的常规操作,期间参加了阿里安排的入职体检。但是,俗话说的好,「天有不测风云,人有旦夕祸福」,我没有通过入职体检,理由是我的心脏伴有一定程度的室性早搏。恰逢今年又是我的本命年,而本命禁忌,在民间有着广泛的影响。在南北民俗中,都有在本命年挂红避邪躲灾的传统。因此人们每逢本命年对红色就特别钟爱。在大年三十,人们便会穿上红色内衣,来迎接自己的本命年,认为这样才能趋吉避凶,消灾免祸。显然,对于穿红色内衣,我是拒绝的。
实际上,当时我还是不以为然并怀揣侥幸心理,认为只是需要一个三甲医院的确认,然后拟定个治疗方案就可以了。但是,当广东省中医院主任医师盛小刚告知我「你都没必要吃药,直接手术吧」的时候,我非常沮丧,理由有三,一是按照医生的说法,我的身体似乎不能支持我在未来进行高强度的研发工作及剧烈运动;二是不论接不接受手术,我基本是错过实习了;三是如果我接受了手术,并且手术恢复周期太长,那么我很可能会错过校园招聘。
和父母沟通之后,我迅速回到杭州,并选择在浙江大学附属第二医院进行心脏射频消融术治疗,射频消融术是将电极导管经静脉或动脉血管送入心腔特定部位,释放射频电流导致局部心内膜及心内膜下心肌凝固性坏死,达到阻断快速心律失常异常传导束和起源点的介入性技术。医生告诉我,手术本身是一个微创手术,但是这并不意味着没有风险,具体差异在于病人本身。从住院开始,我就希望赶快手术,手术带给我的痛苦相比于我当时的沮丧可以忽略不计。如我所愿,公元 2017 年 5 月 27 日,在端午节放假前一天的下午,我被一个陌生中年男子推进了手术室。
我的主刀医生有两位,其中一位似乎是印度人。我躺在冷冰冰的手术台上,护士们和助手们在进行术前准备,他们查阅了我的病历,看起来我的手术对于他们来说已经是轻车熟路了,他们谈笑风生,有条不紊,氛围轻松,手术室里充满了法定节假日前的喜悦气氛。然后手术就开始了,好在没有辜负我的期望,手术进行的很顺利。
回顾那段时间,毫无疑问我最需要感谢的是人我的父母,我的生病让他们无比焦虑和痛苦,这其实非常折磨我,他们为了我真的可以付出任何代价,这点我已经感同身受了;感谢前来看望我的长辈们和兄弟姐妹们;感谢我的朋友们,你们的远程持续鼓励让我在医院元气满满;感谢我的主管给我打电话并告知已为我保留一个实习岗位,这着实给我吃了一颗速效定心丸。
住院的这段时间,我完成了之前没有完成的 The C Programming Language 编程习题。
六月出了院,在家修养了两周后,我便决定返回学校。在家父母能够把我照顾的很周全,但是我仍觉得有些无所事事。现在想想,我错了,我应该安静的进行术后恢复,并且我的提早出走导致他们担心。七月初,HR 正式确定了我的实习报道时间,我再次回到杭州,为期不长的实习就这样开始了。
和往年一致,阿里会给予每个实习生一个转正答辩的机会,转正答辩通过即意味着能够成为正式员工,这对绝大部分实习生来说还是很有诱惑力的。相比于其他实习生,我的实习起始时间已经滞后了许多,以至于在入职后师兄带着我去领笔记本时,已经没有多余的 MacBook Pro 分配给我,只能退而求其次用 ThinkPad……同时,这意味着我需要投入更多的时间和精力,于是我租了一个距离公司只有 13 分钟步行时间的房间。
实习前两周,我的所有时间用于熟悉大名鼎鼎的阿里中间件,并阅读了 Webx 和 MetaQ 的部分源码。期间,师兄们给了我各种资源,让我尽可能快的理解复杂的业务逻辑。师兄们觉得通过代码理解业务是更高效的方式,于是给我分配了一个小需求,我花了一个周末完成。第三周伊始,团队启动了一个核心平台项目,对实习生而言,能够有机会参与到这类项目其实是不错的经历。
众所周知,长期以来我打心眼儿里排斥「业务系统」的开发,觉得它没有技术含量,每天还要浪费很多时间讨论业务……对我而言,最能激发我多巴胺分泌的一直都是类似「基础架构」、「性能优化」等名词。不过,实习时我的想法有了转变,技术的诞生应该服务于社会,应该用于解决实际的问题。实际问题总是在不断发生着演化,这意味着如何把业务系统设计的可伸缩和可扩展将会变得至关重要。同时,如何保证在海量用户下系统的高可用、高性能和一致性也是极具挑战性的问题。
转变归转变,问题也接踵而来,由于我对业务的生疏,每天我都需要花费大量的时间用于梳理业务逻辑,尽管师兄们对我始终是有问必答,但是他们的答复对我而言却始终是雾里看花,这让我很绝望,我没有办法写出让我自己信服的程序。不过我还是坚持了下来,尽我所能写出考虑完备的程序,业务逻辑不对的地方,测试工程师给我指出来,我改就是了。
值得一提的是实习期间我参加了集团内部的百技培训和菜鸟内部的破壳班,见识了不少杰出科学家和顶尖工程师,认识了许多特别优秀的同学。另外,我还参加了为期两天黑客马拉松,那是我实习期间最开心的两天。
临近转正答辩,我向主管、师兄们以及 HR 表露了我的想法:我决定放弃转正答辩的机会,因为我认为实习期间我并没有很好的完成我的工作,这让我对自己感到不满意。现在回头看看,我当时真是在自挂东南枝……多亏我的 HR,一个极具人格魅力的中年大叔,很容易就把我自认为发育的很成熟的想法给扼杀了,我乖乖的熬了一个通宵做了 PPT 参加了转正答辩。答辩过程轻松愉快,我很快就得知我将会获得正式的 offer,最终我也接受了 offer。
九月初,办理完实习离职手续后我马不停蹄回到学校,这学期学院邀请了 David Walker 教授给学生们讲授高性能计算课程,David Walker 是并行计算领域的资深专家,而我有幸可以成为该课程的助教。尽管以我目前的知识储备还无法和教授进行深入的学术探讨,但是教授却给了我不少建设性的建议。 九月底送别教授回国后,我便动身前往北京。去北京的主要目的是想约几个好友聊聊天,几年不见,久违而又熟悉,好友们的招待可以说是无微不至,甚至让我有些不好意思,但真是高兴!当然,最令我骄傲的是他们都在各自的领域取得了不俗的成绩:有已在职场风生水起的,有手握多个 offer 不知如何选择的,有继续深造投身科研的……在北京待了一周后,我回到了家,和父母一起度过了中秋节,然后回到学校,班长通知我获得了今年的国家奖学金。
十月,我完成了 Andrew Ng 在 Coursera 开设的 Machine Learning 课程及对应的 Labs。我为什么要去学这门课程?尽管目前人工智能仍处于并将长期处于「弱人工智能」阶段,离真正的「人工智能」相去甚远,但是不可否认的是人工智能正在影响我们的生活,尤其是在图像识别、语音识别、文字识别等领域,人工智能算法的准确度之高,令传统算法难以望其项背。除此之外,实习时我发现公司目前正需要具备出色工程能力且懂算法的研发工程师,或者是对算法有深入理解同时还能把算法落地的算法工程师,未来我希望能有机会参与数据驱动的项目。
十一月,我重构了 2016 年造的轮子 Vino。Vino 旨在实现一个轻量并且能够保证性能的 Web Server,仅关注 Web Server 的本质部分。在重构过程中,我阅读了不少优秀开源项目的相关源码,包括 Nginx、Mongoose 、Redis 和 WebBench,Vino 许多模块的思想正是借鉴于他们。因此,对比上一个版本的 Vino,现在的 Vino 不仅性能得到提升,而且设计也更为优雅、健壮。另外,挺有意思的是,Vino 还屡次登上 GitHub Trending(C 语言类),这直接导致长年不发微信朋友圈的我发布了一条状态,顺便学会了如何发布仅含文字不配图片的状态……期间也有高中同学来广州出差顺便小聚,朋友之间交流近况很有意义,高中毕业至今 7 年,在一起还能说说知心话,很窝心。
十二月,我没有目的性的尝试了一些新技术。我对异步编程感兴趣,所以开始了对 Node.js 的学习。同时,我开始了对区块链技术的研究,并且我将会对区块链技术进行一定深度的挖掘……十二月,我又回到了读 paper、看书和 coding 的时光。
过往的事情能够给我不少启示。2018 年我将开启职业生涯,这让我有些担忧:一心扑在技术上专研打磨的日子很有可能一去不复返,充斥生活的变成无穷无尽的需求、支持和维护,还要加上现实琐事的拖累。如何克服这个问题?我认为最重要的是保持对编程的热情。也许我会不可避免的遇到业务问题,但是如何透过业务看清其后本质的技术问题?这将是需要我长期思考的一个问题。
回顾 2016年度总结与2017年度计划,除了身体机能上的锻炼,我基本完成了年初给自己设定的目标。关于锻炼,我心里是有罪恶感的。不过,无例外的是,我还是会大言不惭的把「锻炼身体」列为新年计划中的重要组成部分之一。
- 2018 上半年的绝大部分时间我仍然会在学校度过,对我而言,这半年的主题将会是「毕业设计」,具体内容暂不透露。
- MIT 6.828: Operating System Engineering,这门课程主要讲的是操作系统原理与实践,与其他操作系统课程不同的是,6.828 的实践部分比重非常大,对应的编程练习能够帮助我非常清晰的理解操作系统的相关概念,并最终实现一个真正意义上的操作系统。
- 不出意外的话,2018 年 7 月,我将再次回到那个熟悉的团队,首要任务是做好自己的本职工作,尽快的熟悉团队正在使用的技术,哪怕是我不喜欢的老技术。我相信「工作对我而言不再是追逐一个梦想和追求一段经历了」这一天总会到来,但不是现在。
- 抽空锻炼身体,希望新的一年能有所改善。
- 做一次志愿者。
Always be prepared!