全栈工程师,英文 Full Stack developer,是指那些掌握多种技能,并能利用多种技能独立完成产品的人。当然,现在「全栈工程师」很吃香,非常吃香!这是因为在移动互联网时代,IT 系统变得愈加复杂,需要拥有全局思维的工程师来搞定各种「疑难杂症」。不仅要玩得转前端,还要搞得定后端,总之各种技术都懂,所以其重要性可见一斑。
近日,移动开发精英俱乐部围绕「如何成为一个全栈的工程师?」进行了讨论,主持人是优才学院的创始人伍星老师,让我们一起看看大神们的精彩言论吧!(本文系国内 ITOM 管理领军企业 OneAPM 工程师整理)
程序员眼中的「全栈」
伍星-优才创始人:全栈,最早来自于 Facebook 的「我们只招全栈工程师」,从表面看是指技术栈,是完成一套产品所面要的全部技术和技能。谷歌在它的书中也提出,它们只招创意型人才,其实这是一致的、相通的!
饶培泽:全栈,在我看来是一种态度,无论遇到何种问题都能积极的去解决。全栈,也不是说会什么,而是因为有好奇心与驱动力,所以什么都想搞明白,学习起来自然能快速上手。
iOS小码哥:全栈,也可以说「我是一块砖,哪儿需要我,我就往哪儿填。」代表着快速学习的能力和超强的适应能力。
梦航:全栈,在一定程度上能更好的做出架构,减少维护成本。
卓竞劲:我支持思想和知识层面的「全栈」,而非刻意技能上的全栈。
饶培泽:其实,能从前端写到后端的人不少,但是能专职来做吗?这么说吧,很多公司的后端都能写前端,但可不敢让他们写产品级别的代码。如果后端人才如果能去了解前端的知识点,合理去进行整合互补,这样是我们所鼓励的。
药交汇:全栈围绕产品服务,重点是考虑问题的角度、广度。个人理解也可以看成责任感的一种体现,前端、后端都可以也不代表全栈。只不过是围绕着问题的解决方案,其根本还是本着对一件事情负责的态度,展开全方面的跟踪。
伍星-优才创始人:从谷歌对创意型人才的描述可以看出,这更多体现在能够主动地承担工作和解决问题。比如谷歌讲过一个例子,Adwords 是几个非相关工程师主动解决了小问题带来大收益的。
Facebook 的人才培养一开始是不分工的,「新兵营」之后才分工,并且轮岗很多,这中间暗含了:学习能力要相当强,我想学什么,都能学什么,需要我做什么,都能胜任。
所以我们对全栈提出如下见解。首先要技术全面,作为全栈工程师,其技术当然要比较全面。从前端到后端、从运维到优化、从 PC 到移动都难不倒。 但又有自己比较精通的一方面。也就是说,作为全栈工程师既要有「专深」,同样也要有「广博」,这样才能在解决问题时不受局限,才能融会贯通。
第二就是思维和心态。全栈工程师以积极主动的姿态来面对和解决工作中的问题。以全局的观点来看待自己所从事的项目, 而不只是自己负责的一小部分。以做成产品、做成一件事的观点来看待整个开发流程,而不仅仅是技术实现。 因为只能这样的心态和观点,他才会积极主动地去学习其他技术,用其他技术解决问题
第三是上升能力,全栈工程师并不意味着全能,什么都会。但是全栈工程师有良好的基础技能。 这个技能,既包括计算机科学的基础,也包括英语基础,有了这个基础, 加上积极的态度,开放的心胸,就能快速地学习所需要的技术,比如像 Swift 语言,那都不是事儿。 并应用在所需要的开发工作中。
第四就是职业价值,像 Facebook 说,他们只喜欢全栈工程师,创业公司也会说,我们需要全栈工程师。无论是在大公司,还是创业公司, 全栈工程师都将成为抢手人才!那是因为,全栈工程师不但技能全面,而且心态积极,学习能力强!
伍星-优才创始人:所以全栈不是一种技能,而是一种能力。学习能力,开放心态是优先的!
李睿君:其实后面有段时间觉得全栈需要一方面熟悉自己本身专业的领域,另一方面需要关注另一段的技术,这样在需要另一端技术,或是沟通时都能有帮助
着建彬:对感兴趣的东西不要当成「工作」来做,其实兴趣才是最大的动力。我觉得全栈应该是由「兴趣」驱动的。
伍星-优才创始人:即使是领域专家,他对别的也会有了解和研究的。优秀的技术人员,对所有的技术应该有一种天然的好奇心和折腾劲
药交汇:我前端和后端都经历过,其实,在前期人员不全的情况下,结合业务并外出调研梳理了产品线框图、PRD、流程图,到制定了设计规范,到协调资源,然后制定研发周期,最后到输出...... 曾一度以为这就是全栈,但是后来思考,这些只不过是本着对事情负责的态度,才驱动做了很多研发之外的事。就算一个人的技术全栈精通也要服务于根本产品。
伍星-优才创始人:项目进度和管理,比全栈本身要难。因为技术还是死的,人是活的,而且多种多样的。就像业务架构师,本身曾经技术应该不错,即使学新技术,应该也是有特殊长处和见解的,不过不学不写罢了。这种人是标准的技术 leader ,技术能力并不一定是以某特定语言的写码能力而界定。
一般而言,全栈工程师在产品和沟通这块都有优势,由于技术全面,他能和各方沟通的比较愉快 。甚至和产品经理也沟通好。我也算是一个全栈,此前和各个产品经理沟通都很愉快。因为他不理解的地方,我会和他讲清楚,分析清楚,为什么这个不能做,为什么那样做不好,那样做更好,有理有据,其实,产品经理也是讲道理的,不像我们在网络上经常「吐槽」的那样。如果再加上本身的技术声望和良好沟通的方式,程序员和产品经理相处其实会很和谐的。
如果成为一个全栈工程师?
王威:我的理解是,不仅自己领域的精通,然后其他部分也应该快速学习。在我看来,如果想成为全栈的话,还得靠上项目了。在普通公司的话,一般每个人只关注自己的领域,对跨领域的项目一般不会碰,可以自己利用业余时间来写,比如原本做APP的,有空可以写一下后端的东西,其实开始那一步比较困难。
张洋:全栈不只是技术,还需要心态、责任等方方面面。
江月:我觉得 facebook 要求全栈,并不是希望程序员技术全面但不精通。而是至少有一个领域精通,而且可以快速研究另外一个领域的技术点。
伍星-优才创始人:能成为全栈,意味着技术能达到一定高度,而高度,肯定是以长处见知的。我个人更倾向于认为,一专多能。
王威:成为全栈的话,还得靠上项目了。。。在普通公司的话,一般每个人只关注自己的领域,对跨领域的项目一般不会碰,自己私下来写,比如原本做 APP 的,自己私下写后端的东西,其实开始那一步比较困难。
药交汇:关键是责任感的转变,由「被动」到「主动」,才能实现自我超越。
拯救与逍遥:我个人看法,不是先有了「我要成为全栈」的目标,而是对技术的好奇和追求,以及积极应对当前业务发展的不断挑战,最终才能锻炼出了全栈。
薄建业:我觉得,最好的方法就是项目驱动;从另一方面也说明,说为全栈,在一定程度上,也是被逼出来的。
王威:我比较赞成项目驱动型。比如 APP 端的,例如做个类似于云笔记的软件,那么后端数据该怎么保存,接口该怎么定,该用哪种语言来实现后端,在分析你想要的目标的时候就能找到该用哪种技术该学哪种技术。比如后端用 PhP 写,这时候就会推动自己去学 PHP,比如自己是做安卓,那么语言衔接上,有可能选择 Java 做后端,这时候就学 J2EE 的东西,围绕这个需求来实现,然后学数据库......其实说到底还是得有」目标项目」来进行推动。
林曦:后端概念太泛了,不同业务需求和规模需要的技术支撑完全不同。
王威:比如做高并发,可以 NodeJs 、 Golang 、 Erlang ,或者干脆用 Java、PHP 等等。其实做项目的第一步,后端写出业务服务接口,在业务量上来之后考虑比如性能优化,比如负载均衡,或者再比如后端架构分层等等。
文彦峰:其实,接入也有很多要做的,一般要和终端一起做,路由、负载、流量控制、安全、监控、旁路、优化 TCP 协议栈、内核参数再到硬件的支持等等。做业务,比如网关、鉴权、微服务框架、服务治理、缓存、消息中间件;存储,单机房如何保证数据不丢,多机房是单向同步,双向同步,出了异常怎么通过日志恢复,数据的检查,静态检查点的选择。怎么做分片,怎么扩容不影响原来的分片?
王威:所以说到底还是得有这个项目需求,围绕着需求来分析需要的技术,然后再研究技术了。感觉纯按照兴趣来学新的技术,作为对这一个技术有个优缺点简要了解,在需要的时候能快速学习。我个人还是觉得,想成为一个「全栈」,就找一个想法并实现它。
周渊:比如,你觉得 NBA 好看,想要做一个 APP 能提醒比赛,那么每天下班后,没事写几个小时代码,三个月后,你就会发现做成了。
林曦:我觉得做个「入门型」的全栈比较容易,真正能做到都有一定深入的了解很难,融会贯通更难。
拯救与逍遥:先自学基础入门,进阶的话,可以随公司项目,初期不能直接参与,但是我们可以主动思考技术方案,然后参照其他同事最后落地的方案,对比总结。能力慢慢提升,真正上手的机会总会有的!
周渊:最重要就是,Just Do It !
林曦:不过大公司相对有一个好处,就是能遇到「牛人」的概率也比较高,所以开发过程中,某一个部分遇到瓶颈的时候想要找人讨论或者请教,找他们也是比较好找的。
周渊:高人点拨,确实重要,但是建立在你入门的基础上。
拯救与逍遥:很多时候,我们不能做最想做的事情,而且要停下来推动一下,阻碍我们继续前行的事情。但是,有些坑,有些历练是必须的,别人说一万遍,我们还是得自己历练。而且很多技术选型,都是在真正落地之后,才暴露出问题。
王威:采坑是必然的!运气好的话,采坑的代价低,运气不好的话,采坑代价可能毁掉整个项目。不过有些坑,有可能是在技术选型的时候就会暗含的,这个时候确实不好找。
王威:我们业务在往图数据迁移的时候也踩了很多坑,因为我们是社交软件,所以很多需求是基于用户关系的,比如喜欢、不喜欢、好友等等。。。最开始觉得 neo4j 挺方便的,导入数据的时候发现,免费版就是个坑爹的玩具。。。收费版貌似5千刀一个月还说多少,巨贵。。。
王威:创业有这个好处就是人少,一个人当多个人用,这个时候就有很多机会去摸新的东西,不过缺点就是没人带,自己摸石头采坑。。。
王威:不过对于我来说收益大于采坑风险。。。所以还是得围绕这个需求,一圈一圈的挖掘更好的解决方式,这个是一种学习的过程。尤其是在风险可控范围内,绝对鼓励大家尝试新的东西。
到最后你的选择很多时候依赖你团队的水平,怎么把这些人水平带起来,你这些才能做细
最好的成长就是在业务中成长
林曦:架构也是活的,需要不断生长,不断修改。不过,前期埋的坑也只有后期加班吞了,没有一劳永逸的架构!
董飞:我觉得重要的还是分享,别人帮你填了坑,你也可以帮别人填坑。而媒介就是博客,大家可以互帮互助。
王威:说到写博客,我觉得可以把思维给规范化,把想法记录下来的同时还能注意到以前没注意到得细节,绝对是学习新姿势最必要的补充。
伍星-优才创始人:曾经,我就主动地提出来帮公司承担一些的运维方面的事情。然后就自己学习,请教,后来很自然地就成为全栈了。当然,全栈并不意味着上班学别的,我们上班时间把公司的事情做好,这才是成为全栈的前提。
伍星-优才创始人:还有一点,就是我们在写代码的过程中,要考虑怎么优化,怎么写得更快更好,而不是像「搬砖」似的,简单的重复。「搬砖」工作很快就会被淘汰掉,积累核心竞争力才是发展的根本 。
王威:比如做APP,在写从服务端拉取数据的时候,就可以考虑一下他们为什么要提供这样的数据结构?这样的接口如何进行实现的?有这些疑问的时候,就会促进自己去看看去了解一下相关的知识,这样才能不断通向全栈之路。
当然,完成是一码事儿,完成好是另一码事儿。全栈的意义不是全都泛泛地去做,而是在做深自己的领域同时,也能借鉴其他的技术,至少在团队开发时候沟通成本会减少很多。
赵建彬:其实,产品并不会关心你代码怎么写,关键自己要写出让自己觉得满意的、高质量的代码。
薄建业:全站人才可以站在更高的视角,提供「一揽子」的解决方案,避免踩深坑!
文彦峰:热衷于技术,成全栈是早晚的事儿,技术全面某方面又比较深入,自然能解决别人解决不了的问题,能做别人做不了的事情,团队中的影响力,行业中的影响力,也自然就有了,形成正向循环,还是挺不错的!
伍星-优才创始人:就像罗辑思维跨年公开课说的那样,核心竞争力,就是你的不可替代性。我们不能单纯地说「全栈」好,很多初学者会被误导,是因为他们不了解什么是全栈,怎么才能成为全栈。就像武功也有练「走火入魔」的。
其实,加入一个快速成长的团队创业。是成为全栈的最快捷途径。这个团队,也可能是大公司内部创业团队。也可能是大家都把工作当作创业的团队。而没有好奇心,没有折腾劲,没有学习能力,没有开放心态,是不可能成为全栈的!
http://quanzhan.ucai.cn/intro (本文是优才学院创始人伍星对全栈的理解,发布后2014年4月份,到现在也没有改变,欢迎大家阅读。)
本文系国内 ITOM 行业领军企业 OneAPM 工程师编译整理。我们致力于帮助企业用户提供全栈式的性能管理以及 IT 运维管理服务,通过一个探针就能够完成日志分析、安全防护、APM 基础组件监控、集成报警以及大数据分析等功能。想阅读更多技术文章,请访问 OneAPM 官方技术博客
染头发
聚一聚……
染头发
教育局……
你好
嗯讲得一般……
星雾
Lambda表达式的条件限制很多,应用面不多,我不知道是否应该要花时间来掌握这个表达式,求解……
修道小仙
感谢分享,来龙去脉,深入浅出,非常清晰……
小布丁
写的棒棒哒……
小布丁
写的真可以……
wuxin
受教了……
爱码物联
博客使用……
yancy_01
很喜欢文字的描述,特别是理论性质的,相比于代码,理论知识更加有意思,谢谢分享……