
大家好,我是徐徐,一个爱摄影的前端工程师,今天跟大家分享一下自己这些年的技术和职场历程。
最近收到各个手机 APP 的生日消息以及短信生日消息,才发现自己要马上满 30 了,因为身份证上是填写的农历日期,所以会提前将近一个月收到相应的消息。现在回想一下工作的几年,觉得也是可以写一下自己的经历的,趁着这个机会好好总结一下自己。以下的一些观点都是个人观点,各位看官不喜勿喷。
我本科专业是通信工程,大学自学前端入门的,因为兴趣和爱好,在大学的时候接触了 ToughtWorks 训练营,从那个时候开始,我才知道一个前端工程师的工作是干什么的,当时会和各个大学的同学在周末聚在一起讨论和学习前端技术,结识了很多优秀的伙伴,也是他们让我对前端萌发了更加浓烈的兴趣。虽然我是通信工程毕业的,当时也拿到了通信相关专业的 offer,但是最后还是选择了前端相关的工作。
这里有一篇文章是关于我之前如何进入前端行业的一个小小自叙。

当时校招选择的公司其实也没有经过太多对比,就感觉来学校招聘的感觉很专业,技术也都很先进,面试官也不错,没想到进去的时候发现才是个外包公司,当时也不知道外包啥概念,一点都不懂。不过好在当时事业部遇到技术转型和改革,要研发新产品,所以也就刚进公司的前半年干外包,后面就去研发组做产品研发了。
第一家公司入职不久就开始出差,去了很多地方。由于刚入职是以移动端 H5 项目为主,所以项目时间都不长,半年多时间去了 5、6 个城市。技术栈以 Vue 为主,偶尔会写 Ionic + Angular 的 App 壳子项目,所以入职前半年基本都是在工作中边学边做,没有人带,完全靠自己,因为当时我们事业部都没有前端,我入职是我们部门第一届前端开发,当时整个公司还是有中台事业部的前端的,但是我认识的也不多,所以可以咨询问题的人很少,除非是非常复杂的问题我会去找人寻求帮助,基本上的问题都自己解决了。因为问问题非常消耗时间,你需要去找部门领导,然后部门领导再去找人,我是那种不到迫不得已的时候不会麻烦领导的人。经过几个项目,自己解决问题的能力真的变得很强,解决问题的思路也变得清晰起来。
去项目上基本上就你一个前端,项目经理基本上对移动端的东西也都不太熟悉,我是入职的时候有专门研究过我们部门比较成型的产品(请其他部门的人做的),所以比较熟悉这一块,另外就是项目上的项目经理会认为你过去就是解决所有移动端的项目需求的,所以谈需求的时候基本上也是我一个人跟客户商量,项目经理基本就前几次旁听一下,有疑问指出一下,后面就你一个人跟了。就这样,我的胆量也变大了,面对客户也变得非常从容,和陌生人打交道也不会太紧张,社交能力也在逐步增强。
在刚入职的半年时间里,其实技术上面的能力没有太多的长进,因为在项目上基本上也就是拿成型的产品模版改一改,然后照葫芦画瓢做出一个东西,大概水平就是对 Vue 整个框架有了一个清晰的认知,能够自己从 0 到 1 实现一个 Vue 项目框架,会使用常规的组件,能封装非常简单的组件,实现一些不太复杂的功能。最主要还是在项目上解决一些棘手的问题,让我对问题不再惧怕,敢于迎难而上。

