极客时间已完结课程限时免费阅读

学习路径 | 怎样成为一名优秀的全栈工程师?

学习路径 | 怎样成为一名优秀的全栈工程师?-极客时间

学习路径 | 怎样成为一名优秀的全栈工程师?

讲述:四火

时长11:35大小13.24M

你好,我是四火。
每一项综合技术都有自己的特点,基于 Web 的全栈技术也不例外。它五花八门,涉及面广,同类技术多,技术迭代迅猛,技术资料新等等,就如同下山的猛虎,成为了很多程序员朋友迈向全栈大门的一道阻碍。经常听到这样的抱怨:
想学 Web 全栈技术,期待能独立交付产品,但真的很迷茫。
具体某项技术还好说,可全栈包含了那么多技术,眼都要看花了。
我该从哪里开始,遵循哪些原则,学习哪些技术?
今天,专栏伊始,徙木为信,言能践行,就让我带你一起打破这道障碍。想要入门或者正在进阶的你,期待这个专栏能让你产生不一样的理解,收获独特的方法,在全栈技术的道路上迈上一个更高的台阶。

怎样修炼全栈技术?

首先,我想说的是,先成为合格的工程师,再谈全栈
就像相声演员的说学逗唱一样,工程师也有自己的必修课,比如数据结构和算法,可以说没有基础代码能力时一切都无从谈起。对于任何一个领域的软件工程师而言,它们都是基础,怎样强调其重要性都不为过。并且无论你是刚入行的程序员,还是打拼了几十年的架构师,标准都是一样的。
就拿我工作过的 Amazon 和 Oracle 来说,我们面试的时候,虽然对技术级别高的程序员候选人,会更多地考察基于经验和思路的系统设计等方面,但代码层面的要求,包括数据结构和算法,对于不同级别的工程师来说 ,基本是一样的。
请注意,这里的要求不只是能够写代码,而是要在面试现场,在有限的时间内,在白板上写代码。而在这个专栏里,我不讲解这些最基础的知识,但并不代表它们不重要。
对于进阶的工程师来说,英文能力是突破天花板的一个必选项。我觉得英文是所有进阶的软件工程师应当强化的能力,对全栈工程师来说更甚。因为基于 Web 的全栈技术迭代很快,新的技术资料一般都是英文的,英文能力,尤其是英文的阅读能力会很大程度地影响知识获取的速度。
其次,在获取知识的基础上思考,尤其是从比较中思考
思考,我认为是一个软件工程师所有习惯中最重要的一项。我们在实际工作中需要解决各种各样不可预料的问题,缺乏思考的人只会用自己所知道的技术生硬地往上套,而不去考虑是否适合问题本身,不去分析和比对不同解决方法的优劣。对于全栈技术学习而言,由于技术种类多,同类技术多,基于比较的思考就显得更为重要。但在这方面,我认为入门和进阶的工程师应当有所区别:
如果你在这方面入门不久,那么我建议你还是以知识性学习为主,先建立概念,了解全局。在选择要学习的技术时,要找那些经典的、使用的人多,以及接受度高的技术。在此基础上,尝试去思考这些技术的特点,为什么要这样做,好处和坏处各是什么。了解背景,即在所介绍的技术出现以前,程序员都是怎样做的,比较一下二者的区别是什么,或者说,新技术,带来了什么。
如果你是这方面的进阶工程师,那么“思考”的比重需要更高。全栈的技术太多太杂,不思考而以知识堆叠的方式记忆,是根本学不过来的。因此需要结合自身经验,尤其是针对同类的不同技术,要不断地去权衡,并强化自己的思考习惯——针对学习材料,哪些观点是自己不同意的,哪些内容是自己需要补充的,哪些部分是自己需要延伸学习一下的。
通过耐心地思考和比较,知识积累能够逐渐形成体系,而它,是帮助你融会贯通和保证记忆的最佳方法。请不要在开始时担心这一点,只有具备一定量的积累才能自然而然地孕育出体系来。
最后,请不要忽视实践的力量
对于感兴趣的内容,请打开浏览器,打开命令行,打开 IDE,使用 Google 去搜索,把软件包下载下来,照着学习材料中的例子做一下,按着自己的理解试验一下。
这样的过程听起来很简单,却是能让你形成深刻印象的捷径。有时候你可能对于内容表述不理解,可动手操作一下,往往就突然领悟了。毕竟,最终我们的能力都要落到关于程序代码的实践上去。

