NO NEWS IS GOOD NEWS

从客户那传来一个噩耗:要求每个表单在保存之后,要在页面上弹一个 “ 保存成功 ” 的对话框。
客户代表志得意满地说这样用户体验更好,略带谴责意味地傲娇道,“你们早该想到的”。呵呵…… 可不是嘛,我刚入行时,每个页面都这么想的。
我琢磨着,这事不大,既然不大,那就 “话不投机半句多”,不和客户废话了。于是,和同事们一通忙活之后,提交代码。
望着 Git Bash 里的 add, commit 这些命令之后干净清爽地反馈,不禁感到一丝讽刺。
Git Bash 承袭 UNIX 文化,在 UNIX 哲学里,有一条叫做 " No news is good news . "
i'm lovin' it.
个人以为,如果一个操作正确地完成了,那界面上就安静地等待下一个动作好了,没有必要跳出来高呼一声 “保存成功”、“操作完成” (尤其是如果还带一个感叹号!)…… 在命令行界面多显示一排文字,倒还无所谓。但是在浏览器里弹一个对话框,不管这个框是不是模态的,它都强迫用户关注到它的存在,这就很扰民了(尤其是如果还带一个感叹号!)。
成功的消息,没有存在的必要(尤其是如果还带一个感叹号!)。软件本质上是一种服务工具,我们使用一款软件,执行里面的操作,其实目的在于动作的结果。当一切顺利,其结果产生的效用一定会通过程序背后的业务逻辑,在你预期的地方显现出来,你要的也正是这个效果。在用户本可以直接获取结果之时,塞进一条 “你成功了” 的消息,多此一举。
如果用户不知道怎么查看正确的结果,叫他去看操作手册。(你发布的时候,一定准备了一份详细的说明书,不是吗?……嗯,不是? 快去写啊!)
问个问题,你工作中喜欢什么样的同事?
是那种话不多说,分配他一个活儿,到期时,漂漂亮亮地返回给你一个全套;
还是你布置一个任务,之后每隔一会儿听到他报告,“我写完一个函数了”,“我写完一个页面了”,“我刚写完一段SQL了”。WTF ! ? SHUT UP ! !
都说程序员不善言辞。但换个角度想,同样是完成任务,安安静静地一句 “ 提交了 ” 比喋喋不休的 “小报告” 要酷多了。几个页面、屁大点功能,嚷嚷啥?不知道的还以为你写了一个自主创新的国产浏览器呢。
Linus Torvalds 说过:
Talk is cheap, show me the code.

我曾经观察过,之所以有些人喜欢碎碎念似的汇报工作完成情况,其实大多是因为他们实际上没做多少事。这里面有个很有趣的心理学现象:越心虚,越浮夸。因为实际产出没多少,或者没达到预期,于是下意识地刻意表达,强化输出,有点类似刷存在感。因为如果不刷,担心别人可能注意不到,实际是由于产出有限。
这种现象在喜欢搞 “日报” 的公司里很常见,为了填“日报”,就像小学生写作文为了凑满字数一样,把简单的事情分成若干项来填充,显得自己干了很多事。
我从来不喜欢所谓的 “日报”,在我经历过的项目开发中,双周滚动,是我比较喜欢的一个姿势 ……
扯远了,说回来。当命令运行成功时,不需要脱裤子放屁似的 “成功” 提示。这里面还有一个道理,假设每次成功都弹个窗,用户每次见到提示都要确定一下,久而久之,用户对于系统发生在屏幕上的提示就会麻木,见着弹窗就立马去确定。如此一来,当有一天真发生了错误,界面上弹出的是失败的提示时,用户完全有可能压根不看,直接关掉。这也就意味着整个系统的提示功能,废掉了。
心心念念的成功,携手失败,一起崩塌。
说到这,顺便吐槽一下 Windows 系统里著名的 “内存读写错误” 的对话框。
在以前用Windows的时候,会遇到一个【0x??????????指令引用的0x????????内存。该内存不能为“read”或"written"。】的错误提示对话框。
小时候看到这个,还以为电脑要爆炸了。
后来入行了,惊讶微软居然会有这种弹窗,想不通微软把这个内存地址弹给用户做什么,且不说绝大多数的用户都是普通用户,即便是程序员,看到这么原始的错误提示,又能干嘛?你还指望我打开机箱去找那个内存地址谈谈?
所以,当我第一次遇到这个对话框,在我小心翼翼地点击确定,发现电脑并没有爆炸之后,从此见到这框就立刻确定消灭掉,然后养成了习惯。
这个框,一直到 Winows 7 都存在,我没用过 8,直接跳到 10,在Windows 10里面,似乎没有再见到这个框了,我不知道是 Windows 的产品经理(如果他们是叫“产品经理”的话)重新设计了这个地方还是系统稳定性提升了以致于我还没有遇到。总之,这个框,和蓝屏一样,已经深入人心地可以代表微软了。

嘘…… 做个安静的写代码的人,写安静的程序吧。
随机推荐
- 深圳市共创力推出《以用户为中心的设计UCD方法与实战》课程!
			
以用户为中心的设计(UCD)方法与实战 课程特色 现在以市场为中心.科技为基础.体验为卖点的商业社会里,用户体验是赢得用户青睐的关键特性.苹果.google.腾讯等顶级企业的成功充分说明了这一点.如何 ...
 - 上了IPD和CMMI,为什么还要搞敏捷?
			
文/资深顾问 杨学明 现在国内许多产品创新型企业一旦研发团队上了规模,就会进行IPD体系的变革或CMMI的认证,但现在还有一种更加流程的开发模式,就是敏捷,华为公司早在2009年正式发文在全公司现在流 ...
 - 使用vuejs2.0和element-ui 搭建的一个后台管理界面
			
说明: 这是一个用vuejs2.0和element-ui搭建的后台管理界面. 相关技术: vuejs2.0:一套构建用户界面的渐进式JavaScript框架,易用.灵活.高效. element-ui: ...
 - [python]函数返回多个return值
			
python支持函数直接返回多个变量,具体用法如下: >>> def test(): ... a=2 ... b=3 ... return a,b ... >>> ...
 - weblogic---- Remote远程调用
			
删之前重新写一下以防以后遗忘 一.服务器端 package com.ij34.dao; import javax.ejb.Remote; /** * @author Admin * @date 创建时 ...
 - 高性能JavaScript模板引擎 artTemplate
			
下载地址 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...
 - LeetCode算法题-Fizz Buzz(Java实现)
			
这是悦乐书的第221次更新,第233篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第88题(顺位题号是412). 编写一个程序,输出从1到n的数字的字符串表示.但对于三的 ...
 - Caused by: java.io.FileNotFoundException: velocity.log (No such file or directory)
			
Caused by: org.apache.velocity.exception.VelocityException: Error initializing log: Failed to initia ...
 - 查看linux中的TCP连接数
			
一.查看哪些IP连接本机 netstat -an 二.查看TCP连接数 1)统计80端口连接数netstat -nat|grep -i "80"|wc -l 2)统计httpd协议 ...
 - gRPC奇怪的编译命令protoc
			
举个栗子: protoc -I helloworld/ helloworld/helloworld.proto --go_out=plugins=grpc:helloworld 大神说得没错,读文档就 ...