普通技术人的成长路径 - 一位客户端老兵的经验之谈
作者简介
牟爽,早期在腾讯,阿里等互联网公司从事移动端的开发工作,后来在平安,恒大做过两个内部创业项目,目前就职于字节跳动音乐部门客户端团队,团队也在三年左右的时间完成了业务从0到1的启动,当然后面还有从1到100;说到技术栈,不同于很多人,我其实没有特别的偏好,在十年职业经历中,大部分时间在做iOS,也会做一些Android和后台系统,目前最希望的是集中精力把音乐业务做好,也了我心中一个创业的执念;谨以此文分享给见过兴衰,但仍然心有热血的客户端同学们——青衫不负踏歌行,莫忘曾经是书生
本文是一些之前的思考总结,正好假期有时间,重新做了编辑整理,很多内容是一两年之前发的,这次保留了我现在仍然认为是正确的东西,也对一些语焉不详的地方做了补充,同时结合朋友们的建议,做了分段和结构化,希望对大家有用
开始之前,大家先读一遍这句话:剑未佩妥,出门便已是江湖,但归来仍是少年
基础篇
纵览
面试挂了一些自己比较努力,非科班,对计算机有热情的同学,自己也觉得比较惋惜;行业很大,希望你们都能找到自己满意的平台;
对于非科班的人,最重要的是基于兴趣多实践,基于实践推动认知,认知到一定高度,要果断查漏补缺,操作系统,算法,编译,都要涉及,操作系统一定要看,而且要深,现代操作系统都大体是统一的思路,在落地上选择了各种具体做法,看懂宏观,会帮助你在学习任何一个方向的时候,提供非常重要的指导作用;对这些理解的深度,会决定你在竞争中的硬实力;
找合适的平台,稳住,积累,上台阶去新的平台;平台的价值要充分考虑它能给你多少自己支配的时间,这是最基本的资源;爬坡的过程会觉得前学后忘,这是知识没有形成网络的必然,要过这一关,自己想办法稳扎稳打,自己开个git,把所有自己觉得理解的东西,写一遍,调试通过并且提交,今后想到什么改进可以继续优化;不要纯软,多了解一些上下游,比如cpu流水线的运行方式;这条路真正有兴趣的人,能做的下来,而且真做好了,可以独上高楼;
如果项目还行,但是承担的工作比较边缘,沟通遇到困难,也不要随便换平台,这个位置做好本职工作,一般可支配时间比较多,利用这些时间疯狂提升,软工那些问题,你的角度都能观察到,当好观察员走的时候问问自己:项目里的所有核心技术问题弄清了吗?没有弄清,弄清再走
如果实在遇到瓶颈,找个差不多的平台,先解决吃饭问题,自己业余做点长期的东西,比如开源框架,自己用的app,常年投入,技术能力和经验也会慢慢起来
剩下就是工程能力,其他能力可以都没有,这个能力一定要强,如果你在项目里承担了比较重要的职责,那么恭喜你,认真做好就行,如果项目还在运转,不鼓励因为几千块钱换平台,很多软件工程的问题,没有三两个年头体会不到;要一边做,一边看前人理论,《代码大全》,《软件重构》,多总结多反思;
管理协调能力不要着急,等技术夯实,慢慢来,不同思路的东西,有些职位也不一定每个人都要去做;这个主题后面也会说,但年轻的时候做对方向、有坚持,比后面年纪大了盼望各种方法论带来自我提升要有效的多
算法
今天面试有人问如何走技术这条路,帮她量化了一些东西,书本里常用算法/数据结构,40种以内,以红黑树这种比较复杂的为例,花2小时没有看懂,不要紧花4小时,4个小时足够在脑中充分演算,且写出代码来实际观测,如果还没弄的非常清楚,再加两小时,6小时,认真的话,一个算法无论天资如何,应该都通透了
这个是一个算法学习成本的上限,就按上限计算,40种常用算法共耗时240小时,如果一天只能抽出来1小时,那么按一个月30个小时计算,8个月,足够成为一个简历里敢说精通常见数据结构算法的人,各种琐事打断,一年足以
算上操作系统,1年仔细把现代操作系统读透,加上设计能力,一年把《人月神话》,《设计原本》,《代码大全》读完,三年,能成大牛的这一批人,这个时间足够了
至于为什么没成,应该多向人性深处找原因
算法这件事其实有很多同学有困惑,觉得学了也用不上,但面试又非得聊,我说说我的看法
这些的本质是对思维稳定性的训练,帮助人类思维适应机器逻辑的一种手段,理想状态是能够获得在脑中充分演算的能力,有的人天生强,不强的人这是一种途径,这个过程的结果也许并不重要,但是过程中需要的专注会让自己思考空间扩大很多,而且有能力在脑中充分演算的人,一般比不能的人能处理更复杂的问题
如果在学习过程中对一些复杂算法无从下口, 无论你的程度高低,leet code 什么段位,有些问题的分析思路是共性的,一些简单方法论供参考:
先明确问题,先自己思考,最好遇到过不去的地方,让你的底层思维开始困惑,这个时候再看分析资料会非常高效
看建模,看迭代,梳理有多少个弄不明白的点,解决问题的时候带着这些看提示或图表
分析循环常用表格的方式,分析动归弄清楚前一个状态和后一个状态的联系什么,数据清理操作发生在什么时候
一个模型理解不了,找不同模型来佐证, 比如,一个算法可以理解为在线性迭代到处打标志,也可以理解为在填表
最优问题容易有些巧夺天工的难以理解的解法,可以先降级成穷举/搜索的思路来观察解的形成,最好能自己写个暴力解来调试
看待问题不要太依赖形象思维(右脑),多用逻辑(左脑),参考数学本身:
数学是一种工具,其中一个作用就是教人如何摆脱感官的束缚来分析本质,线性代数或许还能用形象思维来感受,如果依赖人的感受来直接分析一个超立方体,是不可能的
相信有捷径是最大的问题,很多人的浮躁都来源于此,自古华山一条道
硬的东西我们先到这里,下面我们来说点软素质的内容
能力篇
研发同学要怎么提升自己的综合能力?很多同学可能都会有类似的困惑,觉得自己在某方面不是很擅长,比如对代码我是高手,对沟通总觉得哪里做的不到位
我讲下自己的建议,首先你的认知决定了你的决策空间:
看到了满世界的问题,就容易做事谨小慎微,甚至不做事
看到了满世界的机会,就容易随便冒险
这只是举个例子,真实的世界没有这么非黑即白。那么为什么很多研发觉得自己和生活是有些脱节的?
因为代码里绝大多数问题都是有明确答案的!时间久了,人如果没有主动去平衡,慢慢就相信了这种逻辑
所以当遇到管理,沟通这种和人打交道的任务的时候,就容易有挫折感,如何提升?
认知能力的基础是对复杂事物的理解能力,那么就从这个点入手再加一点点方法论:
首先复杂事物有很多,凡是多因素共同并行作用,导致最后结果不可预期的都算:比如国际政治、金融问题、企业管理等等
可以找一个和你有连接的领域,如果你炒股,可能是金融;如果你喜欢聊天可能是国际政治
没有标准答案,因人而异,选好之后,每天读一些这方面的东西,一开始都很浅,有意识往深入走就好,尽量读深度放弃短篇,读书籍放弃深度;
上次有人问,为什么读书籍放弃深度是合理的?书籍和深度文章都是系统性的思路,但论系统的完备性和整体性,书籍往往都大于深度文章,系统性,是整个世界运行的底层逻辑,kk在《失控》里讲了这么多,在我看只有一个关键论点:
自然是系统,系统的行为不是线性的,非线性的东西,很难做经验上的预判
这类问题,不研究无法做预判,一预判就错;实际工作中,不预判无法胜任工作,而公司组织本身也是系统
除此之外,不要有偏见,不要因为读了现代的东西就否定古人的智慧,我可以读德鲁克,我也可以同时读道德经;而且往往你同时接触的两个领域相隔越远越好
目标只有一个:尽量同时成为两个领域的专家,然后找出共性
好比在世界上打下两个桩,两个桩之间的网的面积和密度代表了你认知的广度和深度;
最后这个趋势可以自加强,比如我读了kk的书,我正好在研究投资,我尝试理解一下企业本身对股价的影响,企业管理对企业本身的影响,企业管理者的哲学对企业管理的影响,哪些企家比较相信失控介绍的逻辑;
这些东西不要追求短期效果,过分追求短期会让人变得极端,适得其反,确保方向正确,长期投入,养成习惯对所有发生在身边的事试图抠一下本质,随着分析能力的提高,会越来越发现自己看到了很多以前看不到的东西;
但本职工作要做好,不要本末倒置
因为所有你接触到的事情里只有本职工作是你了解最深,思考素材最多的:
如果觉得不顺,思考方向可能是问题在哪?
如果顺利,思考方向可能是未来的提升/增长在哪?
慢慢如果觉得很多问题本质相同,那么已经在正确的轨道上了
对问题本质分析的越透彻就越会发现,每天情绪化的时间少了,有效思考的时间多了
沟通能力的答案,不只是口才 管理能力的答案,也不只是项目安排
思考篇
我们先从哥德尔命题出发,第一次看到这个概念还是在黑客帝国的影评里,简单说:
任何形式逻辑系统,都会有一部分问题既不能证真也不能证伪
什么是形式逻辑系统?图灵机模型,流体力学模型等,或者职场里的各种显而易见的价值评判,比如从产品数据推导收入等
那哥德尔命题到底说明什么?
我们不能简单地从规则出发,判断一件事是否应该做,比如:诺基亚在自己的规则里成功预判了关于智能机roi的很多问题,最后被降维打击;类似的例子还有柯达,成功发明了数码相机的原型机,但也成功阻止了自己的数码转型
中国有句话叫“德薄而位尊未可为也”,德在这里可以说成是格局和视野
只盯着现有规则来做各种决策,遇到瓶颈只是小事,甚至可能企业都没了
对于个人来说越是到职业的高级阶段,你可能越是有权限阻止很多事情, 但是很多事情也会带来当下没有被发现的收益
找一个政治正确的理由阻止一些东西并不难,但有些事情未必是坏事,甚至你做了反而团队/公司发展的也许越好
虽然格局是一个不能被定义的东西,来源于一个人的很多方面,天资,经历,读书等都会影响,不过一个问题再复杂,仍然会有它自己的脉络和方向
很多创业者最终都会去看历史,特别是近现代史,因为很多兴衰都是有迹可循的,举个例子,建国问题复杂度大于企业问题,实际操作中受到现实条件限制需要降一级考虑:比如你希望引导好一个团队,可能仅仅看团队管理的东西是不够的,需要看到企业底层/顶层的一些逻辑;同理企业家一般也都很关注国家间的博弈
关于焦虑
觉得这个主题有必要单独说一下
首先有些力量比较强大,只能引导,不能也不该被完全控制,不幸的是,焦虑是这种类型!但在完全无忧无虑的情况下,一个人容易废
不过用焦虑能驱动去做一些简单的小事往往有奇效,但是对于系统性的事情,比如自我提升,不算好动力,任何事情都可以被管理,但不是所有事情都合适用管理的思路来做,好在情绪在这个范畴
好的规划:这件事的内核逻辑是什么,怎么做,做了有什么影响,影响里面哪些是风险 -> 值不值得我这么做
好的预判:风险在什么时候出现,出现了被diss你怎么解释,有权威的人挑战你,你对他挑战的点是否具备比他更深刻的理解 -> 你需要站在他人的角度考虑问题
好的执行:执行过程中反脆弱,推荐去看《黑天鹅》作者的另一本书,《反脆弱》
最后一点稍微展开下,世界是不能用简单逻辑来解释的,所以讲道理不一定随时都有用,那怎么办?
用尽可能大的强韧性,对抗世界不断产生的脆弱性才有可能成
脆弱性的体现可能是这个事只有特定人知道,这个活只能特定人来做等,你做好了前两点,可能这些最终都不会成为问题,因为你会成为某种强韧性
最后,《易经》里所有事情的结果无非吉/凶/悔/吝,也就是说一有行动有让人满意的结果,只有四分之一的概率,这或许也是大部分人安于现状的原因,但是那些勇于改变的人,就是通过一次次行动将事情往正确的轨道上推
如果你身边有这样的人,请尊重他们,因为他们敢在复杂的世界面前仍然做自己
处世篇
任何人的任何做法一定是他(她)的认知框架内被认为当下最正确的,所以不要讨论别人做法的对错,我认为错,只是因为别人认为的对与我不同;而为什么别人和我不同,这是一个非常深刻的哲学问题
一个人永远无法证明自己看见的红色,就是别人眼中的红色,如果真的平移思维,也许会发现在对方脑中这种颜色是自己认知中的蓝色或黄色,只是因为你们给不同名字的颜色起了同一个名字,而且手指着同一个东西说它是红色的,大家才有了红色的概念,而且慢慢觉得这是所有人心中的同一种颜色
从心理上讲,人是很有意思的状态机:生气之前多有恐惧,但是这种恐惧往往转瞬即逝,以至于很多人没有发现,恐惧生疑,疑生毁谤,毁谤生嗔怒;所以不恐惧的人,一般也不轻易生气和随便担忧
刚刚从中国哲学来解释的,现在我们从西方生理学解释下
绝大部分情绪的背后都有一个非常机械的原因,比如体质导致的多巴胺,内啡肽,肾上腺素,血糖,乳酸水平等等,这些东西随便往某个动物身上注射一点,都会引起行为的变化
人也是一样,与其和机械原理抬杠,不如自己随便干点更有意义的事
以前听过一个论见,鸟不鸣使之鸣和鸟不鸣等之鸣,以前相信前者,现在觉得只有后者是对的
我自己曾经犯获得一个错误,喜欢在气势上胜过别人,但很多真正老练的人的心态是:你知不知轻重是你的事,我只想把事情做成,你怎样开心就怎样吧,所以非常长的时间,我一直都没有意识到这个问题,给新人提个醒
很多事都有正反两种解释,理解成正的人或许给你点赞,理解成反的人可能默默鄙视你,如果一个人刻意避免做任何这样的事,他/她的人生将一事无成,有勇气主动迈出第一步,而后有勇气不用别人的看法评价自己,正心诚意,无咎
当人面对巨大的不确定性时,往往会变得正直敦厚
在简单环境中的人,经常会有世界随我操控的幻觉,也容易变得贪婪刻薄
很多事出问题都在于非要给它一个明确定义,比如:工作就是做好这几件事,休息的时候就是应该这样,这些在平时让人找到点虚无的安全感
压力大的时候让人上点瘾,求个小安逸,最终这人要么易怒,要么消沉,所有让人现在舒服的事都是在透支未来
古人云,荆棘丛中回头易,月下珠帘转身难,只要不要刻意趋利避害,也不要妄论是非,自己便得到些安宁
勿以己之长而盖人;勿以己之善而形人;勿以己之多能而困人;收敛才智,若无若虚;见人过失,且涵容而掩覆之
自己职业生涯中不止一次觉得别人教我的没什么卵用,要么是他不知道情况,要么是水平不够,但是如果真的让我找个自己认为可以为师的人,自己是不是一个容易教化的人?现在觉得也不是
未曾长夜痛哭者不足以语人生,时常长夜痛哭者亦不足以语人生,最后,Ego=1/Knowledge
职业篇
写在前面
做人最难的地方就是年轻时候什么都不懂,但是要为很多影响一生的大事作出决定;如果还年轻,希望你不计较得失,为自己热爱的事all in,人生最难得的本领就是知道这个事不完美,但仍然all in,真正成功的是那些敦厚笃实的人,不找安全感,不刻意寻求认同,不在意长远利益或者短期利益,只要能生存下去,不轻易舍弃热爱的东西,多年以后你或许能靠着这些获得想要的自由
可口可乐公司是10万小时定律的放大版,对专业的深挖超过千万小时,垂直优化自己的整个供应链和商业模式,坚持不超过自己的能力圈,最终成就了一个不怕经济周期的世外高手,也许再过几年水果手机已经不卖了,糖水仍然能再卖50年,人亦如此,做自己擅长的,all in,像石头一样,外界如是,依然故我,但是扔的角度对了,水上也可以漂
康威定律
第一定律 组织沟通方式会通过系统设计表达出来 第二定律 时间再多一件事情也不可能做的完美,但总有时间做完一件事情 第三定律 线型系统和线型组织架构间有潜在的异质同态特性 第四定律 大的系统组织总是比小系统更倾向于分解
了解这些有助于正确判断公司组织系统的演化,虽然系统演化的背后看起来是人在推动,但更多时候是规律使然,特别是自己预期成为或者正在成为这个系统的重要节点时,不要有不合实际的主观预期
不少人考虑是否去一家公司,往往会把对方觉得非我不可作为非常乐观的判断,其实正常的组织中,没有人是不可替代的,如果真的非你不可,那么一定有不平衡存在,这也意味着去这里需要忍受或者修复这种不平衡,所以中性的看待这种问题就好
关于有挑战的事
有的人天生做事就会比其他人遇到更多困难,直面困难,用最认真的解法解决并学习才是真正摆脱它的方式,时间是有趣的洪流,今天逃避的问题,明天会换个形式重新摆在你面前,如果被困难包围的人还有一条通路,多半是最有担当的人才能找到
不过只用实力说话的人,和一把锋利的刀无异,在庖丁手里,可以用一辈子,在庸厨手里,只能用两个月,问题不是刀还不够利,而是砍了太多不该砍的东西,所以那一点点收敛和谦逊,决定了自己在事情中是否只是刀
很多时候人对对错的判断取决于对方的身份,对方说话的语气,以及表现出来的气势,而并没有将事情认真判断过,群体在一起尤甚——可能并不是所有环境都允许你直言不讳,当愚蠢的决定要做出的时候,如果无法直言,至少问个能引起深入思考的问题
有的时候加班是减压的最好方法,我想这也许是很多人加班的缘由,但是职场心态可以多几分乐天知命,这样对家人和同事都好
最后,发现结果的错误很简单,发现动机的错误很难,但其中有一条很好用,如果做一件事是因为觉得自己可以改变世界或者帮助别人,那么务必慎之又慎,这种情况多半是自己觉得自己了不起,但最终
想好了,就要果敢行动
安利篇
如果你已经看到这里了,不妨再聊聊客户端吧,没错我是个做客户端的,十年iOS经验,一路从iOS 3.x 做到 14.x,听过很多危言耸听的xx要消失的理论,我来说说我自己对这件事的看法
如果你也招人,你可能不禁要问客户端研发都去哪了?是的,市场上的客户端人才很少,这里最大的因素是资本转向了
我仍然记得,曾经有一段美好的时光,很多有追求的客户端都想去一个小而美的公司,做一些自己爱好又能帮助用户的事情,而且确实在一段时间内这样的公司——真的存在,但昙花一现
不过,我仍然对未来无比乐观,客户端的本质是个人的随身算力,它的承载形式是iOS / Android,或者watch OS,那么未来的趋势是什么?
个人算力的持续提升
算力的提升必然释放更多场景,比如现在一台普通手机的浮点能力,已经远远超过当年NASA发射火星探测器的计算机,所以在手机上才有了AR / VR,端智能这些新场景,而且基于越来越强的安全和隐私的需求,越来越多的事情不能放在云端,也必然带来客户端场景的丰富,所以客户端是永远存在的
好了,看过了星空,我们看看脚下的路,之前写了一篇关于客户端的文章,不了解客户端的同学可以点进去看看当我们在说客户端的时候,我们在说什么
我觉得年轻人追热点不是正确的选择,起码对大多数人是这样;也许你不会为了学习某个平台花钱买一堆昂贵的硬件,还有人说这只是一层皮,不管怎样,一个上能做应用,下能玩底层的地方绝对是一个高手的演练场,内存管理,并发,设计模式,性能优化,一样不少
不该用一个应用运行的设备的大小来判断它的复杂度,我可以肯定的告诉你,手机上运行的很多应用内部复杂程度超过很多后台系统,来吧,设备我们来提供
以上观点大多来自于笔者的职业经验,仅代表个人与公司/团队无关,大家谨慎参考。本人现就职于字节音乐部门,长期招聘客户端研发,感兴趣的同学可以加微信 mushuang_2005 或通过邮箱 moushuang@bytedance.com 进一步交流
关注我们
我们是「老司机技术周报」,每周会发布一份关于 iOS 的周报,也会定期分享一些和 iOS 相关的技术。欢迎关注。
关注有礼,关注【老司机技术周报】,回复「2020」,领取学习大礼包。
最近也开通了视频号,后续会放一些视频内容,大家可以帮忙也点个关注, 方便我们去认证