我们中的一些人只是在UI设计的软方面遇到了困难(尤其是我自己)。“后端编码器”注定只设计业务逻辑和数据层吗?我们是否可以做些什么来重新训练我们的大脑,使其更有效地设计出令人愉悦和有用的演示层?
同事们给我推荐了《网站设计》、《不要让我思考》、《为什么软件很糟糕》等几本书,但我想知道其他人在这方面做了什么来弥补他们的不足?
我们中的一些人只是在UI设计的软方面遇到了困难(尤其是我自己)。“后端编码器”注定只设计业务逻辑和数据层吗?我们是否可以做些什么来重新训练我们的大脑,使其更有效地设计出令人愉悦和有用的演示层?
同事们给我推荐了《网站设计》、《不要让我思考》、《为什么软件很糟糕》等几本书,但我想知道其他人在这方面做了什么来弥补他们的不足?
当前回答
吃自己的狗粮实际上并不是最好的方式。缺乏对用户关注的关注,虽然这是事实,但也不是故事的全部。同样,随着您的专业知识的增长,您也会逐渐远离正常的用户关注点。我认识的大多数开发人员都想在开发解决问题的软件方面做得很好。
这种脱节发生在想象力的失败。我们人类没有能力思考所有的可能性和组合。当然,我们试图用“更好的”方法来克服这个问题。
我发现唯一有效的方法就是让自己置身于接收用户反馈的火线上。通过这种方式,我了解到我正在解决的问题,不仅仅是一次,而是在用户使用我的软件的过程中持续不断地进行。
这不是一个简单的解决方案。你不仅要成为一名优秀的程序员,还要擅长X,因为X是你试图解决的任何问题。通过擅长X,你可以获得必要的经验来理解可能性和局限性。你可以开始在你的代码中考虑到这一点,从而在你提供的功能和UI设计中产生更精致的软件。
这不是重新训练你的大脑,而是获得有效解决问题所需的经验。如果你要做的是像Stack Overflow这样的全新游戏,你就必须负责用户反馈才能获得游戏体验。
其他回答
没有人建议过,但对你有很大帮助的是参加人因工程学课程(通常是研究生水平)。如果你不想选这门课,至少去找课本读一遍。
真正帮助我改进设计的是找一个开发人员,QA人员、项目经理或任何碰巧路过的人,让他们尝试特定的小部件或屏幕。
当你看到别人第一次使用你的软件时,你会惊奇地发现
与流行的神话相反,在UI设计中实际上没有软方面,至少不需要设计一个好的后端。
考虑以下几点;优秀的后端设计是基于任何优秀开发者都熟悉的原则和元素:
低耦合 高内聚 架构模式 行业最佳实践 等
好的后端设计通常是通过一系列交互产生的,基于测试或实际使用期间获得的可测量反馈,初始蓝图会逐渐改进。有时候,你需要对后端较小的方面进行原型设计,然后单独进行测试等等。
优秀的UI设计是基于以下合理的原则:
可见性 功能可见性 反馈 宽容 简单 一致性 结构
UI也是通过测试和试验,通过迭代诞生的,但不是用编译器+自动化测试套装,而是人。与后端类似,有行业最佳实践、测量和评估技术、考虑UI的方法,并根据用户模型、系统图像、设计师模型、结构模型、功能模型等设定目标。
设计UI所需的技能与设计后端是完全不同的,因此不要指望不先学习就能做出好的UI。然而,这两种活动的共同之处是设计过程。我相信只要花点时间学习,任何能设计好软件的人都有能力设计好UI。
我建议你选一门人机交互的课程,比如在MIT和耶鲁的网站上找一些在线资料:
麻省理工学院用户界面设计与实现课程
结构模型和功能模型的理解和使用
Thorsten79之前的一篇出色的文章提出了软件开发专家和用户之间的话题,以及他们对软件的理解是如何不同的。人类学习专家区分了功能思维模式和结构思维模式。找到去朋友家的路是两者区别的一个很好的例子:
First approach includes a set of detailed instructions: take the first exit of the motorway, then after 100 yards turn left etc. This is an example of functional model: list of concrete steps necessary to achieve a certain goal. Functional models are easy to use, they do not require much thinking just a straight forward execution. Obviously there is a penalty for the simplicity: it might not be the most efficient route and any any exceptional situation (i.e. a traffic diversion) can easilly lead to a complete failure. A different way to cope with the task is to build a structural mental model. In our example that would be a map that conveyes a lot of information about the internal structure of the "task object". From understanding the map and relative locations of our and friend's house we can deduct the functional model (the route). Obviously it's requires more effort, but much more reliable way of completing the task in spite of the possible deviations.
通过UI传递功能模型或结构模型(例如,向导模式还是高级模式)之间的选择并不像Thorsten79的帖子中看起来那样简单。高级和频繁的用户可能更喜欢结构模型,而偶尔或缺乏经验的用户-功能。
谷歌地图就是一个很好的例子:它们包括功能和结构模型,许多卫星导航也是如此。
问题的另一个方面是,通过UI呈现的结构模型不能映射到软件的结构,而应该自然地映射到手头的用户任务或涉及的任务对象的结构。
这里的困难在于,许多开发人员对他们的软件内部有一个良好的结构模型,但只有软件旨在协助的用户任务的功能模型。要构建好的UI,你需要理解任务/任务对象结构,并将UI映射到该结构。
无论如何,我仍然强烈建议参加一个正式的HCI课程。这涉及到很多东西,比如启发式,源自格式塔心理学的原则,人类的学习方式等等。
我知道微软和他们自己的指导方针不太一致,但我发现阅读他们的Windows设计指导方针真的对我有帮助。我的网站上有一份,向下滚动一下Vista用户体验指南。它在颜色、间距、布局等方面帮助了我。
设计和美学之间有着巨大的差异,它们经常被混淆。
一个漂亮的UI需要艺术或至少是美学技能,包括我自己在内的许多人都无法做到这一点。不幸的是,就像我们在许多重量级的基于flash的api中看到的那样,这是不够的,并且不能使UI可用。
制作可用的ui需要理解人类如何与计算机交互、心理学中的一些问题(例如,菲特定律、希克定律)和其他主题。很少有计算机科学课程为此进行培训。我认识的开发人员中很少有人会选择用户测试书籍而不是JUnit书籍等等。
我们中的许多人也是“核心程序员”,倾向于将ui视为外观,而不是可以成就或破坏项目成功的因素。
此外,大多数UI开发经验都非常令人沮丧。我们可以使用像旧VB那样的玩具GUI构建器,并不得不处理丑陋的胶水代码,或者我们使用无休止地让我们沮丧的api,比如试图在Swing中整理布局。