译者:zhangolve
链接:http://www.zcfy.cc/article/1878
原文:https://medium.freecodecamp.com/full-stack-between-reality-and-wishful-thinking-43110005f2a2#.vmvlzet2z
最近几年,我们开始给开发者划分两种不同的职业路径:前端和后端。但是我们总是忘记了第三种选择:全栈
全栈开发已经被提出有一段时间了,它曾经被直接叫做“开发”。
但是由于开发工作的复杂性持续增长,我们的UI(用户界面)需要从其背后的逻辑中解耦出来。于是,现在,我们也就有了两个不同的领域,前端和后端。
让我们探索全栈开发,看看当考虑到各方面与之关联的挑战时,沿着这样一条路径走下去,是不是行得通。
我在一家名叫Fortech 的公司担任全栈开发工程师,我工作的一大部分是来领导一支全栈开发工程师团队。
在我们的团队里,如果需要的话,每个人都能够在前端和后端之间切换,我们团队的文化也基于此。
但是什么是全栈呢?
全栈不特指网页开发,或者任何其他形式的开发工作。
全栈意味着你能够献身于一个系统的每一个层面。无论这个子系统被分割地怎样支离破碎,你都能够看到更广阔的图景。
今天,你可能在做一个酷炸天的下拉菜单组件。到了明天,你可能要做一个适应这个下拉菜单的接口出来,可是到了后天,你可能又要不得不潜入到数据库中,来提高你的接口获取数据的能力。
在技术分享会上,我和很多人都探讨过全栈开发,我注意到越来越多的开发者对全栈开发持怀疑态度。
反对全栈开发的人说,为了能够在各方面都有所涉猎,你首先需要在一个特定的子领域成为专家。
我不同意他们的观点。
我认为技术是以一种让我们更加易于开发的方式来进化的,只要我们首先能够掌握一整套正确的技术栈。
对怀疑者的一些回答
前面,我已经解释了为什么我认为全栈开发是一条可选择的道路,至少还是一条很不错的道路。
问题 #1: 一支全栈开发的团队有哪些优势?
作为一个全栈开发者,你可以很容易地从你的应用程序的一部分跳到另外一部分,当设计新的功能时,这会是巨大的优势。
当你能够明白一个功能背后的业务需求然后据此着手工作时,全栈开发真正的价值才得以提升。
有一支多面手的团队也意味着,当新的机遇出现的时候,你能够快速地分配任务。
有一支多面手的团队也意味着,开发者们在一起工作的时间越长,在你的团队内部产生的化学反应越良好。即使一个项目是从构建一个API接口开始的,然后逐渐拓展到移动端和网页端,这群人也能够一起完成整个过程。
问题 #2 :我怎么抽时间来一直跟上这么多技术和框架的脚步?
我认为即便只是跟上前端或者后端开发潮流都是不可能的。所以让我们暂时放下追逐潮流,专注于当前你能够做到的。
任何一个好的全栈开发工程师都从掌握一整套的开发技术做起。你应该能够完成这些基本的任务:写一个cookie,连接到一个REST接口(REST endpoint),完成一个数据库序列,等等。
随着时间的推移,你能够在这些技术之上,通过添加一些新的工具和逻辑,来构建起一个完整的项目。
追逐技术潮流并不是你表现出色的标志,真正地能看出你水平的是:你有能力在需要一项技术的时候快速跟进,学习它,应用它。
问题 #3:是否一个全栈开发工程师需要将他们的工作平均分到前端和后端
不。你需要根据你的项目需求来进行划分。这都是要有语境的,要具体问题,具体分析。
你需要能够在一个项目的任何时间点接入到这个项目的任何一个部分,这在今天这个敏捷开发时代尤为重要。
问题 #4: 有选择地偏好一种类型的开发工作可以吗?
当然没问题。大多数人都会有所侧重。
有些时候,你会专注于系统中的某一部分,并且需要掌握它的生态,但是不要对该系统的其他部分完全视而不见。
我认为这关乎个人的选择,并不是其他人强加的。有些人就很享受前端开发的工作,那么他就做得越来越好,与此相应的,有些人就热爱后端开发。
就像是学习怎样使用「原力」(the Force),你首先要学会怎样光剑(lightsaber)的启动和停止。当你已经熟练了这些操作之后,你再决定是学习 意念控制还是 迫使别人窒息.
作为一个软件工程师,这正是与星球大战的相似之处。
但是不要停在代码上
我们往往将我们的技术实体化,就是我们工作中用到的编程语言或者我们用过的编程工具。
但是一个更好的方式来思考技术,是从全栈的角度来看待,是将你能够承担的责任进行评估,是把这种评估作为你工作的一部分。
你能够完成基本的UI(用户界面)开发任务,架构设置,数据分析吗?你能够参与到产品本身的开发流程当中吗?
我的团队和我们的客户密切配合。我们发现我们的开发者们投入到业务流程之中是非常有用的,一旦开发者们明白了客户的问题所在,他们就开始跃跃欲试想要解决客户们的问题了。
这个时候,每一个人都能够为一个已知的问题提供一个解决方案,不会出现一个特定的问题只能找特定的人去解决。
我并不是说我们的整个团队都是开发者才行,而是说要赋予开发者们更多的责任,而不是只让他们负责编写代码,这样一来,他们能够在这样一个灵活的环境下受益更多。
这样也能够有助于我们将思维方式从单纯地想要解决问题过渡到专注于问题本身。你从一开始就认识到了问题的本质所在,而不只是它的表现特征,那么你就也能够据此设计出最优的方案来解决问题了。
最后一点说明
全栈开发意味着跳出你的舒适区,为了产品的成功接受挑战。
肯定有很多好的论点反对全栈开发文化,但是我希望这篇文章已经反驳了其中那些毫无说服力的观点。
实现全栈并不总是最好的策略。许多产品大到任何一个个人都不能完全理解。比如,谷歌的代码库里面有20亿行代码。在这个层面上,有所专攻是必要的。
全栈开发应该是处理问题的方法,而不是一种死板的思维方式。
你如何看待未来的全栈开发?在下面评论中留下你的观点吧。