软件随想录(local.joelonsoftware.com/wiki)-2000年05月09日 使用介面设计手册第九章 - User Interface Design for Programmers

2000年05月09日 使用介面设计手册第九章 - User Interface Design for Programmers Chapter 9

 

 

The Joel on Software Translation Project:使用介面设计手册第九章

From The Joel on Software Translation Project

程序员的使用介面设计手册 第九章:一个产品的设计程序

作者:周思博 (Joel Spolsky)
译:Paul May 梅普华
Tuesday, May 9, 2000 A part of Joel on Software, http://www.joelonsoftware.com


我们已经讲过良好设计的原则,不过原则只是提供方法来评估并改善现有的设计。不过...一开始要如何找出正确的设计呢?很多人会先写出一大本功能纲要,涵盖所有想到的功能。然后设计各个功能并把功能连到功能表项目(或网页)上。等他们完全后,程序(或网站)就会具备所有要的功能,不过用起来并不顺畅。人们会看著程序却不知道它能做什么,也不知道要如何完成他们要做的事。

微软对这个问题的解决方法是一种叫「活动式规划(Activity Based Planning)」的方法。(就我所知,这个概念是Excel团体的Mike Conte所发明的,他后来做烦了就改行去当赛车手)。其关键所在是要找出使用者会进行的活动,然后努力让这些活动很容易完成。用下面的例子来解释最为贴切。

你决定要架一个网站让大家可以制作贺卡。如果选用较简单的作法,你可能会列出如下的功能列表:

1.把文字加入卡片
2.把图片加入卡片
3.由卡片库取得预先设计好的卡片
4.传送卡片:
          a.透过电子邮件
          b.列印出来

如果缺乏较好的方法思考这个问题,很可能就会做出一个大约1984年代麦金塔的典型使用介面:一个一开始有张空白卡片的程序,有几个功能表选项可以加入文字或图片、由卡片库中载入卡片、以及送出卡片。使用者得坐下来浏览各个功能表,尝试找出所有可用的命令,然后各自找出如何结合这些基本命令制作出一张卡片。

活动式规划要求你必须找出一个使用者可能会做的活动清单。所以你就找可能的使用者谈,结果得出这「前三项」列表:

    1. 生日贺卡
    2. 宴会邀请卡
    3. 结婚纪念卡

现在暂时不要用程序员的想法考虑程序(也就是想著制作一张卡片要哪些功能),要像使用者一样地考虑(也就是使用者会做哪些活动)。主要的活动是:

    1. 送一张生日贺卡
    2. 计画一个宴会,然后邀请大家来参加
    3. 送一张结婚纪念卡

突然间各式各样的点子都出现在你脑海里。所以一开始可以显示如下的选单而不需要用空白卡片:

你想要做什么?
    1. 送一张生日贺卡
    2. 送一张结婚纪念卡
    3. 送一张宴会邀请卡
    4. 由空白卡片开始

这样使用者会突然发现你的程序变得非常容易上手,他们不再需要先浏览功能表了。因为基本上程序会引导他们逐步完成所有的活动。(这里会有个风险,如果你没有选对活动,就会疏远或搞混那些原本会用你的程序的使用者,比如说要送贺年卡却找不到选项。所以要小心挑选能涵盖大部份目标市场的活动。)

光看到这三个活动就会出现很多可以加的好功能。举例来说,如果你正在送一张生日或结婚纪念卡,可能希望能在明年提醒你寄卡片给同一个人...所以你可能会勾选写著「明年提醒我」的选项。另外宴会邀请卡都会需要回覆是否能参加,所以可以加个功能让你以电子方式收集回函。这些点子几乎是光看到使用者会做的活动就浮现了,不过看著应用程序的功能是不会想到的。

这个例子没什么;不过对正式的应用程序来说,活动式规划的好处就更可观了。当你从头设计一个程序时,你对使用者会做的活动已经有个想法了。把这个想法弄清楚一点都不难,几乎不必费什么工夫,只要和同事做些脑力激荡,把可能活动都写下来,然后决定把重点放在哪些项目。强迫自己把这些活动写在纸上,对你的整体设计帮助很大。

当你在制作现有产品第二版时,活动式规划会变得更重要。这时候观察客户样本使用你的程序做些什么事,可能会是件很重要的事。

从Excel 1.0到4.0这段期间,微软里大多数人都认为最常见的使用者活动是做财务上的模拟分析,(比如改变通货膨胀率看看获利所受到的影响)。

当我们设计Excel 5.0时开始正式使用活动式规划,大概看了五个客户使用产品之后,就了解到有很多人只是用Excel来记录清单。他们完全不会输入任何公式或做任何计算!我们以前根本没有考虑过这件事。结果发现在Excel中保存清单比其他活动普遍得多。而这也让我们发明出许多能更容易地保存清单的功能:更容易的排序,自动资料输入,帮助你看到清单某一部份的自动筛选功能,以及多用户功能(能让多人同时编辑同一份清单,Excel会自动处理所有冲突)。

当Excel 5正在设计时,Lotus推出了一套「全新典范」的试算表Improv。根据新闻稿的说法,Improv是全新世代的试算表,能把之前所有的产品都干掉。由于各种奇怪的理由Improv先推出了NeXT版本,这对产品的销售当然没有帮功,不过却有很多聪明人认为Improv之于NeXT就像以前的VisiCalc之于Apple II:它会是个杀手级应用,会让人们为了用一个程序而去买全新的硬件。

