插件无原罪,规则有讲究 / 随笔谈

还记得去年阿里抢月饼的事情吗?几个程序员因为自己用代码抢了好多月饼,违反了页面上的活动规则,于是即便主动提出退月饼名额,也被开除了。

很多人不理解,程序员怎么底线这么低,稀缺资源这么抢也太不公平了。实际上,这要看你怎么想了。我自己觉得呢,阿里毕竟有做金融啥的,“规则”意识的确很重要,在内部杀鸡儆猴也很正常,但是“钓鱼”执法,这就很诡异了。

扯回正题,还是从程序员的“小聪明”说起。

(1) 插件只是一种普通的工具

在东西需要抢的时候,有些人靠关系,这个大家都很鄙夷。而有些人靠信息灵通,自己多查查,发现有条符合规则的捷径,就走了。而只要知道的人多了,大家也就不会抱怨什么了,毕竟这类走捷径,没有操作难度,听到了马上受益嘛。

而程序员们用上自己的技能,则往往不被人们理解。原因是,大部分人都不会写程序,你们写程序,看起来就像是破坏了公平。技术的门槛让很多人觉得,这类“抢”很可恶。

不过理性地想想,大部分的规则也没规定一定要用人手抢,程序员们写程序也是人家自己的本事,也要花脑力,抢的时候通常也是符合规则的。为什么他们就不能让电脑代劳呢?

插件,只是一种工具,只是这种工具的使用门槛比较高罢了。举个可能比较奇怪的例子,同样是做一个陀螺,如果我只有普通机床,就得自己控制机床的每一个加工细节。如果有数控机床,但是又不会用,那就非常尴尬了。即便机床能自己重复制造的过程,但是我不会用,就没法省精力。这时候我也不能指着高级技工们说“你们这些会用数控机床的真悠闲,太不公平了”嘛。

(2) 规则不歧视技能,只限制行为

然而很多时候,抢的东西影响到太多人了,比如春运的火车票。而人们的确特长不同,这时候一味去讲“你不会你活该”就会被骂不体恤社会现实了。

仔细一想,解决方法也简单,为不同的人准备不同的渠道。比如,把票分成几部分,一部分就是留给不会用电脑的人去窗口排队,另一部分留给有信息技术的人们。而且实际上,铁路公司也一直接受农民工团体购票,而且票额是有预留的。

不是所有人都能熟知规则,从而白费了功夫,或者白白的生气,那就是另一个问题了。

以上的这些渠道划分都是很粗放的。你把用上网导航翻到网站的,和直接输入网站地址打开网站的人放在一起,这两种人抢票谁比谁快,不言而喻。有时候这就会造就“非人”的操作速度啦。

这个时候应该怎么办呢?规则要做的事情,就是限制行为。我可以不管你是离线抢票服务器,还是一个自动刷新的浏览器,还是一位按鼠标花三秒钟的树懒,只要你刷新速度太快,就不让你刷新,就好了。

前面说到阿里的月饼,它最可怕的事情在于,页面的文字规则写了每人限一盒,但网站的程序并没有严格限制(而且本来很简单就能限制到的)。且不说会有多少人仔细看文字说明,在实际的执行规则与宣布的执行规则不一致时,最后发现有漏洞了,不去找管理的漏洞,而抓着破洞者不放,挺有钓鱼执法的感觉。

(3) 表里如一的规则

阿里这件事里,规则写得很清楚。但在中国更多时候你会遇到另一种规则:条文写得很严苛,但是实际的处理却很放松。

比如 12306,刷新次数太快会被封,但是多快才算快呢?官方的刷票功能是 5 秒一次,老实的人就会觉得“5 秒是 12306 的底线”,但还有人通过尝试发现,快过 2 秒钟才会被封,所以就设置成 2 秒。

这时候就显得非常尴尬了。那到底怎样才是“表里如一”呢?

实际上很多网站都会有 API 这种东西,就是给程序员玩具啦,但也不能因为 API 就把网站刷爆了,那要怎么办呢?下面是一种很普遍的解决方法。

首先,使用 API 的人需要申请一个账号,用 API 的时候需要提供这个账号。而网站这边,对于每个账号会记录每小时的使用次数,然后做出限制,比如每小时最多使用(刷新)600 次啊啥的。次数到了,用 API 的人就得等使用次数清零了再用。

然后呢,网站会提供一个专用的 API,提供给用户来查询账号剩余可使用的次数,还有清零时间。这个 API 通常是分开限制查询次数的。程序就可以自动根据剩余的使用次数,来控制使用 API 的频率,即便没次数了也知道什么时候会恢复正常。这就是很简单的透明规则的办法了。

计算机的世界总是那么的简单有逻辑。不过归根到底,规则要靠谱,还要透明,还要让参差不齐的参与者都了解,这只是理想吧。

发表评论

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