从毕业到现在,做了这么多年业务前端,虽然没有机会接触的底层开发,前端基础设施建设,但好在一直在学习,最近几天看书,突然对前端有了一些感悟,比起当时刚毕业所理解的前端,自认为更深刻了一些,所以想分享出来和大家一起交流。
阶段一:前端就是用各种框架写页面儿
大家做前端一定都清楚,前端三板斧html/css/javascript,如果再加上框架还有什么vue,react,webpack,node等等等,在最初小白的我的眼里这些技术都是割裂的,我的理解就是他们拼在一起能够完成一个前端的页面儿,我的大部分时间就是在用这些工具框架写html,写样式,然后写交互,对接口。然后这些东西又不断地在更新,从vue2到vue3,从react类写法到hooks,从webpack到vite,从web到小程序,这个还没学会哪个又出来了,一直疲于追赶,搞得自己不堪其累。我以为这就是最前端的宿命,中间多次想过放弃,但又不知道自己该做些什么,所以还是咬咬牙坚持了下来,这就是我的第一个阶段:前端就是用各种框架写页面儿。
阶段二:一切都是javascript
后来我进了现在这家公司,开始地使用了node,用公司内部的node框架写bff层,用公司自己写的模板引擎,用公司自己的组件库,然后我终于摆脱了,疲于追赶的宿命,我第一次认识到,那些框架,组件库都是可以自己写的,思想第一次从一个使用者变成了创造者。然而想要创造并非易事,随着我对node的认识的加深,我随之认识到如今现在的整个前端体系都是建立在node上的,你不懂node你就不懂现如今的前端。之所以有这样的认识是因为,我慢慢地看到,我们大部分时间并不是在写原生的html,css,javascript我们大多数时间都在写jsx,框架提供的模板语法,框架提供的api,而浏览器并不认识这些东西,所以我们需要一个webpack在本地起一个静态服务器,我们一边开发,webpack一边运用各种loader,把less,vue,jsx编译成浏览器认识东西,然后显示到浏览器上,而这最终编译的结果就是JavaScript,结构和样式都最终都是js渲染出来。所以就有了我对前端认识的第二个阶段:一切都是js的结论。
数据结构与算法才是内功
既然全都是javascript,我开始察觉到原来整个前端社区一直在用javascript渲染样式和结构,那些写底层的大佬在做一个真正地程序员做的事情,而不是一个切图的页面仔。认识到这之后,我便把精力转到了javascipt,typescript,node上,期间还学了Python和java,多种语言的学习让我认识到,其它语言能做的事情,js照样能做,js之前没有的文件,网络io,在node中能找到,没有多线程但是可以开多进程,有子线程,我一次理解了什么是阻塞,什么是同步,而不是人云亦云的背面试题,在js中所面临的问题,在其它语言同样面临,因为这些问题就是计算机所面临的问题。无论哪种语言都有类似解决问题的思路,语言根本就不重要,随之我的注意点就转移到了数据结构与算法上,我终于明白了,为什么数据结构与算法这为什么是内功。
一切都是文件和数据
我摆脱了浏览器之后,语言的宿主环境随之发生了变化,我开始慢慢关注操作系统,网络,还有计算机原理,单片机,门电路,通过大量的涉猎,我终于有了自己是一个工程师,只是恰巧在做前端,而不是一个前端工程师的感觉。在学习的过程中有一句话,我一直牢记,在Linux中一切都是文件,我豁然开朗,想起之前做的事情不就是数据的存储和计算吗?一切都是数据,在软件的世界里硬件也是数据,一切数据都可被计算,这不就是计算机被叫做计算机的原因吗?别人可能早就知道的东西,我到工作四年之后才第一次才彻底想清楚,实在令人尴尬。
依靠抽象建构问题,解决问题
最近看书,有句话令我印象深刻:计算机实际上是一门研究如何解决问题的科学,这和我之前了解到的大相径庭,计算机不是还有硬件吗?这些都不属于计算机科学吗?怎么是一门解决问题的学科。后来经过我的思考,发现确实是这样,在计算机的世界里,我们早已经把现实世界的一切都抽象了,我第一次对面向对象有了感觉,这不就是我们抽象世界的方式吗?我们在计算机的世界里靠对象来解决问题,这不就是我们一直在做的事情吗?我终于到了现在的阶段:我们最终都在解决问题。
这就是我从一个小白到目前为止对前端认识历程的改变,我能察觉到越来越深刻,也越来越抽象,希望这些东西能对大家有所启发。