5

普通技术人的成长路径 - 一位客户端老兵的经验之谈

 2 years ago
source link: https://mp.weixin.qq.com/s/IrSQyyc0J3SXBuWs9M3SYA
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

普通技术人的成长路径 - 一位客户端老兵的经验之谈

Original 牟爽 老司机技术周报 5 days ago
收录于话题
#软素质 1

牟爽,早期在腾讯,阿里等互联网公司从事移动端的开发工作,后来在平安,恒大做过两个内部创业项目,目前就职于字节跳动音乐部门客户端团队,团队也在三年左右的时间完成了业务从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 或通过邮箱 [email protected] 进一步交流

我们是「老司机技术周报」,每周会发布一份关于 iOS 的周报,也会定期分享一些和 iOS 相关的技术。欢迎关注。

老司机技术周报
老司机技术周报
每周定期整理与发布业界资讯、开发工具、开源代码、学习资料、求职招聘信息。
221篇原创内容
Official Account

关注有礼,关注【老司机技术周报】,回复「2020」,领取学习大礼包。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK