为什么不应该给用户提示错误码

为什么,应该,用户,提示,错误码 · 浏览次数 : 68

小编点评

错误码的建议方法有很多,以下是一些建议: 1. **明确错误信息**: 错误码应该清晰易懂地描述用户遇到的问题。即使是 404,500 等格式的错误码,也能通过简单的描述来提醒用户问题所在的位置。 2. **提供解决方案**: 当用户遇到错误时,应该提供相应的解决方案。例如,当用户访问页面时发现错误,可以提示他们刷新页面,或提供错误解决的步骤。 3. **使用通用的语言**: 当用户遇到错误时,应该使用通用的语言来描述问题。例如,当用户访问页面时发现错误时,可以提示他们访问相关文档,或者提供与错误相关的解决方法。 4. **提供多种渠道**: 在页面中提供多种渠道来展现错误信息,例如提示用户,错误码等。 5. **针对不同场景设计**: 在不同的场景,可以使用不同的错误信息和解决方案。例如,当用户访问页面时发现错误时,可以提示他们刷新页面,或提供错误解决的步骤。 总之,错误码应该提供清晰易懂的错误信息和相应的解决方案,以便用户快速解决问题。

正文

最近给用户提示错误码的提议反复出现在我们的解决方案里,在深思熟虑之后我觉得这并非是一个好的解决方案。

错误码不是银弹

我们首先想象一下极端场景,如果在页面出错时(例如接口没有正常返回数据,按钮点击时代码抛出异常)不给予用户任何反馈会怎么样?

用户会产生疑惑,他不确定页面的无响应究竟是发生了错误,还是程序需要一段时间来运行而已。直到他刷新页面多次,执行相同的操作多次都只能得到相同的无反馈之后,才会意识这可能是一个 bug。

所以界面提示的首要功能是沟通,告知用户他目前所遇到的问题。

那错误码这个主意怎么样,比如当用户没有权限访问某个菜单选项时在页面上方弹出 “ACCESS_STATUS_66” ?

这个主意不怎么样,因为它忽略了沟通应该是双向的:话不仅要从我的嘴里说出来,还需要被你听进去。很明显状态码只是被网站一厢情愿的结果,用户是完全无法理解状态码这类工程师语言的。哪怕是 403,500 这类在互联网公司内人尽皆知的标准状态码,在圈子以外对大部分人来说依然陌生。所以当用户访问的页面不存在时,仅仅呈现出一个大大的 404 字样的页面在我看来并非是友好的做法。应当用通用语言告知他。

有时候“您访问的页面不存在”就足够了;但有时候“您暂无权限访问该页面”还稍有欠缺。因为我们不仅要告知用户问题,还需要帮助他解决问题。如果他目前暂无权限,那么他可以如何获得权限?是应该联系管理员,还是应该应该提交工单?允许用户自主解决问题是做 Tech Support 的终极目标,因为问题一旦转交给后台的客户人员甚至是工程师来解决,流程注定是漫长且昂贵的。

错误码的正确用途

上一小节里的当用户遇到问题时,我们能给出确切的错误信息以及解决方案其实是一种理想情况。在实际处理问题的过程中,会有很多分支出现。

例如可能解决方案需要较长需要独立的页面用于呈现,那么如何让用户通过错误信息关联上解决方案,通过错误码也许是个不错的选择。

编程人员对此再熟悉不过了,例如在调用 API 或者 SDK 出错时你通常得到的是错误码而非具体详情。以 Firebase 为例,在它的 Error Code 页面你可以看到对于每一类 Error Code 的解释以及建议采取的行动。这也暗示了解决问题时的窘境:错误背后的原因多种多样,需要终端用户在多个可能性中手动排查

这种做法在面向用户的消费端场景中也适用,例如 iOS 也有针对用户阅读的错误码页面,并且给出了可能解决问题的详细步骤

使用独立错误页面的另一个好处是,文档可以摆脱与代码的耦合,并且根据用户的反馈快速进行调整让它更好用。

纵然错误码有益处,但它是有门槛的,正如第一小节所说它并非是帮助的用户的最优解。错误码不应该成为我们懒惰的首选项,而是应该是深思熟虑之后的手段。

事实上现在大部分网站采用的模式是可读性的消息与错误码并存,比如 windows 的蓝屏界面:普通用户可以在当下得到解决问题的方法。如果想要知道额外的信息或者需要更进一步的支持,通过错误码也许可以得到更多的帮助:

windows10 蓝屏界

为工程师服务

不是所有问题都可以被预测,我们需要为工程师预留排查未知问题的空间。

但这个问题和这里聊的主题关系不大,在这里我们从产品层面讨论应用应该给用户呈现出什么样的感官体验;而工程师处理问题的高效与否,取决于日志所能提供的信息是否足够丰富。

我们至少需要知道谁(WHO)在什么时候(WHEN)发生了什么问题(WHAT),并且最好告诉我们问题是如何发生的(HOW),而剩下的工作则是围绕它为什么发生(WHY)展开

