写在入职腾讯三周年,retrofit源码

  • 设计几十万开发者都在用的数据库 SDK;
  • 解决 Node.js 一些底层内核问题;
  • 修社区开源项目的 bug;
  • 尝试对业界流行的框架做适配和兼容
  • ……

几乎每一件事情都让我感到兴奋,也可以让我有地方施展拳脚。

后来 19 年的时候,因为团队一时人手不足,有时候我也会充当售前架构师的角色,全国到处飞,去见我们真正的客户,这期间也对国内云计算整个行业有了一定的认识。

所以在云开发团队的这两年,也是我成长最快的两年,无论技术上还是业务上(哈哈我即使说了这句话 leader 也不会给我发红包的,如果看到了请微信转账谢谢)。

程序员的职业价值和发展

首先我想探讨一下程序员或多或少都会思考一个问题,那就是「程序员的价值在哪里体现?」,这个问题我们可以从程序员的几种身份开始说起,我觉得程序员起码会有四种身份:

首先程序员是有「执行者」这个身份的,这个身份本质上和工地、流水线上的工人并没有太大区别,硬要说有,可能也只是工作内容、专业程度的不同而已。这是最廉价的一层身份,对于公司而言,你只是一个可拔插的生产机器而已,明天换成别人其实也差不多。

然后就是「设计者」这个身份,和上面的区别在于,设计者能对涉及的技术项目产生影响,决定项目的各种选型,而执行者不行。这里的设计可能并不是指产品、业务上的,而是技术上,比如你的公司想要做一个新的应用、新的服务,如何选择合适的技术栈确保业务顺利的运行、增长,就是一个很考验经验的任务了。(对于很多非技术驱动的业务,例如 toC 产品,程序员的天花板很可能就是这里了)

再然后就是「推动者」,和上面的区别在于,**推动者可以对业务产生直接的正面影响,可以影响业务的决策,而设计者不行,**比如业务本身就是一款技术产品(例如云计算业务、微信小程序),或者业务本身就依赖于技术上的竞争优势(比如各大公司的推荐算法团队)。这也是我当时转岗到腾讯云的原因之一,我希望能靠我的学识、能力,去真正推动一款产品的发展,而不仅仅当一个执行者或者设计者。

最后就是「开创者」,和上面的区别在于,开创者能够开始一个新的赛道,引导业界的下一步走向,而推动者不行。理想主义地说,就是可以用技术让这个世界变得更加不一样。比如各种顶级开源项目的作者,比如学术工业圈两头吃的大佬,这也是包括我在内的很多很多程序员梦想成为的人。

但成为开创者的路是很难很难的:

**第一条路就是,你在某个领域拥有绝对专精的能力,并且正好遇到了风口。**这条路上的标准模板,就是学术界往工业界转型的大牛们。这一点上,我在大学就确定自己并没有足够的耐心和兴趣做可能看起来没有什么短期收益的学术,我更喜欢解决实际的工程问题,所以已经放弃了。

第二条路是,你是一个文艺复兴式的「全才」,这里的全才不仅包括了技术能力,还有管理、交流、视野、逻辑思辨甚至审美、写作能力等等。这条路上的标准模板,就是优秀的独立开发者,还有大部分技术出身的公司创始人。在技术水平上,他们可能并不是最优秀的那群人,但他们懂得如何面对真正的用户、如何经营自己的项目,这些看起来很务虚的内容,并不会比技术问题简单多少。

刚毕业的时候我是一个技术唯上的人,觉得我只要有 Book Smart 就够了,学好数理化,走遍天下都不怕,这家干得不爽了,我可以立马去下一家,毕竟哪家公司不喜欢一个优质的螺丝钉呢?

但随着工作经验的累积,看到、接触到的范围更广,我发现如果未来需要突破一些天花板,不想当一颗螺丝钉的话,光有 Book Smart 是完全不够的(毕竟走的不是硬核科研路线),Street Smart 在一些时候也是相当重要的:你要学会如何推动手上的事情,如何向上向下管理,如何与别人达成利益一致,如何简单清晰地表达自己的想法,如何更有性价比地投入时间和精力…… 这些也是一个工程师的软实力所在,随着工龄越来越长,这些看起来不那么硬的因素,或许就会成为区分点所在

