程序员

全栈开发,你值得拥有

这些年来,对于招聘团队的老板们,和身为技术从业人员我们自己有两种不同职业规划路线: 前端工程师和后端工程师。但是通常会忘记了其实还是第三个选项:全栈 Full-stack

全栈开发其实已经出现了相当一段时间, 这在过去也许就只称为“开发” (词乏……)

由于现在越来越复杂的用户交互和终端设备支持,带着复杂逻辑的前端开发已经被单独分离出来,最终成为了两个世界: 前端和后端开发。

全栈开发

让我们来谈一谈全栈开发的概念是什么,看一下挑战全栈开发有哪些挑战,以及是否值得规划这样一条职业路线。

笔者曾经有过一个有意思的Title: Half backend and half frontend engineer, 嗯,那时还没有full-stack这个名字 … 也经历过招聘和搭建一个正式的全栈工程师的团队,明确地要求Web团队,Mobile App团队需要愿意同时涉猎前后端,还要编写自动测试!不同的公司文化对全栈开发注入各有特色的理解,要求是不同的。

但是相似之处都是:在必要的时刻,希望团队的每个人都能够在后段和前端开发角色中来回切换,这取决于具体项目的需要。

1、什么是全栈?

全栈不是特定地限于Web开发或者其他任何形式的软件开发。

全栈意味着你在一个系统每一层的开发中都参与其中。 不管现有的子系统间的隔离或分层做的有多出色,你都能从一个更高的位置看清和理解整个蓝图。

这好比今天,你也许在开发一个花哨的下拉菜单。 明天,您可能需要调整一下那个菜单的API接口。 后天,您可能需要进一步到数据库层以改进那些API用到的SQL查询语句,最后也许你还代替传统的测试团队在你刚完成的用例开发几个用于回归测试的自动化测试脚本。

对于这样的工作理念和风格,也有很多反对的看法,有很多人也认为你应该在某一个领域变得非常专家,让你的擅长的技能更多有关联性。

我不太同意这种观点,或者说我觉得大多数技术层都有相关性。

不同的技术层互相之间正在以一种越来越来简单的方式关联到一起,并向前发展,只要我们从适当的技术开始入手, 全栈开发本身会是一种很好职业成长路线。

2、拥有一支全栈开发团队有些怎样的优势?

做为一个全栈工程师,你可以不费很大力气从一套应用系统的一头开发工作跳到另一头的开发工作中,这对做项目计划和新功能的设计带来巨大的好处: 因为你懂的多!

真正的价值在于因为你是全栈,你能从头到尾预先理解整个业务需求,所以可以担当整个业务功能的开发的责任人full ownership。那是正式你老板最喜欢:”全栈你来,这锅你扛最合适了, 我不想听出了问题时那些前后端之间的推卸,我要的就是你当这个债主。”

对于老板来说,拥有一支技能繁多的人才组成的团队,意味着你可以快速的适应变化,当新的市场机遇来临时,可以很容易的调整团队抓取机会,还降低了成本。

此外这还帮助在团队里产生一些有益的化学成分,团队内的人可以更长时间的一起合作,甚至对于那些从一开始还只是搭建API开发,之后才慢慢进行到移动和web端实现的长时间项目,同一拨熟悉的同事们可以从头合作到尾,配合度和生产率都好过其他类型搭配的团队。

3、怎样可以有时间去接触熟悉那么多技术栈和系统框架?

这不是一个容易回答的问题,同时要在前端和后段都要保持技术的熟悉度听上去不太可能!让我们把这个问题先放一下,先关注一下你实际能做些什么。

一个好的全栈工程师,应该从一套好的核心技术栈开始入手,所谓全栈的入门,比如:写一个能读写浏览器cookie的脚本, 然后完成一个访问RESTful API的请求调用, 再学写一下数据库查询语句等等。然后再这些核心或基础之上,慢慢增加使用一些新的工具和抽象之后的框架,这需要随着时间慢慢增加。

总是想要保持熟悉那些不断冒出来的时髦的最新技术,并不是一个性价比高的时间分配方案,真正好的能力其实是当需求来临时,能够快速的拾起一门恰当的新技术,然后使用上。

这些快速的学习能力来自对那些”old fashion”核心技术的精通,知道what happens behind the scenes的人不会担心那些新玩意儿能有多么难懂。

4、如何分配一半一半的前端和后段开发工作?

应该按照具体工作和项目需要来分配,而不是五五平均分配,并且可能需要case by case的变化。按照现在流行的敏捷开发方法,需要拥抱变化,也许这一个项目里需要担当90%以上的某一段的开发工作。

当项目进行到另一个时候时,需要帮忙去做另一端的开发,这完全符合敏捷团队的需要。

5、那么”单栈”可以吗,我是不是可以只喜欢做其中一端的工作?

这当然是可以的,正像点融网一样,绝大多数公司在经历成长后,有能力维持更有专业方向和技能专长的团队,一些业务通过更专业的技术在深度上提供更好的发展。

个人也是一样,经过长时间后,很多人会慢慢倾向于对一端技术的偏爱,在某个时刻,你会开始真正专注与其中一个技术栈,彻底精通熟悉它的整个生态环境,但是同时也不是完全把其他技术赶出视野范围,这好像,你也可以在闲暇时划一下微信,看一看黑帮来自DevOps同学的文章,虽然你可能是一个前端工程师,那不妨碍你了解一下你的代码会被DevOps用哪些新名词的流程或工具最终部署在AWS上。

所以这只是个人的选择,也没有好坏之分。

就跟你玩的那些角色游戏一样,一开始选什么角色赤身裸体,没有几颗技能点,每次拿到了经验值,需要稍微平均点分配给几个技能,等到成长到一定时候了,你可以只多给某个技能加多点,你决定是喜欢变的力气巨大无比,还是跑起来飞快。

6、不要仅仅是码代码

我们总是倾向与把我们的技术能力归结为不同的编程语言和我们擅长使用的工具。但是更好的理解这些技能的应该是问自己我们在工作中能够承担的责任是什么。

试一下问自己能不能够创建一些基本的用户交互界面,还有配置一下基础框架, 还有尝试搞一下数据分析?能否参与到产品其他开发流程的环节中?

对于老板来说,如果能够让团队和用户或者PO离更近一些,你会有机会发现,如果让工程师们参与到业务环节,一旦工程师理解了用户的问题,他们会开始为他们出各种主意。这样可以让团队工程师有更多的责任感,可以带来很多超越代码的价值,这是也敏捷开发中所提倡的。

帮助项目组从更高的层次看待需求,从原先仅仅是寻找一个答案,转变为思考究竟问题是什么,到开始能够定位问题本质,而不是解决表面的技术问题和肤浅的症状,这样更容易找到终极的方案来满足需求。

写在最后

全栈是为了整个产品的成功,有时候很有必要能走出你熟悉和觉得容易的领域。

当然不是说所有的场景和产品都绝对适合走一条全栈的路线,有很多超级复杂的产品和系统,要完全理解各个层次是不可能的,也做不好,比如Google的那2亿行的代码量,一定是需要多个不同领域的专长团队来合作。

说到底全栈开发对个人而言应该是一种发展中的一条路线,并不是必经之路,也不是最终的目的地,也不意味你的老板会为此愿意double pay 🙂

本文作者:刘晶(点融黑帮),一个玩web前端开发的code monkey,也喜欢UI 设计,做过后端开发,现担任点融前端资深开发工程师。