软件的目的是什么?

上面所有谈论的内容都包含了一个隐性前提:软件应该做什么。

在当下谈软件目的其实不太合时宜了,大部分应用都在围绕算法、信息流做设计,没有什么比指标更重要的事情。但是如果我们可以去谈论它的话,软件的出生究竟为了什么?它之所以重要,是因为它决定应用什么可以做,什么不可以做。

到目前为止我听到过两种说法:

在《简约之美:软件设计之道》里,作者指出全部软件都有一个相同的目标:帮助其他人。并且一个人写出优秀软件的潜力,完全取决于他在多大程度上理解了“帮助其他人”的意思。

在最近有关 Steve Jobs 的新书 《Make Something Wonderful》里我们可以看到 Steve Jobs 的观点:

  • Apple, at the core—its core value—is that we believe that people with passion can change the world for the better.
  • Apple is the world’s premier bridge builder between mere mortals and the exploding world of high technology. Apple enables mere mortals around the world to grasp by making it easy to learn and use

你对软件的态度,会决定你手中软件的演进方向


你可能会喜欢

与为什么不应该给用户提示错误码相似的内容:

为什么不应该给用户提示错误码

最近给用户提示错误码的提议反复出现在我们的解决方案里,在深思熟虑之后我觉得这并非是一个好的解决方案。

面试官:告诉我为什么static和transient关键字修饰的变量不能被序列化?

一、写在开头 在上一篇学习序列化的文章中我们提出了这样的一个问题: “如果在我的对象中,有些变量并不想被序列化应该怎么办呢?” 当时给的回答是:不想被序列化的变量我们可以使用transient或static关键字修饰;transient 关键字的作用是阻止实例中那些用此关键字修饰的的变量序列化;当对

推荐一个可以提高生产力的在线游戏

很久没推荐好玩的工具了,今天给家推荐一个非常有意思的游戏:Habitica Habitica除了是个游戏之外,居然还是一个生产力应用! 为什么说Habitica还是个生产力应用呢?因为它还可以帮助我们养成习惯! 通过Habitica,我们可以用它的每日目标和代办事项列表功能来跟踪和管理你的习惯 在完

包管理工具npm和Yarn的区别,我们该如何选择?

好家伙,学习新工具 1.为什么我们需要包管理器? 关于npm我们已经知道了,这是我们项目的包管理器, 我们现在用的无比顺手的工具,都是在无数的竞争中杀出来的,他们淘汰了无数的产品 首先,倘若我们不使用npm,那么我们应该如何去新建一个前端项目? 纯手工,把我们项目需要的项目一个个下载到我们的项目里面

如何保证用户重试操作的幂等性

服务不稳定是一类常态,面对此类场景恰当的应对策略应该是什么?退一步说,即使我们能够确保第一方服务的稳定性,我们又应该如何面对网络延迟以及掌控以外的不确定性?这都是本篇文章会谈到的内容

DDD架构为什么应该首选六边形架构?

采用依赖倒置原则后的分层架构和六边形架构,实际上都符合整洁架构设计理念。但是六边形架构中使用端口与适配器,让应用程序能够以一致的方式被用户、程序、自动化测试、批处理脚本所驱动,同时能够让应用程序边界更加清晰,从而能更好地防止领域层和应用层逻辑泄露到外层。

Guava LoadingCache本地缓存的正确使用姿势——异步加载

1. 【背景】AB实验SDK耗时过高 同事在使用我写的实验平台sdk之后,吐槽耗时太高,获取实验数据分流耗时达到700ms,严重影响了主业务流程的执行 2. 【分析】缓存为何不管用 我记得之前在sdk端加了本地缓存(使用了LoadingCache),不应该这样慢 通过分析,只有在缓存失效之后的那一次

聊一聊对一个 C# 商业程序的反反调试

一:背景 1.讲故事 前段时间有位朋友在微信上找到我,说他对一个商业的 C# 程序用 WinDbg 附加不上去,每次附加之后那个 C# 程序就自动退出了,问一下到底是怎么回事?是不是哪里搞错了,有经验的朋友应该知道,其实这是 商业程序 的反调试机制捣鬼的,为了保护程序隐私,一般都不希望他人对自己做逆

为什么 C# 可能是最好的第一编程语言

纵观神州大地,漫游中华互联网,我看到很多人关注为什么你应该开始学习JavaScript做前端,而对blazor这样的面向未来的框架有种莫名的瞧不起,或者为什么你应该学习Python作为你的第一门编程语言,恕不知有多少公司业务是用Python开发的,Python更多是粘合剂,作为胶水语言来使用。我用C

为什么浏览器中有些文件点击后是预览,有些是下载

为什么浏览器中有些文件点击后是预览,有些是下载,在HTTP中,用于文件下载的常见响应头(response headers)包括: Content-Disposition: 用于指示浏览器应该如何处理响应体。在文件下载中,通常设置为 attachment; filename="filename.jpg