前言:
好久没有写博文了,一直在研究和实践敏捷也有三年多了,因此又有了一些感悟,希望和大家分享。
前天与一个朋友关于全栈开发与敏捷的关系,有了一点小小的争议,现在就把我的观点贴到博文里,希望看到的朋友给点建议和指教。
以下是我个人的观点:
全栈是一个理想,或者是说一个个人发展的极限挑战。能否有人做到样样精通?这是无需回答的。
敏捷强调一专多能,目的是为了平衡开发的负荷,减少开发中的瓶颈。比如,如果测试目前是瓶颈的话,那么开发人员应该放下手里的开发任务,主动去帮助测试人员。这里的帮助可能是去做测试,但也可能是帮助开发人员构建更好的自动测试环境(注意:不是那种高大上的测试平台)。只有这样,开发团队才能保持稳定的步伐前进。否则,明明测试已是瓶颈,而放置不理,仍去开发更多得不到测试的程序,将造成更大的堵塞。敏捷不是扼杀专家,而是扼杀那种“油瓶倒了也不扶”的专家。
开发是一个团队的活动,而非“团伙”的行为。它是一个整体,而非一个个单独的个体,就像是一个足球队。现代足球的发展与敏捷是如出一辙的,“全攻全守”就是一个例证。难度全攻全守就是既当守门员,又要负责进球?
另外,请暂时不要将全栈与敏捷联系起来。在我目前看到的不下十本的敏捷书籍中,还没有看到这个术语。虽然全栈一词是最近才出现的,但全栈开发人员却不是最近才出现的,恰恰相反,它在软件业刚刚开始就出现了,尤其是在中国很早就有了。在小公司呆过的人,都知道自己曾经当过全栈开发人员。我在二十年前就是一个全栈人员,而且跨度不止是开发,甚至包括售前、售后,以及销售。
8/21日 更新:
有关全栈开发和敏捷的话题,我在领英的“Agile and Lean Software Development”组内咨询了一下,下面是Paul的一个回答,认为这是两个不同的概念。我还是非常赞同这个说法,英文不是太好,我就不翻译了。原文如下:
They are separate concepts (if we're thinking of the same concepts); neither implies the other.
Agile approaches like "Generalizing Specialists" - people who have a broad range of relevant skills and are particularly strong over part of that range. However the *team* needs to have all the skills that are needed to produce deliverable product - if I understand the concept then the *team* needs to be a "full stack developer". This concept is core to most if not all agile approaches.
One could, of course, be capable as an individual of producing a complete deliverable without being in any way agile.