关于全栈
确实有一种观点认为全栈工程师虽然很好,但问题是知识只有广度而没有深度,不够专业化。从某种程度上我其实赞同这一点,但另一方面,我认为这种看法只侧重了表象,而忽略了其他核心因素:
-
存在一个职业叫作架构师,本身就要求对前后端都有深入的了解。
-
技术底层逻辑是共通的: 前后端在底层编程知识上是相通的。 (a) 编程语言:无论是后端的 Java、C#,还是前端的 JavaScript、TypeScript,它们的设计原理往往是层层继承并相互发展的。 (b) 性能调优:将其还原到本质,其实都是数据结构和算法的问题,只是加上了特定的领域知识。
前端和后端虽然在功能和职责上有所区分,但它们都共享在「编程」这个大的通用领域里。因此,全栈工程师也可以学得很深,重点在于不能被表象上各种各样的工具和框架所迷惑,而是要去学习那些更本质的东西。
这就像社会科学,包含政治学、经济学、历史学等不同学科,有人会觉得涉猎太广就不可能精通。但实际上,在更深入的层面上,社会科学有其共通的方法论。如果把这些本质的东西吃透,不同学科间的转换就会非常轻松。甚至是在跨学科、跨领域的范围内,能够看到一些被单一领域知识所限制的问题。反而没有那些因过度专业化而导致知识框架和整个结构都被限制的缺点,从而看到盲点,创造出新的东西。
这就是我的核心论点:全栈工程师也可以很精通。只要你对本质原理有足够深的了解,剩下的只是花时间去熟悉底层原理之上的具体用法。
这个熟悉过程其实很快。比如:
- 前端:处理大量资料查询时的性能优化,本质是算法问题。
- 后端:面对大量流量引入时的调度处理,本质同样是算法问题。
归根结底,只要你对底层原理的掌握足够扎实,再往上的应用层开发自然也难不倒。
从学习上来讲,全栈开发要求更强的学习能力和更广博的知识,这一点本身就是门槛,所以成为一个资深的全栈工程师确实是有难度的。这也是为什么很多人都会倾向于走专业化的道路,因为他们对特定领域更熟悉,操作起来也比较顺手,这点我非常理解。而我本来就对各个领域都感兴趣,跨度也很大,对我来讲这反而无所谓了。毕竟,我一直都是这么学习的。