正文开始
成长永远不是一种结果,而是一种累积效应,更是一种习惯,每个人都时刻在累积,但成长力度却相差甚远,原因就在于特定客观环境内,是各种束缚导致自己打破不掉习惯以及打破后不能坚持。要突破就要从工作内外这两个战场下手,工作内是最佳的成长之地,而工作外是工作内所不能提供的试验田,可以有更多的涉猎与想法验证。
成长本质是突破天花板
几乎每个人都遇到了成长受限、成长瓶颈、成长迷茫的问题,每个人的原因背景都不同,比如:
转行做前端,在大公司里,业务与团队环境趋于稳定,找不到成长机会,与同龄人也有差距,心有不甘想要破局,看不清楚从哪里做起,坚持下去。
从事前端 1 年,公司业务偏外包型,没有组织及主管对自己直接负责,团队归属感弱成长慢,较强的跳槽意愿,近期简历投递不少,但效果不尽如人意。
从事前端 4 年,有转管理的机会,技术属于上升期,在这样的十字路口,面对业务已是熟练手,想要大发力找不到发力点,思考蛮多但仍有困惑,感觉遇到了职业瓶颈,希望走出舒适区。
14 高中毕业,培训 4 个月 UI 后发现自己更喜欢代码,然后自学转前端,后又自学 PHP、JAVA 等基础,但效果都学得不是很理想。
17 年毕业,两年前端经验,第一年就分别在两家公司工作,面临跳槽频繁的职业发展问题。
就职于一家房地产相关的互联网公司,工作时间近两年。技术部门不是主导,团队中前端虽然是业务主导,但彼此之间协作较少,基础建设和团队配置较为落后。近期业务繁忙而人手不够,技术提升也十分有限。
平时微信上我也会收到非常非常多这样的困惑:
大佬,我想请教你一个最近一直困扰我的问题,我想问问你如何看待繁重的业务和个人技术成长之间的矛盾,繁重的业务是建立在jquery这种特别老旧的技术之上的,而且领导要求维稳,这就限制了在业务中成长技术的可能性...同时个人技术成长又很重要,毕竟出去面试前端人家不会问产品业务,只会问一些技术,这就造成了一个很严重的矛盾...是不是只能找一个同样看重技术、关注技术成长的志同道合的团队...
那时候所整理的业务应用端和背后的技术,已经多样到眼花缭乱,而要挑出来押注的技术方向是需要长期的技术栈过程发展,然后我们又整理了第二张图:
将两者结合后,我们发现针对不同的业务场景,不同的技术栈从陌生到能拿来干活,到运用熟练,都有一定的时间周期,比如对于普通的前端工程师,要把 H5 或者 小程序玩的比较溜,需要 1 年以上的经验,而 iOS/Android 则需要更久,所以哪些技术栈是时间长度相对可被接受,也就是哪些学习成本可以被接受是你需要思考的,思考清楚后,再去选择,会更有侧重,然后再来看不同的技术学习成本背后,哪个更贴合自己。
求变之前要先认清自己
我是谁?我的身份是?未来我想要做什么?当下我可以做什么?我擅长什么?我还需要学会什么?
诸如此类的终极拷问,建议大家在每个深夜难眠的时候,都问问自己,在每个聚会的酒后,都问问朋友,它的答案永远在变化,也永远没在变,时间越久思考的越久经历也越多,就会距离它最真实的答案越近。
比如 “我是一个四线城市来北京的前端小菜,北漂三年半在小公司做营销活动页面开发,未来我想成为一个能独当一面的资深前端,当下我可以积累项目经验,我擅长发现团队及工作中的问题,我还需要学会很多前端的热门框架和基础知识” 这样的命题,大家可以找张纸把问题写下来(重点:一定动手写下来),开始分析:
我到底想不想成为这样的前端?是一般想,非常想,还是撕心裂肺的想?
我知道资深前端要具备什么能力么?是要会一些框架,会一些思想,要有哪些框架,要有哪些思想?
我知道独当一面的意思么?是独立做项目,能带人,还是独立完成分配的任务,还是经验丰富?
我的强项是什么?除了发现问题,还有什么?解决问题能力如何,思考深度如何,沟通能力如何?
我来北京为了什么,去上海北京厦门和杭州行不行?是什么在牵绊我约束我,是朋友还是面子还是勇气?
我过往的跳槽经历和项目经历,哪个对我影响最大?是什么影响了我,合作流程、他人还是某件事?
我这些年过的开不开心?开心是为了什么?不开心是为了什么?哪些不开心最难释怀?哪些回忆更甜蜜?
我想要做前端的初心变化了么?为了更好的用户体验,做牛逼的产品,为了生计,为了编程兴趣?
我最能坚持做的事情是什么?运动、听歌、看电影、发呆、闲逛、看书、看抖音玩微博,还是旅游?
我离开做前端行业要靠什么生存?写书、做运营、转产品、回老家开店、找人创业?我有信心么?
我最不能忍受的事情是什么?别人的诬陷、业务方的强势、老板的冷漠、合作方的甩锅还是没有成就感?
我知道 Vue/React 要看源码懂原理为什么没掌握?全部时间被压缩干净了,还是没韧劲啃不动就放弃?
我知道程序员也需要社交为什么自己宅几年不出去?是我习惯满意了当下的生活还是失去了进取的动力?
我知道能力弱会薪资会但看别人拿高薪为什么会不开心?是我希望少劳多得,还是发生在我身上的都是不公平?
...
其实有太多太多的问题,我们可以尝试问自己,但我们往往找别人去问,都会挑选跟自己内心与未来无关的话题,比如我选框架 A 还是 B,我是重构还是保持,我是转产品还是转管理....其实所有的答案都取决于我接下来 3 ~ 9 个月具体的行动,这些答案来源于我的原动力以及我规划的最优或者最可执行路径,可一旦我们眼睛看到 9 月后的结果,而忽视这个可执行路径,甚至忽略我的原动力的时候,结果就变得非常惋惜,那就是我竟然整个思考过程,我也就压根无法了解自己的真实诉求和真实能力。
习惯养成与定目标计划
在经过深思熟虑后去制定的目标成功的概率更大,而脑袋一热跑出来的目标往往会泡汤,泡汤到也罢了,这会让自己陷入定目标 - 执行难度过大 - 放弃 - 再定目标这样的死循环,信心和成就感一天天挫败下去,就变成了今日的自己,晚上想千万条路早上起来走原路,越来越麻木越来越气馁。
我的建议是,在定一个目标时候,比如半年内就要看完 6 个框架源码或者写博客,那么要考虑自己有没有阅读代码和写博客的习惯,如果从来没有,那么这个目标就有点激进,比如对于看代码,有效的做法是,先逼自己用 2 周时间,最多一个月时间,在相对固定的时间段去阅读源码,如果用两三周,发现自己完全坚持不下来,那么这个目标就要修正,如果自己坚持两三周慢慢形成了阅读代码的习惯,并且也从中受益获得一些兴趣和成就感,这时候才是要定目标的时候,因为这时候,你的习惯正在养成。
当你有了一种正在建立中的习惯或者成熟的习惯,也定了具体的目标后,就可以定具体的计划了,计划就是行动指南,要一板一眼的去执行的,坚决不能马虎大意,最好是一条条的写下来,比如:
每周晚上 10 点钟,花 20 分钟粗读 React 的生命周期函数源码
每周六花 1 个小时,对本周 5 天的源码阅读及当时的笔记进行整理汇总,绘制函数关系图或者原理图
每周日花 2 个小时,针对本周阅读源码遇到的问题进行深入研究,及本地用代码测试模拟甚至模仿
然后再把这个规律性的事项,分解到每一天,每一天都要打一个对勾,任务才算完成,完成了要给你自己一个激励,比如连续 5 天完成,可以奖励自己周末去看场电影,如此这般会有很多像打游戏闯关的奖惩细则,最后叠加进去到每日的手机/电脑/智能手表的行程中,给与自己强力的提醒,我相信如果这样能坚持一个月,也就是将近 100 天,一个习惯大概率就能养成了,就可以定第二个目标去养成第二个习惯了。
所以习惯和目标及计划的关系是,定目标前要尽可能先养成一个潜在的习惯,把自己的底线测试出来,然后调整目标,再拆解目标形成规律性的计划,最后把计划完成跟奖惩关联起来,并通过软硬件来跟自己进行提醒的互动,这注定是一个略显单调的过程,但这一定是一个越坚持越好玩的过程,等我们的习惯训练有了雏形的时候,我们才会真正启动持续成长这件事情。
训练稳定的思维路径
我们前面对自己有了更客观的认知,也培养了完成目标的习惯,这两个前提条件就成立了,还缺第三样东西,就是稳定的思维路径,最刻板也最简单的思维方式就是穷尽式的提问,也就是前面认清自己这里,我用列举问题的这种办法,来让自己不断的接近某一个真相,那么面对任何一个困局的时候,都可以用这种方法。实际上,当你把几十个问题都回答一遍的过程中,你可以继续写下更击中灵魂的问题,而这次问题写下去的时候,往往答案就自然浮出水面。
提问的套路可以更简单一些,就是 What Why How,这个问题是什么,当前的真相是什么,为什么发生,为什么走到这个地步,基于这些原因要如何解决,无论任何事情,都逼自己去捉摸它去思考它的前因后果,慢慢会发现自己会变成一个喜欢上思考和善于思考的人,再也不是之前的那个鲁莽的毛头小子,看问题只看负面看现象只看表面。
认识自己、习惯养成、思维训练这三个要成年累月持续的做,当这些都逐渐变成长在自己身体内的一种能力的时候,所以你面临的问题都不会让你像之前那样焦虑,在做完这么长铺垫后,我们再来看如何获得持续的技术成长。
工作内外的技术成长
我们大家如果把小册所有文章看完,一定会有很多的启发,但对于技术成长这件事,还是会觉得缺少了点什么,业务忙起来什么都够不上了,连续 2 个月可能就混混沌沌的过去了,1 年可能不知不觉的过去了,又或者自己对于技术的选型始终摇摆,一个月就摇摆过去了,又或者自己想做的事情推不动,东拉西扯的一个月就又过去了,相信我,所有的这些经历我都经历过,我也相信几乎所有的工程师都有这样的经历。
开始讨论前,我必须亮出我的核心观点:成长是经常不符合预期的,请记住,它大概率是不符合预期的,原因是自己的预期本身是非常主观不准确的,同时成长只是过程的积累并不是一个很直观的结果。
基于这样的背景,我们希望达成的共识是,无论成长是否预期,我都希望有持续的成长,同时盼望奇迹的发生 - 就是远超预期的成长会发生在我是身上。
工作内的成长主要来自项目
带着这样的期望,我们回到工作内工作外会发现,所有的成长最核心的过程指标就是项目经验,工作内天然就可以沉淀,那么如何沉淀或者挖掘成长点呢?
很多人在面试中会被问到一个问题「你做的项目有什么难点」。可能大家会把思维局限在我做的这个业务有什么难的地方,我用了什么牛逼的技术去解决了业务上的什么难题。我相信大部分人不会有这样的经历,由此会觉得这个问题很难答。那么这个问题其实就可以引申为我们如何在工作中、业务中发现问题并得到成长?
如何把业务实现在大部分情况下不会是一个难题,但是如何把业务中相关的组件、逻辑等等可以复用的东西抽象出来,这就是一个难题了。你可以通过学习比你厉害的同事的代码,也可以学习这方面业内顶尖的库是如何实现的,这就是在工作中学习及成长。
在实现业务的过程中,大家肯定会使用各种各样的库及框架。那么当我们熟练使用这个库的时候,就应该尽可能的去了解常用的库的实现原理。我们可以通过文章去了解,也可以通过阅读源码去了解,这也是在工作中学习及成长。
实际上大部分工作场景中的项目,对他深度的思考持续的思考都会带来较大的技术成长,但往往我们没有耐心和动力去做这件事情,因为会有雇佣心态,也就是你付我那点工资,凭什么我想破头皮去捉摸怎么优化它,这就等于是把自己拦到了池子之外,公司付薪水(无论多少)是购买了你的时间,而你的成长是基于这些时间如何在池子里学游泳技能,池子大小水温深浅甚至形状你都很难有控制权,但蛙泳仰泳自由泳甚至闭气潜水这些都是自己说了算,如果这些都玩溜了,去任意一个池子都能如鱼得水,不是么?
前文已经介绍了很多在业务中找技术突破点或者机会的案例,再来举两个更简单的案例让大家感知下 “工作环境中成长的机会无处不在” 这个观点:
如果你的团队每次发布都要上服务器动手,除了发布系统外,可不可以有邮件和钉钉提醒,来推送给相关人,那么这个推送功能有没有可能做成一个独立的消息提醒中台系统,任何发布无论前后端都可以接入这个平台,然后在这个平台上配置应用与应用相关人,任何发布都会触发这个消息提醒服务,又贴心又实用,开发这么个系统既有前端也有后端,如果全部是自己动手做,哪怕是在下班后加班做,也岂不乐哉,因为是为工作打造的贴心功能,也大概率不会遇到阻力,同时它还有价值,自己技术也可以有更多的尝试,这样就是双赢的结果。
如果觉得上面的距离业务有点远,那可以再贴近一层,从一个项目的开发、联调、测试、上线、监控全链路来看,一定能找到无数的流程串联环节目前团队是缺乏建设的,比如小菜从开始用 RN 写 APP 实际上在下图中每个环节都有问题,但直到使用 2 年多后,我们开始意识到并开始把它的全链路工具全部开发并且串联起来,才形成了一个 APP 端算是完整的研发流,参与研发的所有同学都获得极大的技术成长:
所以工作内,不仅靠耐心,还要有不怕吃亏的心态,更要有善于发现的双眼,无数机会都在你面前,都可以持续不断的带来成长,同时给自己团队和个人带来更多效率和体验的提升。
工作外的成长主要来自尝试与思考
工作外的成长更简单易操作一些,往往就是技术储备、技术尝鲜和总结思考,技术储备一部分是为了自己为了的职业考虑,比如学习 RN/Flutter/Go 等,另一方面也可以是为了自己公司业务未来的可能性领域,比如 NodeJS/Taro/MPVue 等等,所有感兴趣的方向都可以去学习储备。
另外就是自己的想法,可以把他变成现实,比如一个行程提醒小工具,一个萝莉妹子叫起床小工具,一个自动生成周末食谱的工具等等,任何一个生活痛点和创意想法,都可以动手把它实现出来,前后端可以一起做,技术栈可以激进,所有的这些尝鲜都会带来技术视野的扩张,也会带来技术深度的沉淀。
最值得尝试的就是思考和总结,把任何自己学习的框架,看过的书,做过的项目,甚至解决过的 Bug,都可以有序的整理起来,把这些整理变成文字和图表,来强化自己对于技术的记忆,所有的这些记忆重复训练的次数越多,对于他们的理解和运营就越娴熟,往往最慢的反而是最有效的。
小结
成长是一个永恒的话题,互联网几十年来,无数的新人问成长,也无数的新人变老人,有的混成一方大拿,有的混成螺丝工头,抛开经济环境、行业趋势和公司经营,更多时候取决于我们成长的是一些学习方法,更根本上依然是我们对于自己的理解、规划和持之以恒的执行,这里面无关运气更关乎实力,不是环境带来的成长去选择你,而是你选择在任何环境中都能成长,具备选择权后,剩下的无非是规划、执行与坚持,无它!
最后大家可以关注我或者关注下我的专栏给小伙伴们带来更多精彩的内容
https://www.jianshu.com/c/76c4c7b817f8