为什么对于一些开发人员来说,好的UI设计如此困难?

206

有些人在UI设计的柔性方面(尤其是我自己)遇到了困难。 "后端编码员"注定只能设计业务逻辑和数据层吗? 有没有什么方法可以让我们"重新训练大脑",以设计出更令人愉悦和有用的表现层?

同事们向我推荐了一些书,包括《网站设计》、《别让我思考》和《为什么软件糟糕》,但我想知道其他人在这个领域中如何消除他们的不足之处?


1
关于书籍,回到基础,'The Design of Everyday Things' 可能是开始掌握 UI 设计实际目标的经典方式 ^^ - Oskar Duveborn
20
平面设计 ≠ 用户界面设计。前者是关于让事物变得漂亮。后者则是关于让事物变得有用和易用。 - Esko Luontola
2
+1 @Esko。通常,“漂亮”意味着完全无法使用。但是,如果小心处理并经过深思熟虑,两者可以共存。 - Dhaust
1
我甚至不理解为什么你可以在一个讨论问题上发布悬赏,更不用说提出这样的要求了。这个问题的前提本身就是值得质疑的。 - Mark Rogers
12
为什么对于UI设计师来说开发软件如此之难? - Greg Hurlman
显示剩余8条评论
65个回答

359

让我直接说吧:

改进并不是从制定指南开始,而是要转变您对软件思考的方式。

大多数技术专家实际上对使用他们软件的用户几乎没有任何同理心。他们毫不知情用户如何思考,用户如何建立他们使用的软件模型以及他们如何一般使用电脑。

当专家和普通人发生冲突时,这是典型的问题:普通人怎么会傻到无法理解专家十年前所理解的内容呢?

第一个需要承认的事实是,几乎所有经验丰富的开发者难以理解的是:

普通人对软件有着与你截然不同的概念。他们对编程一窍不通。没有。零。而且他们甚至不在意。他们甚至认为自己不必关心。如果你逼他们去关注,他们会删掉你的程序。

对于开发人员来说,这太残酷了。他为自己所制作的软件感到骄傲。他喜欢每一个功能。他可以告诉你代码背后的原理。也许他甚至发明了一个令人难以置信的聪明算法,使它的运行速度比以前快50%。

但用户并不在意。

多么蠢啊。

许多开发人员无法与普通用户一起工作。他们对用户技术知识的缺乏感到沮丧。这就是为什么大多数开发人员回避并认为用户必须是白痴的原因。

他们不是。

如果软件开发人员购买汽车,他期望它能平稳运行。通常,他不关心轮胎压力,机械微调对使它以那种方式运行很重要。在这里他不是专家。如果他购买的汽车没有进行过精细调整,他会退回去并购买符合他需求的那款。

许多软件开发人员喜欢电影,那些能激发他们想象力的好电影。但是他们并不擅长制作电影、制作视觉效果或编写好的电影剧本。大多数极客在表演方面非常糟糕,因为这涉及到展示复杂情绪,很少涉及分析。如果开发人员看了一部烂片,他就会注意到整体上的糟糕。极客甚至建立了IMDB来收集有关好电影和烂电影的信息,以便知道哪些值得看,哪些要避免。但是他们并不是电影制作的专家。如果一部电影烂,他们不会去看电影(或从BitTorrent下载)。
因此,问题归结为:将普通用户视为专家是无知的。因为在那些领域(而且有很多领域),他们不是专家,所以他们期望其他领域的专家已经考虑过使用他们的产品或服务的普通人。
您可以采取什么措施来弥补这个问题?作为程序员,您越是强硬,就越不会接受普通用户的思维方式。对你来说,这将是陌生的和无知的。你会想:我无法想象人们如何在缺乏知识的情况下使用计算机。但是他们可以。对于每个UI元素,请考虑以下问题:它是否必要?它是否符合用户对我的工具的概念?我如何让他理解?请阅读有关可用性的相关书籍,这也是一门科学。
啊,在你说之前,是的,我是一个苹果粉丝;)

