NO NEWS IS GOOD NEWS

时间:2022-01-31 12:34:54

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.

NO NEWS IS GOOD NEWS

  我曾经观察过,之所以有些人喜欢碎碎念似的汇报工作完成情况,其实大多是因为他们实际上没做多少事。这里面有个很有趣的心理学现象:越心虚,越浮夸。因为实际产出没多少,或者没达到预期,于是下意识地刻意表达,强化输出,有点类似刷存在感。因为如果不刷,担心别人可能注意不到,实际是由于产出有限。

  这种现象在喜欢搞 “日报” 的公司里很常见,为了填“日报”,就像小学生写作文为了凑满字数一样,把简单的事情分成若干项来填充,显得自己干了很多事。

  我从来不喜欢所谓的 “日报”,在我经历过的项目开发中,双周滚动,是我比较喜欢的一个姿势 ……

  扯远了,说回来。当命令运行成功时,不需要脱裤子放屁似的 “成功” 提示。这里面还有一个道理,假设每次成功都弹个窗,用户每次见到提示都要确定一下,久而久之,用户对于系统发生在屏幕上的提示就会麻木,见着弹窗就立马去确定。如此一来,当有一天真发生了错误,界面上弹出的是失败的提示时,用户完全有可能压根不看,直接关掉。这也就意味着整个系统的提示功能,废掉了。

  心心念念的成功,携手失败,一起崩塌。

  说到这,顺便吐槽一下 Windows 系统里著名的 “内存读写错误” 的对话框。

  在以前用Windows的时候,会遇到一个【0x??????????指令引用的0x????????内存。该内存不能为“read”或"written"。】的错误提示对话框。

  小时候看到这个,还以为电脑要爆炸了。

  后来入行了,惊讶微软居然会有这种弹窗,想不通微软把这个内存地址弹给用户做什么,且不说绝大多数的用户都是普通用户,即便是程序员,看到这么原始的错误提示,又能干嘛?你还指望我打开机箱去找那个内存地址谈谈?

  所以,当我第一次遇到这个对话框,在我小心翼翼地点击确定,发现电脑并没有爆炸之后,从此见到这框就立刻确定消灭掉,然后养成了习惯。

  这个框,一直到 Winows 7 都存在,我没用过 8,直接跳到 10,在Windows 10里面,似乎没有再见到这个框了,我不知道是 Windows 的产品经理(如果他们是叫“产品经理”的话)重新设计了这个地方还是系统稳定性提升了以致于我还没有遇到。总之,这个框,和蓝屏一样,已经深入人心地可以代表微软了。

NO NEWS IS GOOD NEWS

  

  

   嘘…… 做个安静的写代码的人,写安静的程序吧。

  

随机推荐

  1. ThinkPhp 3.2 CRUD操作

    创建数据对象 ThinkPHP可以帮助你快速地创建数据对象,最典型的应用就是自动根据表单数据创建数据对象,这个优势在一个数据表的字段非常之多的情况下尤其明显. 很简单的例子: // 实例化User模型 ...

  2. List排序的两种简便方式

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace List ...

  3. Gunplot 命令大全

    在linux命令提示符下运行gnuplot命令启动,输入quit或q或exit退出. plot命令 gnuplot> plot sin(x) with line linetype 3 linew ...

  4. 2014 HDU多校弟五场J题 【矩阵乘积】

    题意很简单,就是两个大矩阵相乘,然后求乘积. 用 Strassen算法 的话,当N的规模达到100左右就会*了 况且输入的数据范围可达到800,如果变量还不用全局变量的话连内存 ...

  5. 13、Cocos2dx 3.0游戏开发找小三之3.0中的Director :郝萌主,一统江湖

    重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27706967 游戏中的基本元素 在曾经文章中.我们具 ...

  6. Python学习笔记-函数基础

    函数基础 定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 为什么使用函数:减少重复代码.使程序变的可扩展使程序变得易维护 1.定义一个函数 #定 ...

  7. Android开发 ---SQLite数据库,lock文件,结果集游标,适配器,安全退出,给连接设置下划线,编辑器,投影,ContentValues存储,DbHelper,activity栈

    目录截图: 1.activity_main.xml 主界面效果: <?xml version="1.0" encoding="utf-8"?> &l ...

  8. Go Example--通道

    package main import "fmt" func main() { //string类型通道 messages := make(chan string) //往通道写入 ...

  9. vue-cli 项目搭建

    vue-cli 项目搭建 1.首先需要安装nodejs(安装省略). 2.用node安装vue-cli. npm install -g vue-cli   3.新建目录用来存放工程. 新建一个vue项 ...

  10. python中的特殊成员

    python中的特殊成员: 小甲鱼论坛总结