从客户那传来一个噩耗:要求每个表单在保存之后,要在页面上弹一个 “ 保存成功 ” 的对话框。

  客户代表志得意满地说这样用户体验更好,略带谴责意味地傲娇道,“你们早该想到的”。呵呵…… 可不是嘛,我刚入行时,每个页面都这么想的。

  我琢磨着,这事不大,既然不大,那就 “话不投机半句多”,不和客户废话了。于是,和同事们一通忙活之后,提交代码。

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

  

  

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

  

随机推荐

  1. JavaScript中,JSON格式的字符串与JSON格式的对象相互转化

    前言:JSON是一个独立于任何语言的数据格式,因此,严格来说,没有“JSON对象”和“JSON字符串”这个说法(然而”菜鸟教程“和”W3school“使用了“JSON对象”和“JSON字符串”这个说法 ...

  2. SqlServer通用存储过程

    1.增删改—通用存储过程 --增删改 存储过程create proc Infos_InsertUpdateDelete( @Id int, @Name varchar(50), @DataTable_ ...

  3. Linux中shell和子shell一点点理解

    Linux执行脚本有两种方式,主要区别在于是否建立子shell   1.像sh,bash,./命令是用来执行shell脚本的,在bash/sh命令下,脚本文件可以无"执行权限",即 ...

  4. Call to a member function display() on a non-object问题的解决

    在使用ThinkPHP做项目的时候,出现了如下 的报错: 报错是Call to a member function display() on a non-object.我的代码是: 查看了ThinkP ...

  5. Linux 小知识翻译 - 「虚拟化技术 续」

    这次,继续聊聊「虚拟化技术」. 根据上回的介绍,虚拟化技术可以使「计算机的台数和运行的OS的个数的比例不再是1:1」.这回介绍一下如何使用这个技术. 使用方法之一,「一台计算机上运行多个OS」.从个人 ...

  6. C#批量向数据库插入数据

    程序中,批量插入数据有两种思路. 1.用for循环,一条一条的插入,经实测,这种方式太慢了(插入一万条数据至少都需要6-7秒),因为每次插入都要打开数据库连接,执行sql,关闭连接,显然这种方式不可行 ...

  7. 安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)转载自码农网

    CentOS 是一个工业标准的 Linux 发行版,是红帽企业版 Linux 的衍生版本.你安装完后马上就可以使用,但是为了更好地使用你的系统,你需要进行一些升级.安装新的软件包.配置特定服务和应用程 ...

  8. MySQL高级知识(三)——索引

    前言:索引在sql调优部分占据着重要的位置,了解并深入索引对我们来说也是非常重要的.本篇主要介绍MySQL中索引的相关知识点. 1.索引是什么 MySQL官方对索引的定义:索引(Index)是帮助My ...

  9. 词云wordcloud入门示例

    整体简介: 词云图,也叫文字云,是对文本中出现频率较高的“关键词”予以视觉化的展现,词云图过滤掉大量的低频低质的文本信息,使得浏览者只要一眼扫过文本就可领略文本的主旨. 基于Python的词云生成类库 ...

  10. BZOJ3577:玩手机(最大流,二维ST表)

    Description 现在有一堆手机放在坐标网格里面(坐标从1开始),坐标(i,j)的格子有s_(i,j)个手机. 玩手机当然需要有信号,不过这里的手机与基站与我们不太一样.基站分为两种:发送站和接 ...