About Face 3 – Part I Understanding Goal-Directed Design

Introduction

“About Face 3″(以下简称AF3)主要关注于交互设计(Interaction Design)。

术语“交互设计”最早出现于19世纪80年代中期。当时负责设计第一台笔记本电脑GRiD Compass的两位工业设计师Bill Moggridge、Bill Verplank首先使用了这个术语。但是直到10年后,甚至可以说到了AF的第二版于2003年出版后,这个词才成为广泛使用。

一个比交互设计应用更泛滥的词是用户体验(User Experience)。AF3中认为用户体验设计可以被划分为三部分:

  1. 内容(Content):内容如何结构,如何组织。这部分由信息架构(Information Architecture)负责。
  2. 形式(Form):由工业设计和视觉设计负责。
  3. 行为(Behavior):由交互设计负责。

按:这三部分同样符合“结构-表现-行为”这一模式。所以它们和Web技术之间有着同样的结构。

AF3认为一个好的产品团队需要四个部分的协作:设计、工程、市场、管理。其中设计决定产品的形式和行为;工程负责开发;市场面向客户;管理负责协调。

按:AF3整体的一个问题是:对设计有一种“报复式的强调”。AF3介绍的方法包含两大部分,主体部分是设计本身的原则、模式等等;但除此之外还涵盖了传统软工中的需求和分析。AF3的立论点是,设计和用户的目标密不可分,所以设计师必须极深地介入需求分析,甚至说由设计师来完成需求分析。从上面的团队组成和职责也可以看出,实际上这是一个由设计师主导的团队。

AF3提供一系列交互设计需要的:原则(Principle)、模式(Pattern)、过程(Process)。交互设计的质量依赖于语境(Context),即用户是谁、他们要做什么、他们的动机是什么。大而无当的原则可以让设计更简单,但不能让设计更好。

———————————

Chapter 1 Goal-Directed Design

工业设计师Victor Papanek定义设计为:“the conscious and intuitive effort to impose meaningful order”。

AF3认为面向人(human-oriented)的设计活动包括:

  1. 理解用户的愿望、需要、动机、语境
  2. 理解商业、技术和领域中的机会、需求和限制
  3. 使用以上知识构造满足以下要求的产品:其内容、形式、行为是有用的、可用的以及符合预期的,同时它在经济上是有利的,在技术也是可行的。

按:注意此处设计含义的泛化,内容已经成为设计的一部分。

糟糕设计的主要原因:

  1. 忽视用户;
  2. 满足需求和实现功能发生冲突(特别是开发人员同时负责设计的情况);
  3. 缺乏理解用户需求的过程(让用户参与设计流程不能解决问题,因为领域知识不等于设计知识)。

交互设计需要基于对用户的理解以及认知原则。因此目前广泛使用的面向任务(task)的开发过程达不成好的设计:理解用户的任务有助于对系统进行细分,但是不能帮助设计师理解用户为什么使用这个系统——即用户的目标。设计师的工作不仅仅是理解用户的任务,他们还需要辨识出最重要的用户,进而决定他们的目标是什么,以及为什么有这个目标。

按:再一次注意设计师只能的泛化

AF3提出了“面向目标的设计过程(Goal-Directed Design Process)”,以下简称GDD。GDD方法首先专注于研究用户实际如何使用产品,进而把研究结果转化为设计方案。

GDD强调设计对产品的重要性。它认为设计既要辨识用户需求,又要关注产品的细节——换言之,设计即是产品定义。因此GDD要求设计师深度介入需求分析工作,理解用户的目标,并通过一系列系统化方法,通过使用模型,把需求转化为最终的设计。

GDDP方法包含六个主要步骤:

  1. 研究:通过定性的研究辨识出行为模式(behavior pattern)
  2. 建模:利用行为模式创建领域模型(domain model),以及角色模型(personas)——也即用户模型。前者主要包含流程信息,后者是具备不同动机、目标的用户组。
  3. 需求定义:联系角色与流程,生成语境场景(context scenario)——用故事板的形式描述用户如何使用产品。同时商业目标、品牌属性、技术限制也需要构建场景时加以考虑。
  4. 框架定义:定义产品行为(behavior)、视觉设计(visual design)以及物理形态(physical form)的基本框架。对于交互设计,另有两种方法对其进行指导——原则(自底向上)以及模式(自顶向下)。
  5. 精化(refine):丰富细节,验证覆盖度,产出设计规范。
  6. 开发支持:协助开发,必要时调整设计。

成功的交互设计必须时刻关于用户的目标。

交互设计不是猜谜。(Interaction design is not guesswork.)

———————————

Chapter 2 Implementation Models and Mental Models

实现模型指系统内部实现(每秒24格画面)。心智模型指用户看待系统的方式(图像在屏幕上移动)。

按:心智模型应该是心理学的一个术语,不清楚此处的应用是否准确。

实现模型和心智模型存在鸿沟。因此需要Represented模型,即(在数字产品中)设计师选择将程序功能暴露给用户的方式。

好的Represented模型更接近的心智模型(画面加速、减速),而开发人员进行设计的缺陷在于其设计结果常常更接近实现模型(每秒格数更多更少)。

机械时代和信息时代需要不同的Represented模型。使用机械产品模型作为信息系统的隐喻,往往会限制信息系统的设计。好的设计需要信息时代的思维模式。

———————————

Chapter 3 Beginners, Experts, and Intermediates

设计的一个难题是如何在统一的设计中兼顾初学者和专家。

然而大部分用户既不是初学者也不是专家,而是中等用户(Intermediates)。实际上,大部分初学者会很快变成中等用户,但是他们永远也不会变为专家。

开发人员设计的交互往往更适合专家(比如,列出所有可能的操作,不区分操作的优先级);市场人员则需要更适合初学者的交互(方便推广)。