8
太棒了!你准确地指出了软件设计中最基本的障碍之一。对于像我这样的老练开发人员来说,这是一个难以接受的事实,但真相往往如此。 - user34411
12
我建议阅读《监狱里的疯子》,它详细讲解了用户/开发者思维方式的差异,以及一些解决方法。 - Richard Levasseur
9
说实话,任何不关心用户的开发者都是一位糟糕的开发者! - Gary Willoughby
7
非常有见地,我认为这种心态也是导致一些开发者运营的项目(例如开源项目等)难以使用的原因之一——大多数开发者通常是按照自己作为用户的方式编写代码,而不是真正的最终用户。 - CloudyMusic
25
这就是Linux仍然不适合普通用户桌面使用的主要原因。 - Bryan Anderson
显示剩余23条评论

215

UI设计很难

关于这个问题:

为什么大多数开发者觉得UI设计很难?

试着问反向的问题:

为什么大多数UI设计师觉得编程很难?

编写UI和设计UI需要不同的技能和思维方式。UI设计对于大多数开发者来说很难,而不是只有一些开发者,就像编写代码对于大多数设计师来说很难,而不是只有一些设计师。

编写代码很难,设计也很难。很少有人两者都做得好。优秀的UI设计师很少编写代码。他们甚至可能不知道如何编写代码,但他们仍然是优秀的设计师。那么为什么好的开发者感到有责任负责UI设计呢?

了解更多UI设计方面的知识会让你成为更好的开发者,但这并不意味着你应该负责UI设计。对于设计师来说,反之亦然:了解如何编写代码会让他们成为更好的设计师,但这并不意味着他们应该负责编写UI的代码。

如何提高UI设计水平

对于想要提高UI设计水平的开发者,我有三条基本建议:

  1. 将设计视为一项独立的技能。编程和设计是不同但相关的。UI设计不是编码的子集。它需要不同的思维方式、知识基础和技能组合。有些人专注于UI设计。
  2. 学习设计。至少要了解一点。尝试从下面的长列表中学习一些设计概念和技术。如果你更有雄心壮志,可以阅读一些书籍、参加会议、上课、获得学位。有很多学习设计的方式。Joel Spolky关于UI设计的书是开发者的好入门,但其中还有很多内容,这就是设计师发挥作用的地方。
  3. 与设计师合作。如果可以的话,找到优秀的设计师。从事这项工作的人有各种各样的职称。如今,最常见的职称是用户体验设计师(UXD)、信息架构师(IA)、交互设计师(ID)和可用性工程师。他们像你一样关注设计。你可以从他们身上学到很多东西,他们也可以从你身上学到很多东西。尽可能与他们合作。在你的公司找到具备这些技能的人。也许你需要雇佣某个人。或者去参加一些会议、参加网络研讨会,在UXD/IA/ID领域花费时间。

这里有一些具体的东西可以学习。 不要试图学习所有内容。如果你知道下面的所有内容,你就可以称自己为交互设计师或信息架构师了。 从列表顶部附近开始学习。专注于特定的概念和技能。然后向下移动并拓展。如果你真的喜欢这些东西,考虑将它作为一个职业发展方向。许多开发人员转向管理,但UX设计是另一个选择。

为什么UI设计很难

好的UI设计很难,因为它涉及到两种非常不同的技能:

  • 对机器的深入理解。这些人首先关注代码,其次是人。他们拥有深厚的技术知识和技能。我们称他们为开发人员、程序员、工程师等。
  • 对人和设计的深入理解:这些人首先关注人,其次是代码。他们深刻了解人们如何与信息、计算机和周围世界互动。我们称他们为用户体验设计师、信息架构师、交互设计师、可用性工程师等。

