让我们来谈谈分工

让我们来谈谈分工

Division of Labour昨天,我看到一个新闻——雅虎取消了QA团队,工程师必须自己负责代码质量,并使用持续集成代替QA。 同时,也听到网友说,“听微软做数据库运维的工程师介绍,他们也是把运维工程师和测试工程师取消了,由开发全部完成。每个人都是全栈工程师”。于是,我顺势引用了几年前写过一篇文章《我们需要专职的QA吗?》,并且又鼓吹了一下全栈。当然,一如既往的得到了一些的争议和嘲弄;-)。

有人认为取消QA基本上是公司没钱的象征,这个观点根本不值一驳,属于井底之蛙。有人认为,社会分工是大前提,并批评我说怎么不说把所有的事全干的,把我推向了另外一个极端。另外,你千万不要以为有了分工,QA的工作就保得住了。

就像《乔布斯传》中乔布斯质疑财务制度的时候说的,有时候,很多人都不问为什么,觉得存在的东西都是理所应当的东西。让我们失去了独立思考的机会。分工也是一样。

所以,为了说完整分工这个逻辑。请大家耐住性子,让我就先来谈谈“分工的优缺点”吧。

分工的优点和缺点

首先,分工(Division of Labour)应该是由 Adam Smith 在1776年的《国富论》中提出来的,Adam在那时候就观察到分工对于手工业生产效率的提高。他将效率提高的原因归结于三点:

  • 熟练程度的增加。当一个工人单纯地重复同一道工序时,其对这道工序的熟练程度会大幅增加。表现为产量和质量的提高
  • 如果没有分工,由一道工序转为另一道工序时会损失时间,而分工避免了这中间的损失。
  • 由于对于工序的了解和熟练度的增加,更有效率的机械和工具被发明出来,从而提高了产量

分工的确是提高生产力。我想到了福特公司一开始做出来的汽车几乎卖不出去,原因有两个,一个是成本太高,另外是生产太复杂,产能太低。于是福特公司开始把制造一辆汽车的工序分解开来,进行分工,分工给福特公司带来的好处是:

  1. 很多工作可以并行了,而且因为事情变得简单后,执行力也变强了
  2. 一个非常复杂和高深的汽车制造因为分工后,很多工作不需要很NB的人来干了,只需要一般劳动者经过简单的培训就可以干了。而且,越干越熟练,越干越专业,最终可能让合适的人合适的事。
  3. 分工后导致了很多重复劳动可以用技术来解决,于是福特公司出现生产流水线的技术(你是否还记得卓别林《摩登时代》里的工业生产流水线的场景,那取自福特公司)。

于是,福特公司的生产效率大大提高,最终实现了让每个美国家庭都能买得起汽车的理想,同时让美国成为了轮子上的国家。

不过,我们需要注意的是,在《国富论》中,Adam他同时也提到,分工如果过细,同样会带来问题——简单重复的劳动会让人变成一个不会思考的机器,从而越来越笨,进而变成平庸的无技能的人。自“分工”出现以后,争论就没有停止过。

Karl Max同样认为分工越来越细,会导致人的技术越来越差,同时,大量的重复劳动也会导致人对工作的失出热情,产生厌倦和抵触心理,最终会导致生产力的下降

同时,还有一些经济学家也同样表明分工的一些缺点:

  • 导致人只关注整个事情中的一小块,缺乏全局视角,导致视野受限,没有完全领会工作的意义和目标,从而导致各种返工
  • 对于组织而言,分工也会导致出现大量的沟通协同成本,并出现碎片的生产方式,以及组织的孤岛形式,并不利于提高生产力

当然,奥地利经济学家Ludwig von Mises 并不这么认为,他认为,在分工所得到的好处面前,这些副作用不算什么。并且,他认为在资本主义的制度下,完全是可以平衡分工的各种优点和各种缺点,从而可以达到提高生产力和提高人员素质的双赢解的。

