Logo
Published on

代码即人生

Authors

蓦然回首,十年代码路。走过万水千山从当初的切图仔成长为大厂的高级前端工程师。一路走来经历了不少项目,大多数到最后还是挂掉了;写了可能有数十万行的代码,终于还是没实现程序猿/媛的终极理想 -- Making the world a better place。

image

强推美剧《Silicon Valley》,程序猿/媛必看!

2015 年 2 月 7 日,过年前夕,从香港跑来深圳签下了人生中第一份“卖身契”当时初出茅庐啥也不懂,盲目地相信了一个从腾讯出来创业的人,加入了一个不到 10 人的小团队。做的项目也挺杂,既有老板自己想做的东西,又有为了团队生存下去接的活。那个时候哪怕是接项目做也是真的赚钱,一个 PC 端的项目,一两个月的时间,直接收几十万,而两个月的成本,应该也就几万块。

人都说年轻真好,是一点不假,那个时候 9106 也不觉得有多累。记得有一次回长沙出差一周,愣是没回家,有一天直接通宵到第二天九点才回酒店睡觉。就这样折腾完,睡几个小时又起来干活了。

image

当时对前端的理解十分浅薄,觉得自己的工作就是把设计稿转成 html+css,再配合一点 JavaScript,让页面能动态加载数据就可以了,也就是以前很喜欢拿来调侃前端的词 -- 切图仔。还很清楚地记得当时写完样式之后就把代码文件给后端同事,让他们去用 php 填充数据,反馈的问题大多是类似轮播图组件的样式不对、列表项里哪个展示文字的地方没有兼容等,至于业务逻辑几乎不需要接触。

所以那段不到一年的时间里,工作上算是完全被人推着走,没有多少大局观,只想着保证自己做的页面在观感上是舒适的,交互上最多考虑一下什么时候用 loading,从某个详情页回来如何定位到上次离开时的位置等这些很细微的交互问题。也许正是这段时间在细节处的折腾,反而帮我在之后的工作中养成了多关注细节的习惯。

一段时间后,终于发现小作坊的老板确实不靠谱。于是,接下来的两三年先后在两家公司稍大一些的前端团队中工作。从这里面开始了解前后端分离、前端架构、接触 MVVM 框架等新东西。在这几个团队里,逐渐学会了如何真正地完成一个前端需求 - 从用户的角度出发,用最低的认知成本了解如何使用一个功能。

而我对前端的认识也发展到前端不仅要还原设计稿,还要让页面真正地动起来,用 JavaScript 让用户可以在页面上体验到更流畅、更酷炫的效果;同时认识到前端也是一种数据库的可视化实现,通过各种表单、表格等形式实现用户对数据库的 CURD 操作。

在这段时间里,不仅在专业技能上有第一次较大的提升,也是工作之后人生观第一次被重大重塑的时期;认识到 996 能赚得更多,但是身体可能顶不住。还记得有一次晚上 12 点才下班,刚上的士后排,心脏像漏了一拍一样,然后一阵轻微的绞痛。那一刹那,脑中一片空白,人也呆若木鸡,过了几秒钟才缓过来。经过那一次之后,我和自己说,加班可以,加班到 12 点 -- duck 不必了。

image

而且由于专业技能的提升,逐渐地开始影响自己对其他程序猿/媛的看法;文人相轻的心态在这段时间达到了顶峰不仅觉得自己的代码独一份的优秀,甚至觉得去大厂也都是随随便便的事,大厂人的代码水平也就那样了当然现在回想起来,肯定是年轻气盛的,当时真有种郁郁不得志的感觉。

这个阶段在最后一个团队中,算是和当时的 leader 有点相看两生厌的意思。对方觉得我工作量不饱和,我觉得团队对人太不尊重,不过最终也没有撕破脸皮,算是好聚好散吧。

后来去了一家 P2P 公司,看着好像踩到风口了,但时间却到了 2018 年 4 月,入职后没多久 P2P 业务就不行了,后来想转型做保险业务也没有多少起色,算是有点 49 年入国军的意思了。

虽然没赶上公司业务上的辉煌时期,但是在技术上还算是有些长进的,特别是在 2019 年 6 月,去新加坡参加了一次 jsconf asia,见到了当时的技术偶像,人称鱿鱼丝的 EvanYou,也算是追星成功了。

image

其实这种会议更多地像是给全球的开发者一次线下面基的机会,因为演讲内容不是有多深奥的技术点,更多的是前端开发者们在前端领域做了些什么样的尝试,可能是对 CSS 的新功能的尝试、可能是前端结合机器学习的尝试、甚至有一个老哥的演讲内容是用自己的理解重写的 react hook 的基础实现等等。

参加完这个会之后,心里对全世界的开发者有了更深的敬意,觉得作为一名程序猿,最让人有成就感的不是创造市值多高的公司,而是能在开发者的圈子里做出多大的影响力。回来之后还在公司的前端团队里做了个小分享,里面提到一个词:COP - Community Oriented Programming。