18 年 12 月份,我们事业部开启了移动端产品自研项目,利用最新的技术框架结合公司的超级 APP 平台对接自己的业务系统实现一个全新的移动端产品。在这段时间里我接触了很多新的技术,不管是前端、后端、还是原生开发,让我对移动端开发有了一个全面的认知,当然在这个项目里我还是主要用 Vue 开发前端 H5。
在这段时间里,我更加熟悉了 Vue 相关的知识,比如组件封装,组件通信,状态管理,自定义过滤器,响应式原理,路由导航,懒加载,打包优化,包括一些更加底层的东西,比如 Keep alive 的原理,计算属性原理,watch 原理之类的,同时对前端工程化相关的知识也有了一个清晰的认知,包括 Vue-cli 脚手架的使用及原理,Webpack 相关的配置,项目自动化构建和发布等。
由于是做的 H5 的开发,所以在移动端的适配开发上也增长了不少的经验,比如视口适配,响应式布局,字体适配,1px 问题,触摸事件适配,图片和媒体资源适配,输入框适配,WebView 嵌入适配,JavaScript Bridge 使用等。
在这个过程中,就感觉自己有学不完的东西,不断的升级打怪,最后看到自己的组件和页面完美的展现在手机上,是一件非常开心的事情,也非常有成就感,这段时间和两个一起开发的小伙伴也相处非常融洽,我们会讨论很多问题和方案,然后会发现在做自研产品的过程中和在项目上是完全不一样的感觉,非常有团队的氛围,这也是我一直向往的工作环境。
移动端的研发第一阶段是在 19 年 3 月份就结束了,也是在这个期间我担任了我们组的副组长,组长是后端,相当于这个组专门是做移动端交付的,有前端也有后端。在 4 月份的时候,部门领导安排让我去负责另外一条产品线的前端开发,但是这次安排的是 PC 端的开发,技术栈是 React,当时接到这个任务是又激动又紧张,激动是因为我又可以接触新的技术栈了,紧张是担心自己写不好,毕竟自己之前没有写过 React 的应用,不过好在后面都顺利度过了难关。
当时 PC 端的产品条线的前端负责人是另外一个部门的,我们的办公职场还不一样,领导安排我们先去那边熟悉一下 PC 端的前端框架,于是我就带上我们组刚招进来的实习生和我一起去另一个职场一边开发一边学习了一周,很快就上手了。Vue 和 React 虽然编写代码的方式有所差异,一个是模版式绑定数据的开发模式,一个是声明式渲染和组件驱动的开发模式,不过很多思想都有相似之处,比如组件开发,声明式编程,单向数据流等,最核心的点就是数据驱动视图,只要有这个认知了,基本就没什么障碍了,其他的无非是一些框架上的特性和相关生态工具的应用。
在开发 PC 端产品的这个期间,整个产品团队采用了敏捷的开发模式,有了一个正常的研发流程,角色开始多样化起来,有项目经理,产品经理,前端,后端,测试,开始接触了整个敏捷的流程,站会,迭代总结,头脑风暴,看板,泳道图等。开始有了团队协作,代码管理,代码 Review,技术方案讨论,技术分享等动作。也是在这个期间,我们组的人员逐渐扩大,很多新人都会先来我们这个产品条线学习一段时间,然后去项目上,有点培训中心的概念,也是在这个期间,我慢慢的学会了如何引导新人,如何让新来的小伙伴快速上手项目,形成了一套带人的 SOP。
经过大半年的开发,我们所研发的产品终于逐渐成型,到后期团队的人员逐渐减少,都慢慢被安排出差去实施项目了。后面我也被安排到新的职场去负责整个事业部的移动端技术交付,这个团队大概有 5、6 个前端,两个业务产品负责人,开启了移动端交付的历程,但是这个时间并不长,大概就做了两个月。
后面由于之前的自研产品开始售卖了,需要做一个标杆项目来打出旗号,于是又出差去深圳在客户职场对产品进行特性化改造,以便精进这个产品,项目上的成员还是之前团队的核心成员,大家相处也都挺愉快的,周末会出去到深圳周边团建,而且那段时间刚好是冬天,在深圳的冬天真的非常舒服,也算是一段惬意的时光,快乐的时光如此短暂。19 年年底从深圳回到老家过年就开始了疫情,疫情之后领导又把我拉回去负责远程中心整个的前端交付,这一交付就是一年多。