这就是这两个群体之间的根本区别——开发人员和设计师之间的区别:

  • 开发人员让它工作。他们在您的TiVo、iPhone、最喜欢的网站等上实现功能。他们确保它实际上做到了它应该做的事情。他们的最高优先级是使其工作。
  • 设计师让人们爱上它。他们想出如何与之互动、它应该看起来如何以及它应该感觉如何。他们设计使用应用程序、网站和设备的体验。他们的最高优先级是让你爱上开发人员制作的内容。这就是所谓的用户体验,它与品牌体验不同。

此外,编程和设计需要不同的思维方式,不仅仅是不同的知识和技能。好的UI设计需要两种思维方式、两种知识基础和两种技能组合。而且要想掌握其中任意一种都需要多年时间。

开发人员应该预计UI设计很难,就像UI设计师应该预计编写代码很难一样。


8
这是这里最好的答案。顺便说一下,链接很好! - Bernard Igiri
优秀的书单,每个开发者至少应该阅读你列出的其中5本书。 - Murmelschlurmel
+1 链接到 Leah Buley 的《如何成为一个 UX 团队》。那是一份非凡的演示! - Dubs
2
为什么这个回答没有被标记为最佳答案?它似乎比Thorsten79的回答好得多。 - AbdullahC
1
希望我可以直接收藏这个答案。 :) - Dan J
显示剩余3条评论

70

真正帮助我改进我的设计的是找一个开发人员、质量保证员、项目经理或者任何路过的人来尝试特定的小部件或屏幕。

当你看别人第一次使用你的软件时,你会感到惊奇。


我已经尝试了很多次这种方法,并发现它非常有效。偶尔我会让一些非技术背景的朋友使用它,以了解他们在使用时遇到的问题。 - Chris Ballance
这是我采取的相同方法。 - Ed S.
这种方法可以称为“可用性测试”吗? ;) 是的,在之前、期间和之后都应该采取这种方法。 - Ates Goral
这几乎是我的精确答案。QA和技术支持非常棒。开发人员在UI设计方面很糟糕,需要经常迭代并让其他人测试它。 - Bill K
7
我相信这被称为“走廊可用性测试”。 - Kevin
我也这样做。这非常有效,通常会让我哭泣,因为在2秒钟内,我必须放弃一些我花了几天时间完善的功能,认为它会极大地增强页面,而实际上对用户来说是完全错误的... - yu_ominae

32

归根结底,这确实涉及到共情——你能否站在用户的角度考虑问题?

当然,有一件事可以帮助你,就是“吃自己的狗粮”——像一个真正的用户一样使用你的应用程序,并看看哪些地方令人烦恼。

另一个好主意是找到一种方法来观察一个真正的用户使用你的应用程序,这可能是像一个单向镜子的可用性实验室、屏幕录像捕获、用户视频相机等一样复杂,也可以像使用下一个经过走廊的人进行纸张原型设计一样简单。

如果其他所有方法都失败了,请记住,UI过于简单通常总比过于复杂要好。很容易就会想“哦,我知道如何解决这个问题,我只需添加一个复选框,让用户决定他们喜欢哪种模式。”结果你的UI变得过于复杂。选择一个默认模式,并将偏好设置作为高级配置选项。或者干脆不要添加它。

如果你阅读了很多关于设计的文章,你很容易被各种视觉效果所吸引,例如阴影和圆角等。但这不是重要的东西。简单和易发现才是重要的东西。


