懵懂的开始
记得那是在2021年,我进入了大学内的一个技术社团,开始了我的第一个前端开发项目,我的前端历程也由此开始。如题"那一年我甚至还不会JS,就开始了React项目开发",这犹如是小孩"还没学会走,就开始跑了"。不知道大家是否也有这样的经历哈哈哈,在今天的我看来,这方法着实不推荐,但那时候确实就是这样一路踩坑过来了。
这样草率的开始带来了诸多问题。我写了一两个月的React项目了,仍然不懂写的代码里哪些是JS的原生代码,哪些是React的API(谢谢学长学姐们还能容忍我待在项目里),更不用说什么JSX,Babel,Webpack的概念了。我完全是学着React官方文档的代码以及项目里其他文件的代码照猫画虎的写,还觉得JS啥也不那么重要,反正项目也可以写嘛。可以见得,当时的学习方式以及"码商"都不太高。这样浮于表面的项目开发也确实让我养成了一些不好的习惯:学习东西不深入,不擅长去发现与总结技术的本质。不过,对于当时还是大二学生的我,能够看到写出的网页是被用上还是很有成就感的。
后来在团队中陆续参与了多个项目,有网页,有小程序,都是写前端,不过有的项目用的React,有的用Vue,你要问我为什么,我也不知道😄。写多了吧,越来越有一种感觉:"好搬砖哦"。直到我从学弟变成了学长,从一名项目普通成员变成了项目负责人。
慢慢的成长
当你开始负责一个项目后,一些心态就变了。我开始去构思一些UI与功能,去画一些原型,去安排工作,我开始去思考自己的代码写的对不对、好不好、够不够清晰,我要开始去想我怎么做可以让学弟学妹们更快上手呢,我懂什么呢?我能教他们什么呢?(事实上这些事情对我日后的工作是很有帮助的)这时候就只能逼着自己走出舒适圈了。
我开始看一些基础书,《JS红宝书》,《You Don't Know JS》,《深入浅出React和Redux》等。我终于知道JS到底是哪些API可以修改html了😭,理解了作用域、闭包、原型等常见的概念,以及如何写出优雅的React组件代码。学了一些之后,发现不懂的也越来越多了。不过还好,应该是比之前厉害了一点。
再后来,就成为一名小镇做题家,去刷题准备面试了。当时正好疫情,在家一待就是半年。我在年前就开始准备实习面试了,后来一边上网课一边刷题。我的春招实习面试也结束的很快,一共就面了两个公司。第一个简历投了阿里(不知道哪来的自信,还贼戏剧,当时晚上八九点接了一个电话,竟是面试官打来的,问我有没有时间。我当时正在平板上和同学开黑,估计电话里都听到了。我状态不好就直接说了没有,然后就约了第二天)。不奇怪,一面就被刷了,很多问题我都答不上来,项目的问题也解释不太清楚。于是面试后马上回顾,把问到的问题重新梳理了一遍。几天后面试了字节,这次很幸运,从下午四点一直到晚上八点,两个技术面,最后一个主管面,所有面试官评价都挺好,那天晚上开心极了,饭都不知道咋吃完的。
在字节的实习中真的学到了很多,最重要的是技术视野开阔了,因为公司里与学校里做项目还是区别很大的。在实习中,我了解了监控、埋点这样一些平台,学到了项目开发、测试到上线的标准流程,学会了移动端页面的开发与调试等等。了解整个前端开发的流程对我日后的正式工作真的帮助很大,因为我毕业后的正式工作不是在一家大公司,而是一家中小型公司~
持续学习
毕业后,我来到了一家中小型公司,什么原因呢?主要还是觉得自己菜了,在大公司只能螺丝钉,可能去小公司能做更多事情吧(另外是这家小公司带了挺多光环:AI独角兽、著名教授以及博士创始人阵容)。果然,工作第一天就感受到了差别:新公司里几乎没有任何前端基建,连项目模版也没有,只说用React开发就行。组里面也就两个前端,还有一个也才刚写React不久,产品经理也是一个实习生兼职的。我其实挺理解的😄,还有种莫名的熟悉感,感觉回到了校园~
于是后来做了一些基础的事情,搭建一个通用的前端模版,建立一些前端规范与项目开发流程,还开发了一个内部的NPM包。这些工作不难,但挺有意义的,让我对一些项目里的工具有了更多了解,比如Webpack,Eslint等,还总结了一篇TypeScript的文章,没想到赞的人还挺多。直到后来,我遇上了Umi.js,感觉看到了新的曙光:我可以直接用它来创建项目模版,使用里面开箱即用的特性(毕竟维护一个项目模版也挺麻烦,而且功能远不如它的丰富),里面的一些插件也深得我意,比如umi-model。后来Umi就成了我们组默认的前端框架,之前的NPM包也用dumi重写了。
我们组内主要是做内部平台的研发,做了一些中后台项目,一个富文本文档协作平台,还有一个内部统一登录平台,以及一个服务外部客户的项目,有用Node.js写后端的,也有用Next.js的。组里最多的时候有五个前端,但来来回回走了几个(大家都知道有几波裁员~)。由于项目较多,一些项目的线上状态也比较重要,就部署了一个内部的Sentry监控,还做了一个内部的埋点平台收集线上数据。总体而言,不同的前端技术栈都接触了一些,但原理嘛理解还不够深入,待继续学习。
还有一些前端技术之外的事情。因为是在小公司嘛,还是内部平台,正式的产品经理是没有的。所以大多时候需求是要自己沟通来的,页面是自己设计的,任务是自己定的,当然结果也是自己给了。这多亏了之前在学校摸爬滚打的经历,让我能在工作中很快习惯这种一个人走遍全流程的模式。做的事情多和杂是一种磨砺,也更有成就感,但同时它也会占用你的时间,这点是小公司与大公司的区别。另一个小公司的不同是,前后端都是坐一起的,你能够听到和实际参与到更多后端开发的工作,这点还是挺有帮助的。
后来成为了组长,考虑的事情也更多了,就推着自己去看一些Go语言以及后端监控与高可用的东西(然后让后端的成员去做~感觉自己之前写的Node.js后台还是很简单的)。作为组长,后端出了问题也得去背锅,比如有一次清洗数据线上用户数据丢了,得带头去跟业务方解释(赔罪),配合解决问题,捋清事故发生的流程,写事故报告通知相关干系人,只能说有一点麻烦但还好~另外也会看一些产品类的书,因为有的项目确实是要自己去沟通和设计的,真的感觉开发,产品、项目经理的活儿都干过了。有意思的是,有时候嫌开发原型麻烦,就直接代码写了。不过这种只能在自己对需求足够有把握的情况下,不然反复改动还是吃不消的。对于内部项目,大家往往对UI要求不高(但风格与交互一定要统一),需求也不会那么明确,所以最好的方式就是先多聊一聊,沟通清楚需求后快速开发一个MVP版本,然后慢慢迭代。对于小团队,敏捷开发是比较容易实现而且能够显著提高效率的,每个周一制定本周的目标,每天晨会过下个人工作,总体上是不会有什么目标偏差的。当大家共事一段时间后,我发现即使我的原型与功能描述不那么准确,大家也能在这个基础上完善出我想要的功能了。
总结
从一个懵懂的前端开发到后来慢慢成熟,有挺多收获和感受。对技术而言,养成去观察和思考技术本质的习惯是有益的。比如学React之前,你最好看看用原生JS是怎么开发Web应用的,体会下两者的差别,去思考React做了什么,为什么要用它。Webpack,Babel,服务端渲染等等技术皆是如此,当你知道它们是为了解决什么问题时,理解会更深刻。然后,小公司与大公司确实是会有差别的。最明显的,在大公司你的工作性质会更单一,它会需要你在一个领域里做得很好;而在小公司,你做的事情往往会更杂,你会接触到不同类型的工作(一些工作也是会让人很苦恼的)。最后,最大的感受是不要给自己设限,趁年轻多学习多尝试。挺喜欢《技术人员的发展之路》里总结的:在30岁前,工作5-7年,你需要有高效的学习能力与解决问题的能力。你需要基础扎实,有寻找前沿知识的能力,能看到技术的本质,也见过很多场景,经历过很多错,能够防火而不是救火。后一阶段,我给自己定的目标就是深入学习目前工作中涉及到的一些技术知识,多总结。与各位共勉~