专栏内容是怎样设计的?

说到专栏,特别是关于内容定位、广度和深度,我必须要做一个说明。这个说明于我们彼此都非常重要,它能够保证你我对专栏文章持有一个正确的预期。
我希望这个专栏的主要目的是介绍原理、分享认识、探讨观点、串联知识,并引发思考,带给你进一步学习和实践的机会,而不是完全一步一步教导具体怎么做。因此,这个专栏最直接的目标不是希望你了解所有的细节,或者一下子精通其中的某一项技术。
比如,我不会具体而全面地讲解 Spring MVC 怎么配置,Tomcat 怎么搭建,而是希望能突出某几项有代表性的技术特性来介绍——它们为什么被创建出来,它们的价值在哪里,都有什么优劣,并在整体上着眼于全局,对基于 Web 的全栈技术有一个认识和把握。如果你初涉 Web 全栈技术不久,我更希望你能在阅读学习之后感慨,哇~居然有这么多有意思的技术,技术还能这样玩!
即便没有这个专栏,我相信你也一定可以学习自己感兴趣的全栈技术,但是,这个专栏可以帮助你开拓眼界,将这些知识点逐项整理并系统化,帮助你养成在学习实践中思考的良好习惯。先知道“有什么”,才知道“学什么”,最后才能具体去学习,虽然具体的学习往往是没有捷径的,但是“有什么”和“学什么”却可以充分借由他人经验。
再进一步说说内容广度和深度的问题。
内容广度:我会选择每个核心领域的代表性技术来介绍。全栈的技术集合就像一个大观园,每一个子领域,技术往往都非常丰富,因此我们在学习它们的的时候,代表性技术的挑选尤为重要。专栏中每一讲涉及的技术,都是我精心比较后挑选出来的,它们典型、常用,而且深刻,专注于不同的问题领域,在全栈体系中有非常强的代表性,很适合拿来和同类技术做比较。
内容深度:我会把深度控制在合适的位置,让入门到进阶的工程师都有收获。如果你刚刚入门,你可以看得懂大部分内容,并产生兴趣、建立概念;如果你处于进阶阶段,有的内容可能之前有了解过,但学习以后会有新的认识,或者是能把已经掌握的知识点串联起来。同时,请尽可能不要略过总结思考之后的选修课堂和扩展阅读,它们是可以帮助你快速提升的。
具体内容上,专栏包含网络协议和 Web 接口,MVC 架构相关,前端技术,持久层技术和最佳实践等几大章,这些内容会覆盖到基于 Web 的全栈技术最核心的部分。最后还有一章是综合性、自恰性强的专题,比如网站的性能优化、分页技术等。
这里再来个小提示。在文章中,我经常会提到一些工具,也会谈到一些关键的命令执行和配置过程,但具体到某些工具的安装,部分我会给出网址,还有一部分工具则是可以使用常规的包管理工具下载安装,比如 macOS 下的 Homebrew,比如 Ubuntu 的 apt-get。通常情况下,请尽量使用 *nix(包括 Linux 和 MacOS) 而不是 Windows。
最后,我想说每个全栈工程师的学习路径都是独特的,全栈和许多其它软件领域的技术一样,五花八门,日新月异,因此并不好学。我想很少有职业和程序员一样,需要持续、广泛地学习。有诸多品质在学习的过程中都起着至关重要的作用,但是我认为,恒心的作用尤为突出。
我不想提著名的“一万小时理论”,但这个过程也绝不会一帆风顺,特别是在这个专栏的学习过程中,如果你有困惑、茫然,甚至是沮丧,欢迎你和我聊一聊,一起想想办法,让我们把全栈技术学习这件意义非凡的事情坚持下去。
谈到这儿,我很想听听你的想法,进而有针对性地为你讲解,更好地帮助你进阶。请来留言区和我讨论吧:
对于全栈技术的学习,和其它技术相比,你觉得有什么样的特点,学习它们最需要做到什么?
对于专栏的内容设计,你最想听关于全栈技术哪一部分的知识讲解呢?
现在,就让我们正式开始全栈之旅吧!而故事,就从你输入网址、按下回车的那一瞬间开始……
分享给需要的人,Ta购买本课程,你将得18
生成海报并分享