说得好。大多数情况下,试图增加灵活性只会导致混乱。简单就是美。 - SquareCog
你能否想象一下,如果用户在地球的另一端,处于你从未经历过的文化中,你会怎么做?国际化是稳定UI设计的重要考虑因素。让我们不要假设每个人都生活在美国。 - user34411
当然,我的当前项目实际上是针对全球用户的(基本上除了我所在的美国以外的每个国家)。这使得同理心变得更加困难,毫无疑问 - 这也更加重要,需要认真而积极地尝试。 - Jacob Mattison
此外,我想补充一点,大多数可用性问题一旦让真正的用户看到就会显得非常明显。是的,可能会有一些文化特定的微妙问题,但你可以通过请走廊上的下一个人来做出巨大的改进。 - Jacob Mattison
+1,只因为我不能给自己加+100!我想说的是,使用不同应用程序来获得经验可以帮助您成长为UI开发人员。仅使用Visual Studio或其他开发工具将会妨碍这种能力... - BQ.
我发现过去使用 Photoshop、一些 3D 设计软件、AutoCAD、MS Office 以及各种销售订单输入应用程序的经验对于帮助我建立和保持对我正在开发的软件用户的同理心非常有帮助。请注意每个软件都有自己的范式。 - BQ.

26
与流行的神话相反,UI设计中实际上没有软性方面,至少不需要比设计良好的后端所需的更多。
考虑以下内容;良好的后端设计基于相当坚实的原则和任何优秀开发者熟悉的元素:
- 低耦合 - 高内聚 - 架构模式 - 行业最佳实践 - 等等
良好的后端设计通常是通过一系列交互产生的,在这些交互中,根据测试或实际使用获得的可衡量反馈逐渐改进了初始蓝图。有时,您需要原型化后端的较小方面并在隔离中进行试验等。
良好的UI设计基于以下 sound 原则:
- 可见性 - 易用性 - 反馈 - 宽容度 - 简洁性 - 一致性 - 结构
UI也是通过测试和试验而产生的,通过迭代,但不是通过编译器+自动化测试套件,而是通过人们。类似于后端,还有行业最佳实践、测量和评估技术、以用户模型、系统形象、设计师模型、结构模型、功能模型等方式思考UI并设定目标的方法。
设计用户界面所需的技能集与设计后端有很大不同,因此在没有学习之前不要期望能够做出良好的用户界面。但是这两种活动共同具有的是设计过程。我相信任何能够设计出优秀软件的人都能够在花费一些时间学习后设计出良好的用户界面。
我建议参加人机交互课程,可以查看 MIT 和 Yale 网站获取在线材料:
- MIT 用户界面设计和实现课程 结构模型与功能模型在理解和使用上的差异 Thorsten79 早期的 帖子 探讨了软件开发专家与用户的理解以及他们对软件的使用方式的不同之处。人类学习专家区分了功能性和结构性心智模型。找到去朋友家的路可以是两者之间差异的一个很好的例子:
  • 第一种方法包括一组详细的指令:走高速公路的第一个出口,然后在100码后左转等。这是一个功能模型的例子:列出实现某个目标所需的具体步骤。功能模型易于使用,不需要太多思考,只需直接执行。显然,简单性会带来一些代价:可能不是最有效的路线,任何异常情况(如交通改道)都可能导致完全失败。

  • 应对任务的另一种方式是建立结构性的心理模型。在我们的例子中,这将是一个传达“任务对象”内部结构大量信息的地图。通过理解地图和我们和朋友家的相对位置,我们可以推断出功能模型(路线)。显然,这需要更多的努力,但是完成任务的可靠性要高得多,尽管可能会有偏差。

在UI中传达功能或结构模型(例如,向导与高级模式)之间的选择并不像从Thorsten79的帖子中看起来那么简单。高级和经常使用者可能会更喜欢结构模型,而偶尔或经验较少的用户则更喜欢功能模型。

谷歌地图就是一个很好的例子:他们包括功能和结构模型,许多卫星导航系统也是如此。

问题的另一个维度是,通过UI呈现的结构模型不应映射到软件的结构,而应自然地映射到手头任务或涉及的任务对象的结构。

这里的难点在于,许多开发人员将具有软件内部良好的结构模型,但只有用户任务的功能模型可以帮助软件完成。要构建良好的UI,需要理解任务/任务对象结构并将UI映射到该结构。

无论如何,我仍然强烈推荐参加正式的HCI课程。涉及到很多东西,例如启发式算法, 从格式塔心理学中得出的原则,人类学习的方式等。


