你好,我是四火。

每一项综合技术都有自己的特点,基于 Web 的全栈技术也不例外。它五花八门,涉及面广,同类技术多,技术迭代迅猛,技术资料新等等,就如同下山的猛虎,成为了很多程序员朋友迈向全栈大门的一道阻碍。经常听到这样的抱怨:

想学 Web 全栈技术,期待能独立交付产品,但真的很迷茫。
具体某项技术还好说,可全栈包含了那么多技术,眼都要看花了。
我该从哪里开始,遵循哪些原则,学习哪些技术?

今天,专栏伊始,徙木为信,言能践行,就让我带你一起打破这道障碍。想要入门或者正在进阶的你,期待这个专栏能让你产生不一样的理解,收获独特的方法,在全栈技术的道路上迈上一个更高的台阶。

怎样修炼全栈技术?

首先,我想说的是,先成为合格的工程师,再谈全栈

就像相声演员的说学逗唱一样,工程师也有自己的必修课,比如数据结构和算法,可以说没有基础代码能力时一切都无从谈起。对于任何一个领域的软件工程师而言,它们都是基础,怎样强调其重要性都不为过。并且无论你是刚入行的程序员,还是打拼了几十年的架构师,标准都是一样的。

就拿我工作过的 Amazon 和 Oracle 来说,我们面试的时候,虽然对技术级别高的程序员候选人,会更多地考察基于经验和思路的系统设计等方面,但代码层面的要求,包括数据结构和算法,对于不同级别的工程师来说 ,基本是一样的。

请注意,这里的要求不只是能够写代码,而是要在面试现场,在有限的时间内,在白板上写代码。而在这个专栏里,我不讲解这些最基础的知识,但并不代表它们不重要。

对于进阶的工程师来说,英文能力是突破天花板的一个必选项。我觉得英文是所有进阶的软件工程师应当强化的能力,对全栈工程师来说更甚。因为基于 Web 的全栈技术迭代很快,新的技术资料一般都是英文的,英文能力,尤其是英文的阅读能力会很大程度地影响知识获取的速度。

其次,在获取知识的基础上思考,尤其是从比较中思考

思考,我认为是一个软件工程师所有习惯中最重要的一项。我们在实际工作中需要解决各种各样不可预料的问题,缺乏思考的人只会用自己所知道的技术生硬地往上套,而不去考虑是否适合问题本身,不去分析和比对不同解决方法的优劣。对于全栈技术学习而言,由于技术种类多,同类技术多,基于比较的思考就显得更为重要。但在这方面,我认为入门和进阶的工程师应当有所区别:

通过耐心地思考和比较,知识积累能够逐渐形成体系,而它,是帮助你融会贯通和保证记忆的最佳方法。请不要在开始时担心这一点,只有具备一定量的积累才能自然而然地孕育出体系来。

最后,请不要忽视实践的力量

对于感兴趣的内容,请打开浏览器,打开命令行,打开 IDE,使用 Google 去搜索,把软件包下载下来,照着学习材料中的例子做一下,按着自己的理解试验一下。

这样的过程听起来很简单,却是能让你形成深刻印象的捷径。有时候你可能对于内容表述不理解,可动手操作一下,往往就突然领悟了。毕竟,最终我们的能力都要落到关于程序代码的实践上去。

专栏内容是怎样设计的?

说到专栏,特别是关于内容定位、广度和深度,我必须要做一个说明。这个说明于我们彼此都非常重要,它能够保证你我对专栏文章持有一个正确的预期。

我希望这个专栏的主要目的是介绍原理、分享认识、探讨观点、串联知识,并引发思考,带给你进一步学习和实践的机会,而不是完全一步一步教导具体怎么做。因此,这个专栏最直接的目标不是希望你了解所有的细节,或者一下子精通其中的某一项技术。

比如,我不会具体而全面地讲解 Spring MVC 怎么配置,Tomcat 怎么搭建,而是希望能突出某几项有代表性的技术特性来介绍——它们为什么被创建出来,它们的价值在哪里,都有什么优劣,并在整体上着眼于全局,对基于 Web 的全栈技术有一个认识和把握。如果你初涉 Web 全栈技术不久,我更希望你能在阅读学习之后感慨,哇~居然有这么多有意思的技术,技术还能这样玩!

即便没有这个专栏,我相信你也一定可以学习自己感兴趣的全栈技术,但是,这个专栏可以帮助你开拓眼界,将这些知识点逐项整理并系统化,帮助你养成在学习实践中思考的良好习惯。先知道“有什么”,才知道“学什么”,最后才能具体去学习,虽然具体的学习往往是没有捷径的,但是“有什么”和“学什么”却可以充分借由他人经验。

再进一步说说内容广度和深度的问题。

具体内容上,专栏包含网络协议和 Web 接口,MVC 架构相关,前端技术,持久层技术和最佳实践等几大章,这些内容会覆盖到基于 Web 的全栈技术最核心的部分。最后还有一章是综合性、自恰性强的专题,比如网站的性能优化、分页技术等。

这里再来个小提示。在文章中,我经常会提到一些工具,也会谈到一些关键的命令执行和配置过程,但具体到某些工具的安装,部分我会给出网址,还有一部分工具则是可以使用常规的包管理工具下载安装,比如 macOS 下的 Homebrew,比如 Ubuntu 的 apt-get。通常情况下,请尽量使用 *nix(包括 Linux 和 MacOS) 而不是 Windows。

最后,我想说每个全栈工程师的学习路径都是独特的,全栈和许多其它软件领域的技术一样,五花八门,日新月异,因此并不好学。我想很少有职业和程序员一样,需要持续、广泛地学习。有诸多品质在学习的过程中都起着至关重要的作用,但是我认为,恒心的作用尤为突出。

我不想提著名的“一万小时理论”,但这个过程也绝不会一帆风顺,特别是在这个专栏的学习过程中,如果你有困惑、茫然,甚至是沮丧,欢迎你和我聊一聊,一起想想办法,让我们把全栈技术学习这件意义非凡的事情坚持下去。

谈到这儿,我很想听听你的想法,进而有针对性地为你讲解,更好地帮助你进阶。请来留言区和我讨论吧:

现在,就让我们正式开始全栈之旅吧!而故事,就从你输入网址、按下回车的那一瞬间开始……

评论