赞 13

提建议

上一篇
开篇词 | 从成长角度看,为什么你应该成为全栈工程师?
下一篇
导读 | 如何学习这个专栏?
unpreview
 写留言

精选留言(18)

  • iHTC
    置顶
    2019-09-11
    四火老师教师节快乐!感谢! 全栈,在所有程序员应该都曾梦想过,但是能坚持不懈的不多,毕竟中国互联网才30年,大家想用5年就做到,或30岁就达到,我想不是人人能做。如果抱着学到老,那应该没问题呀~ 数据结构与算法的重要性,我也不多说,就是理科和数学理论,理解不复杂,但能推导和演算,可能是需要很多精力~ 说到英语,我就被坑害了差不多半辈子。像我这样农村出来的,80后90初后,教育中英语重视不足,自己也没这环境,实不相瞒我高考英语三十几分,最后努力上了不错的二本,理综二百多。我不是不聪明,只是没有遇到对的人。我相信想我这样的情况,远方的农村还在重演中。很庆幸自己上了大学,眼界不一样,自己也很坚强面对。毕业来到大城市,技术的眼界,自己更珍惜每一个机会。现在英语还是没有养成听说,也许努力还不够吧。说那么多,我不是想抱歉,因为现在小孩学英语太简单了,手机App多的数不清,而自己已经没有精力再重来了🥵 关于思考、总结、知识体系、阅读,我认为还是要多见识,能形成自己体系的架构能力,才能提高效率,
    展开

    作者回复: 你好,看了你的故事,我觉得有些小小的感动,有句话叫做成年人的故事没有童话,每个人的成长生活过程都不容易。 别的不谈,我就说一说英语——我知道有很多言论都说英语的听说读写要均衡发展,语言能说出来有多么重要,发音正确有多么重要…… 但是我认为,作为一个技术人员,最重要的还是“读”的能力。鸡汤故事里面那样每天伴着太阳升起去大海边含着小石头练发音,这种事情老实说离绝大多数人都太远太远了。 在大家精力有限的情况下,我认为反复让自己适应英文文档、手册资料等等的阅读,是可行而且比较容易获得收效的。 当然,我们也要看到幸运的一面,互联网帮助我们打开了窗口,英文的视频、文字都唾手可得,这还是让英文的学习容易多了。

    共 3 条评论
    10
  • pyhhou
    置顶
    2019-09-10
    四火老师好,一直期待这个专栏,之前看到您的博客 “四火的唠叨” 中的有些文章的观点我非常的认同,很早就想跟您学习一些互联网行业中的进阶方向、方法和思想。我是一名毕业,工作 1 年多的软件工程师,现在在北美的一家 startup 工作,由于公司方向和分工不明确,我做的东西很杂,写过一点点 react,后端用 node 也写过一两个小项目,但是对很多技术并没有特别深的概念,很渴望学习技术,特别是一些应用广泛的技术思想,但是不是特别清楚到底该先学什么,后学什么,以及有哪些必须要理解的重要的基础思想,包括对整个全栈并没有太多的经验和认识。对于我这种情况适合这个专栏吗?时间精力重点该放在哪呢?感谢老师指点
    展开

    作者回复: 很好的描述和问题。其实你的情况很有代表性,在写专栏之前,我们和一些工程师交流过,他们中的很多都有类似的困惑,都做过一点前端,也做过一点后端,但是感觉没有系统,也经常提到“困惑”和“茫然”这两个词。 接着来回答你的问题:全栈是有体系的,先学什么、后学什么,按体系学固然好,不过我认为实际上也并不那么重要,但是,把知识点联系起来非常重要,等具备了一定的积累,你会发现它们很多在本质上都是相通的,套路和玩法都是一样的。 在最初策划专栏内容的时候,我说这个专栏要不一样一点,市面上具体技术的教程很多,但是技术之间横向比较,介绍技术演进,从而探寻技术本质的却很少。因此我相信这个专栏可以帮助你,至于你问的时间精力重点,我在这篇学习路径的“怎样修炼全栈技术?”中已经有了介绍,看看它是不是能够回答你的问题?:)

    4
  • 冯选刚
    2020-01-07
    如果一门技术学深了,其实就是全栈的开始。 因为到达一定的深度时候,就需要各领域的知识串联起来,不然形不成知识体系。有句话说是用书去找书,就是说当你看这本书的时候,书里边一定会提到其他的书,技术也是一样。

    作者回复: 对。我觉得可以这样理解,孤立地谈论一门技术的深度,其实是难以做到的。

    5
  • Calvin
    2019-09-09
    谢谢四火老师的总结 个人对于本文的理解就是: 1、先学基本功,要做四则运算不会加减法可不行。 2、要学会经常归纳和总结,学会从不同的知识和方案中选择最适合业务的那个。关于学习归纳和总结,就突显了英语的重要性。 3、站在岸上学不会游泳,实践才能出真知。
    展开

    作者回复: 都很正确,你提到的“归纳和总结”以外,请允许我再加一个“类比和权衡”,目的都是学习技术的本质,把零散的知识点联结起来。至于英语,不只是全栈,我认为是软件大部分领域,要达到一定程度的进阶都要打倒的纸老虎 :)

    5
  • suke
    2020-03-28
    老师 去亚马逊 微软 oracle 这样的公司 英文的说读写能力是不是很重要?

    作者回复: 这取决于哪一个阶段,简单说:基本的英文能力不够肯定是不行的;有了基本的英文能力的前提下,显然专业能力更重要;如果要向一个“高阶”的职位进军,英文能力需要过硬。

    3
  • liu_liu
    2019-09-10
    1. 全栈涉及到的技术太多,不知道选取那种技术学习,且不知道某项技术中的重点。 2. 如何根据项目选择合适的全栈技术。 3. 什么样才是一个合格的全栈开发?

    作者回复: 你好 liu_liu,这都是非常好的问题,让我来一一回答你。 1. 技术确实多,但是选取哪种技术,不妨先选类型,然后再去确定的类型下选择典型、常用的技术。你当然也可以跟着我们的专栏一步一步往下走,特别是对于一些典型技术的重点,专栏中会有提示的。 2. 这是技术选型的问题,选型的前提是了解、比较、权衡,我们会有很多的特性和实例分析来帮助你形成自己的 方法。 3. 这个问题很大,我认为它可以从两个方面理解: (1) 首先得是合格的开发 :) (2) 其次才是合格的“全栈”开发,这意味着能合理地选用全栈的技术来解决问题。

    2
  • leslie
    2019-09-09
    全栈:我自己从开发->开发兼DBA->DBA兼OPS或OPS兼DBA:金融业所给的空间较小,Google SRE又提出了对于OPS/系统运维的定位;做为传统的运维&&DBA欠缺的其实是开发这块的理解和使用。 就我个人而言:擅长的是数据库和系统运维以及对计算机硬件的理解,软肋是开发这块;全栈应当是从前端程序的开发->中间件->后端开发->数据系统->操作系统完全一个人可以搞定甚至常规的网络问题都OK;这是我对于全栈的理解。这其中我薄弱的应当是开发前后端的程序开发以及后端开发。
    展开

    作者回复: 不得不赞一个对自己清晰的认识,并不是所有人都能做到这一点的。 你对全栈的理解和本专栏知识架构有一定相似之处,希望你能在这里收获进步,特别是你提到的薄弱环节。

    共 2 条评论
    2
  • joker
    2019-09-09
    讲一些经典的例子,或者好的代码。

    作者回复: 嗯,会有经典的问题介绍,以及代码示例。

    2
  • 許敲敲
    2019-09-09
    用的windows, 只用虚拟机能cover?

    作者回复: 完全没有问题。考虑用 *nix 的原因是,有少数涉及到的命令,在默认情况下 Windows 下面是没有的,而且对于实际的互联网应用来说,Linux 要常用得多。

    共 5 条评论
    2
  • 唯心主义蠢货🍁
    2020-11-01
    个人感觉全栈技术更多的是视野方面的开拓,前端同学可以了解后端架构 持久层技术,后端同学可以了解前端交互 请求,可以完全打通web开发的整条链路,代码方面倒感觉不是很重要,大家的学习能力都挺高的一些常规的页面和crud完全可以几天解决,主要还是视野的拓宽和系统思路的建立,技术栈不断迭代,但是系统设计模式永不过时

    作者回复: 嗯。专栏都有侧重点,这个专栏我的侧重点想在具备系统性的同时,多放在一些“套路”和“玩法”上面。

    1
  • 微尘
    2019-09-19
    老师你好∶ 1.全栈学习东西较多,但是能整体思考一个问题,我认为这样能减缓淘汰速度 2.整体性应该学习那些知识,以及学习路径
    1
  • 行知
    2019-09-18
    入行是iOS开发,写过半年Android,写过半年管理后,写过一年接口,现在写Web前端。自己总结了一下:1.“全栈”是一个梦想,只能向他靠拢;2.全栈 不是在多少个平台开发过,而是通用知识、底层知识的认知范围;3.通用知识、底层知识 应该优先学习高频使用的!4.以解决问题的根本原因为出发点,每个人都是“全栈”!

    作者回复: 思路很清楚,希望你能够在专栏学到你希望得到的东西。

    1
  • Aaron Cheung
    2019-09-10
    后端是JAVA做示例吗

    作者回复: 后端如果需要使用代码的话,是的,一般是 Java,但实际上例子我会尽量追求简单,因此一般情况下语言本身不是问题。

    1
  • 而立斋
    2019-09-10
    学习全栈技术,不仅要关注技术的特点,更需要体会技术之前的协作关系。整个学习的过程需要更多耐心的思考和系统的总结

    作者回复: 说得不错 :)

    1
  • 业余草
    2019-09-09
    全栈就是“全都你一个人”。。。

    作者回复: 这是一个常见的误解 :)

    共 3 条评论
    1
  • Geek_3b1096
    2021-01-04
    四火老师新年快乐
  • NumZhou
    2020-05-08
    小白期待老师的教导,我还是想多学多了解,技术栈太空虚,心里没底。
  • jxs1211
    2019-09-20
    目前用python写后端,之前用过一些其他语言,但还是用回了python,前端也接触过Vue,感觉前后端差异还是有点大,后端都在写接口,并发,消息队列,集群,缓存,数据库,算法等等,前端界面渲染,处理用户交互,知识点多而杂,不过感觉现在慢慢感觉都渐渐走向了工程化,模块化,又有些相似的感觉,如果能做全栈还是很不错的。不过现在面对的框架和技术好多,都需要好好理清,形成自己的知识体系才行