+1 for the MIT OCW link :) 那些课程笔记是无价的。 - Debajit
你说得对,用户可以自己成为软件的专家,并且他们喜欢有人通过“美观”的用户界面为他们开辟一条更快捷的道路。例如,这就是所有关键快捷键的用途。可用性是一个非常有趣的主题! - Thorsten79

25

我建议你先按照目前的方式完成所有UI,不要关注可用性和其他方面的内容。

alt文本 http://www.stricken.org/uploaded_images/WordToolbars-718376.jpg

现在想象一下:

设计师知道他已经达到完美状态,而不是没有可以添加的东西,而是没有可以拿走的东西。 — 圣埃克苏佩里

并将此应用于您的设计。


如果有人想知道我从哪个坟墓挖出了这句话,那是我在玩文明4时听到的。真是一款好游戏。 我不知道作者是谁,但他肯定能比Word的设计师写出更好的用户界面。 - Hoffmann
还有另一句类似的好引言来自爱因斯坦:“尽可能简单,但不要过于简单。” 我发现这些想法也适用于UI设计:www.presentationzen.com。...并+1 - Pyry Jahkola
这就是为什么功能区 UI 更好的原因,不幸的是太多人已经习惯了这种糟糕的模式。但是年轻一代仍然没有被“毒害”。他们仍然可以幸免于难。 - Bernard Igiri
我认为解决这个问题的方法与任何编程问题的解决方法相同;只需增加更多的硬件。在这种情况下,购买一个更大的显示器就可以了 :-) - Tom Lokhorst
5
你本应该选择打印预览...现在看不到标尺了。 - Mussnoon
显示剩余4条评论

16

许多开发人员认为,因为他们能编写代码,所以能够胜任所有工作。设计界面是完全不同的技能,我在大学时根本没有学到。这不是一件自然而然发生的事情。

另一本好书是唐纳德·诺曼(Donald Norman)所著的《日常物品的设计》


谢谢,"日常物品的设计"已经在我的亚马逊愿望清单上了。 - Chris Ballance
《每天的设计》也在Coding Horror推荐阅读清单上(开发人员的好书列表)。最近刚读完,也强烈推荐。 - Mun
我目前正在阅读《日常物品的设计》这本书,它确实非常好,但如其他答案中所提到的评论,艾伦·库珀的《囚犯正在管理着精神病院》则恰好探讨了这个主题。作为一名开发者,这本书是“改变生命”的! - Stuart Helwig
我的不满:很多开发人员(以及设计师和其他人)认为,因为我会编程,就不能设计用户界面。我不太懂 Photoshop,但我认为我有良好的审美和判断力。(《日常物品的设计》是我第一本 UI 圣经。) - Barry Brown

14

设计和美学有着巨大的差别,它们常常被混淆。一个漂亮的用户界面需要艺术技能或者至少需要具备审美能力,但这对于许多人(包括我自己)来说是无法达到的。然而,这并不足够,也不能让用户界面变得易用,正如我们在许多基于Flash的重量级API中所看到的。

要制作出易用的用户界面,需要理解人类如何与计算机交互,掌握一些心理学问题(例如Fitt定律、Hick定律)等其他主题。很少有计算机科学专业培养这方面的能力,我认识的很少有开发人员会选择阅读用户测试书籍而不是JUnit书籍等。

我们中的许多人也是“核心程序员”,倾向于将用户界面看做是外在的而不是可以决定我们项目成败的因素。

此外,大多数UI开发经验都非常令人沮丧。我们可以使用像旧版VB这样的玩具GUI构建器,但必须处理丑陋的胶水代码,或者使用让我们感到非常沮丧的API,比如试图在Swing中解决布局问题。