(PS:不过我也要泼一盆冷水,以当下很多同行的技术水平之差,还轮不到拼这些软实力。)

大公司的生存之道

在腾讯呆了三年,就这样慢慢变成了一根「老油条」,也学到了不少在大公司生存的经验,下面几点是比较有深入体会的,所以想分享一下。

1. 提升你的影响力

几乎每家大公司,无论 OKR 还是 KPI 还是什么别的考评制度,一定都会有一项很重要的因素叫做「影响力」。所以每年考核季的时候(比如腾讯的一月和七月),你就能看到各种奇怪的开源项目、一连发好几篇的技术文章、内部分享课程、公众号推文如同雨后春笋一样冒出来,这些背后的推动力,就是对影响力的考核。(但我始终相信,长期来看影响力这一点并不是能够临时抱佛脚出来的。骗得过一两次考核,骗得了三年五年吗?)

所以如何建立影响力呢?

最简单的方法,就是去吃下一个项目,成为项目的核心维护者,大家遇到这个项目的需求或者问题,都会第一个想到你,把你默认作为 owner。当然这个前提是你有能力吃下项目,并且维护。众所周知几乎国内外所有的公司,很多项目的代码都接近「屎山」,我现在越来越觉得能够短时间内搞清楚一堆屎山,并且渐进式地改良它,也是非常重要的能力

第二个方法,去为团队提供好的、正确的东西或者决策意见,这点在国内尤其重要。目前国内因为行业发展速度太快,基础知识过硬的程序员实际上是少数的,即使是大公司,也有很多人也并不是科班出身,做一些设计的时候更多是基于多年的经验,而不是基于系统化的理论知识(据我观察年纪越大,这点越明显)。

未来可预见的十年内,这个状况会一直保持。这就是能让年轻人打出优势的地方,也是我为什么除了感兴趣之外,平时都会读大量的专业书,哪怕跟我的工作领域并不那么相关。我们要做的是出卖自己的知识、能力、学识给公司,而不是卖自己的人肉劳动力。

2. 与其埋头加班,不如想想怎么提升效率

在国内工作,不可避免的一个问题就是加班,但其实大公司里,加班也分成好多种:

  1. 工作量太大or项目赶时间而加班;
  2. 白天时间都花在开会、讨论、对接各种人上了,没时间干活,只能晚上干;
  3. 反正回家也没事干,不如呆在公司吃吃喝喝吹空调上上网;
  4. 要绩效考核了,表演式加班。

后两种纯粹是自作孽,我们就不做评论了。主要想讨论下前两种加班:

前段时间因为团队业务的扩张,我也遇到了第 1 种的问题,当时的想法其实是很「头铁」的:突然来了这么多工作量,那就正面刚嘛。直接结果就是,我一个人干了好几个人的活,连续几周都处于工作压力很大的状态,对身心健康都造成了负面影响。后来才知道,整个团队的工作量其实并没有那么大,只是存在分配不平衡而已,如果我能把手上的一些任务拆分出去给到其他人,其实大可不必这么辛苦的。

在刚毕业的时候,我完全不需要去考虑怎么分配任务的问题,因为那时候我更多的是一个执行者,把交给我的任务优质地完成就好了。但现在,我也要开始学会如何去承担一个 owner 的职责:把任务合理地拆解,分配给合适的人,并且关注整体进度和交付时间

第 2 种,需要反推团队去提高交流效率,比如规定每次的讨论结果必须落地成文本、每次讨论前需要准备基础的材料发给大家看等等**。**这点上,**可以先从自己做起。我曾经也有一段时间,一旦遇到什么问题,就立马去找人聊,后来发现这样其实是很低效的。最高效的方法还是先自己思考清楚要聊什么,自己有哪些想法和备选方案,再找相关的人讨论,**这样也节省了双方的时间和精力。

3. 主动承担

「主动承担」这个词听起来很官方,很像宣传标语,也是腾讯每半年考核的一个维度,但我一时也没想到什么更加口语化的说法。

什么叫主动承担呢?日常工作里,总是可以遇到很多边界模糊的东西,比如:

  • 你提交了代码,发现跑了几次测试用例,都是时好时坏,而团队里也没什么人愿意花时间去修复不稳定的用例,多跑几次能过就行;

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

总结

最后对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!

这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

相信它会给大家带来很多收获:

当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。

序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值