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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(3) 表里如一的规则

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

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

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

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

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

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

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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

To respond on your own website, enter the URL of your response which should contain a link to this post's permalink URL. Your response will then appear (possibly after moderation) on this page. Want to update or remove your response? Update or delete your post and re-enter your post's URL again. (Find out more about Webmentions.)