我们新推出大淘宝技术年度特刊《长期主义,往往从一些小事开始——工程师成长总结专题》,专题收录多位工程师真诚的心路历程与经验思考,覆盖终端、服务端、数据算法、技术质量等7大技术领域,欢迎一起沟通交流。
本文为此系列第三篇内容。
本文作者千诺毕业后一直专注于Android相关技术,风雨天晴,砥砺前行,十分有幸能和大家分享一路走来所见的风景
我毕业前走过好几家公司,每一家公司都有不一样的感受,非常幸运:
2019年新年伊始,收到网易、小米的日常实习offer,一个本科学生能够拿到这样的实习offer还是非常难得的,非常开心的去网易有道实习了三个多月,也第一次远行去了北京。
后来,回到了成都腾讯PCG进行暑期实习,当时成都HC少得可怜,能拿到离家近的实习offer非常满足(家在重庆),最后也成功拿到了留下来的正式offer,好像经总监特批,拿到了 SP 。
大三暑假,拿到了淘宝架构组的正式offer,禁不住“架构组”三个字的诱惑,决定放弃舒适区。2020年3月来淘宝架构组进行毕业前最后一段实习,“见见世面”。
开始工作后,新的征途,新的状态:
工作第一年,主要负责 APM 可视算法准确性提升、模块重构等工作,得到了老板的认可,拿到了年会上的“最佳新人” 。
工作第二年,主要负责跳失、页面模型体系数据构建,卡顿问题定义等,成功在大厂毕业季中晋升一级,很幸运。
工作第三年,主要负责卡顿问题体系化解决推进、内存等OS级底层数据搭建,参与全量设备可排查数据体系解决方案,拿到了CARE卡、体验Go等。
我的总结
▐ 聊聊写好代码
如何写好代码
作为代码手艺人,需苦练手艺,谁不想写出谁看谁赞的代码呢。
工作中有相当一部分时间都是写代码,而如何写出好代码,是我们不断追求的目标。首先需要摆正对代码的认知,代码是给人读的,机器码才是给机器执行的。认知不同,书写的思路也是不同的。在开发过程中,会有一些代码对性能有极高的要求,这时候我们要做好极致性能与可读性的平衡。
对于代码,我们也要“知其源”,懂何来何往。对于Android同学而言,怎么可以不懂AGP的浪漫呢?Google提供了AGP,为开发者非常便利的将Android工程编译成一个apk文件。日常工作中,会涉及到排查一些奇怪的问题,往往直接指向就是字节码,熟悉编译就成了一个必选项;找出问题,下次在代码中进行规避。对于编译,我们需要知道一段代码如何变成APK的,APK字节码是如何跑在ART上的,了解机器码与字节码的转换,当我们将整个体系了解透彻后,能从更低层的视角来审视自己的代码。
-
广泛的阅读,并在读优秀的框架或者源码时,不应止步于了解实现了什么。Android源码中存在大量设计模式,例如处理点击事件的责任链模式、Activity生命周期的模板方法模式、Binder机制中的中介者模式等;也需要了解类之间的关系,例如Context及其子类;了解为什么需要这样使用。持续性给自己输入,处处反思,不将设计原则束之高阁。 -
刻意的练习并将代码提给『代码写得像诗一样的同学』认真CR。在学习设计原则时,往往是一些简单的demo,但如何落地到具体的工程代码中,是我们需要持续思考的问题,非常考验代码功底。工作中持续练习,并主动获得反馈,帮助了我快速成长。
Notice:刻意练习设计模式不是强套设计模式,每一种设计模式都有自己适合的场景。我就接手过一个模块,里面大量使用了单例模式,为了方便内部大量单例相互调用,直接导致类关系紊乱,当我想对这个模块进行功能拆分的时候,我发现就很难做到。
手艺人的坚守--不妥协
在我们写代码的时候,不能对自己『妥协』,一处妥协,处处妥协。--来自『代码写得像诗一样的同学』
在过去的代码中,自己会经常遇到这样的问题,就比如说下面这段代码,摘抄自今年提交的代码中:

▐ 聊聊学习



多读书,多看报,少打痘痘,多睡觉。学习,无他法,唯坚持尔。
▐ 聊聊工作状态
-
热爱工作,让自己快乐 当我厌恶工作,那我在工作的时候就会觉得很煎熬;如果我不喜欢工作内容,我就会觉得无聊。别人可能会带给我们痛苦,但快乐我们一定要学会自给自足。工作在我们的生活中的时间占比太高,如果想要自己快乐一点,那就仿佛只有接受它,并热爱它。也算是打不过就加入、改变不了环境就改变自己的另一种形式吧。 -
热爱工作,提升自己的工作效率 当自己心生抗拒时,效率不自然的就会降低,效率降低,工期拉长,如又遇到推进有问题,自己就会陷入痛苦之中。所以我会警惕自己产生抗拒心理。而『抗拒心理的敌人就是热爱』!专心投入时,自己会更加积极推进(自驱力),遇山开山,遇水搭桥。
热爱,永远的必杀技!
▐ 聊聊做事
每一个人都有自己的做事风格与方法论,待在阿里,成长在阿里,也慢慢有了自己做事的三板斧:
上手新东西,不贪大不求全,先做样板间。
在做 APM 自动化计算页面加载耗时校准后,数据波动解释问题愈发突出,自动化计算不与加载过程耦合,只关心最后的加载终点,到底是什么导致加载慢了始终是一个谜团。
为了应对数据的不正常上扬,针对页面打开数据持续性防劣化,我们增加了页面加载过程监控,而这过程就会与页面打开流程进行耦合。针对这一数据体系建设,我们选取了详情作为样板间。
经过一段时间观测,能够较为有效的发现问题,针对各个页面加载阶段有较为明显的防劣化效果。与此同时,在和详情的合作中,数据流转、接口定义等细节也多次打磨,才达到使用标准。最终形成了以页面加载为场景、以页面加载耗时为北极星指标、以加载子阶段为排查支撑数据的数据体系,结合日志与上传,建立了大盘与单机排查数据体系。

做好规划与目标
跳失率,是APM产出的一个重要指标,描述的是启动或打开页面过程中流失的用户比例。跳失率连接了性能与业务数据,是优化用户体验的另一角度阐述。
回顾跳失率的历程,着眼全局,根据用户动线逐渐铺开,得到大量团队的认可,无论是技术还是业务同学,也慢慢作为优化的目标。

跳失率由最开始的外链单渠道验证,再引入到外链全渠道数据衡量,后续推广到全入端流量和所有正常的页面打开。

移动互联网走到今天,辉煌之后是回归平淡,还是更有另一山高,还犹未可知,但我愿一路向北,直挂云帆。作为刚踏上工作的小年轻,一路走来有朋友相伴,有大神指导,有非常好的工作坏境,感恩相遇,也十分珍惜。前路阻且长,希望能不忘初心,在技术上还能保有那一份坚持,保持对工作的热情,守住生活中的小美好。

本文分享自微信公众号 - 大淘宝技术(AlibabaMTT)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。