image

那段时间对“影响力”这个事有些痴迷,虽然最后也没能真正实现自己提出的 COP 理念,但这个事算是在自己心里种下了一个小小的种子。

在这家公司收获了到了除技术增长之外最多东西。不仅有最多的持续联系的前同事们,更是在这里收获了人生中最大的财富 -- 爱情,直到结婚生娃。所以后来只要有人问我怎么脱单之类的问题,我都会说:很简单,换个工作就有了。

在上家公司离职前夕脱单后的第一件职场喜事就是收到鹅厂的offer,估计是(当时还是)女票(aka 幸运女神)的保佑。首先简历是 hr 从人才库中捞的,一般简历进了大厂的人才库,其实很少会被捞了,毕竟投大厂的人那么多,而且候选人有没有更新简历还得再问,所以我能被捞就已经是小概率事件了。其次整个面试流程只有三轮(两轮技术面,一轮 hr 面),甚至比很多中小公司的流程都短,整个流程大概不到一个月就收到 offer。

进鹅厂之后一切都很新鲜,除了之前没写过的 React,还有 KM、BBS、各种午间活动、新年晚会等等。以至于除了日常需求,在技术上的学习进度明显比之前要慢了很多。

现在回想一下,最大的收获应该是学习了真实的优秀且先进的生产流程,视野一下子被拔高了很多,而且终于切实地懂得了前端不能只停留在前端,只有了解业务才能做好前端。

但是团队业务后来急转直下,前途不太明朗,加上有几个前同事去了 TME(腾讯音乐),了解到那边有新的业务在发展,最终还是过去了 TME。而在 TME 学到最多的是如何做好混合开发、如何与多端进行协作;而且在大厂,更加需要全面地了解业务,才能对每一个细节点的来龙去脉有更完整的认识。毕竟只是做好需求,被替代的可能性太高了。

大厂就是这样,除了做需求,必须想一些提效的事情去做;可以是工程化,可以是插件,可以是流程优化等等,但就是不可以没有想法。

在 TME 的时候,慢慢地对写代码这件事情有了一些更深层次的认识,觉得写代码不仅是写 if-else 和 for 循环,而是在表达自己的哲学理念。

因为写代码和写文章很像,一个 APP、一个网站、一个后台服务,完成之后如同一篇文章,有段落有结构有逻辑。而程序猿/媛们,每天都沉浸在自己的逻辑之中,都希望自己的代码是最整洁的、最具有拓展性的、最高内聚低耦合的。

所以我们能看到处在各个阶段的程序猿/媛的代码,也许是一个文件成千上万行、也许是一个组件封装了近 10 层、也许是团队项目中同一段代码到处复制等等。当然,我们回头看自己历年写下的代码,也可能会有当下瞧不上的问题。所有人都是在成长的路上,但大家进度不一罢了。

我之所以意识到写代码是在表达自己的哲学理念,或者说是人生态度,是因为在现阶段的我,对于写代码这件事情,最看重的是模块化和代码的设计理念。至于 for 循环是不是太多嵌套了、代码复杂度是不是太高、页面的样式还原是否没有精确到一个像素等这些问题早就是可以被工具测量出来的了。

而在 AI 横扫各行各业的今天,越是抽象的问题,越是无法通过 AI 给出答案,也越是能体现出程序猿/媛的真正能力。像现在面试中还在让人写算法题的,我不能说是嗤之以鼻,只能说意义不大。候选人背也好,临时问 AI 也罢,能体现出候选人的什么能力呢?

算法题的答案背出来了,但是在做业务中代码设计一塌糊涂、组件拆分出来无法复用、产品哪怕有一点小改动都需要花大量的时间和精力兼容代码逻辑,招这样一个人难道不是对团队更大的伤害吗?哪怕强如鹅厂的产品,要找出山代码可谓易如反掌;不过我比较幸运,在鹅厂所在的团队,同事们的能力都挺强,想做重构都没地方下手。

而对应到自己的人生态度,我觉得任何事其实最终都是小事,只要能把事情拆解得够细致,解决问题的步骤一定都是一小步接一小步的。所谓“不积跬步无以至千里”,这句话对于今天的我可以说是各方面都适用,无论是第二曲线的探索,还是在带娃育娃的坚持,我都不可能一步登天,一定是对一件事有整体的设计,然后再分模块处理,在模块内部又有不同的步骤。

回看自己在写代码的十年里,不同的阶段的代码能力确实对应着不同的人生态度,也算是一个有点意思的现象。写代码除了像写文章,有时候也像是在学一门外语,而当一个人对一门外语有了足够的掌握和理解,必然会用这门外语的逻辑来思考问题。如果能理解这个意思,那么你一定看过这部电影↓

image