我们可以使用像旧版VB那样的玩具GUI构建器,并且必须处理丑陋的粘合代码,或者使用API,这会让我们感到非常沮丧,例如在Swing中尝试解决布局问题。你真的概括了我的GUI构建经验。如果我可以补充一下:“或者疯狂的DOM和CSS组合”。 - Hoffmann
我相信每个人都熟悉Totally Gridbag吧?“http://madbean.com/anim/totallygridbag/” - Uri

12

前往Slashdot,阅读任何与苹果有关的文章的评论。你会发现许多人谈论苹果产品并不特别,并将iPod和iPhone的成功归因于人们试图变得时尚或潮流。他们通常会列出功能清单,并指出它们做的事情早期MP3播放器或智能手机已经做过了。

然后还有一些人喜欢iPod和iPhone,因为它们可以简单易行地满足用户的需求,而无需参考手册。这些界面是极为直观、容易记忆和发现的。我不像之前版本那样喜欢MacOSX上的用户界面,我认为他们在追求华丽效果的同时放弃了一些实用性,但iPod和iPhone是出色设计的例子。

如果您属于第一类,您的思维方式不同于普通人,因此您可能会开发出糟糕的用户界面,因为您无法区分好的和坏的用户界面。这并不意味着您毫无希望,而是需要明确学习良好的界面设计原则以及如何识别好的用户界面(就像患有亚斯伯格综合症的人需要明确学习社交技巧一样)。显然,仅凭对良好用户界面的感觉并不能制作出好的用户界面;例如,我对文学的欣赏并不意味着我有能力(目前)写一篇值得发表的故事。

因此,尝试培养对良好用户界面设计的感觉。这扩展到不仅仅是软件。唐诺曼的《日常物品的设计》是一部经典之作,还有其他书籍可供选择。获取成功的用户界面设计示例,并通过演练,掌握它们的差异。认识到您可能需要学习一种新的思考方式,并享受它。


《设计心理学》 - Oskar Duveborn
+1 非常好的回答。我认为你现在仍然只有一个点赞(现在是两个), 这说明符合你描述的人可能不认为自己符合, 或者干脆对这个想法不屑一顾 :-( - mghie
这是一个笼统的说法。Slashdot 上并非每个反苹果的评论都是对其用户界面的批评,或者是对其缺乏用户界面理解的证明。苹果有良好的用户界面,许多竞争对手也是如此。 - Bernard Igiri
另一个想法:苹果并不适合所有人;例如,它无法提供 CLI 所具备的惊人强大的功能。 - J. Polfer
我在使用新的MacOSX电脑时几乎第一件事就是将终端程序移到了Dock栏。这使得它可以像Unix系统一样轻松运行。无论如何,我不是指所有反苹果的言论,而是特定的一群人。 - David Thornley
2
我个人认为苹果产品非常不直观易用。我想我不是唯一一个在第一次使用iPod时感到沮丧,因为每次我开始慢跑时它都会开始随机播放歌曲,或者为什么iPhone屏幕总是反转。我认为事情应该只发生在直接、明确的用户操作下。 - Lotus Notes

10

我坚持的主要原则是,永远不要同时尝试做两件事。如果我正在编写后端代码,我会完成这个任务,然后休息一下,再开始处理UI设计。如果你同时进行这两项工作,你会使用错误的心态来处理UI设计,结果可能会导致一些可怕的界面。

我认为成为一个优秀的后端开发人员和优秀的UI设计师是有可能的,但你需要努力学习并研究这个领域(从Miller #7到Nielsen的档案),并确保你理解为什么UI设计非常重要。

我认为这不是需要创意的问题,而是像后端开发一样,需要学习的一种非常有方法论和结构性的东西。正是因为人们在UI上过于“创意”,才会出现一些最大的可用性怪胎...例如100%使用Flash制作的网站...

编辑:Krug的书非常好...特别是如果你将要为Web进行设计,请务必阅读它。


这本 Krug 的书叫什么名字? - defau1t
@refhat 它在顶部的帖子中有明显的链接,所以当时我没有链接它,但它是这个:http://www.librarything.com/work/12322 - James B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接