Language & Communication & Dialogue
大约 15 分钟
Language & Communication & Dialogue
Interface Hall of Shame
- 提出充分和可理解的信息
- 提供 "真正的 "选择(用于解决问题)
- 避免含糊不清或自相矛盾的情况
- 节省用户的时间和精力
Talking to Machines
Coding language: 计算机和普通机器的根本区别在于,计算机可以通过语言来接近
Programming languages come in a variety of levels:
- 低层次:机器码、汇编等
- 高级别的:Java, Python, Ruby等
- 编译器将 语言 X 翻译成 语言 Y(例如,objective-c 到 Swift)
- 程序 到 另一个程序(原定义:高层到机器语言)
- 编程规范
- 将图形 转化为 程序(即可视化编程)
- 程序/规范 到 硬件
FORTRAN的诞生
John Backus 开发了 Speedcoding:一种解释性语言,在 IBM 701上运行时比手写的汇编慢20倍。
- Backus的目标:将高级语言翻译成汇编语言
- 很多人认为这是不可能的:Backus 之前在其他项目中都失败过
- 1954-7年标志着FORTRAN I项目
- 到 1958 年:> 50% 的软件都在 FORTRAN 中
- 开发时间从几周缩短到几小时
Sample Code in FORTRAN
你从来没有学过FORTRAN,但你可以理解它!
program addNumbers
! This simple program adds two numbers
implicit none
! Type declarations
real :: a, b, result
! Executable statements
a = 12.0
b = 15.0
result = a + b
print *, 'The total is ', result
end program addNumbers
解释与预先编撰
尽管速度较慢,但 Speedcoding 和后来的 FORTRAN 如何在 1950 年代后期占据大部分软件编程?以牺牲系统资源为代价,注重使用的便利性。
- Just in time compilation:(常规)解释器一次只翻译一个程序语句
- Ahead of time compilation:将整个程序一次性翻译成机器代码
- 许多现代编程语言融合了两种方法(例如,Java)
解释(及时编译)和(提前)编译的优点和缺点?
- Cross platform
- Compiling time
- Execution efficiency「执行效率」
Compiler Architecture
汇编的两个阶段:
- 分析阶段:将源程序分解为多个部分以构建中间表示
- Lexical Analysis
- Syntax Analysis
- Semantic Analysis
- 综合阶段:从中间表示生成目标程序
- Intermediate Code Generator
- Code Optimizer
- Code Generator
编码语言 - 缺点
编码语言曾经是计算机的唯一界面。今天,编程语言会成为一个好的用户界面吗?
Dialogue Design
Example
- System presents an output observed by the user who performs a task「系统呈现出一个由执行任务的用户观察到的输出」
- User articulates an input that makes the system perform「用户阐述一个输入,使系统执行。」
What
对话是两方或多方之间的对话,通常是合作的。
- In user interfaces
- 指的是互动的 逻辑/结构「logic/structure」
- 句法层面的人机 "对话"
- Levels
- Lexical「词汇」:图标的形状、实际按下的键、字符
- Syntactic「句法」:输入和输出的顺序(击键、点击)
- Semantic「语义」:对内部应用/数据的影响,击键的意义,点击的意义
Why
「Dialog notations」对话符号帮助我们
- 分析系统
- 将词汇和语义分开
在系统建立之前:对话符号「Dialog notations」帮助我们理解提议的设计(即快速原型制作)
与客户/利益相关者讨论你的系统
- 将想法转化为代码
- Systematic testing「系统性测试」
- 1000% 的 生产力提高
- Formalism saves time「形式主义节省了时间」
Prototyping
How
人机对话「dialogues」是非常受限制的「constrained」。一些人与人之间的对话也是非常受限制的(例如,法律、财务)。
我们如何描述对话(“符号”)?
- State Transition Networks (STN)
- State diagrams (UML)
- Flow charts
- Petri nets
- JSD diagrams (Jackson Structured Design Diagrams)
- Formal Grammars
- Production Rules
状态转换网络(STN)
Formal descriptions to analyze
- Inconsistency「不连贯性」
- Reversibility「可逆性」
- Completeness「完整性」
- Potential errors「潜在的错误」
State Transition Networks (STNs) 「状态转换网络(STNs)」
- Circles: States
- Arcs: Actions/Events
Hierarchical STNs
- 只是一个STN在另一个STN里面
- Named sub-dialogs「命名的子对话框」
- 对管理复杂的对话至关重要
Hierarchical STNs
- Circles: States
- Arcs: Actions/Events
- Rectangles: sub-STN
STN - Concurrent Dialogues
- Several things happen simultaneously「有几件事同时发生」
- 示例:用于文本格式的简单对话框
- Put STNs together
- 谨防组合爆炸「Beware of combinatorial explosion」
STN - Design of Escapes
- Web中的'返回',Escape/Cancel键
- 到处都有类似的行为
- End up with spaghetti of identical behaviors!
- How do we show this?
- 使用分层菜单:每个子菜单的“正常”退出加上
- 分离逃生弧在子菜单中“无处不在”
STN - Design of Help Menus
- 各地的菜单结构几乎相同。
- 回到对话中的同一点可以在 STN 上指定,但非常混乱。Usually best added at a ‘meta’ level.
State Diagram (UML)
Flow charts
Nature Language Processing
信息处理模式
- 人类作为信息处理机器
- 现在的计算机通过多种感官渠道与我们交流
Implications
- 提出的信息量:虽然大量的信息通过我们的五种感官进入,但我们可以在同一时间内专注于少量的信息。
- 需要如何重复介绍:在感觉输入和长期记忆之间建立联系
- 现在,许多大公司(如谷歌)使用定量方法(如眼睛注视数据)来研究GUI设计
Mismatch Between User and System Models
执行的鸿沟
- 用户的意图和允许的行动之间的不匹配
- "我如何使用该系统?"
评价的鸿沟
- 用户的期望和系统的表述之间的差异
- "当前的系统状态是什么?"
响应时间
- 系统处理输入和呈现输出的时间
- 异常长的响应时间可能会导致
- 用户挫败感
- 错误输入
- 效率较低(这与引入GUI的目标相矛盾)