我觉得决策没有绝对的正确或错误,所有决策本质上都是权衡利弊,所以要两面思考。现今多数应用或网页上都只有“喜欢”的按钮,而没有“讨厌”,有时候这缺少的一面会变得非常讨厌,比如听歌,有些你真心不喜欢的歌你跳过了一遍又一遍,系统还是自动推荐给你,这用户体验就太糟糕了。为什么不能有个“我很烦这首歌”的按钮呢?其实没有就没有吧,“跳过”这种行为本来也是一种数据,靠谱的数据分析狮应该能嗅到它的价值,可惜好像这个数据并没有被虾米使用,让老夫不厌其烦地跳过《没那么简单》。
举几个码农例子。比如有人抱怨说knitr毁了他的文件,我当然可以提供一个选项,在写输出文件的时候提醒用户要不要覆盖已有文件,可这样做会让绝大多数用户觉得烦,我编译个文档,你为毛老是问我问题。我的导师Heike大人有时候就嘲笑Windows下一些对话框,总是问你,是否确定?是!真的吗?对!确定一定以及肯定?滚!若不问,就可能出现帖子里失误覆盖文件的问题。是去烦多数用户,还是让极少数人粗心犯错付出沉重代价?我选后者。
又比如早些时候jsonlite的作者总是打着“严谨”的口号,RJSONIO以不严谨著称,有些特殊的情况下,你压根儿无法预测R对象转成JSON对象会变成什么(比如只有1行1列的矩阵)。然而严谨带来了一个巨大的不便,比如长度为1的R对象到底转成JSON数组还是标量?他选择数组。在实际应用中,其实标量更常见一些,但作者原来只提供了标量的标记方式,是一个unbox()函数,而在RJSONIO包中提供了一个相反方向的标记方式,I()函数,告诉转换函数这个对象应该被视为长度为1的数组。于是在这个帖子中,我给出了两种方式的对比。如果只有作者原来提供的unbox()方式,代码会变得臃肿丑陋,尽管RJSONIO各种不靠谱,但这个I()标记还是很方便的。要打倒一个旧软件,不意味着它的一切都是糟糕的,自以为严谨了,其实也可能会带来不便。正反两面都需要想想。
这么一想,统计里面风险函数是拿损失函数求期望,如果不两面或多面思考,实际上也就是只考虑了损失函数的一种取值,决策者对风险值并没有整体把握。
赞赏
作为一名没有固定工作的自由职业者,我非常感谢您通过捐赠的方式来支持我的写作和开源软件开发。当然,捐赠纯属自愿。无论金额多少,都是一片诚挚的心意。支付方式如下:
| 微信 | ← 奋力支开它俩 → | 支付宝 |
|---|---|---|
![]() |
其它爱心通道 ↓ Venmo: @yihui_xie Zelle: xie@yihui.name PayPal: xie@yihui.name |
![]() |
若使用 Venmo/Zelle/Paypal,请添加备注“gift”或“donation”,以免捐赠被视为我的可税收入。若使用 Paypal,支付类型请选 Family and Friends,而不要选 Goods and Services。
在不影响生活的前提下,我会将收到的捐赠以尽量大的比例回馈给开源社区和慈善机构。作为参考,2024-25 年间我共收到约三万美元捐赠,完税后我转手捐出了一万五千美元。