我主要负责前端相关的交付,有移动端和 PC 端,大概工作就是安排一下工作任务,然后处理一些小伙伴不好解决的问题,同时做一些产品相关的研发,以及偶尔出差去和客户过一些方案之类的,也是在这个期间,我们团队扩大到了 15 个人。我主要的精力是在移动端的交付上,安排了另外一个小伙伴带队负责 PC 端前端的交付,如果有棘手的问题再一起想解决办法,这样的话自己的精力好管理,也可以把注意力放在难点和技术的钻研上。
在这个期间,我学会了小程序开发和 Flutter 的开发,小程序开发是因为我们团队还承接了一款 C 端小程序的研发,Flutter 的开发是因为要做一个技术 Backup,因为后期我们自研 APP 壳子选择了 Flutter 框架,但是这个开发人员是从公司其他部门借调过来的,所以我们部门就安排了我学习并一起合作开发一部分功能。
在这个期间其实项目上的交付问题都没有什么挑战,小伙伴们基本上也是一个人对接一到两个项目,也都能应付过来,也不用过多的操心。这段时间最大的成长就是如何合理的安排自己的精力,如何安排自己的时间,如何在琐碎的项目交付中抓住风险点,如何信任小伙伴,如何安抚小伙伴的烦躁情绪,如何和项目现场的人沟通,如何远程对接需求,如何交付需求。

21 年我进入了第二家公司,开始做一个高级前端开发工程师。在 21 年这个期间其实都比较平平无奇,就正常的开发流程,需求评审,KO,开发,测试,发布。两周一迭代,传统的中后台部门,每天按部就班,做一些后台页面和一些 C 端的 SDK,技术方面没有啥成长,最主要的就是熟悉了互联网大厂的工作模式和氛围。
到 21 年底,我和另外一个前端同事开始计划搞点自己的东西,部门里面就我们两个前端,想想可以做什么呢,于是我们就盯准了我们部门负责的一个桌面客户端软件,由于功能比较简单,但是迭代发版非常麻烦,因为都是原生技术,我们就想是不是可以用新的技术取代它,提高开发的效率,增强自己的技术板块。从那时候起就进入了 Electron 开发的时代,我们两个费了很多力气把现有的桌面端功能都用 Electron 实现了一遍,利用空闲时间,大概做了两三个月,就把核心功能做出来了,后面获得了领导的支持,然后就开启了漫长的 Electron 研发之旅。