设计需要为中等用户进行优化,这包括三方面内容:

  1. 初学者成为中等用户的学习曲线低——想象初学者聪明并且忙碌;
  2. 希望成为专家的用户不会遭遇障碍——专家积极地寻找并学习产品可能实现他们需求的方式;
  3. 永久性的中等用户(perpetual intermediates)能对产品保持满意——中等用户会使用手册;他们会很快区分出(对他们来说的)常用功能和不常用功能;他们通常知道高级功能的存在,虽然他们可能不知道如何使用高级功能。

———————————

Chapter 4 Understanding Users: Qualitative Research

按:本章提供的其实是一种广义的用户研究方法,该方法并不限于设计

定性的用户研究用来帮助设计师理解产品的领域、语境和限制,包括:

  • 潜在用户的行为、态度、能力倾向(aptitude)
  • 产品的领域——技术、商业和环境的语境
  • Vocabulary and other social aspects of the domain in question(按:不理解
  • 已有产品的使用方式

定性研究需要回答的问题包括:

  • 产品是如何介入用户生活的?
  • 用户使用产品的目的是什么?以及完成这一目的的基本步骤有哪些?
  • 哪些体验可能使用户产生兴趣?
  • 用户目前完成工作所遭遇的问题有哪些?

定性研究包含以下工作:

—–

1. Stakeholder访谈:

  • 新产品的设计需要从理解产品在商业和技术上的语境出发。
  • Stakeholder包括:大老板们;经理;开发、商务等各部门的高手。
  • 单独地访谈各个Stakeholder。
  • 可能从Stakeholder得到的重要信息包括:产品的愿景、预算和Schedule、技术限制和机会、商业目的。

2. 领域专家(Subject matter expert)访谈:

  • 需要,但是专家可能有偏见,因为:他们是专业用户;他们具备领域知识但不是设计师。
  • 对于复杂和专业化的领域来说,领域专家访谈以及让专家持续介入设计过程是必须的。

3. 客户(Customer)访谈:

  • 客户和用户不同。客户是掏钱的人。

4. 用户(User)访谈:

  • 用户是设计的聚焦之处
  • 可能从用户更得到的信息包括:
    • 现有(或类似)产品如何介入用户生活;
    • 用户完成工作需要具备的领域知识;
    • 目前产品支持以及不支持的功能;
    • 用户使用产品的目的和动机;
    • 用户心智模型(用户如何理解产品);
    • 目前产品存在什么问题和给用户带来什么挫败感;

5. 用户观察:

  • 用户访谈脱离了产品实际使用的环境。为了更好理解用户如何使用产品,可能的话需要进行用户观察以获得第一手资料。
  • 可以采用一种将沉浸式观察和访谈相结合的方法:Ethnographic Interviews——用户在使用产品的同时接受访谈。本章后半段详细介绍了如何进行一次Ethnographic Interview。

6. 文字资料分析:分析各种文字资料,包括:市场计划、市场研究、用户调研、技术规范、竞争对手研究等等。

7. 已有产品、原型以及竞品分析

—–

其他常用的用户研究方法还有:焦点小组——脱离语境的数据未必反映真实情况、基于市场的用户分析(market demographics and market segments)——理解谁愿意买不等于得到好的设计、可用性和用户测试——在有备选方法后有意义、Card sorting、Task analysis。

———————————

Chapter 5 Modeling Users: Personas and Goals

角色模型(Personas)是作为研究结果的行为模式、心智模型以及用户目标的形式化。角色模型可以帮助设计师对用户分类,确定不同用户的需求,进而确定目标用户的类型——包含所有可能特性的产品,不能取悦任何人(a product with every possible feature pleases nobody)。

角色模型可以帮助设计师避免产品设计中一些常见的问题:

  • 弹性(elastic)用户:每个设计师都对用户需求有不同的理解。最终用户需求成为所有人需求的并集;
  • 主观设计:设计师按自己的目标、动机、心智模型来设计产品;
  • 边缘情况:关注那些可能发生但不是目标用户需求的情况。

角色模型的一些基本要点:

  • 基于用户研究结果;
  • 每个用户模型被描述为一个人,但代表一组用户;
  • 包含一组行为;
  • 具备自身的动机;
  • 除用户外,也可能是客户(customer personas)或者被服务者(served personas)——例如医疗设备的病人。

与传统软工方法中的用户角色(Role)相比,角色模型(personas)更关注用户的目标,更倾向用描述性的话语来表达自身。Personas可能是多个具有同样行为和目标的Role;也可能是对具有不同目标的同一Role的细分。

按:我在原书上标注了这段话,但现在看意义有限。因为书中并没有定义Role获取方法,所以没法精确说明Personas和Role的区别。

当不能通过研究获得严格的角色模型时,也可以使用靠猜想获得的临时角色模型(Provisional Personas)。但使用临时角色模型具有以下风险:

  • 关注于错误的设计目标;
  • 即使关注了正确的目标,也可能错失重要的行为;
  • 难以容易说服不认同你观点的人;
  • 错误的使用,可能导致他人不认同角色模型。

目标(Goals)对于角色模型至关重要。目标是用户行为的动机,其必须由研究数据中获得。每个目标需要能够用一句简单的句子来描述。

Norman提出了三个层次的认知加工(Cognitive Processing):

  • 本能的(Visceral):及时的,在进一步交互之前,在视觉或其他感觉方面的反应;
  • 行为的(Behavioral):简单的,日常的行为——这是人类最主要的活动;
  • 反射的(Reflection):基于以前的经验,有意识的行为;

基于以上三个层次的认知,存在三种类型的用户目标(User Goals):

  • 体验目标(Experience Goal):
    • 与本能认知相关——用户想感受什么;
    • 用户希望在使用产品时希望获得的感受。这类目标关注于,视听特征、交互感受(动画的流畅度、按钮“硬度”)、物理设计;
    • 交互、视觉、工业设计师需要将这类目标转化为具备恰当感觉、情绪、音调的形式、行为、手势等;
    • 面向本能的设计意味着在深入使用之前,对产品的第一感觉进行设计。
  • 最终目标(End Goal):
    • 与行为认知相关——用户想做什么;
    • 用户使用产品完成功能的动机。这类目标关注于,产品交互设计、信息架构、功能方面的工业设计;
    • 交互设计师需要以最终目标为基础设计产品的行为、任务、外观、感受;
    • 面向行为的设计使产品的行为符合用户的行为、隐含假设以及心智模型。
  • 生活目标(Life Goal):
    • 与反射认知相关——用户想成为谁;
    • 用户长期的期望、动机以及自我实现愿景。这类目标关注于,产品的总体设计、策略以及品牌;
    • 交互设计师需要将生活目标转化为high-level的系统能力、设计概念以及品牌策略。生活目标很少直接指导具体细节的设计,但是这类目标必须时刻保持在脑海里;
    • 面向反射的设计使产品与用户建立长期的联系。

除了用户目标外,设计还需关注客户目标(Customer goals)、商业与组织的目标(Business and organization goals)、技术目标(Technical goals)。

“好的设计”只有在用户为了某种目标使用产品时才有意义。成功的产品首先满足用户目标。

构造角色模型的步骤:

  1. 从访谈中辨识行为变量(behavioral variables),最常见的行为变量包括:
    • 活动(Activities):用户做什么,以及频率和数量
    • 态度(Attitudes):用户对产品领域和技术的看法如何
    • 能力倾向(Aptitudes):用户的教育程度、受过何种训练、学习能力如何
    • 动机(Motivations):用户为什么对产品领域感兴趣
    • 技能(Skills):用户在产品领域技术方面的能力
  2. 通过访谈对象与行为标量进行映射,将访谈对象分组
  3. 通过分组辨识行为模式(behavior pattern),作为角色模型的基础
  4. 综合特征与目标:针对每个行为模式,参考访谈细节给出:
    • 角色模型潜在的使用环境、典型使用场景、现有解决方案及其不足。
    • 角色模型需要一个有意义的名字,以及一些简单的人物描述。
    • 目标是角色模型定义中最重要的工作,其中最终目标(end goals)对设计用处最大。
    • 一般来讲,一个角色模型会包含0-2个体验目标、3-5个最终目标、0-1个生活目标。
  5. 检查完备与冗余
  6. 扩展角色属性和行为的描述:描述应该是对角色模型日常生活的结论性概括,但不构成一个Short Story
  7. 指定角色的类型:
    • 首要(Primary)角色:产品的每个界面对应一个首要角色;当没有唯一清晰的首要角色时,意味着:要么产品需存在多个首要角色,需要为每个首要角色进行单独设计;要么产品想做的事情太多了。
    • 次要(Secondary)角色:次要角色的大部分需求可以被为首要角色设计的界面满足,但是他们还包含一些额外的,可以在不扰乱首要角色功能的情况下,被满足的需求。当存在多余3-4个次要角色时,可能意味着产品的边界不明。
    • 补充(Supplemental)角色:潜在的,或者源于Stakeholder假设的角色。
    • 客户(Customer)角色
    • 被服务(Served)角色:不直接使用产品,但被产品直接影响的角色——例如医疗设备产品的病人。
    • 无关(Negative)角色

在用户建模阶段,除角色模型外,还可以获得一些辅助的模型:

  • 工作流(Workflow)模型:可能是角色模型级别的个人工作流,也可能是商业、组织级别的协同工作流。
  • 制品(Artifact)模型:用户完成工作需要用到的或者产出的制品。
  • 物理(Physical)模型:用户活动的物理环境。简单的物理环境可以直接在角色模型中说明,复杂的则需要单独的物理模型。

———————————

Chapter 6 The Foundations of Design: Scenarios and Requirements

在GDD方法中,从定性的研究数据到设计解决方案,通过四个不断迭代的步骤来完成:

  1. 通过研究数据以及角色模型,想象用户交互的场景(Scenario)
  2. 利用场景定义需求(Requirement)
  3. 利用需求定义基本的交互框架(Interaction Framework)
  4. 不断丰富框架的设计细节

场景(Scenario)作为设计中的概念最早由John Carroll在90年代提出。Carroll的基于场景的设计(Scenario-based Design)方法中,场景以故事的形式描述用户如何完成工作——类似于电影中的故事板,进而用于创建和演示设计方案。

AF3中的GDD方法与Carroll方法的不同之处在于:在场景获取之前,角色模型,特别是用户的目标已经明确;而场景的获取依赖于之前步骤生成的角色模型(Personas-based Scenario)。

GDD方法中定义了三类场景:

  • 语境场景(Context Scenario),或曰“日常生活场景(Day-in-the-life Scenario)”:先于任何设计,只涉及活动、感觉、愿望。
  • 关键路径产场景(Key Path Scenario):由语境场景精化得到,关注于最重要的交互,以及用户如何使用产品实现其目标(goal)。
  • 验证场景(Validation Scenario)

场景和用例(Use cases)的不同在于:用例更加技术化,更具体地描述用户的每个操作以及系统的响应。用例的问题在于,一来用例没有详细定义系统(在设计层面上)的行为;二来用例没有优先级,因此更适合用来验证系统功能的完备。

需求(Requirement)定义产品是什么以及产品做什么。设计定义产品如何做。需求先于设计。需求不是功能(function)或者特性(feature),而是用户或者公司业务的需要(need)。

按:大白话,这也是我为什么说AF3的Part I与其说是设计方法,不如说是需求方法。

需求定义的步骤:

  1. 建立问题和愿景描述:
    • 问题描述(Problem statements)反映了需要改变的现状,例如:公司X的客户满意度很低,因为用户没有适当的工具完成任务X、Y、Z以帮助他们实现目标G;
    • 愿景描述(Vision statements)是问题描述的反面,例如:新设计的产品X可以使用户可以更好(精确、有效等等)地完成任务X、Y、Z,并解决现有的问题A、B、C,进而帮助用户完成目标G。新设计将会显著提高用户的满意度。
  2. 头脑风暴:对于产品的头脑风暴,目的是排除一些在研究阶段产生的思维定势。
  3. 辨识角色期望(Personas expectations):
    针对每个首要和次要角色,需要辨识:

    • 一些影响用户期望的因素,例如:态度、经验、社会身份、文化等等
    • 对于使用产品体验的期望
    • 对产品行为的期望
    • 角色认为产品应该包含的基本元素以及数据
  4. 构建语境场景:
    • 语境场景很像故事,其关注于用户活动、动机以及心智模型;
    • 语境场景high-level地从用户的视角展示了产品使用模式(Usage pattern);
    • 语境场景不关注产品和交互的细节;
    • 语境场景不应该被已有产品所局限,假设任何想法都可以神奇地实现(Pretend the interfa is magic)。
    • 按:大概是全书精化所在之一,书中的例子很有说明性,限于篇幅不再引用。
  5. 辨识需求:
    需求由对象、行为和语境组成。 例如:在一个预约条目中(语境)直接给某人(对象)打电话(行为)。按:GDD强调这个需求应该是一个need,而不是task或feature。但仅以上面例子,我感到其中的差异很微妙。此外,这里的结构很像从场景中发现用例,再从用例中辨识名词(类)和动词(方法)的方法。需求可以被进一步划分为:

    • 数据需求:需要被展示在系统中的对象和信息;
    • 功能需求:在对象上执行的操作;
    • 其他需求:其他一些需要,特别是限制。例如:商业需求、品牌体验需求、技术需求、客户和合作伙伴需求。

———————————

Chapter 7 From Requirements to Design: The Framework and Refinement

设计框架(Design Framework)定义了用户体验的整体结构。在此阶段不必考虑细节,只需要产生产品的Big Picture。纸面原型(Paper Prototype)可以作为本阶段讨论用的有效工具。设计框架包含三部分:

  • 交互框架:使用场景和需求创建产品界面和行为的骨架
  • 视觉设计框架
  • 工业设计框架

定义交互框架的步骤:

  1. 定义产品形态(Web, Phone或者其他什么)、使用姿态、输入方式——这些定义依赖于需求定义中获取的语境场景
  2. 定义功能(functional)以及数据(data)元素:
    • 定义时需要经常回顾场景、角色目标和心智模型;
    • 将系统想象为一个“人”,有利于实现结构化的交互细节;
    • 基于场景的设计方法是一种top-down不断细化的方法,而已有最佳实践的设计原则(Principle)和模式(Pattern)是对top-down方法一个补充;
    • 除非非常明确的理由,不应该破坏已有的最佳实践。
  3. 确定功能的分组和层次:需要考虑角色的工作流程以及某个任务的相关任务
  4. 交互框架骨架(Sketch):
    • 主要任务是画线框图
    • 尝试多种布局
    • 迭代
    • 一开始建议使用白板直接绘图,当细节完善到一定程度后再使用CAD工具(Firework、Illustrator、Visio、PPT、OmniGraffle)
  5. 构造关键路径场景(Key Path Scenarios):
    • 关注任务(task)级别
    • 角色的目标(goal)必须在考虑范围内
    • 使用故事板(storybroading)描述关键路径场景
  6. 步骤3-5可能存在一些变体,例如:
    • 从功能出发的变体:先辨识关键路径,再分组,再创建骨架
    • 从视觉出发的变体:先分组+骨架;再关键路径,回头检查分组是否和关键路径切合
    • 按:我觉得显然应该从功能出发,因为这更不容易出现错误…… 当然可能是思维定势
  7. 使用验证场景(Validation Scenarios)检查设计:
    • 设计能否满足关键路径场景的变体
    • 设计能否满足一些不频繁发生但必要的场景(Necessary use scenarios):不频繁意味着不需要诸如快捷键、用户定制等功能
    • 设计能否满足边缘场景(Edge case use scenarios):边缘场景不应该被忽视,但是针对其的设计不应该影响其他场景

按:后面两部分没有很认真的看。

定义视觉设计框架的步骤:

  1. 开发视觉语言(Visual Language Studies):需要考虑角色的体验目标、产品品牌关键词、以及公司品牌
  2. 将视觉风格应用到原型

定义工业设计框架的步骤:

  1. 与交互设计师合作定义产品形态和输入方式
  2. 开发粗略原型
  3. 开发形式语言(Form Language Studies)

学好编程,报复社会

功能:通过Amazon Cloud Reader,获得已购买书籍的原文。

步骤:

  1. 访问 https://read.amazon.com/
  2. 右键想获得原文的书,选择Download & Pin
  3. 等待下载结束,书上出现绿色别针
  4. 点击进入阅读
  5. 打开链接(失效了,参见下面的源代码)。把其中文本复制到Amazon Reader的地址栏中
    (Safari下过;但在Chrome下测试出现诡异的错误。如果Chrome没效果,可以按F12进入Console Tab,把“javascript:”后面的部分粘贴到命令行中)
  6. 等一会儿,然后Ctrl-A & Ctrl-C
  7. 回馈社会

原理:Kindle Reader用了localStorage database来存储Pin到本地书籍,这些数据库中的内容除了被lz压缩外,没有特殊处理,所以只要把数据取出来解压缩即可。

不足:不能获得图片(图片也是被放进database的,实现起来不难,只是我懒得改了);文本是带html标签的,直接贴到支持html标签的编辑器中可能会出问题。

下载:没绕之前的源代码(原链接失效了,新的放在 gist 里,可能也用不了,参见 comment 或者自己调试)

书抄:不同寻常的童年

这种偷窃当然可以用悲惨和饥饿来解释,但我认为,我后来在共产主义政权下的经历使我相信,其原因要比这深刻得多。当一个犯罪的政权瓦解了法律的准则,当罪行受到鼓励,当一些高踞于法律至上的人企图剥夺他人的尊严和基本权利,人们的道德就会深深受到影响。犯罪的政权知道这一点,试图通过恐怖来维持合乎道德的行为,因为如果没有合乎道德的行为,就没有任何一个社会——甚至被这类强权统治的社会——能够正常运行。但是事实表明,一旦人们失去了道德行为的动机。恐怖也收效甚微。

杀害我们的凶手从别人那里偷走了手提箱,我又从凶手那里偷走了,我为我的行为感到骄傲,一点也没有感觉到我的骄傲是多么有失尊严。

以后的岁月,我逐渐意识到很少有比失去的荣誉、受损的道德更难恢复的了,也许这就是我为什么在共产党政权期间要拼命地维护这些东西的原因。

一个建立在不诚实基础上的社会,一个将罪行看成正常行为的一部分而予以容忍的社会,即使这只是在一小部分特殊阶层之间,而同时这个社会又剥夺另一些人(无论这些人多么少)的荣誉,甚至生存的权利,这样的社会注定要道德败坏,最终彻底崩溃。

……

死亡伴随着恐惧。我知道自己被一种无情的力量、一种为所欲为的力量所支配。我知道自己随时可能被迁移,被带到一去不返的地方。我知道随时都可能有一个穿着灰绿色制服、帽子上缀着人头骨的人出现在我面前,揍我或杀掉我。

成年人可以接受恐惧,屈服于它,或者躲避它。但孩子对此没有真正的选择。孩子只能拼命地抓住他成长的世界里一个盲目的信仰,也就是说,一个童话世界,在这个世界里,善的力量在与邪恶力量永不停息的战斗中获得胜利;女巫被打败,恶龙被斩首。在集中营的语境下谈论童话世界似乎显得悖谬,但不仅仅是我和我的同龄人逃进那个世界,跟我们一样无能为力的成年人也这样做。成人的世界,就像我们的世界,也被分裂成善与恶之间的原始斗争。在这场斗争中,我们的生命是完全被决定的,它发生在远处某个地方,超出我们的能力所及。尽管如此,我还是记得十分清楚,几乎所有人都相信,善终将取胜而战争很快就会结束。这个信念帮助他们支撑自己,在羞辱、焦虑、疾病和饥饿中幸存下来。

这个世界当然不是一个童话世界,尤其是在那个年代和那些地方,对我周围的大多数人来说,那个支撑的信念被证明是空泛的。可是,我却活了下来;我活着看到了战争的结束。对我而言,善的力量,主要体现在苏联红军身上,的确是胜利了。就像许多战争中的幸存者一样,很长时间后我才完全明白,常常不是善与恶之间的力量在战斗,而仅仅是两个不同的恶,在为了控制世界而相互争斗。

—— 伊凡·克里玛

(《地下——东欧萨米亚特随笔》,伊凡·克里玛 等著,景凯旋 等译,花城出版社,2010年)

为什么不在一起

2002年1月,17岁。紫光电影院——那时它还是神路街上的一座独立建筑物。墙壁在海格的敲击下伸伸缩缩地展开,巫师世界透过对角巷呈现在眼前。他是卖萌的小孩,她是头发乱糟糟的女生。那还是不清场的循环放映。于是坐在那足足看了两遍。第一次领略到电影造梦的含义。

2003年年初,大学的第一个假期,18岁。第二天要去住院,地点是东四工人文化宫。一年过去了,他们都没什么变化。这部里有系列中最帅的里德尔,以及还不知道自己未来要上位的金妮。那是一个多雪的冬季,手术连续几天都是真正的暴雪。

2003年秋天,经过非典开始颓废的大二,19岁。地坛书市,很不懂地买了盗版《凤凰社》——造成若干年后又重新买正版。大概是那之前的暑假,我读了一到四,并从那时起成了坚定的“哈赫”。早在秋张出现前,她就亲了他。第五部魔法部的预言厅里,面对食死徒,那么多同伴中,他第一个拉上的也是她。

2004年的某一天,不在记忆中,该是大二大三的交界,20岁。也许是海淀剧院里,和未来的老婆。那是电影版里最阴暗最凌乱的一部。她帮助他,他救了她。这一部里我喜欢的Richard Harris去世了,邓布利多换成了一点风度都没有的Michael Gambon,但年轻将近20岁的后者坚持到了最后。

2005年10月18日,大四上半,21岁。中关村图书大厦买到《混血王子》。宿舍熄灯后就着45甲4层走廊尽头的灯一口气看到12点多。金妮忽然出落成了人见人爱的万人迷。罗琳阿姨翻云覆雨,半本书都是校园青春多角恋。我觉得他们是为了平衡剧情而被硬生生拆散的,即使魁地奇胜利后接吻的桥段写得很好。

2005年11月23日,也许还是在海淀剧院,和未来的老婆。金妮的演员没有换——她真是赚到了。《火焰杯》是小说系列里最完满的一部。电影砍掉了很多支线。她最后也没有机会做“她从未做过的事情”。但面对龙的时候,他们还是拥抱了。另外麻瓜已经不能阻止Helena了。

2006年圣诞前夜,研究生第一年,22岁。罗琳阿姨放出了deathly hallows的名字。

2007年7月19号,23岁,坚持了一年的月度旅行正好停止在这个月。晚上最后两页流传出来。他们有了各自的孩子。“阿不思·西弗勒斯,你的名字来自两位霍格沃茨校长。其中一位就出自斯莱特林,而他或许是我所认识的最勇敢的人了。”

2007年7月27号,就着百度贴吧里的网友翻译,算是读完了英文版。罗恩走后,他们单独待了那么久,墓地那一段暧昧到无以复加。但他最后居然说,“她像是我的姐姐。…… 她对我也是同样的感情”——为什么要撒谎?

2007年8月,混迹于豆瓣。望京星美,和未来老婆,以及同事。昏金老师以专业幼教的耐心良好地组织了大家的行动。那是系列中第一次有3D——虽然只有最后10来分钟。

2009年暑假,三年级结束,四舍五入地三张了。将近两年时间,我快把他们遗忘了。因为当时网上对imax屏幕的争论,特意和未来老婆跑到石景山万达去看3D imax。我不知道这部黑乎乎的电影和《阿兹卡班》究竟哪一部更烂一些。也许还是这部连邓布利多葬礼都欠奉的流水账更烂一些吧。

2010年11月,26岁的老头子,学校里已经没什么认识的人了。不记得是美嘉还是华星的imax,和老婆。他成了一个脖子和脸一样宽的挫男,但所有人都说她越来越好看了。导演满足了对他们的一切幻想,除了结局。

2011年8月4号,27岁了,等着毕业。三里屯美嘉,和老婆。斯内普的眼里没有惊悚地涌出白色的记忆,纳威从分院帽里抽出格兰芬多的宝剑。于是终于到了一切的终结。那里是满脸胡子茬的他,旁边有不用化妆的大婶;还有灰色风衣的她,伴着啤酒肚谢顶的男人。

你们送别着各自的孩子。

是呀,你们不在一起。

六月七月读书笔记

六月被我不靠谱的拖过去了…… 七月航班频繁,但陷在一部《荒野侦探》里,加上枕边一直读不完的“永久性问题”、“苏格拉底到萨特”。总之就是这两个月读完的书中烂书居多。


Watchmen》,Alan Moore / Dave Gibbons,DC Publisher,1986-1987年连载。

Watchmen是一个非常复杂的故事。它的主线是对传统美式英雄漫画的颠覆——传统中的疯子拯救了世界。但Watchmen并不是简单的反讽,作者用了三个支线来丰富故事的含义,分别是:1. 黑船传奇,讲述由善意引发的恶,作为缩微版的主线故事;2. 罗夏的故事,讲述由恶意引发的善,作为主线的反面;3. 曼哈顿的故事,讲述超越者对善恶的观察,从一个功利主义的角度对善恶进行了消解。

所以Watchmen具有更大的野心,它企图彻底破坏传统英雄漫画中善恶对立的二元结构。阅读Watchmen、体味其中那些善恶暧昧不明的人物,意味着今后当我们面对英雄漫画时,将永远在心中保有一种怀疑主义乃至虚无主义的态度。而且,那很可能就是真实的现状。

如果没有时间读漫画,看那个3个半小时剪辑版的电影也不错。

“Looked at sky through smoke heavy with human fat and GOD was not there. The cold, suffocating dark goes on forever, and WE ARE ALONE.”


1911年中国大革命》,马勇著,社会科学文献出版社,2011年。

今年适逢其时,出了不少讲辛亥革命的书。全书读下来,作者主要表达了两个意思:一是改革和革命是此消彼长的关系,开始时求稳定的大多数一定倾向改革多余革命的。此时的革命更像是逼迫掌权者改革的一种手段。只有当人们对改革完全失望后,才会真心诉诸于革命;二来,作者对辛亥革命发生后,南北双方表达的克制表示了很高的敬意。毕竟在那样一个各为其主、剑拔弩张的环境下,能化干戈为玉帛,避免一场全国性的内战,这表现了时人极大的智慧。只是可惜后面的历史再不是他们所能预料的了。

如果你仔细看一看这两个要点,你会发现作者虽然言说的是历史,但关怀的是当下。

“予亦何忍因一姓之尊荣,拂兆民之好恶?用是外观大势,内审舆情,特率皇帝将统治权公诸全国,定为立宪共和国体。近慰海内厌乱望治之心,远协古圣天下为公之义。…… 总期人民安堵,海宇乂安,仍合满蒙汉回藏五族完全领土为一大中华民国,予与皇帝得以退处宽闲,优游岁月,长受国民之优礼,亲见郅治之告成,岂不懿欤?”

读张謇拟的这篇清帝退位诏,再想想他在1915辞呈里的:

“就职时之设计已穷,日在官署画诺纸尾,所从事者,簿书期会之无聊,府吏胥役所可了。国民实业前途,茫无方向。”

又或者1926年,那句:

“吁嗟吴与越,动受四面牵。幸哉一隅地,假息得苟全。太平在何时?今年待明年。呜乎覆巢之下无完卵,野老洒泪江风前。”

这其中又是着怎样的悲哀呀。


蝇王(Lord of the Flies)》,威廉·戈尔丁(William Golding),1954年著。龚志成译,上海译文出版社,2006年。

西方文明的古希望起源认为:人本身具备兽性;恶是兽性的一种表现,是欲望、激情战胜理智的结果。

《蝇王》可以被看作基于观点的一次关于人类兽性的思想实验。最终作者给出了一个极为悲观的结论,失去习俗、法律的约束,人向动物的退化是极速的。

但这部作品没能更进一步。因为文学、哲学在人的兽性这一主题上其实已经言尽了。它们竭尽全力,明言或暗喻,使得这个命题下早已结束了“一切还未被命名,尚需指指点点”的阶段。到这样一种地步,如果作为整体的人类还不能束缚住自身的恶,但那已经不是源于无知,而是明知故犯了。

这也许就是为什么,在作品写就的52年后读《蝇王》,我不会觉得它是多么的了不起。

“海螺已不复存在了,此时成了一堆无数白色的碎片。”


燃烧的原野(El llano en llamas)》,胡安·鲁尔福(Juan Rulfo),1953年著。张伟劼译,译林出版社,2010年。

鉴于作者的声望,以及文字力有未逮的事实。我只能把这一切归咎于译者了。

我能隐约发现文字在努力地达到某种诗意,但是就这个译本而言,它完全没有达到。

这真让我失望。

“当时正是玉米等待收割的时节,干枯的玉米杆子被刮过平原的大风压弯了腰。所以看着大火在原野上翻滚,实在是壮丽的景象。”


《络新妇之理(絡新婦の理)()》,京極夏彦,1996年著。王华懋译,上海人民出版社,2009年。

读完《魍魉之匣》后,我是疯狂地欢喜上了京极夏彦。可惜此后,先是《狂骨之梦》把眼睛看流血了,接着《铁鼠之槛》也无惊喜,最后一本淡淡的《巷说百物语》,算是彻底解了我“京极夏彦”的毒。

这部《络新妇之理》是09年第一时间买的,结果拖到今年6月份才性起,找出来读。读之前看了评论,有人说是魍魉之外最好的一部,所以我多少抱了些希望。可惜最后还是没让我惊喜。

话说回来,现在让我说魍魉到底比络新妇具体好在哪里,我也未必说得清。大概是,前者虽然也是多条事件线索的串联,但每个人物的动机都很简单明确,所以整体感觉很圆满;相反,络新妇最后是为了要收网,强行让真凶在每件事上都有动机,但这难度反而高于魍魉,于是事情讲不到那么圆满,就多少让人觉得穿凿附会了。

“与其对峙的,是一名染成樱色的女子。”


重力小丑(重力ピエロ)》, 伊坂幸太郎,2003年著。星野空译,当代世界出版社,2009年。

读过两本伊坂幸太郎,这本和《死神的精确度》都是很平淡无奇。

就这本书而言,失败之处是人物关系复杂,但是人物很少。结果基本上一个萝卜一个坑,读者稍加排列组合大概也就知道谜底大概是什么样了。

平凡得不能再平凡的一本书。


浅薄:互联网如何毒化了我们的大脑(The Shallows: What the Internet Is Doing to Our Brains)》,尼古拉斯·卡尔(Nicholas G. Carr),2010年著。刘纯毅译,中信出版社,2010年。

严格意义上,我觉得认为人类作为整体处理不好深阅读和浅浏览关系的担忧是可笑的。作者看到的问题,很多人都看到了。发现问题的人们会改变自己的行为方式,规避或者解决问题。

就我个人而言,我从不觉得碎片化的互联网和书籍是对立的关系。这种对立实际上是把形式上的革命(纸媒到比特)误解为内容上的革命(书籍到短文)。相反,我个人认为互联网是书籍的最佳索引形式,是发现书籍的最佳渠道。所以两者不是对立而是互补的关系。

作者认为互联网和书籍对立,认为互联网会消灭书籍,一个核心理由是:互联网在生理上改变了人类,使人类无法再从事深阅读。但如果这是这部书的关键点,那么本着科学态度,针对这一核心命题需要做完整的论证。书中旁证侧引几篇paper的做法,完全不能以理服人。


士兵的重负(The Things They Carried)》,蒂姆·奥布莱恩(Tim O’Brien),1990年著。刘应诚 / 丁建新译,上海译文出版社,2010年。

很多人都说好。亲历越战战场的作者在用一种平静超脱的文字进行回顾。故事的叙事者非常冷静,冷静地描绘战场细节以及同排士兵的(怪诞?苦中作乐?玩世不恭?)行径。这的确会让我们好奇并尝试去理解那些士兵的状态。

但是说实话,不知是不是题材的问题,我只读了不到一半……

“一路上,我驶过那些名称熟悉的城镇,穿越松林,在草原上奔驰。接着,我到了越南,成为一名士兵,然后,又回到家乡。我幸运地活了下来,但是,这并不是一个令人高兴的结局。我是一个懦夫,我参加了那场战争。”


兔子强尼(ジョニー・ザ・ラビット)》,東山彰良,2008年著。星野空译,上海人民出版社,2011年。

无力的幽默,生硬的黑色。简而言之,毫无价值。

“花当似樱,兔如强尼。”


海底捞你学不会》,黄铁鹰著,中信出版社,2011年。

第一次看管理营销成功书,眼睛流血了。

人类已经无法战胜海底捞了。


书抄:有权者和无权者

每一代人都喜欢把自己的经历看成是独特的,把自己的成就和灾难看成是划时代的和史无前例的,这就妨碍了他们对其成就和失败的真正范围和意义进行评估。

…… 如果相信几百年来决定人类行为的力量已经被驯化了,就因为我们(至少是部分地)已经确定了它们是什么,并且给它们命了名,那就太天真幼稚了。

…… 但后来这些机构就开始表现得像所有被赋予了权力的人一样:他们开始为自己篡夺权力,伤害那些权力所自的人们。…… 它们不再被支配:它们支配。不同于早期的篡权者,这些权力机构没有面孔,没有正身。对于任何打骂都无动于衷。它们的权力也许更少炫耀,更少公开宣扬,但它却无处不在,不断增强。那些代表权力的人也许会出头露面,也许会隐身幕后,但就这些人而言,重要的是,他们可以随时被免职和被取代。

…… 他们立刻就明白了:这些独立的反抗者干扰了恐惧者的和谐。因此,权力者将竭尽全力,使用它们所拥有的一切手段,企图让反抗者回到他们认为反抗者应属的地方:由恐惧统治的虚无世界。

当胡斯站在康斯坦斯议会面前时,他们没有试图说服他,或跟他辩论;他们只是简单地,一次又一次地要求他放弃自己的主张。当他被捆绑在火刑架柱上时,他们仍然给了他最后一次机会。这些拒绝讨论这件事或拒绝听取任何事实证据的人提供这个机会,是因为他们想挽救一个无名神学家的性命吗?完全不是:他们只知道,一个放弃了真理、向恐惧屈服的胡斯,一个谦卑地重返他们权力王国的胡斯,将再也不会对他们形成什么威胁。一个不这样的胡斯,无论是活着,还是被烧死,都会继续对他们的世界、对他们残酷的统治形成挑战。这就是迄今所发生的一切,它仍然在持续。

一个处于其内心需要,敢于直面权力者,甘冒一切风险的人,只拥有一个小小的希望:通过他的行动,他将提醒那些当权的人,权力来自何处,权力的起源是什么,他们的职业是什么,也许他会使他们变得多一些人性。然而,对那些当权的人来说,对那些屈服于权力者的人来说,这样的一个目标好像是愚蠢透顶。

可是,对无权者来说,我们的希望就隐藏在那些傻瓜的行为里面。

—— 伊凡·克里玛,1980年1月

(《地下——东欧萨米亚特随笔》,伊凡·克里玛 等著,景凯旋 等译,花城出版社,2010年)

当我们嘲笑UML的时候,我们应该嘲笑什么

按:上周偶尔谈起UML,想到自己UML、UP(统一过程)的知识有5-6年没更新了,干脆趁没忘光都吐出来。吐槽文,达意第一,术语使用不严谨。

——————————————————-

为了嘲笑UML,我们必须追溯UML的初衷,于是我们必须了解现实世界和软件世界之间天然的隔阂。虽然人们对软件已经习以为常,但是软件的构造并不像其他物理工具的制造那样透明。对软件一无所知的人来说,“编程”一词或多或少包含了“魔法”的成分。

如果对软件的内在机制有所了解,就可以更容易地表达软件与现实之间的鸿沟——即,描述现实世界的自然语言和描述软件世界的机器语言之间的失配(mismatch)。现实世界的需求不能轻易地被机器语言表达,这是鸿沟所在,或者更专业地说,是软件构造复杂度的来源。

一直以来,计算机行业用两种方法降低这种复杂度。第一种方法是对机器语言进行封装——通过引入高级语言、面向对象等概念,使编程语言可以更直接地描述现实世界。

(题外话,这是为什么从数(美)学上看编程语言越来越dirty。因为虽然Lisp很美——美到某本书某页最下方巴掌大的Lisp代码包含了计算的本质,但这种美却不能帮助Lisp更好地描述dirty的现实世界。)

但因为任何编程语言本质上都和图灵机等价,所以编程语言与现实世界的接近程度是有极限的。现存的编程语言依然难以直接描述复杂的现实。

于是计算机行业用第二个办法来弥合现实与软件的隔阂,这就是建模(modelling)——通过建模将现实世界抽象为模型,使现实世界更加清晰精确;编程语言不再直接描述现实世界,而是描述现实世界的模型。

“建模”包含两部分内容:首先是行为(“建”),即如何构造模型的方法;其次是结果(“模”),即作为方法制品的模型。

UML模型是一种用于构造软件的模型,是现实世界和软件世界的有效中介物。UML模型被用来描述现实世界的结构,并保证描述结果和软件结构天然近似。

但UML不是一种建模方法,UML没有定义将现实世界转化为UML模型的建模方法。实际上,使用UML模型的建模方法被称为“Unified Software Development Process(统一软件开发过程,缩写为UP)”。

UP的官方定义语是“用例驱动,以架构为中心,迭代增量的开发过程”。UP以模型为中介,降低软件开发的复杂度,帮助人们更容易地将现实世界的需求转化为软件。UML模型仅仅是UP的制品,而且仅仅是制品中的重要部分。一个未必恰当的比喻:UP是催动UML招式的内功心法。

遗憾的是现实中UP被丢弃、被遗忘、被不为人知。于是产生了各式各样对UML的误用:

– 比如,以为UML用例图就是用例;以为画小人圈圈就描述了需求。实际上,UP中首先要用文档附以领域模型和业务模型描述需求。每个用例都是从需求中抽取,并且是包含参与者、前置条件、后置保证、主要事件流、扩展事件流的完整文字描述。用例图仅仅用来追溯索引用例的图示。

– 比如,以为UML只包含类图;以为类图是银弹;以为使用UML就是画一张事无巨细的类图。其实UP中包含构造系统类图的完整流程方法,这包括:首先抽象现实世界的概念关系构造领域模型类图。而后以用例为中介精化领域类图,从用例中抽取包含新辨识概念关系的分析类图。而分析类图又会在后面的过程中被精化为设计类图,直到被用来指导具体实现。

– 比如,因为各种误用,以为软件开发的复杂性是UML造成的,以为摆脱UML就摆脱了软件开发的复杂性。实际上,软件开发天然复杂。摆脱UML不意味着人们可以用编程语言直接描述(具备一定复杂度的)最终系统。相反人们还是会以“土法炼钢”的方式构造自己的中介物。

此处我也无意为UP布道。不过我想说当我们像上面那样使用UML并造成混乱的时候,我们不应该嘲笑UML,UML应该嘲笑我们,因为我们才是混乱的根源。

当我们嘲笑UML的时候,我们到底应该嘲笑什么?

UML或曰UP的最大问题在于:它们认为模型是解决一切问题的银弹。

实际上以建模来弥平现实与软件的鸿沟,需要经历两个步骤:首先是对现实进行抽象,将现实转化为一种更精确更易理解的模型;第二步则是将模型“具象”到软件世界,即用编程语言实现获得的模型。其中的第一个步骤中,模型作为最终制品很重要;但第二个步骤必须落实到编程语言对软件实现上。

UP没有认清这一点,所以UP没有定义出模型使用的边界,没有给出在抽象过程结束后抛弃模型的时机,也因此没有将注意力集中到编程语言对软件的实现上。相反UP要求对模型不断精化,要求模型不断接近最终的软件。

这导致UML或者更广义建模研究的终极理想成为:通过精化的模型直接生成运行软件,或者更直白地说企图用模型替代编程语言。

然而无论直观感觉,还是多年的研究结果都表明:在企图精确描述软件世界时,模型并不比编程语言更优越——即,在深入到一定细节后,表达等量的内容,模型和编程语言同样复杂(如果前者不是更复杂的话)。

所以以模型替代编程语言的所有努力看上去是注定会失败的。UML是所有这些徒劳无功的形象代言人。

因此,我想,只有当我们看到那些事无巨细的类图、极端精确的时序图,看到那些双向转换模型的纷繁规则,看到那些神似编程语言的“建模语言”时,我们才可以去嘲笑UML。

因为这些多少代表了UML/UP以为自负可以达到,但其实不可能达到的境地。