前言
十年一瞬,2014 年毕业至今,刚好十年。《异类》一书曾提到“一万小时定律”,要成为某个领域的专家,需要 10000 小时,按比例计算就是:如果你每天工作八小时,一天工作五天,那么成为一个领域的专家至少需要五年。而我在这个行业摸爬滚打十年,至今我仍觉得自己还差得远,更不敢说自己是某个领域的专家。十年是一个很好的节点,因为基本上也从“菜鸟”变成职场上的“老手”,有了一定自己的想法和经历,写技术十年就当做一次审视自己,复盘过去的成与败的契机。
我的技术画像
缘起 Android
我的互联网职业生涯始于 Android,还记得当时大学暑假期间疯狂啃了一本《疯狂 Android 讲义》自学入门了 Android,那时 Android 系统版本还在 2.2,2024 年都已经迭代进化到 Android 15 了,早已发生翻天地覆的变化。 简单回顾一下 Android 系统的发展: 从 Android 1.5 ~ Android 9.0 系统版本以不同的甜品来命名代号,并且每个版本都有独特的 logo,非常有趣。
从 Android 10 开始,谷歌开始做出改变,不再以甜品作为命名(官方的说法是甜点的命名不具有全球兼容性),直到现在都以具体的数字作为正式版本。
- Android 开发从曾经的 Eclipse + ADT 的方式,后面 Google 为 Android 开发者定制了 Android Studio 集成式 IDE。
- 开发框架从简单的 MVC 模式,到 MVP、再到 MVVM,再演进到 MVI 去适应更加复杂的业务场景
- Android 官方开发语言,从 Java 变为 Kotlin
在早期我学习 Android 的过程非常喜欢总结分享,在 CSDN 博客边记录了我所有的实践经验,有的项目实践也被我整理成了专栏,逐渐的我成为了移动开发领域的 CSDN 博客专家,积累了一批粉丝,主要还是一些小白和初学者,2013 的时候还创建了一个 QQ 学习群-**移动开发者狂热群,**那时群人数基本爆满,有很好的学习氛围。
CSDN 的一些成就
2014 年还开通了公众号–【小巫技术博客】,目前改名为【巫山老妖】,前期主要还是分享一些移动开发相关的内容,后面更新频率下降,也比较佛系运营,粉丝数一直没有太大的变化,直到现在我也是偶尔写写东西往公众号一发,也只有可怜的阅读量。
可以说 Android 开发贯穿了我这十年的职业生涯,伴随着移动互联网的发展,我也得以赶上时代的浪潮,获得了相对比较体面的工作和薪酬。
回顾十年职业经历
2014 年
2014 年刚毕业那会,移动互联网还在快速发展中,业内熟知的 O2O 千团大战当时已经打得火热,各种融资创业的消息此起彼伏。Android 作为当时两大移动平台之一,薪资和需求量也变得水涨船高。所以当时找到一份工作其实并不算太难,广州当时也没什么大厂,主要是一些游戏公司和 O2O 创业公司,我毕业的时候稀里糊涂的进了一家做游戏的公司,负责在里面做 Android SDK 接入的开发,因为当时工作中也有跟 Cocos2d-x 框架打交道,当时还自学了 Lua 脚本开发。不过在这家公司我只待了差不多半年左右就离开了,因为“有一天早上我问自己,我又不玩游戏,那我为什么做游戏”。确实因为我对游戏并没有太过热爱,玩游戏纯粹就是打发时间,加上对技术的有追求,不甘于只做一些简单重复的工作,就索性跳槽了。
这一年是刚毕业的第一年,由于前期有过长达 8 个多月的实习经历,所以也不算是刚步入职场,第一份工作也比较草率,完全就当试错了。当年差不多 10 月份的时候,我又重新找了一份工作,做新媒体转型的公司,负责 Android 端应用开发。
技术总结
业务类型:游戏 SDK、游戏框架
技术栈:Android、Java、Cocos2d-x、Lua。
2015 年
2015 年新加入一家新媒体公司——南方周末新媒体公司,这是我真正意义上的第一家公司,从 0 到 1 搭建起来的互联网产研团队,现在回想起来当时做产品的感觉真的很好,有激情有冲劲也没有这么卷,那时也是我的业务开发能力得到快速提升的一年,对完整的互联网产移动产品有了更整体的认识。当时团队正在帮助南方周末做新媒体转型,我在里面负责南方周末 App 的 Android 端开发,跟着前辈们一起打磨产品体验。
2015 作品集
2015 年作品集
当时的团队画像
技术总结
业务类型:新媒体、O2O 技术栈:Android、Java。
2016 年
2016 年因为公司发生了些许变故,核心产品人员的出走,产品战略发展方向不明朗等问题,让我重新思考未来职业发展的问题。那时我拿到了腾讯的 offer,不过岗位是在深圳,也就在这一年我做了一个重大决定——换城市。还记得当时我刚好 24 岁生日收到的 offer,写了一篇随笔表达了当时心情。
24 岁的生日礼物,感谢所有人
深圳是一个更现代化的城市,腾讯的总部也在深圳,也有很多我们熟知的大厂也在深圳有分部,比如阿里巴巴、百度、字节等。想着回想起来选择城市其实也是选择自己的未来,很多互联网公司都聚集在南山科技园,这里形成了一个能量场域,吸引着怀揣着梦想的年轻人来到这里打拼。
说起我拿到的这个 offer 其实是做移动研发工具的,由于刚毕业没几年,所以当时 HR 给的定级是 2-1,也就是现在的 6 级。Bugly 是当时 MIG 研发部的一个内部孵化产品诞生于移动应用,后面才开始对外提供服务,可以在当时大厂们没有自建崩溃捕获平台的时候,大部分移动互联网产品都接入过 Bugly Crash SDK,而且口碑一直在线。我加入的时候崩溃捕获能力比较成熟了,产品正在扩展应用升级和热更新能力,我当时就负责这部分的 SDK 研发。由于我是做 Android 应用开发出身的,应用升级也涉及 UI 开发,只是从接入方变成接口提供方,需要关注 API 接口的设计和 SDK 的高可用性。
热更新原理图
Bugly 热更新修复流程
技术总结
业务类型:移动研发工具 技术栈:Android、Java、SDK。
2017 年
2017 年上半年继续延续应用升级和热更新 SDK 的维护迭代,但产品基本比较稳定了,新增需求不多,业务重心也有了新的调整。Bugly SDK 已然不再是重点业务,只需要保持正常运营即可。作为对外免费的研发工具服务,很多时候是为爱发电,然而没有商业盈利模式的产品是不可持续的,如果是外部的创业公司估计早就凉透了,所以很多外部的开发者服务平台最终的结局要么被收购,类似友盟;要么开启付费模式做服务升级,苟延残喘得活着。
2017 年下半年新的业务方向出来了,AI 时代悄悄来临,数据标注业务开始有大量需求,这一段时间我开始面临新的挑战,帮助团队跟进数据生产,然而这并不是我擅长的领域,需要跟业务团队沟通对接他们的数据需求,还需要通过技术手段来完成数据清洗工作。这时我开始学习使用 Python 来完成数据提取工作,也要负责 Android 端数据众包 APP 的研发,帮助团队完成数据平台的建设。由于业务涉及 AI 领域知识,我也开始学习了解人工智能深度学习,尝试在移动端运行 AI 模型,还记得当时是用 TensorFlow 模型部署过 Demo,不过因为没有业务落地需求就没有继续深入下去了。
这一年其实处于业务变化中,自己的在技术上也面临了一些挑战,当时有些许畏难情绪,对未来职业发展比较迷茫。
技术总结
业务类型:AI 数据众包
技术栈:Android、Java、Python。
2018 年
2018 年全面进入数据众包领域,开始负责生产线建设与 AI 模型实战,我开始着手了解 NLP 和音频的 AI 数据生产需求,建设相应生产线,帮助业务规划数据生产,协调内部资源开发高效标注模板。然后想办法通过技术手段来提高数据处理效率和建设模型工具来提高数据标注质量和解决业务数据标注问题。可以说这是一个全新的领域,数据清洗其实是一个非常繁琐的过程,需要理解它背后完整的数据生产工艺,并拆解一个个生产工序,就像流水线一样,只有上一道工序完成才能进行下一道工序,最终才能交付给业务方他们需要的数据。
数据众包其实最终是为AI 模型团队服务的,我们当时需要搭建自动化平台建设来提效,Airflow是 Python 写的任务调度框架,因为我们的业务场景跟 DAG(有向无环图,Airflow 的一个概念)很类似,经过技术选型选定了 Airflow 来搭建我们的任务调度系统,这个平台还是蛮有意思的,因为可以通过自动化去释放人力,我们的数据生产从按时交付率 85%提升到 98.5%,把从按月交付的节奏加速到按周到按日交付,并且实现周六日持续运作,在业务量增长 3 倍的情况下,同时投入人力减少至少 10%,将一部分生产管理转向需求管理。做这个当时还是觉得有点价值的,因为我们把重复的事情真正的实现自动化,把数据实现全流程串联。
附上一张当时做自动化调度平台的架构设计:
由于当时业务的变化,我的工作职责不再只是负责客户端开发,为了更契合岗位我主动跟领导提出了换技术通道的想法,所以就从「移动客户端开发」变成「测试开发」。
2018 年上半年由于负责的事情比较琐碎,第一次参加公司的职级答辩,内容准备不足加上紧张,不出意外的挂掉了。然后下半年在 leader 的鼓励下,继续报名参加了第二次答辩,重新整理了自己的项目和技术突破,这一次虽然仍有不足,不过最终还是顺利晋级了。
这一年是我毕业第 5 年,成为了业内口中的高工。
技术总结
业务类型:AI 数据众包 技术栈:Android、Java、Python、Airflow。
2019 年
2019 年业务继续发生一些微妙调整,我的工作职责除了继续开发维护 AI 数据标注 App——搜活帮,还负责支撑微视团队接入 AiSee SDK(研效工具,快速反馈问题)。一方面搜活帮要扩展众测业务,帮助产品团队发布众测任务(就是外部人员帮产品找 bug),另一方面要成为微视支撑方,帮助他们提升 bug 反馈效率。当时我又回到了 SDK 老本行,还沦为了“卑微”的支撑方,想起入职以来这些年似乎没做出什么成绩,无论从绩效和能力提升都不及预期,加上我个人觉得业务没有重心,一直在变化,这时我产生了第一次转岗的念头。
然后下半年,我在找活水机会的时候,了解到在线教育部门正在招人,并且这个业务方向跟我的兴趣比较契合,在跟面试官深入沟通之后了解到还有机会转大前端方向,当时 Flutter 正火热,跨端融合是一个技术趋势,我觉得这是一个机会,面试通过后就跟老部门领导摊牌了,没多久就转岗过去了,随便提一句转岗的同时我重新将通道转回客户端开发。
其实这一年更多是求变的一年,内心曾经充满纠结,我思考过自己是否适合走AI 工程师这条路,但从自己所从事的业务类型也不足以支撑自己在这个岗位走得太远,思来想去我选择了更适合自己的大前端方向,所以就有了后面转岗到在线教育做 Flutter 的事情。
技术总结
业务类型:AI 数据众包、在线教育 技术栈:Android、Java、Python、Airflow、Flutter。
2020 年
2020 年我的印象非常深刻,那时还正处于春节期间,新冠疫情突然就降临了,我当时还记得街上突然就很多人带上了口罩,慢慢的大家都陷入对疫情的恐慌之中。正是因为疫情的原因,很多人没办法面对面去沟通交流,很多人的学习、工作遭受前所未有的挑战,也让在线教育、在线办公这些领域迎来井喷式爆发。
当时我参与做的产品是腾讯课堂,负责团队整体的 Flutter 工程化建设,这是我投入度最高最忙碌的一年,经常加班加点的赶进度。但是付出也是有回报的,2020 年我也获得比较好的绩效,也顺利通过 BG 答辩获得了晋级。
这一年我成为团队多个大型需求的 Owner,帮助产品从 React Native 迁移到 Flutter 新架构,另一方面成为 Flutter 研发效能负责人,推动团队成员提升大前端转型。当时完成了腾讯课堂产品新升级,有一种焕然一新的感觉。
贴一张我当时负责开发的产品截图:
技术总结
业务类型:在线教育
技术栈:Android、Java、Kotlin、Flutter。
2021 年
要说 2020 年在线教育有多火,2021 年就有多冷。由于“双减”的政策的实施,K12 教培行业受到严重冲击,我们的在线教育业务也受到严峻的挑战。这时集团战略的调整,组织和人员的变动,加上自己在团队承担更重要的职责预期落空,让我重新思考是否还继续在一个已经完全失去“势能”的业务待下去,所以我产生了第二次活水的念头。
念头产生了就一发不可收拾,下半年我就开始密集关注内外部机会,也接触了猎头和内部活水的同事,机缘巧合了解到 WXG 有一份做 IoT 终端开发的活水岗位在招人,对于腾讯人来说 WXG 是比较向往的 BG,因为它诞生了很多影响力极大的产品,比如微信、订阅号/公众号、微信支付、视频号等等。我当时也是抱着试一试的想法,如果能面试通过就作为自己在腾讯的最后一站,不通过就干脆出去看看。然后就开启了接近两个月的面试流程,经过 7 轮左右的面试,过程比较煎熬,不过最终结果是好的,我如愿通过了活水面试。有的人可能会问,内部活水也这么严格吗,但那可是 WXG 呀,对人才的考察可以说是全方位的,可能当时心态比较好,总觉得失败是正常的,有时候让自己变得松弛下来,反倒更能成事。
2021 年对我来说既是动荡不安的一年,也是极其沮丧的一年。动荡是因为外部不可抗力因素带来的内部混沌,沮丧是业务失去势能后组织架构的变化和人心的涣散,使得我不得不去做出改变。
2022 年
2022 年春节回来后我正式去新的部门报道,由于这是我第二次活水到新的团队,所以有那么一瞬间觉得挺恍惚的。过往的战绩重新归零,作为新人想办法让自己拥有空杯心态去接触新的领域知识、人和事。
IoT 物联网领域相比于传统移动 APP 开发需要掌握的知识更多,因为它面对的设备终端不再是手机,而是智能设备终端,实现的是人和设备、设备和设备之间的互联。我们需要面对的技术架构和业务复杂性是不一样的,传统移动 APP 主要是 CS 架构,关注的是用户界面的设计、功能的实现以及跟服务器的通信。对我而言,移动开发的经验是可以复用的,只是前期需要花时间熟悉业务流程和研发平台相关基建的使用,比如数据上报平台、OTA 升级平台、配置平台、监控平台等等。
经过一年的时间,我负责了创新硬件项目终端开发,也顺利了完成零售小店的试点。作为新人作为加入到新团队完成了从 0 到 1 的蜕变,成为了业务负责人,可以独当一面去承接业务问题和挑战。整体而言,2022 年有幸加入到一个蒸蒸日上的创新业务,跟随着业务发展我也确实也学到不少东西,对 IoT 物联网领域有了更深的理解,也对金融科技对安全和稳定极致追求有了深刻的认识。
这一年我刚好满 30 岁。而立之年,并没有成为 CEO 迎娶白富美的桥段,只有朴实无华的打工状态,互联网造富神话只适合那些少年天才,不适合我这种凡人,我更适合凡人修仙传中没有灵根的凡人,完美的自洽。
2023 年
2023 年,开始拥抱新的变化,从 Android 开始涉猎 Linux 嵌入式应用开发,语言层面也从 Java、Kotlin 转移到 C++。这又是一个新的挑战,从熟悉的 Android 开发到陌生的嵌入式开发,需要补充的知识还不少,从编译体系、工程搭建、嵌入式 GUI 开发、网络分析、性能调优等等都需要补足功课。
这一年其实相对比较佛系,IoT 物联网领域的知识持续在积累,但总觉得哪里不够,业务持续在做,似乎还是在自己的能力圈范围内,突破不足,这时距离我上一次职级晋升已经过去了三年多。加上现在行业动荡,互联网公司都在做“降本增效”,职级体系也处于尴尬的境地,通道的边界逐渐变得模糊,战功比武功更重要,有时候我在想没有战功职级晋升还有意义吗,最终还是比拼谁的绩效更好,内卷就变得在所难免了。
2023 年是我加入腾讯的第 7 个年头,开着玩笑说“七年不痒”。这些年来一直跟变化共舞,技术更新迭代很快,业务变化也很快,连上级领导都不知换了多少任,可能还来不及建立稳固关系,业务就已经成为了落日黄花菜。我们时常说坚持长期主义,这里面其实有很多维度,有关于业务的,有关于技术的,有关于人际关系的,想在一个领域获得成就和好的结果,无一例外的是长期主义的结果。
技术总结
业务类型;IoT 物联网、金融科技
技术栈:Android、Linux、Java、Kotlin、C++
2024 年
2024 年是毕业进入职场工作第十个年头,虽然今年还未完结,但我的技术十年已经迎来标点符号。回顾自己过去十年技术成长,其实是伴随着业务发展而来的,永远没有最牛逼的技术,只有最适合业务的技术。技术是有边界的,但能力没有边界。只要选择了做程序员这个职业,学习永远贯穿着你的职业生涯。
从移动应用开发到 Linux 嵌入开发,这是业务需求变化的自然结果,技术终究只是手段,业务需要什么样的技术就要去学习什么技术,然后利用自己的聪明才智去交付价值。业务发展其实也是有规律可寻的,我今年学到一个思考方式——点线面体思考,意思是我们所做的事情只是一个很小的一个点(具体的工作),但它应该是附着于一条线(业务形态)上,然后通过不同的线交织在一起形成一个面,然后再思考这个面又基于哪个经济体上。
技术不会凭空出现,就拿 ChatGPT 举例,它是人工智能模型达到一定规模之后所产生的技术涌现。十年的技术生涯,我仍在奋战在一线去积累实战经验,AI 大模型的出现,也许会重新定义了程序员这份职业,未来也许大家不用在浅层知识经验的竞争了,而是比拼谁更能掌握 AI 大模型研发工具的使用。不过这只是我的一家之言,未来的十年会科技的发展会变成什么样子,见仁见智。
写在最后
一些经验思考
- 不要只关注自己的一分三亩地,把握任何锻炼自己技术能力的机会,这是立业之根本。
- 系统思考自己所处的生态位,多点了解政策变化和技术趋势,不要跟趋势对抗。
- 点线面体思考自己所处的业务,会对一些业务变化看得更加清楚,在信息不对等的情况你也能有自己的判断力。
- 情商比智商更重要,逆商比情商更重要,学会接受人生的各种起伏,毕竟人生不如意十有八九。
- 接受自己的平庸,承认他人的优秀,是成长的必经之路。
- 不要把技术看得太重,有些问题并不都是技术问题,有些需求不一定非得做,学会以终为始做事情。
- 不要在自己情绪化的时候做决策,因为可能大概率是错的。
一些遗憾
- 技术写作这件事,我应该可以做得更好,只需要多一点耐心,多一点专注。
- 我应该要更适应变化,努力突破自己的舒适区,不仅满足于求稳。
- 我曾经做了很多无效努力,应该更体系化的完成知识沉淀和积累。
- 我没抓住博客时代和公众号红利,自媒体知识传播足以让我拥有一个不错的副业。
以上我说的可能都是错的,有句话说的好,你的人生是体验的总和,不是经验的集合。对于我而言,这些年让我印象最深刻的就是各种体验,感激遇到的各种形形色色的人和事,人生总有遗憾,也正是这些经历才造就最真实的自己。
我经常会说选择大于努力,但其实哪里有什么完全正确的选择,只是我们需要通过努力奋斗把选择变得正确罢了。
个人努力固然很重要,但仍要考虑历史进程,我深刻意识到作为普通个体不要去对抗趋势,要遵循客观规律,无论是投资还是职业发展。
我的技术十年,也是一位朴素且真实的程序员成长历程,没有花里胡哨的东西,只有更多内心的感受。
下一个十年,我的体验故事还在继续,也许我还会继续坚持做技术,做分享,但人生绝不应该被定义,随心而行。
来自我非常喜欢的不良人电影-《画江湖之天罡》