Dirty Approach之无招胜有招

来源:互联网 发布:c语言的科学与艺术 编辑:程序博客网 时间:2024/05/17 22:28

每个网站,几乎都有“新闻”的模块。在中国独有的ICP——Internet Copy and Past——模式下,多数站点也靠“转贴”手段汇集新闻信息。如果说新浪是最大的转贴者,那么,许许多多规模不如新浪的中小网站,也难逃“文抄公”的“恶名”。从道德和法律的立场去批判转贴,当然有其正当之处,然而转贴既然风行,也有其道理。我等程序员,无数次地开发各种新闻系统,这些新闻系统,恐怕多数也是用来转贴的。既然转贴已是一种事实的存在,且将有助于我们捧好手上的饭碗,努力开发更好的转贴程序就成为一种责任。

都是传新闻的程序,各有巧妙不同。例如前一段我见到某学术机构转贴新闻的后台,就有很好的繁体转简体脚本。说到底,还是为了编辑“方便”,即提升用户体验、提高工作效率、减少低水平机械化工作。所以,大家的程序也是越来越巧妙,实现越来越多高技术的功能,有时难免会陷入技术泥潭,忘记发掘真正需求所在。从技术细节中脱身出来,替用户多想想,往往能无招胜有招,出奇制胜。

今天的例子,就是说这样一个故事。

话说某年月日,在下要为一套新闻上传程序做用户界面调整。运行这套程序的网站,原来已经有数万篇新闻,这些新闻来自一千多个其他站点。按照数据库设计的正常思路,这1000多个来源,放在一个表里面,和新闻主表的from_id呈一对多关系。在界面上,也顺理成章地放到一个DropDownList里面,下拉选择后得到来源ID——

图一 从DropDownList选择新闻来源

这样处理可谓中规中矩,逻辑正确之至。不过,里面有一个大问题。请注意,新闻来源有上千个!想想看从1000多个下拉项中找到正确的一个,是多么痛苦的事情。不负责任的开发人员也许会说:谁让你们有这么多来源?是,这不是开发人员的错,可也不是编辑的错,到底是谁的错呢?原罪这回事没法说,还是解决问题最要紧。作为一个负责任的开发者,你会怎么做呢?

好,你多半已经想出来了,来一个带文本框的列表框,输入时,同时把近似的项放到列表上端。我基本上也是这样做的,只是没有用列表,而是在用户输入时,把类似结果(即前n位与用户输入相符的项)做成链接,放到文本框下面——

图二 输入“天”,下面列出第一个字是“天”的新闻来源

图三 输入第二个字“津”,现在只列出前两个字是“天津”的来源项

输入时重置候选列表,在本地浏览器中实现,没有网络roundtrip,这样界面上不会有停顿迟滞。当用户认为候选列表比较容易选择时,点击合适的来源链接即可。我不是专业程序员,实现这个特性,着实花了一个多小时琢磨。相信一些读者会更快地实现它。相对于最初从下拉列表中选择,这个特性技术含量要高很多。

测试通过,上线运行。上线后,我以用户身份继续使用了一个星期,越往后感觉越别扭。照说,界面没有迟滞,输入-智能选择的特性也很方便,应该是可以结项了,为什么总觉得不满意呢?想来想去,觉得还是鼠标和键盘切换的问题。输入头几个字时,是键盘操作,在候选列表中点选,是鼠标操作。我用PC,鼠标和键盘不在一起,老要换手,自然很不爽。

输入设备切换频繁的问题,可以有两种解决方法:1、在界面上绑定键组合,如按1就选中第一个,按2就选中第二个之类;2、尽可能不用键盘。我自己总是记不住快捷键,也会有用户和我一样吧?还是采用第二种方法好了。虽然键盘输入不可完全避免,不过那是指“必要的”输入;我们只要找出“不必要”的输入,把它变成点击就好了。

要让键盘输入变成点击,首先要有一个可点击的候选列表。本例最初的选择界面,的确有一个可点击的候选列表,但这个列表太长。所以,第二个要点就是可点击候选列表要足够短,短到用户一眼就可以看完,和从里面找到适合的项。例如,我们把列表项数量控制在10个以内(想想你的拼音输入法候选字列表,是不是设定为10个比较合适呢?)。最后的结论就是:从1000个来源中,选出10个最可能被选择的来源,列出来供直接选择。请告诉我,哪种来源最可能被选中?

对了,就是“被引用过最多”的来源。我简单地执行了一条SQL查询,就从数据库里面选出被引用最多的10个来源(别告诉我你的新闻系统没有记录点击哦)。而且,我还锦上添花,把“最近用过的10个来源”,也列了出来。这里的技巧是要把两个“10条”分作两行,这样就不会让人眼花缭乱。最后的样子是这样——

图四 最方便的界面——直接选择

作为备选方案,我也保留了“输入-智能列表”的特性。现在,才真的可以松口气了。这个特性只花了我10分钟。

慢,慢,慢!读者要抱怨了:这样做,一点技术含量都没有。“输入-智能列表”的特性多好,能体现咱们程序员的智商……

别急,先回答我一个问题——判断一个软件是否优秀,最终的标准是什么?当然是用户满意度。只有让用户满意,才是最好的软件。用户需求有三个层次:最低的是现存的需求(从列表选择),再往上是实际存在不过用户不清楚或不知道的需求(输入-智能选择),最上面是本质的需求(尽可能快地选择)。为什么说尽可能快地选择是本质需求?道理很简单。新闻上传用户是编辑,编辑的工作职责是上传新闻,让编辑能够尽可能快地选择合适项,等于帮助编辑在单位时间内上传更多新闻,或者,有更多的时间考虑选择什么新闻、怎么组织这些新闻。新闻系统后台存在的全部意义,正在于此——让人可以更快、更好地传新闻。所以,尽可能快地选择,就是“选择新闻来源”这个表面现象的本质需求所在。

就这样,最后我把最没有技术含量的方案,选作主要方案,而技术含量最高的方案则变成备选方案。在整个过程中,我一直被深深地触动。界面就是体验,程序员选择的任何一个技术方案,最后都会体现在界面上,变成用户体验的一部分。这个例子可能有点极端,但的确能说明,用户体验的提升,本质不在于采用什么技术方案,而是有没有真正替用户着想,挖掘出用户在界面上每套操作的本质需求,并满足之。如果把技术细节看作“武功招数”,那么,只有实战中彻底制敌的才是最好的招数。如果直拳能解决问题,就千万别用降龙十八掌。

故事说完了。现在就回去查看你的程序界面,忘记降龙十八掌,把那记最有力的直拳打出去吧。