最近迫于生计,重修经济学原理,正好复习到比较优势,于是就结合自身的职业,写了这么一个类似于课后小练习的东西。
比较优势
在聊技术之前,我们先还是简单澄清一下基本的概念(不保证正确性,我又不是学经济的)。
要说比较优势,按照教材的顺序,我们要先了解什么是绝对优势。为了方便说明,我继续照抄课本的例子(这样我的成本最低):假设有两个人A和B,这两个人生产牛肉和土豆,且这两个人都吃牛肉和土豆。我们假设他们的生产能力符合下表:
生产者 | 每小时牛肉产量 | 每小时土豆产量 |
---|---|---|
A | 1 | 4 |
B | 3 | 6 |
显然,B是个比A厉害的人。因为不论是论生产牛肉还是论生产土豆,B每小时的产量都比A高。这就是绝对优势。
但是,B具有绝对优势并不意味着B就要独自生产,我们假设他们工作8个小时,且根据A和B各自的喜好,他们在独自生产时各自的产出符合下表:
生产者 | 每天实际牛肉产量 | 每天实际土豆产量 |
---|---|---|
A | 4 | 16 |
B | 12 | 24 |
然而我们注意到,A虽然菜,但是其实他自己更擅长生产土豆。虽然这种擅长可能是基于A实在是太不擅长生产牛肉导致的。
现在,考虑到A这么菜的情况,我们让A和B共同生产,且A专门生产土豆,B减少生产土豆,经过交易后,我们可以得到下表:
生产者 | 每天生产牛肉量 | 每天生产土豆量 | 每天获得牛肉量 | 每天获得土豆量 |
---|---|---|---|---|
A | 0 | 32 | 5 | 17 |
B | 18 | 12 | 13 | 27 |
结果就是A和B每天获得的东西都增多了。
而比较优势就是说A比B能用更少的机会成本来生产土豆。毕竟A太不擅长生产牛肉了,让他全去生产土豆其实没啥机会成本。
生产软件
我们把上面的例子换个皮,把生产牛肉和土豆改成生产前后端代码。我们假设一个可以用的网站需要的前端代码和后端代码的比率是1:1。也就是说,粗略的假设,前端的一个功能一定会对应后端功能。
虽然现实中,显然不是1:1,但是就我这个练习中,把这个比例调整为2:1甚至1:100应该都是一样的结果。当然,0:1或者1:0的情况除外。
同时需要澄清的是,生产软件也离不开devops的支持,但是为了简化计算,我们这里忍痛忽略devops的工作。但现实中devops也是很重要的。同理QA、BA乃至公司管理都对软件生产起到了至关重要的作用,但这里出于简化模型,都暂时忍痛在例子中忽略。
同样的,两个Dev:A和B,他们1小时能产出的前后端代码量如下表所示:
生产者 | 每小时前端产量 | 每小时后端产量 |
---|---|---|
A | 2 | 4 |
B | 8 | 1 |
显然,A更擅长后端,但是B明显是个前端大佬。现在我们让这两个人工作9个小时以产出网站(为了简化计算,所以改成9小时)。我们先看他们分开开发:
生产者 | 9小时前端产量 | 9小时后端产量 | 9小时交付网站 |
---|---|---|---|
A | 12 | 12 | 12 |
B | 8 | 8 | 8 |
这里我们首先能发现人的多样性:
我们从牛逼不牛逼的角度来讲,讲道理B还是很牛逼的,毕竟峰值产能是A的一倍呢!
另外一个方面,我们从独立做事的角度,似乎A也还是牛逼的,毕竟比B搞出50%的产能!
在走到最优解之前,我们先考虑A全力生产后端,B全力生产前端,我们得到下列产量表:
生产者 | 9小时前端产量 | 9小时后端产量 |
---|---|---|
A | 0 | 36 |
B | 72 | 0 |
这样网站总交付数是36,已经超过了A和B共同生产的产量12+8=20了。这里,我们可以很清楚的看到,为什么之前以及现在很多大厂采取瀑布开发,并且让前后端完全分开开发的模式。
但这显然不是终点,因为我们看到B多生产了36份前端代码,这浪费了产能。于是我们让B每天只花5个小时在前端,另外4个小时来写后端,我们可以得到下面这个产量表:
生产者 | 9小时前端产量 | 9小时后端产量 |
---|---|---|
A | 0 | 36 |
B | 40 | 4 |
我们发现,这样一来交付的网站变成了40份,再次提高了产能。
全栈开发
我们首先考虑全栈开发的定义:
全栈工程师是指掌握多种技能,胜任前端与后端,能利用多种技能独立完成产品的人。
这个定义也不能说有什么大错。但我个人认为,这个定义容易导致一种误解:因为这个人有独立完成产品的能力,因此这个人就要独立完成产品。这个我认为是不对的。
以上面的例子为例,看上去A其实比B更全栈,而且确实,在独立完成产品的情况下,A的产能是比B高的。但我们看到,其实在由A和B组成的项目中,A却在专门生产后端,相反的B才是真正“全栈”的那个人。
因此,我个人认为:只要能独立完成,就是全栈开发。虽然这个全栈开发可能是发展的并不均衡。但只要一个人的某一项产出是1不是0(严谨的说,只要不是接近于0),那么这个人就是全栈的。
至于这个全栈的人,具体到底做什么事情,这个其实看缘分。
一点展望
我个人认为,随着行业发展,全栈开发也许会逐渐成为主流。因为这样其实是能提高生产效率的。
但这里的意思是,纯粹的前端或者纯粹的后端的市场价值会减小。
而这里的意思不是指要均匀发展,面面俱到,没有特长。
一些限制
虽然,大概率是可以类比到devops、qa等等。但是考虑到招聘流程和验证的成本,未来也不是一定能看到全栈成为主流。毕竟商业化的事情,我不懂,这里只是照着课本做个推论而已。