中午去招行取钱。插卡,输密码,输金额,然后出来一张凭条,却没有出钱。凭条上写着响应码:55,TxCode:01。屏幕上没有任何错误信息。
我的疑问来了,钱没取到,那钱扣了吗?由于ATM机上无法查询交易记录,我只好通过手机银行查询了交易记录。查到今天没有取钱操作,这时我才放心,取钱失败,钱没有扣掉。
事后,在网络的帮助下,我查到响应码来自银联,55意味着交易被拒绝,原因是“Incorrect personal identification number”。
假设一下,如果没有手机银行,当时我会怎么做呢?打95555,告诉客服事情的经过,然后客服会根据凭条上的响应码告诉我原因和结果。这样,问题也能得到解决。
事情能变得简单一些吗?本质上,这是人机交互中一个易用性的问题,如果交易失败,触摸屏上弹出“交易失败”对话框,与此同时打印凭条。凭条上“响应码”改成“交易结果”,并在备注栏中附上失败的原因,至此,事情得到完结局。这样我的担心就没有必要了,既不必通过手机银行查询交易记录,也不必打95555。方便客户的同时,也减轻客服的工作量。
要实现这样的功能并不难。在原有的系统中,有个变量reponseCode,用来存储响应码的值。现在,我们需要添加2个变量:一个reponseMsg变量,用来存储信息;一个map,用来存储所有reponseCode和reponseMsg的映射关系。其中map的key是reponseCode,value是reponseMsg。所有的responseCode和它对应的reponseMsg是已知的,可以在使用前初始化。当用户进行某些操作后,后端返回reponseCode,可以通过map获取相应的reponseMsg,显示给用户看。reponseCode用来处理逻辑,reponseMsg显示给用户看。至此,我们的方案完全实现。
当然,对于原来的行为,设计者可以宣称:“我们就是这样设计的,它是期望中的行为。如果你不懂响应码的意思,那是因为你对我们的系统还不够熟悉。”设计者这么想也说得过去,但人机交互界面是给用户使用的。站在用户的角度,如果花很少的时间就能熟悉系统,出现问题不需要外界帮助就能解决;站在开发者的角度,实现这样的功能所需要的工作量几乎可以忽略不计。那么我们有什么理由不这么做呢?
在设计人机交互界面时,有条基本准则:错误信息应该以人能够都懂的方式显示出来,最好能让用户知道错误的原因,如何解决。
很简单的道理,但这种问题也很常见。即便是以易用性见长的微软,这种问题也偶有出现。前不久买了台Surface,到手后系统更新,提示错误,告诉我一个错误代码,我google,最终在微软的官方网站上查到错误原因是“系统升级之前应该同步时间”。如果在告诉我错误代码的同时,告知错误原因,哪怕是给个URL,链接到官网上错误原因的网页,也比一个光秃秃的错误代码有用吧。
做了多年的GUI开发,有些感慨,GUI是人机交互的纽带,用户对产品的第一印象往往取决于看得见的GUI。一方面,GUI开发有很多需要改善的地方,另一方面对GUI却不重视。对此,身在其中往往却很无力。
写这篇文章的目的,并非想贬损什么。权当相互探讨吧,欢迎拍砖。