首页 > 程序人生 > 程序员:如何成为一个全栈的工程师?
2016
01-15

程序员:如何成为一个全栈的工程师?

全栈工程师,英文 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,在写从服务端拉取数据的时候,就可以考虑一下他们为什么要提供这样的数据结构?这样的接口如何进行实现的?有这些疑问的时候,就会促进自己去看看去了解一下相关的知识,这样才能不断通向全栈之路。

当然,完成是一码事儿,完成好是另一码事儿。全栈的意义不是全都泛泛地去做,而是在做深自己的领域同时,也能借鉴其他的技术,至少在团队开发时候沟通成本会减少很多。

赵建彬:其实,产品并不会关心你代码怎么写,关键自己要写出让自己觉得满意的、高质量的代码。

薄建业:全站人才可以站在更高的视角,提供「一揽子」的解决方案,避免踩深坑!

文彦峰:热衷于技术,成全栈是早晚的事儿,技术全面某方面又比较深入,自然能解决别人解决不了的问题,能做别人做不了的事情,团队中的影响力,行业中的影响力,也自然就有了,形成正向循环,还是挺不错的!

伍星-优才创始人:就像罗辑思维跨年公开课说的那样,核心竞争力,就是你的不可替代性。我们不能单纯地说「全栈」好,很多初学者会被误导,是因为他们不了解什么是全栈,怎么才能成为全栈。就像武功也有练「走火入魔」的。

其实,加入一个快速成长的团队创业。是成为全栈的最快捷途径。这个团队,也可能是大公司内部创业团队。也可能是大家都把工作当作创业的团队。而没有好奇心,没有折腾劲,没有学习能力,没有开放心态,是不可能成为全栈的!

编程技巧