首先解释一下字面的意思,『栈』是技术栈的栈,为什么要用『栈』这个字?栈本身包含了一种立体、堆叠的意思,那么技术栈就是指针对某一个领域,多个层面的多种技术的组合。


技术栈:IT术语,某项工作或某个职位需要掌握的一系列技能组合的统称。technology stack 技术栈一般来说是指将N种技术互相组合在一起(N>1),作为一个有机的整体来实现某种目的。也可以指掌握这些技术以及配合使用的经验。【百度百科】


    另外一个词是『工程师』,我们必须理解工程师和程序员之前的区别,我理解的工程师,一定是站在项目的最高点,用自己专业领域的眼光去审视,去提出这个项目实现在自己这个领域的解决方案,然后去实施;而程序员应该会更加偏重某个程序的领域,去深耕相关的框架、算法、扩展、效率等。所以,我们探讨的不是全栈程序员(没有人能够成为全栈程序员),是全栈工程师。

    网络上对全栈工程师的评价褒贬不一,有人说,好,1个顶10个,效率高;有人说,NO,你什么都会表示你什么都不精……我个人对全栈工程师举双手大拇指,当然,并不是那些会点HTML+JS+PHP就敢自称全栈的二货。


全栈的诞生

    不是每个CODER都有机会成为全栈工程师,因为职位分工的原因,多数的研发人员会长期只撸一种代码,然后在这个领域不断增加自己的技术栈,偶尔有机会接触到跟其他语言有交集的项目也因为工作的原因,浅尝即止。毕竟国内像谷歌这样的公司是极少的,多数码农们更多的时间是在苦逼的搬砖、加班、改BUG……所以,目前我看到的全栈的诞生地有两个地方,一是外包公司,不论是人力外包还是项目外包,往往因为项目的原因,有机会去接触各种项目和语言;二是创业公司,不管是创始人还是团队成员,都要求身兼数职,一专多能。


全栈的精神

    在我看来,所谓的全栈不是你的技术栈有多全面、多丰富,哪怕你精通10种语言,如果没有全栈的精神,也只是个会10种语言的码农。当然,全栈的基础一定是要在多个技术栈有经验和技术沉淀,然后,他还需要具备两个层面的意识:

    一是技术组合,他必须要懂得各个技术栈之前如何去组合应用,如何针对不同的项目,用不同的技术栈组合,去给出成本更低、风险更小、更优秀的解决方案。那么他一定要站在每一个技术栈的顶端,去审视这个技术栈特性、扩展、生态、发展趋势……

    二是技术协作,他必须很清楚不同的技术栈的研发人员的思维逻辑和协作需求,在不同技术栈组合应用的时候,尽可能去减少沟通过程中的信息失真或丢失,让不同的技术团队在协作的时候更加顺畅……


    所以,总结为一句话就是:不想当CTO的全栈工程师不是好项目经理

    

全栈的价值体现

    团队效率一定是1+1<2的,因为存在沟通成本,这个成本包括时间成本和对沟通过程中信息失真、丢失的处理成本,而最可怕的事情往往发生在信息失真或丢失的时候,大家东西做出来一对,发现你也有问题,他也有问题,然后大家重新修正。而这样的失真问题导致的工期延长,有时会远远高于预期的工期,因为沟通的环节越多、层级越多,信息的偏离就越大。所以,一个全栈,替代三个甚至更多研发工程师,是完全可能的事情。当然,前提是项目小,技术栈多。

    对于大项目而言,让一个全栈工程师担任技术经理或架构师,绝对是个好主意。他可以最大程度避免不同技术人员之前的沟通不顺畅的问题,甚至会经常担当翻译的角色,在不同角色和岗位之前牵线搭桥。

    所以对于全栈而言,其价值体现就是他在项目中,为团队、为项目节约了多少时间,提高了多少效率。


全栈的未来

    从产品角度来说,当今的互联网环境,对于互联网产品的需求是爆炸式的增长,优秀的、精简的、高效的互联网产品团队会成为整个时代的主力军,那么在这个团队里面,必然会有几个全栈来应对各种应用场景和业务需求;从技术角度来说,各种技术眼花缭乱,解决方案五花八门,掌握多种技术、擅长各种技术组合的全栈,将会成为创业团队最稀罕的香饽饽。




    人的精力是有限的,所以当一个人的知识面越广,意味着其深度越浅;所以全栈的弱点在于没有办法深耕于某一个领域,或许他永远也无法成为某个技术领域的专家。也许很多技术他会用,却往往是知其然不知其所以然。

    但,当不断沉淀和积累,经历无数技术坑的磨砺,直到有一天大彻大悟,发现万法同归,任何技术栈一眼便能看穿透本质,任何技术在其眼中不过是手段,不再纠结于某种语言或结构,眼里只有目标和解决问题的路径。

    我是全栈,我骄傲!