2022 年度总结
又到了一年一次例行总结的时候,写篇文章来回顾一下这一年的经历、收获和成长吧。
自由市场
今年年初,部门内出现了不少人员变动,印象中有 @周剑、@向南、@孝发、@全义 等都提了离职。一方面,考虑到公司因政策影响无法上市,未来非常不明朗;另一方面,我工作 4 年至今未曾接触自由市场。因此,想了解一下自己在市场中属于什么水平,看看有没有好的机会。
我从 1 月 20 日第一次面试,到 3 月 17 日最后一次面试,中间经历了过年,有两个多星期没有安排面试,总共历时 2 个月。简历差不多投递了十几家公司,基本都是知名的互联网大厂和中厂,最终差不多面试了 30 场,也是心力交瘁,自我介绍和项目介绍都背麻了...不过,好在结果还是挺好的,除了有一家技术面面挂了,其他的基本上要么是流程到了 HR 面,要么是我主动结束面试流程,还有几家是给了书面 Offer 或口头 Offer。
这三个月业余时间一直在复习基础、刷算法题、复盘面试,期间和 @瑀晗、@金俊 也经常交流面试情况和工作选择。万万没想到的是 @瑀晗 和 @金俊 最终去了同一家公司的同一个小组,换了个公司做同事。当然,这期间基本上没有放在太多心思在工作和学习上,但总的来说,收获还是挺大的,大概有几点:
- 了解了自己在大厂职级体系中所对应的水平,因此个人自信心增长了不少。
- 了解了岗位所需要的知识体系,看到了自己的短板,摸清了各个公司面试重点和套路。
- 了解了更加高阶的岗位要求是什么,找到了自己努力和进阶的方向。
当然,最终我没有选择跳槽,主要原因还是 @碧峰 说的 “有更大的发挥空间和成长空间”。另外,还有几个次要原因:
- 觉得通过面试已经找到了努力的方向,如果换个地方,可能适应环境都要花费很久,而且很多东西都要从头开始。
- 觉得外面的公司绝大多数都太卷,薪资性价比不是特别高。
- 觉得整体大环境不好,裁员比比皆是,有点不稳定,担心“毕业”。
在作出决定之前,@李哲 转岗去了搜题,大哥找我聊了一次;在作出决定之后,我找大哥又聊了一次。在得到了大哥的一些承诺之后,开始逐步接管客户端团队,负责 Android/iOS/Cocos/Flutter 的日常事务和工作安排,这时候差不多 4 月份了。
关于工作
今年的工作角色发生了转变,从 iOS Owner 转变成客户端负责人。这一年来,自己也推动了一些事情的落地。
第一件事是优化 Zeta Math 上课路径效果。经过综合考虑后,设计了一套基于 Cocos View 复用,支持代码热更新、内容增量更新的技术方案。相比于第一版基于 Native 实现的方案,新版本的视觉效果和用户体验好了很多。项目整体开发经历了一个月,最终顺利上线。
第二件事是 GitLab CICD 建设,搭建了一套基于 Danger 的 Lua/Swift/Kotlin 的静态代码检查能力。由于 Lua 较为小众,没有现成的插件可供使用,对此,开发了一个 ruby gem——danger-luacheck。Dart 的静态代码检查能力暂时还没支持,后续有时间再整吧。
当然,CICD 能做的事远远不止这些,包括:单元测试、依赖分析、编译检查、代码扫描等等。等到后续人手充足,时间充裕,再捡起来。
第三件事是去 Flutter 化。海豚自习 App 的首页四个 Tab,包括一部分二级页都是用 Flutter 写的。在需求迭代过程中,Flutter 开发的很多痛点逐步暴露出来了,主要包括以下这些:
- 调试不方便。特别是涉及到 Native 和 Flutter 混合调试时,大部分情况只能使用日志进行调试。
- 线上问题多。由于我们的 Tab 也是 Flutter 实现的,因此 Flutter 页面曝光率是 100%。对此,线上经常出现白屏、内存泄露、页面卡顿、图片锯齿等问题。由于我们对于 Flutter 的投入太少,很多东西都无法解决。
- 新人不友好。新入职的同学基本都没有 Flutter 开发经验,从头开始学得占用一段时间。最头疼的是,我们的需求变动最频繁的几个 Flutter 页面都非常复杂,新人上手的成本非常高。
- 提效不明显。在开发效率方面,Flutter 的目标是 Native 的 2 倍,然而在实践中,我觉得顶多也就 1.5 倍左右。有时候也会遇到 Native 很容易实现,而 Flutter 却很难实现的情况。另外很多情况下,还需要双端同时开发插件。
一方面,考虑到后续几个 Tab 首页的需求迭代会越来越多;另一方面,希望能够让更多的同学参与到这些需求的开发中。于是,开始规划 Tab 重写。很幸运地,在国庆前找到了一个空档期,所有同学都参与了 Tab 重写,同样也花了一个月的时间,顺利上线。上线后的优化效果的确很明显,白屏没有人报了,崩溃率也下降了不少,页面流畅度也提升了不少。
第四件事是基于 page scheme 的动态弹窗管理能力建设。构想并建设 page scheme 主要基于几个事实:
- 一个定制弹窗需求。对此,我调研了淘宝的 PopLayer 方案,设计了一套基于 WebView 的弹窗方案,称之为 WebLayer。
- 一个卡牌激励需求。对此,我们上线了基于 MQTT 的长连接能力,并设计了一套基于页面白名单和黑名单的消息处理能力。
- 统一页面曝光需求。这是一个技术需求,希望能够在当前页面上报埋点时,携带上级页面的信息,此外,还能够处理页面停留时长、网络请求时长等信息。
- 统跳链接信息维护。一直以来,包括小猿搜题、海豚自习馆等诸多 App,我们都是通过手动维护一个 wiki 来记录统跳信息。这里,我希望能够通过代码生成统跳信息,甚至还包括其他的页面信息、参数信息等等。
最终,我构想了一套 page scheme 能力,通过项目代码生成不同版本的 page scheme 文件,后台可以根据 page scheme 配置指定的页面显示弹窗或一些其他能力。服务器将后台配置结合消息数据,通过 MQTT 或 HTTP 的方式下发至 App,App 再进行处理。
期望的项目终极形态是,支持在运营在后台配置任意弹窗,包括:WebLayer、Native 弹窗等,支持指定页面显示(或不显示)。其中,WebLayer 支持类似弹窗、新手引导、红包雨、气泡等各种运营效果。
目前,page scheme 能力的搭建还在进行中,客户端的相关能力基本已经完成,包括:弹窗管理器、page scheme 定义、配置文件生成、MQTT 分派、WebLayer 管理器等。后续,还要继续推动后台相关的基础设施的搭建。整体来讲,我个人觉得这个项目还是比较有意义的,并且具有一定的创新性,期待上线后的效果。
关于学习
开源代码
今年阅读了四个开源项目的代码,分别是:getopt、git、Aspects、PromiseKit。
关于 getopt 源码,主要是出于两个契机。一个是自己看完了《C 语言教程》;一个是出于优化 nox 的目的。最终,产出了一篇源码解读文章 《源码解读——getopt》。
关于 git 源码,我首先精读了创世版的代码,也就是 Linus Torvalds 写的那个版本。然后看了下 2.0.0 版本的代码,核心的数据结构和设计原理没有太大的变化。同时又看了《Pro Git》的部分章节,最终对 Git 的底层设计原理有了一个比较清晰的认识。对此,写了篇文章 《深入理解 Git 底层实现原理》,并在团队内部做了次技术分享。
关于 Aspects 源码,框架的实现非常精简,只有一份代码文件。当然,也是非常仔细的阅读了一遍,整理了一下思路,并写了篇文章 《深入理解 Aspects 设计原理》。
关于 PromiseKit 源码,是因为年底的时候对于异步编程比较感兴趣,想到辅导的代码里也用到了,于是想来学习了一下。最后也产出了两篇相关的文章:
技术书籍
今年自己读书相关的计划完成的还可以,主要看了以下这么些:
- 《C语言教程》
- 《C++ Primer Plus》
- 《Software Engineering at Google》
- 《编译原理》:泛读了一下,另外看了两遍哈工大的编译原理公开课。
- 《How to write your own compiler》:这本书花了一个月的业余时间,精读、翻译、实验,但是发现其所使用的 LLVM 版本过低,导致我花了很多时间用于解决各种报错。最后几章节的一些报错实在解决不了了,遂放弃。
- 《Kaleidoscope: Implementing a Language with LLVM》:这本书差不多用了两个月的业余时间,精读、翻译、实验。
- 《大型网站技术架构》
- 《Swift 异步与并发》
- 《计算之魂》
除了技术书籍之外,其他的就看了毛选的卷一,看了一半,确实能感受到教员的伟大。后面,有时间有心境的时候,还是要好好读读毛选。
博客文章
今年总共写了 20 来篇博客,有一半是对于《Kaleidoscope: Implementing a Language with LLVM》的章节翻译,当然也包含了一部分自己精读后的理解。除此之外,一部分是跟编译原理工具有关,一部分是跟异步编程有关,其他的还有一些琐碎的主题。整体来说,涉及的技术广度还不是很大。
学习英语
因为今年年初的面试经历,了解到外企的一些高级岗位还是有英语要求的,特别是口语。考虑到未来失业了能多一个选择🐶,于是想着从现在开始好好练练口语。苦于没有语言环境,最后抱着试试看的心态,买了个流利说的课。想着坚持一年,看看效果。从4月份到现在,总体感觉是有点帮助的,至少语感,语言组织要比以前好很多。后续再看看,要不要考虑一下真人一对一。
关于生活
今年生活中最大的里程碑就是还完了房贷,好歹少还了大几十万的利息。
其次,便是休了一个长假,国庆节 + 8 天年假 + 1 个周末,总共休假 17 天。假期计划分三段行程:湖州长兴、南京、合肥。
在长兴的几天,见了假期最后一天的老弟,走了几家亲戚,和发小看了场"乡BA"、吃了顿夜宵。在家的几天,和老姐、外甥去了次太湖龙之梦。龙之梦确实非常大,比环球影城大不少,但是有些主题公园还没有完全造好。我们只体验了动物世界主题公园,整体感觉还是挺不错的,比北京动物园强多了。
因为疫情原因,本来去南京玩的计划取消了,直接去了合肥。在合肥待的时间比较久,于是定了计划,把《Software Engineering at Google》看完了。由于国庆期间天气太极端,不是极端热就是寒潮降温,周边玩也没玩好。
国庆前两天,偶然看了下北京健康宝,发现弹窗3。因为可能会耽误回京,导致后面几天每天都在尝试消弹窗,也没什么心情出去玩。
一整年来,因为疫情反复,也没有出去好好玩玩。2023 年放开了之后,希望一切都能恢复正常吧。
关于运动
今年一直在保持运动,跟 @龙哥 一伙人组了局,同时部门内部又组了个局,基本上每周都能打次球,甚至打两次。
另外,今年算是把跑步坚持了下来。从 7 月份开始,每周跑一次十公里。配速从 6:00 提高到了最快 5:16。可惜,到了十一月份,因为疫情,再加上室外过于寒冷,风又太大,就暂停了。希望明年能够从开春就坚持跑步,保持每周十公里,争取能参加一次马拉松。
新年愿景
2022 年一直处于较为紧张和规律的状态,收获也挺多,看了些书,读了些源码,写了些博客,希望 2023 年能够继续保持吧。
另外,身体才是革命的本钱。少熬夜,多喝水。保护视力,坚持运动。
最后,祝新年快乐~