mirror of
https://github.com/cheetahlou/CategoryResourceRepost.git
synced 2025-11-17 14:43:42 +08:00
del
This commit is contained in:
72
极客时间专栏/geek/全栈工程师修炼指南/课前必读/学习路径 | 怎样成为一名优秀的全栈工程师?.md
Normal file
72
极客时间专栏/geek/全栈工程师修炼指南/课前必读/学习路径 | 怎样成为一名优秀的全栈工程师?.md
Normal file
@@ -0,0 +1,72 @@
|
||||
<audio id="audio" title="学习路径 | 怎样成为一名优秀的全栈工程师?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/85/23/85e69c19484222a90b8cf85f9e6df223.mp3"></audio>
|
||||
|
||||
你好,我是四火。
|
||||
|
||||
每一项综合技术都有自己的特点,基于 Web 的全栈技术也不例外。它五花八门,涉及面广,同类技术多,技术迭代迅猛,技术资料新等等,就如同下山的猛虎,成为了很多程序员朋友迈向全栈大门的一道阻碍。经常听到这样的抱怨:
|
||||
|
||||
>
|
||||
<p>想学 Web 全栈技术,期待能独立交付产品,但真的很迷茫。<br>
|
||||
具体某项技术还好说,可全栈包含了那么多技术,眼都要看花了。<br>
|
||||
我该从哪里开始,遵循哪些原则,学习哪些技术?</p>
|
||||
|
||||
|
||||
今天,专栏伊始,徙木为信,言能践行,就让我带你一起打破这道障碍。想要入门或者正在进阶的你,期待这个专栏能让你产生不一样的理解,收获独特的方法,在全栈技术的道路上迈上一个更高的台阶。
|
||||
|
||||
## 怎样修炼全栈技术?
|
||||
|
||||
首先,我想说的是,**先成为合格的工程师,再谈全栈**。
|
||||
|
||||
就像相声演员的说学逗唱一样,工程师也有自己的必修课,比如数据结构和算法,可以说没有基础代码能力时一切都无从谈起。对于任何一个领域的软件工程师而言,它们都是基础,怎样强调其重要性都不为过。并且无论你是刚入行的程序员,还是打拼了几十年的架构师,标准都是一样的。
|
||||
|
||||
就拿我工作过的 Amazon 和 Oracle 来说,我们面试的时候,虽然对技术级别高的程序员候选人,会更多地考察基于经验和思路的系统设计等方面,但代码层面的要求,包括数据结构和算法,对于不同级别的工程师来说 ,基本是一样的。
|
||||
|
||||
请注意,这里的要求不只是能够写代码,而是要在面试现场,在有限的时间内,在白板上写代码。而在这个专栏里,我不讲解这些最基础的知识,但并不代表它们不重要。
|
||||
|
||||
对于进阶的工程师来说,英文能力是突破天花板的一个必选项。我觉得英文是所有进阶的软件工程师应当强化的能力,对全栈工程师来说更甚。因为基于 Web 的全栈技术迭代很快,新的技术资料一般都是英文的,英文能力,尤其是英文的阅读能力会很大程度地影响知识获取的速度。
|
||||
|
||||
其次,**在获取知识的基础上思考,尤其是从比较中思考**。
|
||||
|
||||
思考,我认为是一个软件工程师所有习惯中最重要的一项。我们在实际工作中需要解决各种各样不可预料的问题,缺乏思考的人只会用自己所知道的技术生硬地往上套,而不去考虑是否适合问题本身,不去分析和比对不同解决方法的优劣。**对于全栈技术学习而言,由于技术种类多,同类技术多,基于比较的思考就显得更为重要**。但在这方面,我认为入门和进阶的工程师应当有所区别:
|
||||
|
||||
- 如果你在这方面入门不久,那么我建议你还是以知识性学习为主,先建立概念,了解全局。在选择要学习的技术时,要找那些经典的、使用的人多,以及接受度高的技术。在此基础上,尝试去思考这些技术的特点,为什么要这样做,好处和坏处各是什么。了解背景,即在所介绍的技术出现以前,程序员都是怎样做的,比较一下二者的区别是什么,或者说,新技术,带来了什么。
|
||||
- 如果你是这方面的进阶工程师,那么“思考”的比重需要更高。全栈的技术太多太杂,不思考而以知识堆叠的方式记忆,是根本学不过来的。因此需要结合自身经验,尤其是针对同类的不同技术,要不断地去权衡,并强化自己的思考习惯——针对学习材料,哪些观点是自己不同意的,哪些内容是自己需要补充的,哪些部分是自己需要延伸学习一下的。
|
||||
|
||||
通过耐心地思考和比较,知识积累能够逐渐形成体系,而它,是帮助你融会贯通和保证记忆的最佳方法。请不要在开始时担心这一点,只有具备一定量的积累才能自然而然地孕育出体系来。
|
||||
|
||||
最后,**请不要忽视实践的力量**。
|
||||
|
||||
对于感兴趣的内容,请打开浏览器,打开命令行,打开 IDE,使用 Google 去搜索,把软件包下载下来,照着学习材料中的例子做一下,按着自己的理解试验一下。
|
||||
|
||||
这样的过程听起来很简单,却是能让你形成深刻印象的捷径。有时候你可能对于内容表述不理解,可动手操作一下,往往就突然领悟了。毕竟,最终我们的能力都要落到关于程序代码的实践上去。
|
||||
|
||||
## 专栏内容是怎样设计的?
|
||||
|
||||
说到专栏,特别是关于内容定位、广度和深度,我必须要做一个说明。这个说明于我们彼此都非常重要,它能够保证你我对专栏文章持有一个正确的预期。
|
||||
|
||||
我希望这个专栏的主要目的是介绍原理、分享认识、探讨观点、串联知识,并引发思考,带给你进一步学习和实践的机会,而不是完全一步一步教导具体怎么做。因此,这个专栏最直接的目标不是希望你了解所有的细节,或者一下子精通其中的某一项技术。
|
||||
|
||||
比如,我不会具体而全面地讲解 Spring MVC 怎么配置,Tomcat 怎么搭建,而是希望能突出某几项有代表性的技术特性来介绍——它们为什么被创建出来,它们的价值在哪里,都有什么优劣,并在整体上着眼于全局,对基于 Web 的全栈技术有一个认识和把握。如果你初涉 Web 全栈技术不久,我更希望你能在阅读学习之后感慨,哇~居然有这么多有意思的技术,技术还能这样玩!
|
||||
|
||||
即便没有这个专栏,我相信你也一定可以学习自己感兴趣的全栈技术,但是,这个专栏可以帮助你开拓眼界,将这些知识点逐项整理并系统化,帮助你养成在学习实践中思考的良好习惯。先知道“有什么”,才知道“学什么”,最后才能具体去学习,虽然具体的学习往往是没有捷径的,但是“有什么”和“学什么”却可以充分借由他人经验。
|
||||
|
||||
再进一步说说内容广度和深度的问题。
|
||||
|
||||
- **内容广度:我会选择每个核心领域的代表性技术来介绍。**全栈的技术集合就像一个大观园,每一个子领域,技术往往都非常丰富,因此我们在学习它们的的时候,代表性技术的挑选尤为重要。专栏中每一讲涉及的技术,都是我精心比较后挑选出来的,它们典型、常用,而且深刻,专注于不同的问题领域,在全栈体系中有非常强的代表性,很适合拿来和同类技术做比较。
|
||||
- **内容深度:我会把深度控制在合适的位置,让入门到进阶的工程师都有收获。**如果你刚刚入门,你可以看得懂大部分内容,并产生兴趣、建立概念;如果你处于进阶阶段,有的内容可能之前有了解过,但学习以后会有新的认识,或者是能把已经掌握的知识点串联起来。同时,请尽可能不要略过总结思考之后的选修课堂和扩展阅读,它们是可以帮助你快速提升的。
|
||||
|
||||
具体内容上,专栏包含网络协议和 Web 接口,MVC 架构相关,前端技术,持久层技术和最佳实践等几大章,这些内容会覆盖到基于 Web 的全栈技术最核心的部分。最后还有一章是综合性、自恰性强的专题,比如网站的性能优化、分页技术等。
|
||||
|
||||
这里再来个小提示。在文章中,我经常会提到一些工具,也会谈到一些关键的命令执行和配置过程,但具体到某些工具的安装,部分我会给出网址,还有一部分工具则是可以使用常规的包管理工具下载安装,比如 macOS 下的 Homebrew,比如 Ubuntu 的 apt-get。通常情况下,请尽量使用 *nix(包括 Linux 和 MacOS) 而不是 Windows。
|
||||
|
||||
最后,我想说每个全栈工程师的学习路径都是独特的,全栈和许多其它软件领域的技术一样,五花八门,日新月异,因此并不好学。我想很少有职业和程序员一样,需要持续、广泛地学习。有诸多品质在学习的过程中都起着至关重要的作用,但是我认为,恒心的作用尤为突出。
|
||||
|
||||
我不想提著名的“一万小时理论”,但这个过程也绝不会一帆风顺,特别是在这个专栏的学习过程中,如果你有困惑、茫然,甚至是沮丧,欢迎你和我聊一聊,一起想想办法,让我们把全栈技术学习这件意义非凡的事情坚持下去。
|
||||
|
||||
谈到这儿,我很想听听你的想法,进而有针对性地为你讲解,更好地帮助你进阶。请来留言区和我讨论吧:
|
||||
|
||||
- 对于全栈技术的学习,和其它技术相比,你觉得有什么样的特点,学习它们最需要做到什么?
|
||||
- 对于专栏的内容设计,你最想听关于全栈技术哪一部分的知识讲解呢?
|
||||
|
||||
现在,就让我们正式开始全栈之旅吧!而故事,就从你输入网址、按下回车的那一瞬间开始……
|
||||
|
||||
|
||||
75
极客时间专栏/geek/全栈工程师修炼指南/课前必读/导读 | 如何学习这个专栏?.md
Normal file
75
极客时间专栏/geek/全栈工程师修炼指南/课前必读/导读 | 如何学习这个专栏?.md
Normal file
@@ -0,0 +1,75 @@
|
||||
<audio id="audio" title="导读 | 如何学习这个专栏?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/8a/2b/8a2228fc40a2899eab17836d0206712b.mp3"></audio>
|
||||
|
||||
你好,欢迎来到“全栈工程师修炼指南”,我是专栏编辑王冬青,很高兴认识你。
|
||||
|
||||
这个专栏我们邀请了西雅图 Oracle 首席软件工程师四火,历时半年打磨完成。为了帮助你更好地了解专栏的内容设计,收获更好的学习效果,我们特别提供了这篇导读,希望你能在这里找到学习这个专栏的最佳姿势。
|
||||
|
||||
## 课程设计
|
||||
|
||||
本专栏围绕基于 Web 的全栈技术进行展开,主要包括“网络协议和 Web 接口、服务端 MVC、前端技术、数据持久化、最佳实践和专题”。
|
||||
|
||||
### 1. 学习目标
|
||||
|
||||
学完之后,你可以对基于 Web 的全栈技术有一个系统的认识,深度掌握全栈工程师必备技能,理解技术本质,而不仅仅是停留在技术配置和使用的表象,能够将作者交付的知识复用到自己的实际进阶中去。另外,你还可以将零散的知识点联结成一棵全栈技能树,培养“全栈思维”。
|
||||
|
||||
### 2. 内容优势
|
||||
|
||||
专栏内容可以帮助你在入门或者进阶全栈的道路上,梳理出一条高效的学习路径,并掌握这条路径上有代表性的技术。
|
||||
|
||||
目前市面上针对单一 、具体技术的教程有很多,但我们独辟蹊径,以系统的全栈技术关系树为基石,重点关注核心技术栈主流技术之间的关联和演进,介绍这些技术间的权衡,探究它们的本质,结合实践、沉淀知识、带动思考。
|
||||
|
||||
### 3. 特色板块
|
||||
|
||||
**热点答疑:**基于内容性质,我们在前五章的最后一讲都设置了热点答疑,目的就是综合你的留言反馈进行分享,定位是较为开放式的,不局限于每一讲中的问题解答。关于“全栈工程师”这一职位,除了某一特定技术点,如果你有更感兴趣的内容,也可以在留言区中告知我们,这个专栏是可以有一些外延性质的话题分享的,比如已定的 《06 | 特别放送:北美大厂如何招聘全栈工程师?》,希望能帮助你拓展技术视野,你可以对照北美大厂的招聘标准和流程重新界定下自己所处的位置,进而有针对性地进行学习。
|
||||
|
||||
**总结思考:**鉴于这个专栏的总结和思考是有强关联的,所以我们合并到了一起,总结主要就是回顾这一讲所学的内容,很好理解了。要特别说明下思考题部分,每一讲的末尾我们会设置两道思考题,一道难度较低,另一道难度略有升级,你可以根据自己的学习程度和本身积累在留言区中分享答案,作者会有针对性地进行回复。当然了,如果可以,十分鼓励你两道都解答一下,对于消化理解所学的知识内容,培养自己的全栈思维很有帮助。
|
||||
|
||||
**选修课堂:**这是一个全新的板块,如果我们将总结思考之前的内容,定位为必修,那么选修课堂的功能就一目了然了。这部分的内容你可以结合自身情况,选择性阅读,它们是与该讲主题强相关的知识,但不会影响必修部分的学习,它们可能该讲中某一步骤的实践过程,帮助你强化认识,也可能是某一重要知识点的详细讲解,帮助你查漏补缺。同时,这个板块是根据每一讲的主题进行考虑的,对于无需增设选修课堂的主题,总结思考之后会直接进入“扩展阅读”板块。
|
||||
|
||||
**扩展阅读:**同上,也是一个全新的板块,每一讲作者都精心准备了一组链接,大致3~5篇,每个链接都有文字说明。出于对质量的考虑,这里有部分是英文资料,这里要再强调一下,英文能力也是软件工程师进阶的必备能力之一,这一点作者在学习路径中已经谈过了,但修炼英文非朝夕之事,你也不必过于担心,同等质量下作者会优先选择中文资料进行推荐,如果理解上有困难,还可以借助一些翻译软件,遇到难点,也可以在留言区中与作者探讨。
|
||||
|
||||
这些资料有自己的定位,不是“有了更好、没有也行”的可有可无的内容,而是可以帮助你进一步展开学习的重要资料。考虑到每个人的基础不同,它们有的是简单的教程,也有的是技术背景介绍,还有某一技术长项和短处的拓展分析等等。
|
||||
|
||||
值得注意的是,少数资料前会标有【基础】字样,这表示该内容涉及的知识点较为基础,如果你对该讲的理解有困难,可以去这样的链接中找找答案。另外,这些资料中没有大厚书,并不是说它们不好,而是作者希望每一讲的内容,你都能在有限的时间内完成阅读、思考、练习和拓展这样的一个闭环。
|
||||
|
||||
## 学习攻略
|
||||
|
||||
除了介绍课程设计之外,我还为你准备了六大攻略,都是针对这个专栏的学习方法,帮助你提升学习效率和收获感。
|
||||
|
||||
### 攻略一:利用好特色板块
|
||||
|
||||
鉴于全栈工程师的学习性质,这个专栏我们开创了不少特色板块,每个板块的作用在上面我都做了详细说明。请你一定要结合自身情况利用好它们,尽可能不要错过“选修课堂”和“扩展阅读“,它们是可以帮助你快速提升,且拓展你知识版图的内容。
|
||||
|
||||
### 攻略二:勤于动手实践
|
||||
|
||||
全栈所包含的知识点非常多,最好的记忆方式就是实践,亲身操作一遍,你会打开一扇新世界的大门——原来全栈并没有那么难。跟着作者文章中分享的小案例亲自做一做,跑一跑代码,自己验证下结论,这是个很高效的学习方法,我十分鼓励你这样做。
|
||||
|
||||
不过也正因为这些案例,我推荐你首选文字+音频这样的学习方式,只听音频的话,对于这个专栏来说,理解上会有一定难度。
|
||||
|
||||
### 攻略三:在联想和比较中学习
|
||||
|
||||
基于全栈知识树庞大和繁杂的特点,它的学习方法会有所不同,它需要你多去尝试比较同类技术,并且将所学理论和工作中实际应用的技术、遇到的问题结合起来。它需要你掌握隐藏在具体技术背后的通用“套路”,联结不同技术,使之成为一个健壮的知识网格,真正将技术的理解落实到本质上去。
|
||||
|
||||
### 攻略四:充分利用留言区
|
||||
|
||||
留言区最直观的作用就是完成思考题,每一讲的思考题都是作者精选的,如果你能解答,并分享出来,得到作者和其他同学的肯定,相信你已经对该讲的内容有了深度的认识了,通过这样的方式对所学进行自我检验,是个非常高效的方法。
|
||||
|
||||
除此之外,你还可以在这里进行学习总结、强化输出,提出问题、解决困惑,回复他人留言、发起互动,从“消费者”角色升级到“生产者”角色。
|
||||
|
||||
如果你在留言区中写下的增量信息够硬核,还有机会让作者精选出来,在该章的最后一讲“热点答疑”中做深度讲解。
|
||||
|
||||
### 攻略五:善于分享
|
||||
|
||||
极客时间平台提供了很多分享功能。比如,看到硬核知识点、金句或深有感触的内容,你可以长按做划线笔记,点击分享就可以生成精美的知识卡片,将所学随手记录或分享出去。如果你希望分享整篇文章,或者邀请你的朋友一起打卡学习,还可以点击文稿右上角的“请朋友读”,把这门课推荐给朋友。
|
||||
|
||||
这里的分享更像是一种知识交换,给予越多,收获自然也就越多,期待在这个过程中,你的知识体系也能得到锤炼。
|
||||
|
||||
### 攻略六:有计划地学习
|
||||
|
||||
这个专栏的更新频率为每周一、三、五,共计 40 讲,更新时间 14 周,你可以跟着作者的更新频率进行学习。一篇文章发布后你有两天的学习时间,你可以一天学习每讲的必修内容,一天学习选修课堂和扩展阅读,当然了,你也可以根据自身情况,自己制定合理的学习计划。
|
||||
|
||||
修炼全栈,横向对比技术,纵向挖掘技术,再串联知识,形成一个知识体系,这本身并不是一件容易的事儿。在有作者引导的基础上,希望你能充分调动自身内驱力,将学习坚持下去,期待在最后的《全栈回顾》中见到你的打卡哦~
|
||||
|
||||
最后,祝你学以致用、实现进阶。加油!
|
||||
|
||||
|
||||
73
极客时间专栏/geek/全栈工程师修炼指南/课前必读/开篇词 | 从成长角度看,为什么你应该成为全栈工程师?.md
Normal file
73
极客时间专栏/geek/全栈工程师修炼指南/课前必读/开篇词 | 从成长角度看,为什么你应该成为全栈工程师?.md
Normal file
@@ -0,0 +1,73 @@
|
||||
<audio id="audio" title="开篇词 | 从成长角度看,为什么你应该成为全栈工程师?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/34/9d/34420c93edaadaba95e9d6822c78a59d.mp3"></audio>
|
||||
|
||||
你好,我是软件工程师熊燚,网上大家都叫我四火,很高兴在这个专栏和你见面。
|
||||
|
||||
先介绍下我自己。最早我在华为工作,曾是华为某大型视频门户和视频平台的初创人员,也是一名不折不扣的长期看护其基线版本的全栈工程师,这段经历其实为我的全栈技能打下了一个很好的基础。
|
||||
|
||||
后来我加入了亚马逊(Amazon),负责数千万商品销量预测系统和成本利润计算平台的研发,从 0 到 1 重新设计并开发了数据分析和可视化系统,还维护和优化过数据分发的高可用服务,也改进过核算平台的分布式计算架构和工作流引擎,这些多领域的工作让我快速成长,并积累了大量的宝贵经验。
|
||||
|
||||
现在,我在西雅图甲骨文(Oracle)的云计算部门就职,职位是首席软件工程师,主要负责研发云基础设施的分布式工作流引擎。
|
||||
|
||||
入行这十来年,从前端页面到后端服务,从大小网站到分布式系统,从数据分析处理到可视化,从设计开发到线上运维,我都参与过,并带领团队攻克了很多大的项目堡垒,也以全栈工程师的身份上线了不少核心业务产品。
|
||||
|
||||
可以说,我是一名全栈工程的实践者,也是一名程序员综合发展的信奉者,还是一名工程师文化的鼓吹者,有一个建立了很长时间的独立博客“[四火的唠叨](https://www.raychase.net/)”。
|
||||
|
||||
那提到全栈工程师,你可能第一时间会想到 “全能”“大神”这些词语,也可能听到过其他人对它或褒或贬的评价。那么,究竟该怎么恰如其分地认识这个角色呢?我想和你说说我的看法。
|
||||
|
||||
**软件工程的范畴里,人类创造了大量的概念和术语,绝大多数都清晰而精确,但“全栈工程师”却是个反例**。在互联网出现以前,甚至在客户端和服务端模式出现以前,大多数的程序员,就已经是一定意义上的“全栈”了,他们往往涉足硬件、软件,完成程序从开始到终结各个阶段的工作。
|
||||
|
||||
千禧年之后,Web,特别是 Ajax 等前端技术迅猛发展,而技术的进步就自然而然地带来了分工,于是有人负责前端,有人负责后端,甚至划分得更细,此时能够做两头事情的人,才显得更加珍贵。因此,我认为 **Web技术的发展和自然而然引发的分工才是全栈工程师出现的最重要的因素**。
|
||||
|
||||
2008年,在 forge38 上面出现了一篇题目为“[Full Stack Web Developers](http://web.archive.org/web/20101204221657/http://forge38.com/blog/2008/06/full-stack-web-developers/)”的文章,被认为是最早提及这个概念的媒体之一。
|
||||
|
||||
文中是这样说的:
|
||||
|
||||
>
|
||||
A full stack web developer is someone that does design, markup, styling, behavior, and programming.
|
||||
|
||||
|
||||
大概意思就是说,一个全栈的web开发者,会负责设计、标记、样式、行为和编程这些全部的事情。
|
||||
|
||||
虽然从现在的眼光看,这个概念的解释似乎有些古老而片面 ,可从上面的历史文字中足以看出,为什么当我们提及全栈,往往总是基于“Web”,而非其他领域了。
|
||||
|
||||
到了今天,全栈工程师已经变成了一个有些被滥用的概念,不同人有着天差地别的理解。
|
||||
|
||||
我认为,首先必须明确的是,“全栈”不是“全能”,当然,在这个标准下我们依然可以将全栈理解为“广义”的全栈和“狭义”的全栈。显然前者的包容性和不确定性过大,我觉得只有后者才有更实际的讨论价值,并且,**广泛的 Web 技术才是一名通常意义上的全栈工程师最该专注的核心内容**,而此处的 Web 技术,包括网络、前端、后端 MVC、持久化技术等多个层次。
|
||||
|
||||
那从成长角度看,为什么我说你应该成为全栈工程师呢?
|
||||
|
||||
和其他软件工程师发展的路线相比,除了通用工程师的技能以外,我认为基于 Web 的全栈技术是一种非常适合用来进一步发展和修炼的技能树,和其它的技术类别比起来,它至少有下面这样几个明显的优势。
|
||||
|
||||
## 关于个人发展
|
||||
|
||||
首先,互联网是全栈概念的诞生地,也是软件领域最激动人心的产品和技术的诞生地,这是传统软件所无法比拟的。这些互联网的全栈工程师,每天都在接收新的资讯,每天都“不得不”和这些全新的技术理念搏斗,他们拥有着和这些产品与技术最近距离访问、全面接触和深入研究的机会。你可能很难预测下一波互联网的技术浪潮什么时候到来,技术主角又是谁,但全栈技术是可以帮你打好基础,做好随时拥抱它的准备的。
|
||||
|
||||
其次,可以掌握能够快速获得反馈的学习方法,这对于保持持续学习的动力和热情很有助益。比如说,几行 HTML 代码就可以马上看到效果,简单安装和配置,就可以搭建一个健壮的 Web 服务,对当前浏览器即时的标签、脚本、样式修改,立即就能看到变化。
|
||||
|
||||
再次,全栈技术的学习之路上有很多纷繁精彩的“套路”,而它们可以应用在软件工程的其它领域。可以说,**全栈技术中,有太多能帮助程序员开启新世界大门的东西了**,比如 JavaScript 的异步编程,比如各种数据、模板和逻辑的解耦和分层,再比如说持久层技术里面的读写模型分析。
|
||||
|
||||
最后,必然是视野的拓展。工程师的成长过程中,在早、中期可以利用全栈技术拓宽视野,并养成思考的习惯。**最终也许我们需要“学得精”,但是一开始我们一定要“学得杂”**。只有在广度上有足够的积累,足够的内容去比较,才能养成思考的习惯,拥有更全面地看待问题的视野。
|
||||
|
||||
拿我自己来说,工作以来我花了很多时间去做一些不同领域的项目,比如我现在的工作是研发一个分布式工作流引擎,从 Web 全栈技术上学到的东西,是能够帮助我快速上手这些技术的。同时,理解它们的本质,也能拓宽分析和解决问题的思路。毕竟,在软件领域,技术都是相通的。
|
||||
|
||||
## 关于就业和创业
|
||||
|
||||
首先,全栈工程师本身就拥有多技能、多角色。团队非常欢迎这样的人,因为当一个人可以扮演多个人的角色,就减少了沟通和配合的损耗,提高了效率。出了问题,从客户端到服务端,对多个层面都有所了解的全栈工程师可以更高效地分析和定位问题。这个世界需要专家,但我觉得更需要通晓各个层面知识,能够快速解决问题的人。
|
||||
|
||||
其次,全栈工程师是创业的最佳技术角色。有了创意和点子,全栈工程师就可以快速地开发原型,迅速实现第一个版本,并能马上提供优质的宣传推广和用户体验。不要小看这一点,在很多情况下,**全栈工程师不需要其它额外的协助,自己就可以很快地将想法变现**。
|
||||
|
||||
再次,全栈工程师拥有最多的就业机会。有朋友半开玩笑说,你知道世界上什么类型的应用最多见吗?网站!各式各样的网站,内部的管理系统、报表系统、论坛、博客,但无论是哪种类型,它们都是全栈工程师最熟悉的东西。你可能耳闻过著名的 [Facebook 只招全栈工程师](https://www.laurencegellert.com/2012/08/what-is-a-full-stack-developer/)这样听起来似乎有些“极端”的故事,可事实上,几乎所有的互联网大型公司,都会招聘大量的全栈工程师。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/f9/9e/f90b92c41ca6ecedc5d8af2224aa9f9e.jpeg" alt="">
|
||||
|
||||
(上图来自 [HackerRank](https://blog.hackerrank.com/full-stack-developer/),报告原引用于 HackerRank 2018 Developer Skills Report,在开发者评价自己角色的时候,最多的人投票给了“全栈开发者”。)
|
||||
|
||||
最后,不妨考虑下未来的职业延伸。**有了全栈工程师的底子,未来面对软件行业进一步细化,选择其它细分职业时,会因为有了全面而扎实的基础而更有利。**
|
||||
|
||||
举例来说,假如你做过一段时间的前端程序员,那往往对用户交互设计是有一定的心得的,我有朋友就是从一个擅长前端的全栈程序员转行做了产品经理;而在 MVC 部分学习的分层和解耦经验,持久层部分积攒的那些对于一致性、可用性的理解,对于将来想投身于分布式系统设计开发的程序员朋友会很有帮助。
|
||||
|
||||
我认为对于大多数程序员来说,全栈工程师这个职位对于自己的发展而言,是个非常好的进阶方向。而基于 Web 的全栈技术学习,充满必要性,无论你今后是否志在互联网,无论你的远期目标是在哪个软件领域。
|
||||
|
||||
最后,我想认识一下你。你可以在留言区中做个自我介绍,说说你现在的工作、学习情况。或是说说你眼中的全栈工程师是怎样的?你认为应该具备怎样的特质,才能成为全栈工程师呢?欢迎你在留言区和我交流。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user