全栈程序员是扯蛋
当然,这话不完全正确,但你永远找不到一个全栈程序员。“真正”的全栈程序员确实存在,就像天才和十几岁开始一直在编程的人确实存在那样。
全栈程序员这个职位头衔/描述我实在是见多了;你要果真找到自己苦苦寻求的全栈程序员,唯一的办法就是从其他公司挖墙角。除非你特别幸运,否则为你能够填补这个岗位的每个人已经很开心能谋得工作。
这个职位描述描述了我知道的少数几个人,但外头真正拥有“全栈”技能组合的少数几个人很抢手,只会进一步助长这个神话:你这家初创公司能够找到这样一种人。
它其实就跟“天才”或“在XX领域无所不能的奇才”之类的职衔一样毫无意义。
为了进一步解释这一点,下面这张图显示了并不完整的“堆栈”。请注意,你的技能组合通常只需要包括每一层的一两个部分。有些技能也许几个小时就能掌握(GCC或VPS的基本用法),而有些技能需要几年才能掌握。
技术堆栈层次及部分的不完整列表
对“全栈”程序员的预期远远超出了普通人的能力范围。他们需要了解如何扩展应用程序以便处理每天(或每小时)数百万次的点击,了解“宠物vs牲口”意味着什么、为何它很重要,了解之所以选择MongoDB而不是选择MySQL(或反之亦然)的原因,了解CAP定理(CAP theorem),了解PaaS、IaaS及十几种配置管理工具,了解根据需求,用Rails、Django、Wordpress、Swift或这些组合来构建应用程序,哪个更明智,还要了解微服务与整体单一式应用程序以及其他众多方面。
这意味着,全栈程序员至少对堆栈的每个部分需要有足够深入的了解,才能够对它们的使用做出明智的决定,能够向管理层解释清楚(最好以通俗易懂的语言)。确实如此,在这个堆栈的最上层,大家的预期是,全栈程序员拥有扎实的语言技能,能够与其他人很好地合作,还能够向中上层管理人员解释非常技术性的概念。
每年都有新的部分加入到每一层,每过几年,就会有新的层次加入到堆栈。发布物色全栈工程师的招聘广告果真合理吗?这不仅不合理,还很愚蠢。如果你开始寻求精通安全、Web开发、用户体验(UX)和服务器等方面的人才,更是愚蠢得要命;可是这种要求一点也不罕见。
最糟糕的是,由于寻求全栈程序员或全栈工程师的常常是初创公司,那个人还常常被要求管理项目、征集用户需求。
还不排除这种情况:等首席执行官来到办公室后,还要在他全新的Windows笔记本电脑上搞好打印机和文件共享。
正如我提到的那样,有的人就是这么能干,我就认识这样几个人。但我知道更多出色的程序员、设计师和项目经理离全栈工程师实在相差甚远;还有更多的人自诩为全栈工程师,实际上会的本领还不到我在上面所列的堆栈中的五六种技能,更不用说判断两个部分或更多部分之间的关系了。这时候,问题就出来了。
在我看到有人使用全栈(尤其是在招聘广告)的几乎所有情况下,公司寻找的实际上只是“出色的人”,仅此而已。
全栈和全栈工程师的最早定义似乎是来自Facebook工程师卡洛斯·比诺(Carlos Bueno)发布的一则帖子,他将全栈工程师定义为深入了解性能影响的通才,详见https://www.facebook.com/notes/facebook-engineering/the-full-stack-part-i/461505383919。
全栈工程师或全栈程序员也许根本不用编写代码,而是更多地扮演系统架构师或集成程序员的角色。深入了解全栈的人能够及早发现并规避集成方面的问题和低效。
即便如此,你仍需要定义你所谈论的“堆栈”是什么。Web堆栈、移动堆栈还是原生应用程序?“全栈”甚至不是一种技能,而是除了技能外,更重要的是包括对于集成堆栈中每一层的所有概念以及某一层中的行动对其他层带来的影响有一番深入浅出的了解。
全栈程序员是扯蛋,倒不是由于根本不存在全栈程序员,而是由于这个术语毫无意义。它跟编程忍者(coding ninja)或编程摇滚明星(coding rockstar)没什么两样,但至少大家都知道,那些术语实际上没有什么意义。
你在寻找万金油、集成工程师、性能专家还是能迅速掌握新技能和新技术的人吗?还是说你合理地期望找到所有那些方面样样精通的人?果真如此?
云头条|未经授权谢绝转载