优劣重要,还是标准重要No.186

社区还是公司里,经常会有人讨论,A实践比B实践好。比如下面这样的讨论。

A:我用 Go+Go-xorm+Grpc+Gorouting 搭建框架,开发效率非常高,真的超好我跟你讲。balabala

B:我用 Spring

A:我跟你讲,SVN 的代码一致性最好,所有人的代码都是一样的,真的超好我跟你讲。balabala

B:我用 Git

A:我跟你讲,我用 JMI 协议和Dubbo协议,用得超舒服我跟你讲。balabala

B:我用 Grpc

于是就引发了一个问题,究竟某一些技术在某一些场景某些团队里面,孰优孰劣,经常是争得死去活来。孰优孰劣,真的那么重要吗?在一个集体里面,永远使用最佳的实践,与大家尽量使用一个统一但是可能没那么好的实践,哪个更有利于团队?

我们都知道技术栈统一的重要性,如果一些人总是急着自己造轮子,每个人都搞出一套自以为是最佳实践的套路,这样对于团队来说是好是坏?我觉得某种程度上来说,是一件好事,可以让团队里的人提高自己的见识,知道在自己的做法之外其实还有其他做法,也在实现着一样的目标。但是如果团队的其他人并不认可这种新的做法,那又怎么办呢?

我的答案是,在大规模协作里,统一比优劣重要。

我们都知道 HTTP 协议存在着大量的问题,比如显而易见的安全问题。

通信使用明文(不加密),内容可能会被窃听 
不验证通信方的身份,因此有可能遭遇伪装 
无法证明报文的完整性,所以有可能已遭篡改

如果我创造了一种新协议,叫 dajiao.HTTP 协议,在 http 的基础上解决了上面的问题,可以说我的协议比 http 更加优秀,全世界人民,都应该使用这个协议吗?显然是不可能的。你还觉得优劣比统一重要吗?

众所周知,HTTP 协议被诟病的还有 head 很重的问题,如果在超大规模集群里,我需要压缩每个请求的量,我自己创造了一种  mini.dajiao.http,整个请求的网络传输量只有 HTTP 的 10%,可以说我的协议比 HTTP 更加优秀,大家都用我这个协议吗?显然,在一定程度的团队内是可行的,但是要推广到全世界,抱歉,你还得付出比你预想要更加巨大的代价。

还是回到 mini.dajiao.http 的问题,在一定程度的团队内,在工具不完善的情况下,所有人跟你的系统交互,都要理解你第一个字节代表什么,第二个字节代表什么,要背诵下来,每次对接都要小心翼翼,对接一个接口可能需要花掉2个工程师10天的工作。在这个场景下,你还觉得你的协议比较好使吗?

我理解每一种方案都有它适应的地方,单纯讨论孰优孰劣,意义其实仅仅在于学术讨论阶段。到了大规模协作实战层面,谁能把一种方案做到大规模统一,就算它比其他方案要差一点点,必然是做了某些 trade-off,只要是统一的,就是好的。

因为毕竟,只要统一了,就可以投入更多更多的精力,对它进行重点优化了,会出现很多的周边工具,出现很多的配套设施,出现更加完善的文档,出现更加完善的兼容性设计。到最后,未必比你以为的好方案,表现更差。

一个和尚挑水喝,两个和尚抬水喝,三个和尚没水喝。扁担的设计就是一个人一组效率最高,标准做法就是一个人挑两桶水,非要来个人说,两个人挑那就是 1/2,一百个人挑每个人就是 1/100,更省力了,必然更好。

你品,你细品。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值