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 的产品经理(如果他们是叫“产品经理”的话)重新设计了这个地方还是系统稳定性提升了以致于我还没有遇到。总之,这个框,和蓝屏一样,已经深入人心地可以代表微软了。

嘘…… 做个安静的写代码的人,写安静的程序吧。
随机推荐
- Hive之FAILED: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient异常
一.场景 Hive启动不报错,当使用show functions;或create table...时报:FAILED: SemanticException org.apache.hadoop.hive ...
- java笔记--对信号量Semaphore的理解与运用
java Semaphore 信号量的使用: 在java中,提供了信号量Semaphore的支持. Semaphore类是一个计数信号量,必须由获取它的线程释放, 通常用于限制可以访问某些资源(物理或 ...
- windows 上查看一个命令的退出码
windows 上查看一个命令的退出码可以使用下面语句 echo %errorlevel% 例如:windows 上没有ls 命令,所以使用后没有成功,查看退出码为9009 ,非0 使用dir 列出目 ...
- [Hive_add_5] Hive 的 join 操作
0. 说明 在 Hive 中进行 join 操作 1. 操作步骤 1.0 建表 在 hiveserver2 服务启动的前提下,在 Beeline客户端中输入以下命令 # 新建顾客表 create ta ...
- phpstorm设置背景图片
对于这个问题,其实很简单,连续按两下shift键或者是Ctrl+Shift+A键即可.出来的界面如下: 输入set Background Image命令,出现的界面如下: 然后选择图片, 点击ok,即 ...
- February 13th, 2018 Week 7th Tuesday
You are your greatest asset. 你就是你自己最大的资本. For most of us, there are few things that we can count on ...
- Spring的jdbc模板3:完成CURD操作
测试类代码如下 package zcc.spring_jdbc.demo2; import java.sql.ResultSet; import java.sql.SQLException; impo ...
- E. Magic Stones CF 思维题
E. Magic Stones time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- WPF画图の利用Path画扇形(仅图形)
一.画弧 Path继承自Sharp,以System.Windows.Shapes.Shape为基类,它是一个具有各种方法的控件. 我们先看一段xaml代码: <Path Stroke=" ...
- ORM-面向对象&关系数据库
ORM-面向对象&关系数据库 对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程 ...