比如说,分工中的各种沟通问题是可以通过一个标准协议来解的,造灯泡的,造开关的,造灯座的完全不知道对方的存在,他们只所以可以让做出来的东西拼在一起,完全是通过了一种标准协议完成的。这也是为什么这个世界上有各种各样的标准化的组织

还有很多经济学家对分工都有自己的见解和想法。不过基本上就是上面这些Pros和Cons了。下图是一个PPT的两个slids,可以点击看大图(来源

lecture-5-10-728 lecture-5-11-728

全球化下的分工

分工带来问题在全球化的浪潮下变得尤为突出。其委婉地被讲成是比较优势(Comparative Advantage

比较优势(又叫相对优势)是经济学的概念,解释了为何在拥有相对的机会成本的优势下生产,贸易对双方都有利。当一方(一个人,一间公司,或一国)进行一项生产时所付出的机会成本比另一方低,这一方面拥有了进行这项生产的比较优势。于是,一个国家倘若专门生产自己相对优势较大的产品,并通过国际贸易换取自己不具有相对优势的产品就能获得利益。

于是乎,分工本来想要的是——合适的人干合适的事,但是在比较优势的情况下,商业社会把分工变成了——不是选择合适的人、公司或国家,而是选择成本低的人、公司或国家

经济合作与发展组织OECD最近(2015年6月28日)对全球化这样建议的——

“有效率的政策的本质不是阻止失业而是鼓励就业,如果各个国家都在收获全球化的利益而不是开放贸易的话,那么一些地方就会失去工作机会,当然也伴随着在另一些地方出现新的工作机会,这是全球化进程不可避免的,而我们面对的挑战是怎么能流畅调整我们的流程,能为那些新出现的工作机会找到合适的技能匹配的工人”。

通过上面的说明,我想你可以知道,为什么中国成为了世界劳动力大国,而为什么当初美国科技公司进入中国的时候,首先把测试的工作放到了中国。这就是所谓的全球化分工。同时我们也可以看到,像我们中国这样技术能力的确非常不足的国家,的确是可以通过分工这种形式,让我们这些技能一般的技术人员参与一个复杂的有技术含量的项目当中。这其中就是分工的光明面和阴暗面。

那么,我们想一想,随着中国的人力成本的越来越大,国际化的分工因为商业资本的因素,必然不会选择中国,只会选择人力成本更低的国家,比如印度、越南、甚至人力成本更低的国家。美国雅虎和Adobe不是离开中国了么?再看看中国因为人民币的汇率或是人力成本的上升,我们在早几年关了多少个Made in China的工厂,这就是全球化的分工,商业上来说,他不是找最合适的人,而是找成本最低的人。

所以,你千万不要以为我一提倡全栈了,你QA的工作就保不住了,就算没有全栈,就算是你还在坚持的社会化的分工,也可能让你的QA的工作就保不住了,除非,你能提供更低的价格。(想想这其中的逻辑吧,人家美国人把一些技术工作(比如测试)外包到中国的原因不是因为中国人聪明,想得周全,适合干这个测试这个事,而是因为中国人廉价,所以,当中国不在廉价了,自然就会找更廉价的地方了)

为什么国家要从Made in China转型?不就是因为中国早期拿到的国际化分工就是这些没有技术含量的支持性的分工么?也因此而造就了大量的技能很一般的工人。为了能在全球化分工中能拿到更有质量的工作,我们必然要从劳动密集型转向成知识密集型,必然要从支持性的工作转变为产出性的工作,必然需要单一技能型的技工转变为复合型的人才

分工的温床和天敌

分工的温床主要有两个

  • 一个是成本和效率,资本家或企业主或一个国家为了追求更快成本更底的生产方式,他们必然会进行大规模的分工,伴随着分工,他们也会把一些知识或技术密集型的工作生生地变成劳动密集型的工作。然后层层外包。
  • 一个是组织的大小,当一个组织的人数不断的变大,那么,你只能把工作和任务分得更细。这是被人数逼的,而不是实际需要的。这就是为什么我们可以看到很多大公司里要么人浮于事,要么瞎忙。

分工的天敌主要有一个——那就是技术

每当新技术出现的时候,一些复杂的工序会被一台机器或是一种高超的技术所取代,不管是被技术自动化,还是被技术所简化总之,以前本来需要数十人或是数百人才能干的事,突然之间只需要一个人就可以干完了。生产力得到了巨大的释放。所以,你这就是我们常听的——科技是第一生产力!

说到这里,让我们再来看看雅虎的那条新闻——

在软件开发流程中去掉QA团队会发生什么?更少的代码错误,更快的开发周期。这是雅虎工程师过去一年的实验结果。雅虎的Warp Drive计划将程序开发从批发布转移了持续交付模式,工程师的代码不经过QA团队的人工检查而是直接发布。开发模式的转变导致了处理问题理念的根本性改变,迫使工程师开发自动检查工具去识别原来由人工检查发现的错误。雅虎的技术团队现在全部是工程师,而不再有QA团队容身之处。雅虎的首席架构师 Amotz Maimon说,他们本来预计可能会发生严重问题,结果出乎意料,每个曾经对此抱有怀疑态度的人都说新做法很有效。

所以,当你面对一些难题的时候,比如线上的故障,或是一个复杂的软件生产活动,你是要加更多的流程更多的人呢,还是要用技术解决问题呢?一边是温床,一边是天敌,你想好了吗?

什么样分工才是好的

分工是必然的,因为很简单,你不可能一个人干完所有的事情,所以必需要分工,分工不是问题,而问题则变成了——什么样的分工是理想的,是优雅的,是有效率的?

华君武漫画《科学分工?》
华君武漫画《科学分工?》

对于分工来说,一般来是一种组织和管理形为。就目前来说,现代的公司有两种分工模式,分别是ControlCommitment 这两种分工。

  • Control就是控制型的管理,它是一种是基于工作技能的分工,于是员工会被这种分工分配到一个比较窄的技能里去完成一个非常明确的工作
  • 而Commitment则是面向员工的责任心和所承担的目标来分工并完成工作的。相比起前者来说,这样的分工在完成工作时,需要的不仅仅是技能,还需要更多的责任感

这么说吧,

  • 对于基于工作技能的分工,你会看到,这样的公司会把技术人员按编程语言来分,比如:Java、PHP、C/C++,或是分成:Web端、iOS端、Android端、后端、算法、数据。或是分成:开发,测试,运维。
  • 对于基于Commitment的分工,你会看到他们这样分的,软件工程师(不分前后端,不分语言,不分运维,测试),因为这样的公司认为,他招的不是只有特定语言技能的Coder,而是而学多种语言多种技术能保证软件质量以及能对软件维护的软件工程师。这种公司的软件工程师是各种团队都可以去的,而他们的分工更多的是按软件的功能,软件的模块,或是软件的产品线来分工。

基于技能的分工已是过去时,而基于 Commitment 的分工是更有效率的分工的未来。你可以参看McAlister-Kizzier, Donna. 的文献 “Division of Labor.” 。

小结

我说了这么多,不知道你看懂了我想表达什么没有?我不强加我的价值观,只希望你自己问自己几个问题:

1)作为工作的人,在分工中你会怎样选择?是成为一颗棋子,一颗螺丝钉,还是成为一个多面手?

2)作为工作的人,当你选择工作或任务的时候,你是选择做支持性的工作,还是做产出性的工作?你是选择做劳动密集型重复工作,还是做知识密集型的创新性的工作?