当然啦,Improv现在已经是历史的注脚了。在网络上搜寻这个名字,唯一找到的是一位太有条理的仓库经理不知为何所建的网站,里面列出他们卖不出去放著积灰尘的存货。

为什么呢?因为在Improv里几乎不可能只制作列表。Improv设计者认为大家都是用试算表来建立复杂的多维财务模型。可是如果他们去调查一下,就会发现制作列表比多维财务模型常用太多了,可是在Improv里就算有办法制作出列表,也是非常的麻烦

所以活动式规划不光是能帮助应用程序初版(你必须猜测大家所想做的事),对于打算升级的程序更是有用,因为你能了解客户正在做的事。

另外有一个来自网络的例子,就是deja.com的演进,它刚开始是个名为dejanews的庞大Usenet可搜寻索引服务。最初的介面只有一个编辑框,写著「在Usenet中搜寻废话」,就只有这样。在1999年少量的活动式规划显示,一般使用者的活动是研究产品或服务,比如研究「我该卖那一种车子」之类的。后来Deja整个重新组织过,现在已经偏向于产品意见搜寻服务了:Usenet搜寻能力几乎被完全隐藏起来。这对用该网站搜寻Matrox显示卡是否能用于Redhat Linux 5.1的少数使用者来说很烦,却使得绝大多数只想买到最佳数码相机的使用者更喜欢。

活动式规划还有另一个好处,就是能让你做出一份要做的功能清单。不管你是要制作任何种类的软件,都会发现时间只允许完成1/3的功能。而决定功能要做或不做的最好方法之一,就是去评估哪些功能支持最重要的使用者活动

想像使用者。

业界最顶尖的使用介面设计者都同意一件事:你必须先创造并描绘虚构的使用者才能开始设计使用介面。你可以回想我在本书介绍中所说的虚构使用者皮特:

皮特是在某家技术性书刊出版社里工作的会计师,使用视窗有六年经验,主要在办公室用,偶而也会在家里用。皮特很能干而且很技术性。他会自己安装软件;会阅读PC Magazine,甚至还能写些简单的Word宏协助办公室的秘书开发票。他家里有装缆线数据机。皮特从来没用过麦金塔。「太贵了」他会告诉你说「128MB RAM的700 Mhz PC才多少钱...」。好了,这就是皮特。我们都知道了。

当你在读这段敘述时,你几乎可以想像出一个使用者。我也创造了另一类的使用者:

派翠西亚是个英文教师,出过很多广为人知的诗集。她从1980年起就已经用电脑作文书处理,不过总共只用过Nota Bene(一套古老的学术用文书处理器)和Microsoft Word两套软件。她不想花时间了解电脑运作的理论,而且习惯把所有文件不更改目录直接存档。

很显然的,设计给皮特用的软件和设计给派翠西亚的软件一定会有相当的差异,当然也和给麦克(16岁,在家里用Linux,会上IRC聊好几个小时,另外绝对不用"Micro$oft"的软件)用的不一样。

当你创造出这些使用者之后,要考虑你的设计会变得容易许多。举例来说,很多程序员都会高估一般使用者弄懂事情的能力。每次当我写说命令列使用介面很难用,总是会收到一堆邮件说命令列功能超强,因为可以完成像'gunzip foo.tar.gz | tar xvf -'之类的工作。不过当你想想看要派翠西亚键入"gunzip..."时,立刻就会明白这种介面永远不会符合她的需要。考虑一个「真实」的人能让你有移情作用,让你做出符合这个人需要的功能。(当然啦,如果你是为纯熟的系统管理员制作Linux备份软件,就得创造像「法籣克」这些的角色。他拒绝碰Windows,而且用「操作系统」形容Windows时总是加个问号,用的tcsh是自己改过的版本。他的机器整天都在执行X11 而且开了四个xterm终端机程序,另外还同时开了大约11个xperf程序去监看所有电脑的CPU使用量。

总结起来,设计良好软件大概需要六个步骤:

    1. 创造一些使用者
    2. 找出重要的活动
    3. 找出使用者模型:使用者期望如何完成这些活动
    4. 草拟出初版的设计
    5. 一直反覆把设计修改得更容易,直到虚构使用者能轻易使用为止
    6. 找真人来看著他们试用你的软件。特别注意人们出问题的部份,这很可能就是程序模型与使用者模型不符的地方。

良好的使用介面能让软件大卖,不过也会让人们快乐,因为这是人们完成想做的事时的反应。这也说明为何使用介面设计是个能令人满足的领域。还有什么地方能让你有机会让数百万人更快乐一些呢?

bullet.gif 这本书的印刷版本比较长,里面有整整七个网络版所没有的新章节。还可以让你拿到沙滩上看而不必担心沙跑进手提电脑的键盘里。

这些网页的內容为表达个人意见。
All contents Copyright 1999-2002 by Joel Spolsky。All Rights Reserved.

 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
应用背景为变电站电力巡检,基于YOLO v4算法模型对常见电力巡检目标进行检测,并充分利用Ascend310提供的DVPP等硬件支持能力来完成流媒体的传输、处理等任务,并对系统性能做出一定的优化。.zip深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值