问题描述
Adam Smith提出的劳动分工理论认为,通过将工作分成不同的阶段,每个阶段都可以独立学习和掌握,并且不需要沟通就可以进行交接,这样可以提高效率。那么为什么多技能角色如此受欢迎,如果这实际上会降低生产力,那么Smith是错了吗?搜索“全栈开发人员”在Google上的趋势仍然存在,但显然比两年前慢:
总结一下,全栈开发人员可以几乎完成整个价值链的工作(如果我理解错了,请纠正):
– 与客户讨论并完善可行的敏捷需求
– 决定选择哪种架构、工具和组件
– 编写前端、后端、集成的代码,跨设备兼容且不需要太多测试,或者包含测试
– 分析和提取数据,使用云AI/ML API进行高级功能
– 编写所需的基础设施即代码和发布
– 在出现错误或销售过程时保持在线
– 注意安全相关设计、整体修补、迁移和现代化
– 以详细的时间表记录工作时间,以便雇主更容易开具发票
– …我有遗漏什么吗?
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
Adam Smith关注的是劳动分工中的剥削性工作,而不是探索性工作。在工业界的研发部门中,大部分工作都是探索性的,所以它与Adam Smith的理论没有任何关系。但是我们已经看到,在后续的持续改进阶段中,CI/CD的应用可以带来类似的生产力提升,这可能可以追溯到Adam Smith,尽管这需要非常有想象力的人来证明。
方案2
Adam Smith并没有考虑到信息从一个阶段传递到另一个阶段的问题。这是任何重要的IT项目中的一个关键部分。因此,全栈开发人员具有以下重要优势:
– 他们不需要与其他部门的任何人交谈才能完成工作
– 他们不需要等待其他人完成工作
– 在不同层之间,信息丢失的可能性要小得多
关于IT项目中信息传递的重要性,请参考Fred Brook的《神话般的人月》。
方案3
我认为答案与规模和资源可用性有很大关系。我相信Adam Smith的理论只适用于大规模的情况,比如整个国家/经济体,或者在软件开发的情况下,大型开发团队。在大型团队中,雇佣更专业的人力资源确实更有效:
– 他们不是“摇滚明星”-在这样的大型组织中通常被认为是一个危险信号
– 他们通常更容易找到,比那些具有更广泛专业知识的人更便宜
– 他们通常不会增加离职风险-例如,他们不会因为只使用其技能的子集而感到不满意。
– 在(也许是奇怪的)DevOps比较中,可以应用“牛群与宠物”的原则,原因与大型组织类似,出于相似的原因,这些专业资源从业务角度来说只是人力资源池中的资本,可以根据需要快速调整规模,通常是通过招聘/解雇来实现的。
– 哦,这样的团队只有在有高质量的架构师资源的补充下才能正常运作,这些资源对于将产品分解为可以使用专业资源解决的较小任务是必要的。
在较小规模甚至是单人团队(通常是初创公司或甚至是大型组织中的孤立小团队)中,使用这样的资源并完成工作是低效甚至不可能的:
– 他们根本没有预算/资源来雇佣许多不同的专业资源来覆盖整个产品开发
– 他们实际上寻求/欣赏可以扮演多个角色并具有极高灵活性的“摇滚明星”,而不会导致延迟和额外的人力资源成本。
方案4
我认为自己是一个全栈开发人员,基于以下职责的组合:
– 前端和后端编程
– 我可以在一定程度上进行UI更改:编写HTML、CSS(作为Web开发人员),并且在某种程度上从数据库中提供数据,以及在服务中提供数据等。
– 我将测试、架构等方面放在一边,可能还包括与客户会面。
– 相反,我认为严格的UI和后端开发人员是相反的。
结论:
我并不认为全栈真的像你提到的那样全面,更像是一个花哨的表达,就像敏捷或云一样,某些情况下只是为了吸引人们的注意力,实际实现可能差异很大。至少关于Scrum和敏捷,我已经看到了这么多的变化,以至于这些术语已经失去了意义。
方案5
Adam Smith并没有错,但我认为劳动分工在制造业和软件开发中的“隔离”之间存在一些重要的区别。
首先,针对制造业的销售工厂的例子(据我所知)只是假设性的;虽然大多数现代制造工厂可以追溯到这种劳动分工,但我不知道是否有任何科学研究实际测试过这个假设。
其次,Smith主要关注的是制造物质产品;物质生产与软件开发中没有类似的模拟。例如,在制造销售工厂中,物理尺寸是一个重要的功能要求;在软件中没有明显的类似之处。这一点很重要,因为可以通过精确重复来复制有形物体;软件开发从来不是同一个问题两次。开发人员开发了常见的方法来产生可预测的结果,但你永远不会两次编写相同的问题。在堆栈中开发的任何组件都有与物理组件不同的复杂性,并且这些复杂性具有超出可衡量的交互(高度、重量、长度等)的影响。针对软件开发,边界从来没有那么清晰。
全栈开发人员不需要自己完成所有工作(他们不是一个单独的销售工厂),但他们需要能够理解堆栈的所有元素以及这些元素之间的相互作用。全栈团队应该由专注于一个或多个领域的“T型人才”组成,但他们应该了解整个领域,并且可能能够在某个层面上介入。
我认为Smith的工作在软件开发中的一个方面是上下文切换(或多任务处理);如果一个开发人员负责开发的所有领域,那么从一个责任到另一个责任需要时间。在规模上,具有不同经验的团队成员之间的协作可以平衡上下文切换和复杂的交互。
方案6
理解劳动分工并不总是意味着每个步骤都有不同的人来完成。
以我在汽车工厂的经历为例,我在一个座椅装配线上工作,为了获得带有安全气囊、皮革、头枕等的完整座椅,该生产线被分为9个阶段。我们有9个人在生产线上工作。每个人一次只做一个阶段,但每个小时我们都会在下一个阶段轮换,以避免过多的重复。工作日为8小时,所以我们不会每天都在每个阶段工作。
这正是劳动分工,你只在给定的时间内完成装配的一个步骤,这并不妨碍你能够完成整个装配。
正如其他答案中已经提到的,这与软件开发有所不同,但我认为这解释了为什么全栈开发人员与劳动分工并不互斥,具备能够处理整个应用程序生命周期的能力的人并不需要一直这样做。
一般来说,当我听到全栈开发人员时,我更多地想到能够同时编写高效的后端和漂亮的UI的人,与前端和后端开发人员相对立。
以上是关于Adam Smith与全栈开发人员在DevOps中的生产力的解决方案。希望对你有所帮助!