在 Electron 项目开发的期间,我们部门承接了一个公司级的创业创新项目,负责人是部门领导,所以中间有半年多的时间都被安排去做了这个创业项目。这个项目是一个 C 端项目,主要就是用跨端小程序框架开发,同时发布微信小程序和 mPaaS 小程序,我就是主要负责这个 C 端相关的前端开发。
在开始项目之前,部门老大拉项目组成员去了项目的启动聚餐仪式,打了很多鸡血,画了很多大饼。目的就是让大家拥有非常多的 passion,然后拼命干,我大概预料到后面至少三个月长期加班是常态了。
果不其然,MVP 版本出来的时间非常赶,差不多只有一个月时间,项目组办公室每天都在白板上更新 deadline,整个项目组产品和研发没有那么多规矩,很多需求都是口头描述了之后,然后简单记录下来就开干了,需求评审的时间也都非常的短,大家的目标就是赶快做出 MVP 版本交付,时间非常紧张,每天都在疯狂写代码,思考的时间也变短了,很多都是以最快的方式实现,核心交互做好了就可以了,大概就是这节奏持续了一个月,第一个版本终于上线了。部门老板对时间挺满意的,至少按时完成了第一阶段的目标,有些小瑕疵也能接受,因为这个产品前期灰度的时间比较长,需要有一个完整的 C 端产品生命周期,所以后面趁着灰度的时间,一边改 Bug,一边写新的需求。
MVP 版本其实是没有 UI 设计师的,是产品原型设计师兼职了一部分 UI 设计师的工作,所以都比较粗糙,上线的时候 UI 走查也都比较粗糙。这种 C 端的项目前期交互都会变动比较多,面对如此多变的交互和需求,只能把一些模块和组件粒度拆得细一点才能更好的适应这种多变的交互和需求,如果耦合严重的话,交互大改动就会非常被动,这也是我在第一份工作中领悟到的,所以这次我就以能拆则拆的原则去构建整个项目的,前期会稍微痛苦一点,但是随着功能的增多和需求的变更,到后期改动起来会省力很多。
在这个期间 MVP 版本上线其实不是最大的挑战,是后面全量灰度的时候才是最大的挑战,C 端项目不像后台系统,需要时刻监控错误,上线不能有问题,所以每次发版都会加班到很晚,凌晨灰度发布是常事,部门老板直接坐在我旁边看我发布,压力巨大,产品经理还会拍我们的「创业 Vlog」,记录这种时刻。就每周四就是艰难时刻,大概有一个月,每周四都是要到凌晨一两点,然后周末加班,当时真的是干到想辞职了。但是 C 端带来的成就感和喜悦感是不一样的,自己做的东西会被大众使用,PV 和 UV 非常高,那时候就觉得前端的价值就在这里吧。
在这个期间,我看到了一个互联网产品的完整生命周期,包括前期的商业调研,竞品对比,产品方案设计,技术方案设计,营销造势,如何拉取第一批种子用户,如何进行用户裂变,如何不断升级体验,如何提高用户交易率,拓宽了视野,而不是仅仅局限于技术。
当然在技术方面我也有所精进,对跨端小程序的开发有了更加深入的理解,开始使用 TS 构建一个完整的项目,对底层做一些特殊的不同端的方案兼容,对 Canvas 绘图技术也有了深入的研究,更加了解了一些动画的手动实现方案,纠正和把控每一个 UI 细节也让我对 C 端产品有了一个全新的认识。
虽然在这个过程中收获了很多,但是遗憾的是这个项目在年底的时候就结束了,记忆很深刻,某天上午还在讨论技术方案和实现细节,下午就拉会说这个大老板准备放弃这个产品了,最后这个项目死了。

总体来说做 Electron 的这段时间是我技术成长最快的时候,由于应用是公司内部应用,所以有很多时间去打磨,有很多时间去研究技术方案,所以知识的深度和广度也都在增长。
这段经历我之前写过一篇文章,没想到在掘金技术论坛上爆了,在公众号里面的阅读量也很高,我这里就不再多写了,感兴趣的朋友可以点击下方链接查看。

24 年最庆幸的就是自己开始写作了,虽然都是电子垃圾,但是我有的时候也乐在其中。我平常并不是一个爱记笔记的人,但是我会在浏览器书签里面收藏一些觉得好的个人博客或者文章,看了这么多,我发现很多优秀的人都是会长期记录的习惯,不管是技术还是生活。
有的时候想想有空闲时间静下心来去梳理自己工作中用到的一些技术方案和遇到的一些技术问题以及知识也是一种成长的方式,因为我经过实践发现,长期写文章会启发一些新的思路,精进自己的知识体系,之前的知识是东一块西一块,问题也是东一个西一个,并没有成型的体系,但是写文章之后你就会不自觉的去梳理自己的整个知识体系,然后呈现出一篇完整的文章出来。
写文章我的初衷是先服务自己,其次才是取悦他人,帮助他人,如果出发点不是服务自己我可能觉得很难长期坚持下去,先解决自己的需求,再解决其他人的需求吧。
这里说说写作更新的频率,日更的执念之前是比较深的,刚刚在公众号里面写文章的时候我基本是日更,日更了三个月后感觉真的写的东西越来越粗糙了,后面想着还是打磨一下才行,后面就慢慢保持了周更的节奏,一周一篇文章对我来说还是可以的,即可以打磨文章,另外就是写文章的时候思考的东西会多一些。

