2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

记住:你在为谁设计软件?!

  • 2007-04-22
  • 本文字数:1198 字

    阅读完需:约 4 分钟

作为 Rolling Thunder Computing 的主席和计算机课程的教师,David S. Platt 在最近的 SD West(软件开发大会) 的活动上发表了题为“为什么软件如此糟糕?”的讲演。FTPonline 对 Platt 在讲演中所强调部分着重进行了报道,即:作为软件设计者常犯的错误“忽视用户并按照开发者的喜好进行设计”。

除非你在为少数的极客 (骨灰级程序员) 写软件,否则请牢记:你的用户不是你……。这个观点很难出现在开发者的头脑中,他们普遍认为他们所欣赏的用户也一定会欣赏……。再强调一次,你的用户不是你。

Platt 力劝他的听众在设计软件的过程中要更多地关注用户而不是开发者的需要,这一点听起来再明显不过了,他当场使用了几个小问题来引出他的观点:在场的听众所设计软件的用户并非软件开发者。例如,通过听众举手统计, 在场的大多数人都驾驶手动档汽车,这通常比自动挡要难于掌握,难于使用,但是可以使你更好地操纵汽车。很明显,对于大多的开发者而言,他们认为如果能换来更好的操纵感,花一点代价是值得的。而 Platt 指出,在美国销售的汽车中只有百分之 12 到 14 有手动档!很明显,在汽车设计决策方面他的意见不能代表大多数的用户。

为什么大多数的人不喜欢驾驶手动档的汽车?因为他们所关注的不是驾驶本身。他们所关注是可以到达目的地。[听众大笑]

这是一个很重要的分别。你认为用户会按照你希望的方式使用软件,但是他们通常并不认同“你”的方式,他们希望你的软件和他们过去用过的软件在可用性上相似,这样他们就无需改变已经熟悉的工作方式。

用户有自己的工作,有需要达到的目标,有需要联系的人,要完成的使命,软件的正常运转仅仅是这个过程的附属品。当它时时出现问题,或者强迫用户改变自然的工作流程时,它就是用户最大的障碍了。最典型的例子是微软 Office 软件的剪切板功能(最终被从 Office 中去除了),软件可用性方面很小的缺陷都会引起很大的负面体验。在开发过程中遵循简单原则是非常重要的,Platt 建议我们需要做的是“仅仅让它运转起来”,并且提供了作为开发者需要注意的 5 点:

  1. 将一个新人放入设计团队中——所谓新人是指完全不懂得编写软件的人。
  2. 在需要的时候,不要顾忌已有的习惯——老套的方法并不一定正确。
  3. 避免愚蠢的功能——所谓愚蠢是指不要让不确定的功能混入那些确定的功能中。
  4. 小心修改你的软件——发现“大多数沉默的人”是如何想的是件困难的事情,在这种情况下,可用性测试可以提供可信的数据来帮助我们作出决策。
  5. 多想想设计方面的决策是否背离了简单原则。

记住——所谓“恰好工作”是从用户的角度思考,开发者并不使用你的软件。- - - - - -

译者简介:胡凯,2006 年加入 ThoughtWorks ,通过在 ThoughtWorks 多个国家和多个项目的敏捷实践,坚定地站在了敏捷阵营中,目前在进行 CruiseControl 相关的敏捷开源项目。他和许多敏捷开发者一样活跃在敏捷中国 CruiseControl-China 社区中。为 InfoQ 中文站贡献内容,请邮件至 china-editorial@infoq.com

2007-04-22 00:321087

评论

发布
暂无评论
发现更多内容

每日一题之Vue的异步更新实现原理是怎样的?

bb_xiaxia1998

Vue

C++学习---cstdio的源码学习分析06-关闭文件函数fclose

桑榆

c++ 源码分析 10月月更

React组件之间的通信方式总结(下)

beifeng1996

React

面试官:说说JS作用域和作用域链,我是这样回答的

loveX001

JavaScript

JavaScript——Document Object Model

胖虎不秃头

前端 js 10月月更

架构实战营模块 2 作业

陌生流云

架构实战营

改造微服务的时机

穿过生命散发芬芳

微服务 10月月更

Python进阶(二)初识Python数据元素:字典&时间

No Silver Bullet

Python 时间 字典 10月月更 数据元素

大数据ELK(十四):Elasticsearch编程(基本操作)

Lansonli

ES 10月月更

通过单步调试的方式学习 Angular 中带有选择器的内容投影使用方式

汪子熙

typescript 前端开发 angular web开发 10月月更

每日一题之请描述Vue组件渲染流程

bb_xiaxia1998

Vue

Collections之Arraylist源码解读(六)

知识浅谈

ArrayList 10月月更

什么是核心交换机、汇聚交换机、接入交换机,它们之间有啥区别?

wljslmz

交换机 网络设备 通信技术 10月月更

爬虫练习题(一)

张立梵

Python. 10月月更 爬虫案例

React组件之间的通信方式总结(上)

beifeng1996

React

JavaScript——JS中的正则表达式

胖虎不秃头

前端 js 10月月更

高频js手写题之实现数组扁平化、深拷贝、总线模式

helloworld1024fd

JavaScript

Docker下,两分钟极速体验Nacos配置中心

程序员欣宸

Docker nacos 10月月更

React-hooks面试考察知识点汇总

beifeng1996

React

JavaScript——BOM、JSON

胖虎不秃头

前端 js 10月月更

js函数柯里化-面试手写版

helloworld1024fd

JavaScript

从这两道题重新理解,JS的this、作用域、闭包、对象

loveX001

JavaScript

一天梳理完React所有面试考察知识点

beifeng1996

React

面试官:请实现Javascript发布-订阅模式

helloworld1024fd

JavaScript

手写JavaScript常见5种设计模式

helloworld1024fd

JavaScript

一文了解 CPython 中的垃圾收集器

宇宙之一粟

Python 垃圾回收算法 垃圾收集器 10月月更

深入理解JS作用域链与执行上下文

loveX001

JavaScript

Python进阶(一)初识Python数据元素:列表&元组

No Silver Bullet

Python 列表 元组 10月月更 数据元素

Vue的computed和watch的区别是什么?

bb_xiaxia1998

Vue

聊聊前端面试中的js同步与异步问题

loveX001

JavaScript

每日一题之Vue数据劫持原理是什么?

bb_xiaxia1998

Vue

记住:你在为谁设计软件?!_研发效能_Deborah Hartmann Preuss_InfoQ精选文章