作为工程师,最好的学习心态是什么?
作为程序员,我们会用到很多的技术,这些技术涉及到不同的领域,而每一个领域都有很大的可以深挖的空间,那我们学习的时候怎么在深度和广度的做抉择呢?
我的观点是在一个领域持续深入,成为这个领域的专家,但对其他的领域也要做一些了解,也就是成为一专多能的 T 型人才。这样既能保证较高的竞争力,也有扩展其他方面的可能性。
我们的晋升路线也是这样的,p7 的定位是领域专家,也就是要在一个领域有比较体系化的认知和沉淀,但是 p8、p9 则需要对整个前端领域的技术和发展都有比较好的认知,也就需要广度,先深度后广度的学习路线也更利于晋升。
但是持续深入某一个领域也不是一件容易的事情,有两个主要的问题,下面我拿我自己来举例说明下:
在某个领域越深入,学习越费力
我刚开始学 babel 插件的时候,看官方插件手册,感觉啥都是新的知识,学的很快,但是当我想找一个真实场景的应用案例的时候,文档中却没有,网上也几乎没有这方面的资料,我不得不自己去探索各种场景下用 babel 插件来做自动化的可能性,后面就梳理出了业务方面的自动埋点、国际化、生成 api 文档的应用,还有在工具方面的 linter、type cheker、压缩混淆等的应用。刚开始学习这个领域是很快的,但是后来需要自己探索的部分进度却很慢。
其实很多领域都是这样,大多数资料都停留在浅水区,入门的话学的很快,感觉进步飞速。但是当你逐渐深入的时候,可参考的资料会越来越少,甚至逐渐进入无人区,这时候你会感觉费了很大的力进度却很慢,会感觉到痛苦,但是这确实成为领域专家必须要经历的阶段,需要一些韧性或者说执着来扛过去,继续深入。过了这段时期之后,你才能建立技术壁垒,可以说自己是这个领域的专家了。
在某个领域做久了,同质化的内容越来越多
还是拿我自己来举例,我是想在前端编译方面持续深入,直到写一本书的。我的打算是 babel、eslint、typescript compiler api、postcss 甚至 swc 都要单独写一本小册,然后整理成书。
刚开始研究 babel 插件的时候,感觉收获很大,因为各种知识都是新知识。但是后来逐渐研究了别的一些工具之后,会发现同质化现象越来越严重,收获也越来越小。
babel 插件是做代码转换的,基于 AST 做分析和增删改。
eslint 插件是做代码的静态分析和格式检查的,也是基于 AST,只不过因为 AST 中保留了 token 信息,能够做格式的检查,比如行列号、空格这种。然后生成代码也不是基于 AST 打印,而是直接做的字符串替换。和 babel 插件的不同只在于能够检查格式以及生成代码的方式不同,其余的地方是类似的、同质的。
typescript compiler api 是做 ts 到 ts 的转换的,也是基于 AST,相对于 babel 插件来说,能够生成 ts 代码,这点 babel 插件做不到,而且还能做类型检查。其余的方面也是同质的。
postcss 插件和 babel 插件的作用差不多,只不过针对的是 css 领域,很多东西也是同质的。
当你在一个领域持续研究的时候,就会发现很多东西都是类似的、同质的,新的东西越来越少。这也是不可避免的事情,需要一些韧性或者说执着来扛过这段时期。
所以说,如果你想在一个领域持续深入,度过刚开始的快速成长期之后,不可避免的会遇到资料越来越少、学习越来越费力的问题,以及同质化内容越来越多的问题,你需要一些执着来忍受这些,继续深入,之后才能成为这个领域的专家。
但是,虽然说对技术要有一定的执着,也要有限度,职业边界之外的技术作为兴趣来了解即可。
还是拿我来说,我发觉前端领域的编译技术只是源码到源码的转译器(transpiler),涉及不到解释器 (interpreter)和编译到字节码或机器码的编译器(compiler)。所以才会想着去华为做编程语言,去深入学习编译器、解释器这种编译技术,但是最终那边也没去成,阿里的工作也丢了。
后来想了想,作为前端工程师,想学习编译技术的话,能把各种 transpiler 学好就足够了,至于编译器、解释器这不属于前端工程师的 scope 了。作为兴趣来了解,那是非常好的,但是如果想进一步深入,反而没必要,代价很大,对前端工作也没啥帮助。
所以说,我们要在某个领域持续深入,但也要注意边界,深入到职业 scope 的边界就可以了,边界之外的事情,可以做了解,没必要过度深入。
总结
作为工程师,最好的学习路线是先深度后广度,这样也更利于职业的发展。
想在某个领域持续深入的话,刚开始成长是很快的,但是会慢慢遇到资料越来越少,学习越来越费力的问题,会遇到很多技术的同质化,新的东西越来越少的问题,需要一些执着来度过这段时期。
但是对技术的执着要有个限度,到达职业 scope 的边界即可,边界之外的事情可以做为兴趣了解,但没必要过度深入。
也就是说,学习技术要有一定的执着但也不能太执着。