从毕业到现在想一想自己这 6 年的前端技术职场生涯,喜、怒、哀、乐都有相应体会,前端带给我更多的还是快乐,至少现在看来我还是不厌恶这份工作的,对它还有热爱,虽然有疲软之时,但是都会休整好后再重新出发。一份职业如果让人痛苦不堪,可能你需要想想自己到底适合不适合,当然有的时候为了生存会忍受一些痛苦,但是我觉得不能一直痛苦,至少对于我来说我肯定受不了。
另外就是说说前端开发的天花板,当然也不是说前端开发的天花板,整个程序员群体的天花板吧,对于领域内能做到前 10% 的人,我觉得是没有天花板一说的,但是大部分人很难做到当前领域的前 10%,对于普通人这个职业都会面临大龄被裁的风险,如何做到一直拥有竞争力,我想各位聪明的看官都或多或少有自己的一些想法。
个人认为保持职业竞争力确实需要多方面的努力。首先是技术能力的不断更新,技术迭代非常快,框架、工具、最佳实践几乎每年都在发生显著变化。保持学习热情和学习能力,关注行业趋势,及时学习新技术,是程序员职业生涯中最重要的能力之一,当然也不是都需要全部学习,但是你得基本的了解,毕竟现在 GPT 可以让你一天就能了解一个新的东西。还有就是算法,这个就不多说了,懂得都懂。
除了技术硬实力,软实力同样重要。比如项目管理能力、与团队沟通协作的能力、解决复杂问题的能力,这些都是资深开发者和初级开发者的显著区别。很多人停留在编码阶段,而优秀的开发者能站在更高的视角思考产品和技术。程序员到后期都是需要自己去担当 PM 去拿一个结果,但是有的时候发掘项目并不容易,取决于团队的环境,因为很多时候技术还是资源型人才,大部分时候是充当技术担当的角色,要担当 PM 需要整合各个部门的资源,然后一起去完成这个项目,不仅需要你的影响力,还需要向上管理能力,跨团队沟通的能力。
另外就是职业发展中,个人品牌建设也越来越重要。通过技术博客、开源项目、技术社区分享等可以逐步提升自己的行业影响力,这不仅能拓展人际网络,也能为自己的职业发展创造更多可能性。这也是我现在在做的一个事情,通过实践我发现真的可以认识很多同行,和他们交流的时候发现一个技术在不同业务领域的应用和挑战是不一样的,可以从中拓宽眼界和技术视野,如果在同一个城市的话还能成为朋友,这些后面都可能成为你的人脉和资源。
当然,保持职业竞争力也需要对自身有清醒的认知。了解自己的优势和短板,有针对性地进行技能提升,寻找自己内心最重要的感受,而不是一味听取外界的声音。在此基础之上也要有开放和谦逊的心态,不断在外界和自己之间找一个平衡,树立自己的核心认知,一个不会被他人左右的核心认知,我觉得这也是一个建立自信的过程。
对于大龄程序员而言,转型和自我升级是应对职业发展瓶颈的重要策略。有的人会转向技术架构、技术管理岗位,有的人会深耕某个细分领域成为专家,还有人会开始创业或者进行技术咨询。关键是要找到适合自己的发展路径,大路千万条,总有一条适合自己的。
另外心态很重要,之前和一个朋友聊天得到的一个观点:生活不是未来,也不是过去,而是此刻。我觉得这种心态也是很好的,做好这一秒这一分钟这一天就行,昨天都过去了,明天还没来。当然这个也不是说完全不管过去和未来,只是在看待一些事情的时候我觉得可以用这个观点去看,这样人会轻松一些。后面我才发现这个观点是《被讨厌的勇气》这本书里面的一段话:人生中最大的谎言就是不活在「此时此刻」。纠结过去、关注未来,把微弱而模糊的光打向人生整体,自认为看到了些什么。你之前就一直忽略「此时此刻」,只关注根本不存在的过去和未来。对自己的人生和无可替代的刹那撒了一个大大的谎言。
没想到断断续续得写了 7000 多字,我想这大概是我大学之后写得最长的一篇文章了,各位看官如果看到了权当缘分,里面的观点不喜勿喷,如果有同感可以和我交流。最后来一句话与君共勉:路漫漫其修远兮,吾将上下而求索。