3)作为老板,你是想要什么样的员工?听话的只会加班和干重复工作的劳动力,还是有责任心的为企业和产品负责的员工?

4)作为老板,你是想通过分工释放低端员工的生产力,还是通过科技或技术去创造更NB的生产力?

5)作为老板,分工中的问题,你找到比较优的解了吗?比如,对于不同团队间的协议,你找到了吗?

可能,在不同的情况下你会有不同的答案。但是对我来说呢,无论是什么情况,我都只会有一个答案。

(全文完)


关注CoolShell微信公众账号可以在手机端搜索文章

(转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)

——=== 访问 酷壳404页面 寻找遗失儿童。 ===——
好烂啊有点差凑合看看还不错很精彩 (88 人打了分,平均分: 4.57 )
Loading...

让我们来谈谈分工》的相关评论

  1. 虽然我是以开发的身份被招进公司的,但是一直都是在写自动化测试的代码的,最经常干的事就是读完代码,做完测试,给QA,PM讲功能。然后等着他们做决策再回来改代码。几年过去了,技术啥的在退步,连与人沟通都快成了障碍了,总是怕说不清楚,听不懂。

  2. 然而现在,还有很多培训机构在批量生产浮于表层的技术开发人员,都无法成为研发。这样会间接的导致太多的问题出现。
    1、接受培训的技术人员技能水平浮于表面,而找工作时要求甚高。
    2、部分公司在录用这些人员后,不得不配备测试人员来保证工作的完整性。
    3、该技术人员参加工作后重复劳动,没有产品和团队意识,应付工作,质量也就大打折扣。而技能根本也谈不上提升。

  3. 现在公司小,配的测试没几个,大部分都是自己开发自己测,自己测试也就是把自己刚刚修正的地方测了,在全局大致跑一通,就算完了,整体比较快,但是总是会有遗漏。

  4. 取消QA, 让程序员承担QA的职责, 本身是一件好事.
    但是目前多数公司, 开发者能力达不到全栈要求(尤其是意识上没达到), 有很长一段时间的过渡期.

  5. 这个没有把好处全占尽,不要坏处的。雅虎只是去年觉得这样挺成功。这玩意能持久,还得继续观察。况且每个企业情况不同,大部分企业是没有各个是精英的员工的。28法则,大部分企业是这样的。

  6. 只有开发管理和基础设施达到一定程度了,工程师才能继续聚焦于自己的工作,才能做到雅虎这样吧。

  7. 步子迈大了容易扯到蛋蛋。有些人在一个公司干不了多久就辞职了,你能指望新来的立马能够和原来的一样能干吗?有条件的可以取消,没条件的还是算了,根据实际情况而定吧。

  8. 说的真好,完全赞同。
    我个人经历过分工很细的大公司模式,也经历过这种一人全挑的全能模式,从效率上来讲不可同日而语,后一种更好。而且前一种会让人更懒,确实降低了个人的主动性。我喜欢后一种。

    1. 还是要看公司性质,涉及业务的,虽然创新思考很好,但不得不承认还是有很多工作是要熟练工的。分工有好有坏,用辩证的思想去看。还是那个平衡感。

  9. 分工的利弊说得很好。
    但觉得靶子竖得有些不清晰,感觉本质并没有在论证分工的必要性,而是在讨论分工的粒度问题。
    研发体系下分前端(web, iso, android),后端(开发,基础产品及架构,运维,测试。。),面向commitment的为什么一个人不把市场推广,运营,公关,产品全干了?而是只在研发体系内面向commitment?

  10. 工作是否简单机械,那是不同岗位相对来说的,所以不管怎样,总会存在相对简单机械的工作,也总会有人去做这样的工作。

  11. 您好! 请问能否有电商网站前后端架构开发?能否推荐一下靠谱的团队? 多谢!

  12. 《GNU Gcc嵌入式系统开发》董文军 编著 北京航空航天大学出版社 出版
    第3章 makefile文件的编写
    第4章 gdb调试技术
    涉嫌抄袭您的blog文章。

  13. 蚂蚁金服这边已经在推质量2.0了,就是全栈,前端、开发、测试一手抓,十几人的团队分成两三个小团队,打仗效率真的很高。不扯、不推,大家心都很齐。

  14. 反对。由于人员流动频繁,我们要求分工倾向机械化,这样产品评估工作量时才稳定。

  15. 你千万不要以为我一提倡全栈了,你QA的工作就保不住了,就算没有全栈,就算是你还在坚持的社会化的分工,也可能让你的QA的工作就保不住了,除非,你能提供更低的价格。

    ——好残忍,不过我喜欢

  16. 毕业后在一家外企无QA团队待过,出来后在一家国内小公司,也在推广SDE的含义,但也深深的感觉到了“开发”和“研发”的区别,曾经我几乎认为这俩是一样的,都应该必须是“研发”。 而在当前的公司,即便是研发主管,培养新来的校招同学,也是手把手教,培养成了熟练的搬砖工

    这种观念的差距,很难扭转。而在这种明确分工下,扯皮、培训、沟通问题太多

  17. 一个软件工程师怎么做到全能呢,什么语言都会不就等于什么语言都不会吗?现在的coder哪有这么全面的。

  18. 不能安逸地躲藏在自己的三分地里,否则淘汰你是迟早的,要时刻有强烈的危机感。

  19. 我怎么觉得分工意义其实是专业呢,一个人大包大揽确实提升了效率,可同样你简化了步骤,与现在的编程规范化思想不是相悖么。
    而且一个人又要做开发,又要做测试,如果希望提升效率,肯定没有流水线作业来得快,强行提高高效,那么对整个程序而言是不是就会有良莠不齐的代码呢?没有整体测试与连接,整个程序或其中的一小块完全取决于个人能力,如果工程师能力没有达到一定标准,是不是对整个程序的质量来说有些欠考虑呢?
    而且文后的问题我认为意义不是很大,作为员工,前提努力的话,每个人都有自己的发展路线,做技术专家或者是全栈都有可能,而老板,更会在架构上来考虑公司的组成,不是说乔布斯能力很强,苹果公司就不会辞退他(虽然是错误决定),因为需要干多少活就招什么样的人,只要利益最大化就可以了,你要求工程师可以全做的时候,自然而然需要更高的薪资来匹配。
    对于员工成长与公司稳定性来说,技能与模块分工更加如此,当你需要控制一个产品的质量的时候,你会交给一个小团队(新团队)来设计么?而且职场新人如何在项目主导的团队中生存呢?没有系统、专一的学习,然后再进行项目培养,全栈工程师基本是梦吧。这样更会导致公司只能挖人,项目的持续性又在哪呢?同样举乔布斯的例子,没有乔布斯的苹果现在还像以前的苹果么?
    我认为博主虽然把握了市场的方向。可同样忽略了个人的成长,如果没有技能分工或者螺丝钉,那么同样也不会有全栈工程师或多面手。

  20. 估计耗子叔一直是做服务的互联网产品,没做过企业级软件,对质量要求比较低。现在已经有一些公司把之前裁掉的测试又招回来了。不知道耗子哥有没有碰到过裁掉测试以后质量不下降的情况。

  21. 其实,我也认为皓哥的文章也是表达的太理想化了,如果一个程序猿什么都做的话,那是不是 PM,市场也可以一个程序猿做,那这样每个人都可以创业啦

  22. 你好!我就是工作了好几年的QA。当时刚毕业时只是为了找工作吧,进了一家通信企业的测试部门。虽然之前学的是计算机专业,但其实真正敲代码的没多少。再加上工作了这么几年,dev的能力基本就是没有了。
    其实在工作中我也越来越有你文章里提到的感受,我也觉得自己只是为了测试而测试,却连automatic的case都没写过。发现问题也是要跟dev的同事确认之后才会提report。
    现在有种非常想要提高自己的想法。但是我不知道像我这样工作好几年的人是不是适合回学校再充充电。年纪没有那么小了,而且如果只是去读那种computer science或是software develop的专业,感觉也是跟不上,因为也没有很多实践经验。
    请问博主有没有中肯的建议,如何让我想提高自己develop的能力,提高自己的工作能力。网上课程或者别的什么比较系统自学方法?
    万分感谢!

  23. 雅虎都挂了….社会分工永远是向精细化发展,要所有人都可以包揽全部,不现实,成本太高,专注度很低,而且对于开发人员质量低下的,需要通过高质量的QA来保证产品质量

发表评论

电子邮件地址不会被公开。 必填项已用*标注