<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>技术改变世界 创新驱动中国 - 《程序员》官网</title>
	<atom:link href="http://www.programmer.com.cn/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.programmer.com.cn</link>
	<description></description>
	<lastBuildDate>Thu, 17 May 2012 10:21:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>程序员的创新修炼</title>
		<link>http://www.programmer.com.cn/11788/</link>
		<comments>http://www.programmer.com.cn/11788/#comments</comments>
		<pubDate>Thu, 17 May 2012 10:16:21 +0000</pubDate>
		<dc:creator>baiyuzhong</dc:creator>
				<category><![CDATA[管理]]></category>

		<guid isPermaLink="false">http://www.programmer.com.cn/?p=11788</guid>
		<description><![CDATA[文 / 许正华 以系统的方法来理解创新思维的基本方面有助于了解持续创新的内在规律。本文作者根据多年的工作体验和思考，展现出了一个循序渐进的创新思考模型，并结合实例进行了深入的阐释和分析。 关于创新 对程序员来说，“创新”是一个永恒的话题。它给世人的感觉是既简单又玄妙。说它简单是因为创新似乎不需要严格的外在条件，说它玄妙是因为我们很难说清楚创新产生的过程，所有的创新几乎都是不可复制的。 【实例分析】前几天听到同事在抱怨没有足够的硬件资源做伸缩性测试，经过进一步询问，我了解到：产品中有一个部分需要多任务（进程）执行；任务进程原本是由C++实现的，为了调用第三方Java SDK远程访问WebService，每个进程都加载了一个Java虚拟机。经过测试发现使用了此SDK的JVM占用了大量的系统资源，最终大大降低了系统的可伸缩性。面对同样的场景，人们的反应会有很大的差异：有些人会抱怨几声了事；有些人会设法寻找更为强大的机器；还有人会尝试从软件架构的角度改变现状。例如，把通过Java SDK远程访问WebService的逻辑封装为本地代理服务，它可以将相关业务逻辑的重用从组件级提升为应用级（如图1所示）。没错！这就是创新。本文将放弃任何对结果的讨论，因为创新不应以成败论英雄。 如果说这些微创新不但是每个程序员都可以做、而且必须要做的工作，那么我们是否已经准备好了呢？这方面的系统论述向来是比较少的，水平思维理论的缔造者和倡导者德·波诺教授在《比知识还多》一书中提出了一系列可用于提升思维创造力的工具（例如，通过随机输入突破现有思维模式、挑战概念、跳出主要观点、定义问题和剔除错误等）是这当中杰出的代表。在我看来这些工具并不是独立的，它们相互影响、共同发挥作用。接下来就走近它们，以探其真面目。 批判性思维 批判性思维是创新过程最显著的特征（也就是剔除错误），就让我们先从它开始吧。 在程序员江湖闯荡久了，就会深知创新的艰辛。不求一鸣惊人、但求独善其身是程序员队伍中一种比较具有代表性的思潮。我们真正能做到独善其身吗？试想如果现有代码的可维护性很差，任何人都很难在有限的时间内写出高质量代码，最终很可能落得个同流合污。 有时我们也会一不小心走到另一个极端：如果留意，我们总能在公司的茶水间里听到员工关于公司缺乏产品创新的恶评。批评是有益的，但我们更需要批评过后的冷静思考和实际行动。创新无疑需要批判性思维，但前提是我们能将“批判”与“批判性思维”区别开：批判的目的只是为了达到对某个事物的否定；而批判性思维则是通过否定来寻找更好的做事方法。单纯的批判是消极的；而批判性思维则要积极得多。 问题的定义 批判性思维是建立在问题定义基础上的，因为“没有问题就无所谓批判”。 什么是问题 什么是问题？期望与现实的落差就是问题。现实是容易觉察的，但界定外界期望就难得多了。人们倾向于把外界的输入作为建立合理预期的唯一标准，而不是独立形成自身对预期的认识。例如，开发人员总乐于将测试人员在缺陷描述中记录的期望行为和结果作为实际的用户需求，并据此来修改代码。 【实例分析】某产品中定义了“策略”的概念，并提供了相应的编辑界面。在策略编辑界面（如图2所示）中，允许用户对原有策略进行保存或另存为一个新策略。测试人员曾经报过一个用户体验方面的缺陷：用户在选择“另存为”功能时，很可能会遇到系统提示的失败报告，原因只是忘记了修改策略名称。 我们可以顺着测试人员的思路将问题定义为“如何让用户避免令人沮丧的失败报告”。进一步思考，不难发现策略编辑界面还有其他问题， 比如，用户原本希望创建一个新策略，却错误地点击了“保存”按钮。因此，也可以将问题定义为“如何通过合理的功能布局，避免不能预期的用户行为”。最后，我们决定提供一个“策略拷贝”的新功能，并将“另存为”按钮从策略编辑界面中移除。 在定义问题时，我们需要注意以下几点。 一个现象可能隐藏着多个问题。 区分核心问题与非核心问题；可以存在多个核心问题。 问题可以在不同抽象层次上定义（从用户体验的角度来看，可分为表现层、框架层、结构层、范围层和战略层）。 随着被灌输信息的增多，人们所受到的来自外界的影响和约束不断增强。一个人对现实的接受程度越高，问题形成的难度就越大。 外界是不完美的 对于软件研发团队，定义问题的能力直接影响其需求分析的质量，进而最终决定了产品的质量。一般认为软件工程师参与到需求分析与产品设计的机会并不是很多，他们接收来自用户或者产品经理的需求规格，并且努力把功能列表转变为可以运行的程序。不幸的是，现实中软件生产过程要复杂得多：在开始阶段，写下来的需求只是冰山一角；未写下来的需求才是沉浸在水下的巨大冰块；即使写下来的、被用户所确认的需求规格也不能确保最终一定能够让用户满意。 《用户故事与敏捷方法》在论述用户故事与需求规格、用例等传统需求分析工具的区别时，特别强调用户故事的目的不是记录客户与开发团队之间的协议或契约，而是充当着用户具体需求对话的占位符。 因此，我们不能把产品经理的输入等同于用户需求。在现实中，开发团队总是容易认为项目早期形成的用户故事就是对用户需求的描述，因此大部分人都放弃了对问题进行深入且持续的思考。敏捷实际上是想告诉我们：外界是不完美的，所有相关人员（产品经理、开发者、测试者、用户、文档编写者等）只有通过不断的沟通才能加深对用户需求以及产品策略的理解，并在讨论的过程中达成一致。如果我们不能在这个方面放弃传统的惯性思维，我甚至怀疑所谓的敏捷是否还具有生命力。 外界的不完美导致我们必须关注自身定义问题能力的培养。首先，通过独立的思考形成自己对一个事物的预期，而不是唯命是从；其次，通过各种可能的手段来确认这个预期是否合理，并进行必要的修正；最后，对比现实与预期形成对问题的认识。当这种思维模式成为你的一个思考习惯时，问题就会不断地从脑海中涌现出来。 概念的建立 建立概念模型的意义 合理预期是建立在合理的概念模型基础上的。只有明确了概念，才知道未来的路该往哪里走，才知道什么时候需要坚持原则、什么时候需要像现实妥协。只有建立起概念模型，你才有可能进一步思考现实与存在于你脑海中的概念是否一致。 每一个软件设计问题的背后都隐藏着一个或简单或复杂的概念系统。很多时候，软件工程师并没有意识与能力去主动地发掘这些概念，这是导致软件设计不确定性的重要原因之一。因此，对概念的驾驭能力就成为软件架构师最为倚重的基本能力之一。 忽视概念的历史根源 对概念的忽视有其深刻的历史原因，如下所述。 炒作概念。不知从什么时候开始，“概念”常常与一个动词相关联，它就是“炒作”。一个新产品往往借助炒作热门概念来提升自身的价值，“概念”渐渐变成了假、大、空的代名词。这与概念本身的功能完全背道而驰——概念原本是为了让一个或一类事物能够更准确地被大众以一致的方式所理解。说句公道话：“之所以盛行炒作概念之风，不是因为今天概念太多了，恰恰是因为现如今人们缺乏对概念的理解。”这一切大概发生在过去的十年里（十年前的我大约刚刚完成学业、步入社会）。 只摸石头不过河。我们不妨把时间推得再久远一些：在我念书的年代里，对概念的深入研究变成了教条与迂腐的代名词，因为对很多人来说概念意味着陈旧，意味着一成不变。概念确实表现出一定程度的稳定性，这种稳定性源于其抽象的本质。但我们切不能将这种稳定性绝对化。概念同样也会像这个世界上的绝大多数物质一样，随着时间的流逝发生变化。这种可变性源于其主观的本质。没错！概念并不是像人们想象的那样客观。人们只是试图通过自身的努力将自己对概念的理解无限趋近于客观。 “实践是检验真理的唯一标准”—这是几乎每一个中国人都熟知的一句话。我从不怀疑其合理性，但放在上述社会环境中，难免容易让人迷失：既然是“检验”，我们就应该首先澄清待检验对象。换句话说，我们应先形成对真理的假说，然后不断地用实践结果增加其可信程度，亦或反之。现实中，人们渐渐丧失了事先形成对真理认知的耐心，这种不耐烦也许是源于人们对于可能出现的自我否定的恐惧，这直接导致实践最终仅仅成为一些人收集数据的工具。 我曾与一些软件研发人员讨论有关软件性能测试的问题。我发现他们并不能清楚地说出某个测试的目的。当我进一步询问测试结果能否帮助我们得出一些结论时，他们就变得含糊其辞。在我看来：单纯为收集数据而进行的测试是毫无意义的，这就好比只惦记摸石头而忘了过河才应是原本的目的。 缺少点科学精神。曾经的诺贝尔奖得主杨振宁在对比中华文化与近代科学时，有如下精彩总结：中国传统    文化所追求的“理”与近代科学所追求的“自然规律”方向上一致。但它们在求“理”的方法上是不同的。传统中国文化主要依赖归纳法求理，这里面没有逻辑与推演；而近代科学除了使用归纳法以外，更依赖演绎法。 显然，对于建立复杂的科学体系而言，演绎法更高效。这就不难解释：为什么自然科学在近现代中国更多是以舶来品的形象出现？演绎法需要逻辑，而逻辑建立在概念的基础之上。如果缺少这方面的先天基因，那么就更需要后天努力了。 乐观精神 没有精神层面的支持，创新是无从谈起的，因为创新实在是一项艰巨的工作：概念的建立不是一蹴而就的，需要反复的推敲、对比、自我否定；问题的定义更是自我意识游走在理想与现实之间，尝试各种问题边界的可能，不断地进行权衡；人生贵在坚持批判性思维，而不沦落于简单的批评与抱怨。所有这些行动都是很困难的，因为它们会产生巨大的认知摩擦。由此可见，对于一个致力于创新的程序员，能够建立并保持一个积极的人生态度才是最值得庆幸的事情。 当我请求同事们进行自我评价时，大多数人都会为自己打上乐观的标签，因为他们把乐观与快乐、自我满足等概念混为一谈。一般人通过努力可以让自己维持一个相对快乐的心境，但要做到乐观就很难了。快乐是一中状态，而乐观是一种态度；快乐是相对短暂的，而乐观是相对持久的；快乐既可以源自内心，也可能是源自环境，而乐观是一定是由内而外的。 创新思考模型 我们可以将创新模型简单地归纳为以下四个核心要素。 创新需要挑战现状，即批判性思维（要素）。 批判性思维需要准确的问题定义（要素）。 问题的定义有赖于概念系统的建立（要素）。 在初始阶段，概念模型的正确与否是次要的，更为重要的是要有一个概念模型，然后这个概念模型可以随着认识的深入而不断演化。谁在幕后推动认识的发展？答案还是批判性思维。批判性思维有助于我们修正原有概念的不足或创建全新的概念，在思维的各个阶段都需要乐观的人生态度的支持（要素）。 回到开篇的实例中，让我们看看这些要素是如何发挥作用的：我们不能接受过高的资源占用这个事实，即使是在硬件变得越来越廉价的今天，滥用系统资源永远是值得我们去批判的。问题的关键在于我们如何将依赖于第三方SDK的业务逻辑（Java）从任务中物理地剥离出来。我们曾经探讨彻底消除对第三方SDK依赖的可能性，后来发现其成本太高。组件级重用与应用级重用是在建立对问题定义的过程中很重要的两个概念，典型的应用范例是微软将二进制组建模型从COM升级为COM+。SOA是另一个发挥重要影响的概念,我们将业务逻辑封装为本地服务代理，并以标准的方式暴露其接口（WebService）。 结束语 以系统的方法来理解创新思维的基本方面有助于我们了解持续创新的内在规律。上述分析结合了我近几年的工作体验与思考，并试图展现出一个循序渐进的创新思考模型。创新思维之复杂原本不是我所能涉及一二的，但最终还是决定把目前的认识提出来，作为大家进一步讨论的起点。 关于本文的论战 周爱民： 作者意在讨论方法论本身，而非某一具体的方法。从这一点来看，作者的逻辑是：创新需要批判，批判需要问题，问题需要概念模型；概念是从对认识的持续批判中得出、修正与进化的。那么在这一逻辑中，所谓“创新”不过是一个具体方法的结果，甚至是对具体结果的修饰而己。作者对方法论的讨论未能最终落足于“如何‘认识’一个系统”，而是趋向于迎合读者口味地去强调“创新”，这是本文的一大弊处。但文章总体的可读性、系统性仍是可供读者品评的。 许正华： 对于周爱民老师给出的点评意见我基本上同意，除了关于迎合读者口味地去强调“创新”的评价，至少它不是我的本意。我想讨论的是创新思考的方法本身，而不是创新的结果。现实中人们更关注于结果，而忽视了创新性思考其实只是若干可以被训练的思维方法中的一种。创新本身并不神奇—就像人们在谈论所有天才那样，如果我们也能够看到他们艰辛的成长道路与所使用的先进训练方法，就不难理解“其实天才也是可以培养的”。 [...]]]></description>
			<content:encoded><![CDATA[<div>
<p><span style="color: #000000;"><strong>文 / 许正华</strong></span></p>
<p><span style="color: #808080;"><strong>以系统的方法来理解创新思维的基本方面有助于了解持续创新的内在规律。本文作者根据多年的工作体验和思考，展现出了一个循序渐进的创新思考模型，并结合实例进行了深入的阐释和分析。</strong></span></p>
<p><span style="color: #888888;"><strong>关于创新</strong></span></p>
<p>对程序员来说，“创新”是一个永恒的话题。它给世人的感觉是既简单又玄妙。说它简单是因为创新似乎不需要严格的外在条件，说它玄妙是因为我们很难说清楚创新产生的过程，所有的创新几乎都是不可复制的。<span id="more-11788"></span></p>
<p>【实例分析】前几天听到同事在抱怨没有足够的硬件资源做伸缩性测试，经过进一步询问，我了解到：产品中有一个部分需要多任务（进程）执行；任务进程原本是由<span style="font-family: Times New Roman;">C++</span><span style="font-family: 宋体;">实现的，为了调用第三方</span><span style="font-family: Times New Roman;">Java SDK</span><span style="font-family: 宋体;">远程访问</span><span style="font-family: Times New Roman;">WebService</span><span style="font-family: 宋体;">，每个进程都加载了一个</span><span style="font-family: Times New Roman;">Java</span><span style="font-family: 宋体;">虚拟机。经过测试发现使用了此</span><span style="font-family: Times New Roman;">SDK</span><span style="font-family: 宋体;">的</span><span style="font-family: Times New Roman;">JVM</span><span style="font-family: 宋体;">占用了大量的系统资源，最终大大降低了系统的可伸缩性。面对同样的场景，人们的反应会有很大的差异：有些人会抱怨几声了事；有些人会设法寻找更为强大的机器；还有人会尝试从软件架构的角度改变现状。例如，把通过</span><span style="font-family: Times New Roman;">Java SDK</span><span style="font-family: 宋体;">远程访问</span><span style="font-family: Times New Roman;">WebService</span><span style="font-family: 宋体;">的逻辑封装为本地代理服务，它可以将相关业务逻辑的重用从组件级提升为应用级（如图</span><span style="font-family: Times New Roman;">1</span><span style="font-family: 宋体;">所示）。没错！这就是创新。本文将放弃任何对结果的讨论，因为创新不应以成败论英雄。</span></p>
<p style="text-align: center;"><img class="aligncenter  wp-image-11793" title="图1 重用架构升级" src="http://www.programmer.com.cn/wp-content/uploads/2012/05/图1-重用架构升级.jpg" alt="图1 重用架构升级" width="188" height="307" /></p>
<p>如果说这些微创新不但是每个程序员都可以做、而且必须要做的工作，那么我们是否已经准备好了呢？这方面的系统论述向来是比较少的，水平思维理论的缔造者和倡导者德·波诺教授在《比知识还多》一书中提出了一系列可用于提升思维创造力的工具（例如，通过随机输入突破现有思维模式、挑战概念、跳出主要观点、定义问题和剔除错误等）是这当中杰出的代表。在我看来这些工具并不是独立的，它们相互影响、共同发挥作用。接下来就走近它们，以探其真面目。</p>
<p><span style="color: #808080;"><strong>批判性思维</strong></span></p>
<p>批判性思维是创新过程最显著的特征（也就是剔除错误），就让我们先从它开始吧。</p>
<p>在程序员江湖闯荡久了，就会深知创新的艰辛。不求一鸣惊人、但求独善其身是程序员队伍中一种比较具有代表性的思潮。我们真正能做到独善其身吗？试想如果现有代码的可维护性很差，任何人都很难在有限的时间内写出高质量代码，最终很可能落得个同流合污。</p>
<p>有时我们也会一不小心走到另一个极端：如果留意，我们总能在公司的茶水间里听到员工关于公司缺乏产品创新的恶评。批评是有益的，但我们更需要批评过后的冷静思考和实际行动。创新无疑需要批判性思维，但前提是我们能将“批判”与“批判性思维”区别开：批判的目的只是为了达到对某个事物的否定；而批判性思维则是通过否定来寻找更好的做事方法。单纯的批判是消极的；而批判性思维则要积极得多。</p>
<p><span style="color: #808080;"><strong>问题的定义</strong></span></p>
<p>批判性思维是建立在问题定义基础上的，因为“没有问题就无所谓批判”。</p>
<p><strong>什么是问题</strong></p>
<p>什么是问题？期望与现实的落差就是问题。现实是容易觉察的，但界定外界期望就难得多了。人们倾向于把外界的输入作为建立合理预期的唯一标准，而不是独立形成自身对预期的认识。例如，开发人员总乐于将测试人员在缺陷描述中记录的期望行为和结果作为实际的用户需求，并据此来修改代码。</p>
<p>【实例分析】某产品中定义了“策略”的概念，并提供了相应的编辑界面。在策略编辑界面（如图<span style="font-family: Times New Roman;">2</span><span style="font-family: 宋体;">所示）中，允许用户对原有策略进行保存或另存为一个新策略。测试人员曾经报过一个用户体验方面的缺陷：用户在选择“另存为”功能时，很可能会遇到系统提示的失败报告，原因只是忘记了修改策略名称。</span></p>
<p><img class="aligncenter size-full wp-image-11794" title="图2  策略编辑界面" src="http://www.programmer.com.cn/wp-content/uploads/2012/05/图2-策略编辑界面.jpg" alt="图2  策略编辑界面" width="314" height="189" /></p>
<p>我们可以顺着测试人员的思路将问题定义为“如何让用户避免令人沮丧的失败报告”。进一步思考，不难发现策略编辑界面还有其他问题， 比如，用户原本希望创建一个新策略，却错误地点击了“保存”按钮。因此，也可以将问题定义为“如何通过合理的功能布局，避免不能预期的用户行为”。最后，我们决定提供一个“策略拷贝”的新功能，并将“另存为”按钮从策略编辑界面中移除。</p>
<p>在定义问题时，我们需要注意以下几点。</p>
<ul>
<li>一个现象可能隐藏着多个问题。</li>
<li>区分核心问题与非核心问题；可以存在多个核心问题。</li>
<li>问题可以在不同抽象层次上定义（从用户体验的角度来看，可分为表现层、框架层、结构层、范围层和战略层）。</li>
</ul>
<p>随着被灌输信息的增多，人们所受到的来自外界的影响和约束不断增强。一个人对现实的接受程度越高，问题形成的难度就越大。</p>
<p><strong>外界是不完美的</strong></p>
<p>对于软件研发团队，定义问题的能力直接影响其需求分析的质量，进而最终决定了产品的质量。一般认为软件工程师参与到需求分析与产品设计的机会并不是很多，他们接收来自用户或者产品经理的需求规格，并且努力把功能列表转变为可以运行的程序。不幸的是，现实中软件生产过程要复杂得多：在开始阶段，写下来的需求只是冰山一角；未写下来的需求才是沉浸在水下的巨大冰块；即使写下来的、被用户所确认的需求规格也不能确保最终一定能够让用户满意。</p>
<p>《用户故事与敏捷方法》在论述用户故事与需求规格、用例等传统需求分析工具的区别时，特别强调用户故事的目的不是记录客户与开发团队之间的协议或契约，而是充当着用户具体需求对话的占位符。</p>
<p>因此，我们不能把产品经理的输入等同于用户需求。在现实中，开发团队总是容易认为项目早期形成的用户故事就是对用户需求的描述，因此大部分人都放弃了对问题进行深入且持续的思考。敏捷实际上是想告诉我们：外界是不完美的，所有相关人员（产品经理、开发者、测试者、用户、文档编写者等）只有通过不断的沟通才能加深对用户需求以及产品策略的理解，并在讨论的过程中达成一致。如果我们不能在这个方面放弃传统的惯性思维，我甚至怀疑所谓的敏捷是否还具有生命力。</p>
<p>外界的不完美导致我们必须关注自身定义问题能力的培养。首先，通过独立的思考形成自己对一个事物的预期，而不是唯命是从；其次，通过各种可能的手段来确认这个预期是否合理，并进行必要的修正；最后，对比现实与预期形成对问题的认识。当这种思维模式成为你的一个思考习惯时，问题就会不断地从脑海中涌现出来。</p>
<p><span style="color: #808080;"><strong>概念的建立</strong></span></p>
<p><strong>建立概念模型的意义</strong></p>
<p>合理预期是建立在合理的概念模型基础上的。只有明确了概念，才知道未来的路该往哪里走，才知道什么时候需要坚持原则、什么时候需要像现实妥协。只有建立起概念模型，你才有可能进一步思考现实与存在于你脑海中的概念是否一致。</p>
<p>每一个软件设计问题的背后都隐藏着一个或简单或复杂的概念系统。很多时候，软件工程师并没有意识与能力去主动地发掘这些概念，这是导致软件设计不确定性的重要原因之一。因此，对概念的驾驭能力就成为软件架构师最为倚重的基本能力之一。</p>
<p><strong>忽视概念的历史根源</strong></p>
<p>对概念的忽视有其深刻的历史原因，如下所述。</p>
<p><strong><span style="color: #808080;">炒作概念。</span></strong>不知从什么时候开始，“概念”常常与一个动词相关联，它就是“炒作”。一个新产品往往借助炒作热门概念来提升自身的价值，“概念”渐渐变成了假、大、空的代名词。这与概念本身的功能完全背道而驰——概念原本是为了让一个或一类事物能够更准确地被大众以一致的方式所理解。说句公道话：“之所以盛行炒作概念之风，不是因为今天概念太多了，恰恰是因为现如今人们缺乏对概念的理解。”这一切大概发生在过去的十年里（十年前的我大约刚刚完成学业、步入社会）。</p>
<p><span style="color: #808080;"><strong>只摸石头不过河。</strong></span>我们不妨把时间推得再久远一些：在我念书的年代里，对概念的深入研究变成了教条与迂腐的代名词，因为对很多人来说概念意味着陈旧，意味着一成不变。概念确实表现出一定程度的稳定性，这种稳定性源于其抽象的本质。但我们切不能将这种稳定性绝对化。概念同样也会像这个世界上的绝大多数物质一样，随着时间的流逝发生变化。这种可变性源于其主观的本质。没错！概念并不是像人们想象的那样客观。人们只是试图通过自身的努力将自己对概念的理解无限趋近于客观。</p>
<p>“实践是检验真理的唯一标准”—这是几乎每一个中国人都熟知的一句话。我从不怀疑其合理性，但放在上述社会环境中，难免容易让人迷失：既然是“检验”，我们就应该首先澄清待检验对象。换句话说，我们应先形成对真理的假说，然后不断地用实践结果增加其可信程度，亦或反之。现实中，人们渐渐丧失了事先形成对真理认知的耐心，这种不耐烦也许是源于人们对于可能出现的自我否定的恐惧，这直接导致实践最终仅仅成为一些人收集数据的工具。</p>
<p>我曾与一些软件研发人员讨论有关软件性能测试的问题。我发现他们并不能清楚地说出某个测试的目的。当我进一步询问测试结果能否帮助我们得出一些结论时，他们就变得含糊其辞。在我看来：单纯为收集数据而进行的测试是毫无意义的，这就好比只惦记摸石头而忘了过河才应是原本的目的。</p>
<p><span style="color: #808080;"><strong>缺少点科学精神。</strong></span>曾经的诺贝尔奖得主杨振宁在对比中华文化与近代科学时，有如下精彩总结：中国传统    文化所追求的“理”与近代科学所追求的“自然规律”方向上一致。但它们在求“理”的方法上是不同的。传统中国文化主要依赖归纳法求理，这里面没有逻辑与推演；而近代科学除了使用归纳法以外，更依赖演绎法。</p>
<p>显然，对于建立复杂的科学体系而言，演绎法更高效。这就不难解释：为什么自然科学在近现代中国更多是以舶来品的形象出现？演绎法需要逻辑，而逻辑建立在概念的基础之上。如果缺少这方面的先天基因，那么就更需要后天努力了。</p>
<p><span style="color: #808080;"><strong>乐观精神</strong></span></p>
<p>没有精神层面的支持，创新是无从谈起的，因为创新实在是一项艰巨的工作：概念的建立不是一蹴而就的，需要反复的推敲、对比、自我否定；问题的定义更是自我意识游走在理想与现实之间，尝试各种问题边界的可能，不断地进行权衡；人生贵在坚持批判性思维，而不沦落于简单的批评与抱怨。所有这些行动都是很困难的，因为它们会产生巨大的认知摩擦。由此可见，对于一个致力于创新的程序员，能够建立并保持一个积极的人生态度才是最值得庆幸的事情。</p>
<p>当我请求同事们进行自我评价时，大多数人都会为自己打上乐观的标签，因为他们把乐观与快乐、自我满足等概念混为一谈。一般人通过努力可以让自己维持一个相对快乐的心境，但要做到乐观就很难了。快乐是一中状态，而乐观是一种态度；快乐是相对短暂的，而乐观是相对持久的；快乐既可以源自内心，也可能是源自环境，而乐观是一定是由内而外的。</p>
<p><span style="color: #808080;"><strong>创新思考模型</strong></span></p>
<p>我们可以将创新模型简单地归纳为以下四个核心要素。</p>
<ul>
<li>创新需要挑战现状，即批判性思维（要素）。</li>
<li>批判性思维需要准确的问题定义（要素）。</li>
<li>问题的定义有赖于概念系统的建立（要素）。</li>
</ul>
<p>在初始阶段，概念模型的正确与否是次要的，更为重要的是要有一个概念模型，然后这个概念模型可以随着认识的深入而不断演化。谁在幕后推动认识的发展？答案还是批判性思维。批判性思维有助于我们修正原有概念的不足或创建全新的概念，在思维的各个阶段都需要乐观的人生态度的支持（要素）。</p>
<p>回到开篇的实例中，让我们看看这些要素是如何发挥作用的：我们不能接受过高的资源占用这个事实，即使是在硬件变得越来越廉价的今天，滥用系统资源永远是值得我们去批判的。问题的关键在于我们如何将依赖于第三方<span style="font-family: Times New Roman;">SDK</span><span style="font-family: 宋体;">的业务逻辑（</span><span style="font-family: Times New Roman;">Java</span><span style="font-family: 宋体;">）从任务中物理地剥离出来。我们曾经探讨彻底消除对第三方</span><span style="font-family: Times New Roman;">SDK</span><span style="font-family: 宋体;">依赖的可能性，后来发现其成本太高。组件级重用与应用级重用是在建立对问题定义的过程中很重要的两个概念，典型的应用范例是微软将二进制组建模型从</span><span style="font-family: Times New Roman;">COM</span><span style="font-family: 宋体;">升级为</span><span style="font-family: Times New Roman;">COM+</span><span style="font-family: 宋体;">。</span><span style="font-family: Times New Roman;">SOA</span><span style="font-family: 宋体;">是另一个发挥重要影响的概念</span><span style="font-family: Times New Roman;">,</span><span style="font-family: 宋体;">我们将业务逻辑封装为本地服务代理，并以标准的方式暴露其接口（</span><span style="font-family: Times New Roman;">WebService</span><span style="font-family: 宋体;">）。</span></p>
<p><span style="color: #808080;"><strong>结束语</strong></span></p>
<p>以系统的方法来理解创新思维的基本方面有助于我们了解持续创新的内在规律。上述分析结合了我近几年的工作体验与思考，并试图展现出一个循序渐进的创新思考模型。创新思维之复杂原本不是我所能涉及一二的，但最终还是决定把目前的认识提出来，作为大家进一步讨论的起点。</p>
<p><strong><span style="color: #000000;">关于本文的论战</span></strong></p>
<p><strong><span style="color: #333333;">周爱民：</span></strong></p>
<p><span style="color: #333333;">作者意在讨论方法论本身，而非某一具体的方法。从这一点来看，作者的逻辑是：创新需要批判，批判需要问题，问题需要概念模型；概念是从对认识的持续批判中得出、修正与进化的。那么在这一逻辑中，所谓“创新”不过是一个具体方法的结果，甚至是对具体结果的修饰而己。作者对方法论的讨论未能最终落足于“如何‘认识’一个系统”，而是趋向于迎合读者口味地去强调“创新”，这是本文的一大弊处。但文章总体的可读性、系统性仍是可供读者品评的。</span></p>
<p><strong><span style="color: #333333;">许正华：</span></strong></p>
<p><span style="color: #333333;">对于周爱民老师给出的点评意见我基本上同意，除了关于迎合读者口味地去强调“创新”的评价，至少它不是我的本意。我想讨论的是创新思考的方法本身，而不是创新的结果。现实中人们更关注于结果，而忽视了创新性思考其实只是若干可以被训练的思维方法中的一种。创新本身并不神奇—就像人们在谈论所有天才那样，如果我们也能够看到他们艰辛的成长道路与所使用的先进训练方法，就不难理解“其实天才也是可以培养的”。</span></p>
<p>&nbsp;</p>
<p><span style="color: #808080;"><strong>作者许正华，目前就职于CA Technologies中国技术中心，从事数据备份和高可用企业软件方面的开发和研究，并专注于软件工程、知识工程、团队文化等领域的研究与实践。</strong></span></p>
<p>&nbsp;</p>
<p><a href="http://www.programmer.com.cn/11512/" target="_blank"><strong>本文选自《程序员》杂志2012年05期，未经允许不得转载。如需转载请联系 market@csdn.net</strong></a></p>
<p><strong><a href="http://dingyue.programmer.com.cn/" target="_blank">《程序员》2012年杂志订阅送好礼活动火热进行中</a></strong></p>
<p>&nbsp;</p>
<p><span style="color: #888888;"><strong><br />
</strong></span></p>
<p><span style="color: #888888;"><strong><br />
</strong></span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.programmer.com.cn/11788/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>请个机器人司机——自动驾驶汽车的未来</title>
		<link>http://www.programmer.com.cn/11753/</link>
		<comments>http://www.programmer.com.cn/11753/#comments</comments>
		<pubDate>Wed, 16 May 2012 10:20:46 +0000</pubDate>
		<dc:creator>baiyuzhong</dc:creator>
				<category><![CDATA[每日关注]]></category>
		<category><![CDATA[外刊]]></category>

		<guid isPermaLink="false">http://www.programmer.com.cn/?p=11753</guid>
		<description><![CDATA[2010年，《纽约时报》报道Google成立了一支自动驾驶汽车（self-driving car）车队。这消息令外界震惊不已，而新闻中的这些汽车则被惊叹为陆地人造卫星。时至今日，这些自动驾驶汽车已在车顶装上了激光头，就像装上摄像头的Street View汽车一样，在圣弗朗西斯科湾地区混了个脸熟。 Google不是第一家将无人驾驶汽车送上公路的公司，实际上，几乎每一家传统汽车制造商都在开发自己的自动驾驶车型，硅谷挤满了挑战这一新事物的研发团队。尽管各种质疑亦步亦趋地尾随着Google等制造商的理想，但在Google试图创造出能开车的计算机的同时，汽车厂商也在努力让自己的汽车开起来更像计算机。他们希望自己的自驾驶机器最终具有这样一些装备：雷达、车道保持、LIDAR激光雷达、红外摄像头、立体影像、GPS/惯性测量、车轮感应器。 驾驶员则从手动把握方向盘走向“网络驾驶”，一系列电脉冲取代方向盘与轮胎的机械联动，不再使用纸制地图，而是求助数字导航，超声波传感器让司机不再受平行泊车的困扰……随着这些技术的实现和日益强大，司机们必须进入一个新世界，曾经不可或缺的方向盘、刹车、油门都将离开他们的掌握。不过，各种担忧也会随之而来。关于自动驾驶汽车的法律前景尚未明朗，除了官方态度，还有一些深层次的法律问题。人们可能对各种问题提起诉讼，比如原本设计用来保护乘客的功能实际上没有发挥作用。不过，最麻烦的还在于社会和文化方面。我们是否要让出方向盘呢？汽车代表自由，代表个性，转动车钥匙所蕴含的自由和能力正如《兔子快跑》中所云：“在晚上，在早晨，在中午，开过草地，开向沙滩，脱掉鞋子，偎着墨西哥湾沉沉睡去。” 不管是Google还是奥迪，不管是连接了英特网还是用上了Facebook，说到自动驾驶车辆将如何改变我们的生活，还需拭目以待。 《Communications of the ACM》2012年2月文章精选，感谢译者李芳支持 本文选自《程序员》杂志2012年03期，更多精彩内容敬请关注03期杂志 《程序员》2012年杂志订阅送好礼活动火热进行中]]></description>
			<content:encoded><![CDATA[<p>2010年，《纽约时报》报道Google成立了一支自动驾驶汽车（self-driving car）车队。这消息令外界震惊不已，而新闻中的这些汽车则被惊叹为陆地人造卫星。时至今日，这些自动驾驶汽车已在车顶装上了激光头，就像装上摄像头的Street View汽车一样，在圣弗朗西斯科湾地区混了个脸熟。<span id="more-11753"></span></p>
<p>Google不是第一家将无人驾驶汽车送上公路的公司，实际上，几乎每一家传统汽车制造商都在开发自己的自动驾驶车型，硅谷挤满了挑战这一新事物的研发团队。尽管各种质疑亦步亦趋地尾随着Google等制造商的理想，但在Google试图创造出能开车的计算机的同时，汽车厂商也在努力让自己的汽车开起来更像计算机。他们希望自己的自驾驶机器最终具有这样一些装备：雷达、车道保持、LIDAR激光雷达、红外摄像头、立体影像、GPS/惯性测量、车轮感应器。</p>
<p>驾驶员则从手动把握方向盘走向“网络驾驶”，一系列电脉冲取代方向盘与轮胎的机械联动，不再使用纸制地图，而是求助数字导航，超声波传感器让司机不再受平行泊车的困扰……随着这些技术的实现和日益强大，司机们必须进入一个新世界，曾经不可或缺的方向盘、刹车、油门都将离开他们的掌握。不过，各种担忧也会随之而来。关于自动驾驶汽车的法律前景尚未明朗，除了官方态度，还有一些深层次的法律问题。人们可能对各种问题提起诉讼，比如原本设计用来保护乘客的功能实际上没有发挥作用。不过，最麻烦的还在于社会和文化方面。我们是否要让出方向盘呢？汽车代表自由，代表个性，转动车钥匙所蕴含的自由和能力正如《兔子快跑》中所云：“在晚上，在早晨，在中午，开过草地，开向沙滩，脱掉鞋子，偎着墨西哥湾沉沉睡去。”</p>
<p>不管是Google还是奥迪，不管是连接了英特网还是用上了Facebook，说到自动驾驶车辆将如何改变我们的生活，还需拭目以待。</p>
<p><strong>《Communications of the ACM》2012年2月文章精选，感谢译者<a href="http://www.weibo.com/u/1765039161">李芳</a>支持</strong></p>
<p><a href="http://www.programmer.com.cn/10430/" target="_blank"><strong>本文选自《程序员》杂志2012年03期，更多精彩内容敬请关注03期杂志</strong></a></p>
<p><strong><a href="http://dingyue.programmer.com.cn/" target="_blank">《程序员》2012年杂志订阅送好礼活动火热进行中</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmer.com.cn/11753/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Amazon云计算平台AWS推动者：Werner Vogels</title>
		<link>http://www.programmer.com.cn/11724/</link>
		<comments>http://www.programmer.com.cn/11724/#comments</comments>
		<pubDate>Wed, 16 May 2012 10:15:00 +0000</pubDate>
		<dc:creator>baiyuzhong</dc:creator>
				<category><![CDATA[IT名人堂]]></category>
		<category><![CDATA[云计算]]></category>

		<guid isPermaLink="false">http://www.programmer.com.cn/?p=11724</guid>
		<description><![CDATA[文 / 高松 Amazon云计算平台AWS（Amazon Web Services），为很多公司提供了基础云服务。 Dropbox、Instagram、Quora、Foursquare、Reddit、Heroku这些互联网新星能耀眼上升，AWS厥功至伟；它让有想法、有技术的小团队，以低价获得世界级的运营服务，负担得起用户迅速增长的压力。 既然AWS如此重要，那么不得不提及Amazon CTO Werner Vogels——AWS主架构师之一。 Werner Vogels在1958年出生于荷兰阿姆斯特丹。在接触到8位计算机Atari后，他对计算机科学的兴趣便一发不可收。Vogels早年在荷兰海牙应用科学大学读书，彼时PC尚未普及，他笑称能使用只有16位的PDP-11小型机已算幸运。 20世纪90年代初，30岁出头的Vogels来到葡萄牙里斯本，在波尔图大学系统与计算机工程研究院（INESC）任高级研究员。“那时在学术方面尚无建树”，在同事的引领下，他加入开发团队，不断完善自己的技能，发表了首项科研成果。 1994年，Vogels远赴美国，在康奈尔大学计算机系做了10年的研究工作，主要领域是具有扩展性的可信赖企业系统。在那里他首次尝试与团队合作，在非常有限的时间内构建了U-net，一个用于并行和分布计算的用户级网络接口。那次合作给Vogels留下了极为美好的印象，绘就了他日后职业走向的蓝图。 1999～2002年，Vogels在Reliable Network Solutions公司，兼任副总裁和CTO。这期间他开始写博客《All Things Distributed》，此时他已成为顶级的分布系统专家。在自己的博客里Vogels撰写了大量的分布式领域文章，以往只存在于学术讨论中的概念得到了极大的传播和普及。他还写过很多参考资料和专栏文章，关注领域也是分布式计算技术。 2003年，Vogels获得阿姆斯特丹自由大学计算机博士学位，两位导师Henri Bal教授和Andy Tanenbaum教授也鼎鼎大名，分别是著名的类Unix操作系统MINIX的作者和并行计算领域专家。 至此，我们看到领域专家知识的积累过程，他去过不同的国家，与不同文化背景的团队合作，做过最底层的技术，也做到了技术管理的高位，既在学术钻研有所造诣，又兼顾商业实现，他对自己瞄准的领域一以贯之，历久弥坚。2004年Vogels加入Amazon，任研发部门经理，2005年初被任命为CTO兼副总裁，并开始负责Amazon全球的架构设计，以及包括云计算在内的技术创新。Vogels在公司内外有着重要的地位，是除了Jeff Bezos外唯一可代表公司的对外发言人。加入Amazon后，Vogels的博客写作也开始转向，从之前主要谈论自己的研究成果，到更多地以产品为导向，介绍更普及的技术和工业理念。除此以外，转向也体现在他开始更为看重团队合作。 2008年对Vogels而言是标志性的一年，他成为AWS架构师之一。《Information Week》杂志因Vogels在云计算方面发挥的普及和推动的贡献，将年度CTO/CIO奖项颁发给他。 Vogels并不信任通用平台，即一个平台到处适用，因为每个平台都只能满足部分开发者、应用和用户需求。Vogels一直强调构建AWS工作的核心是鼓励创新，他经常与AWS上的应用开发者沟通交流，及时宣讲他们的创新成果，帮助搭建“平台上的平台”。Vogels曾在一篇论文里深刻表述了Amazon架构技术，介绍了专门为了购物车设计的存储引擎Dynamo，此篇论文获得OSDI最佳论文奖，此后这一引擎被应用在Amazon的S3上。 最新网络流量分析显示，Amazon处理了1%的互联网流量，1/3的网民每天都会访问AmazonAWS托管的网站，Amazon云计算正成长为互联网的核心组成之一。 成文之际，Werner Vogels在博客中宣布了AWS新服务Amazon CloudSearch，正如他所言：“云计算才刚开始。” &#160; 本文选自《程序员》杂志2012年05期，未经允许不得转载。如需转载请联系 market@csdn.net 《程序员》2012年杂志订阅送好礼活动火热进行中 &#160;]]></description>
			<content:encoded><![CDATA[<p><strong>文 / 高松</strong></p>
<p>Amazon<span style="font-family: 宋体;">云计算平台</span><span style="font-family: Times New Roman;">AWS</span><span style="font-family: 宋体;">（</span><span style="font-family: Times New Roman;">Amazon Web Services</span><span style="font-family: 宋体;">），为很多公司提供了基础云服务。</span></p>
<p><span style="font-family: 宋体;"><img class="alignright  wp-image-11769" title="Werner Vogels" src="http://www.programmer.com.cn/wp-content/uploads/2012/05/未命名1.jpg" alt="" width="179" height="226" /></span></p>
<p><span style="font-family: Times New Roman;">Dropbox</span><span style="font-family: 宋体;">、</span><span style="font-family: Times New Roman;">Instagram</span><span style="font-family: 宋体;">、</span><span style="font-family: Times New Roman;">Quora</span><span style="font-family: 宋体;">、</span><span style="font-family: Times New Roman;">Foursquare</span><span style="font-family: 宋体;">、</span><span style="font-family: Times New Roman;">Reddit</span><span style="font-family: 宋体;">、</span><span style="font-family: Times New Roman;">Heroku</span><span style="font-family: 宋体;">这些互联网新星能耀眼上升，</span><span style="font-family: Times New Roman;">AWS厥功至伟</span><span style="font-family: 宋体;">；它让有想法、有技术的小团队，以低价获得世界级的运营服务，负担得起用户迅速增长的压力。</span></p>
<p><span style="font-family: 宋体;">既然</span><span style="font-family: Times New Roman;">AWS</span><span style="font-family: 宋体;">如此重要，那么不得不提及</span><span style="font-family: Times New Roman;">Amazon CTO Werner Vogels——</span>AWS<span style="font-family: 宋体;">主架构师之一。</span></p>
<p>Werner Vogels<span style="font-family: 宋体;">在</span><span style="font-family: Times New Roman;">1958</span><span style="font-family: 宋体;">年出生于荷兰阿姆斯特丹。在接触到</span><span style="font-family: Times New Roman;">8</span><span style="font-family: 宋体;">位计算机</span><span style="font-family: Times New Roman;">Atari</span><span style="font-family: 宋体;">后，他对计算机科学的兴趣便一发不可收。</span><span style="font-family: Times New Roman;">Vogels</span><span style="font-family: 宋体;">早年在荷兰海牙应用科学大学读书，彼时</span><span style="font-family: Times New Roman;">PC</span><span style="font-family: 宋体;">尚未普及，他笑称能使用只有</span><span style="font-family: Times New Roman;">16</span><span style="font-family: 宋体;">位的</span><span style="font-family: Times New Roman;">PDP-11</span><span style="font-family: 宋体;">小型机已算幸运。<span id="more-11724"></span></span></p>
<p>20<span style="font-family: 宋体;">世纪</span><span style="font-family: Times New Roman;">90</span><span style="font-family: 宋体;">年代初，</span><span style="font-family: Times New Roman;">30</span><span style="font-family: 宋体;">岁出头的</span><span style="font-family: Times New Roman;">Vogels</span><span style="font-family: 宋体;">来到葡萄牙里斯本，在波尔图大学系统与计算机工程研究院（</span><span style="font-family: Times New Roman;">INESC</span><span style="font-family: 宋体;">）任高级研究员。“那时在学术方面尚无建树”，在同事的引领下，他加入开发团队，不断完善自己的技能，发表了首项科研成果。</span></p>
<p>1994<span style="font-family: 宋体;">年，</span><span style="font-family: Times New Roman;">Vogels</span><span style="font-family: 宋体;">远赴美国，在康奈尔大学计算机系做了</span><span style="font-family: Times New Roman;">10</span><span style="font-family: 宋体;">年的研究工作，主要领域是具有扩展性的可信赖企业系统。在那里他首次尝试与团队合作，在非常有限的时间内构建了</span><span style="font-family: Times New Roman;">U-net</span><span style="font-family: 宋体;">，一个用于并行和分布计算的用户级网络接口。那次合作给</span><span style="font-family: Times New Roman;">Vogels</span><span style="font-family: 宋体;">留下了极为美好的印象，绘就了他日后职业走向的蓝图。</span></p>
<p>1999<span style="font-family: 宋体;">～</span><span style="font-family: Times New Roman;">2002</span><span style="font-family: 宋体;">年，</span><span style="font-family: Times New Roman;">Vogels</span><span style="font-family: 宋体;">在</span><span style="font-family: Times New Roman;">Reliable Network Solutions</span><span style="font-family: 宋体;">公司，兼任副总裁和</span><span style="font-family: Times New Roman;">CTO</span><span style="font-family: 宋体;">。这期间他开始写博客《</span><span style="font-family: Times New Roman;">All Things Distributed</span><span style="font-family: 宋体;">》，此时他已成为顶级的分布系统专家。在自己的博客里</span><span style="font-family: Times New Roman;">Vogels</span><span style="font-family: 宋体;">撰写了大量的分布式领域文章，以往只存在于学术讨论中的概念得到了极大的传播和普及。他还写过很多参考资料和专栏文章，关注领域也是分布式计算技术。</span></p>
<p>2003<span style="font-family: 宋体;">年，</span><span style="font-family: Times New Roman;">Vogels</span><span style="font-family: 宋体;">获得阿姆斯特丹自由大学计算机博士学位，两位导师</span><span style="font-family: Times New Roman;">Henri Bal</span><span style="font-family: 宋体;">教授和</span><span style="font-family: Times New Roman;">Andy Tanenbaum</span><span style="font-family: 宋体;">教授也鼎鼎大名，分别是著名的类</span><span style="font-family: Times New Roman;">Unix</span><span style="font-family: 宋体;">操作系统</span><span style="font-family: Times New Roman;">MINIX</span><span style="font-family: 宋体;">的作者和并行计算领域专家。</span></p>
<p>至此，我们看到领域专家知识的积累过程，他去过不同的国家，与不同文化背景的团队合作，做过最底层的技术，也做到了技术管理的高位，既在学术钻研有所造诣，又兼顾商业实现，他对自己瞄准的领域一以贯之，历久弥坚。2004<span style="font-family: 宋体;">年</span><span style="font-family: Times New Roman;">Vogels</span><span style="font-family: 宋体;">加入</span><span style="font-family: Times New Roman;">Amazon</span><span style="font-family: 宋体;">，任研发部门经理，</span><span style="font-family: Times New Roman;">2005</span><span style="font-family: 宋体;">年初被任命为</span><span style="font-family: Times New Roman;">CTO</span><span style="font-family: 宋体;">兼副总裁，并开始负责</span><span style="font-family: Times New Roman;">Amazon</span><span style="font-family: 宋体;">全球的架构设计，以及包括云计算在内的技术创新。</span><span style="font-family: Times New Roman;">Vogels</span><span style="font-family: 宋体;">在公司内外有着重要的地位，是除了</span><span style="font-family: Times New Roman;">Jeff Bezos</span><span style="font-family: 宋体;">外唯一可代表公司的对外发言人。</span>加入<span style="font-family: Times New Roman;">Amazon</span><span style="font-family: 宋体;">后，</span><span style="font-family: Times New Roman;">Vogels</span><span style="font-family: 宋体;">的博客写作也开始转向，从之前主要谈论自己的研究成果，到更多地以产品为导向，介绍更普及的技术和工业理念。除此以外，转向也体现在他开始更为看重团队合作。</span></p>
<p>2008<span style="font-family: 宋体;">年对</span><span style="font-family: Times New Roman;">Vogels</span><span style="font-family: 宋体;">而言是标志性的一年，他成为</span><span style="font-family: Times New Roman;">AWS</span><span style="font-family: 宋体;">架构师之一。《</span><span style="font-family: Times New Roman;">Information Week</span><span style="font-family: 宋体;">》杂志因</span><span style="font-family: Times New Roman;">Vogels</span><span style="font-family: 宋体;">在云计算方面发挥的普及和推动的贡献，将年度</span><span style="font-family: Times New Roman;">CTO/CIO</span><span style="font-family: 宋体;">奖项颁发给他。</span></p>
<p>Vogels<span style="font-family: 宋体;">并不信任通用平台，即一个平台到处适用，因为每个平台都只能满足部分开发者、应用和用户需求。</span><span style="font-family: Times New Roman;">Vogels</span><span style="font-family: 宋体;">一直强调构建</span><span style="font-family: Times New Roman;">AWS</span><span style="font-family: 宋体;">工作的核心是鼓励创新，他经常与</span><span style="font-family: Times New Roman;">AWS</span><span style="font-family: 宋体;">上的应用开发者沟通交流，及时宣讲他们的创新成果，帮助搭建“平台上的平台”。</span>Vogels<span style="font-family: 宋体;">曾在一篇论文里深刻表述了</span><span style="font-family: Times New Roman;">Amazon</span><span style="font-family: 宋体;">架构技术，介绍了专门为了购物车设计的存储引擎</span><span style="font-family: Times New Roman;">Dynamo</span><span style="font-family: 宋体;">，此篇论文获得</span><span style="font-family: Times New Roman;">OSDI</span><span style="font-family: 宋体;">最佳论文奖，此后这一引擎被应用在</span><span style="font-family: Times New Roman;">Amazon</span><span style="font-family: 宋体;">的</span><span style="font-family: Times New Roman;">S3</span><span style="font-family: 宋体;">上。</span></p>
<p>最新网络流量分析显示，<span style="font-family: Times New Roman;">Amazon</span><span style="font-family: 宋体;">处理了</span><span style="font-family: Times New Roman;">1%</span><span style="font-family: 宋体;">的互联网流量，</span><span style="font-family: Times New Roman;">1/3</span><span style="font-family: 宋体;">的网民每天都会访问</span><span style="font-family: Times New Roman;">AmazonAWS</span><span style="font-family: 宋体;">托管的网站，</span><span style="font-family: Times New Roman;">Amazon</span><span style="font-family: 宋体;">云计算正成长为互联网的核心组成之一。</span></p>
<p>成文之际，<span style="font-family: Times New Roman;">Werner Vogels</span><span style="font-family: 宋体;">在博客中宣布了</span><span style="font-family: Times New Roman;">AWS</span><span style="font-family: 宋体;">新服务</span><span style="font-family: Times New Roman;">Amazon CloudSearch</span><span style="font-family: 宋体;">，正如他所言：“云计算才刚开始。”</span></p>
<p>&nbsp;</p>
<p><a href="http://www.programmer.com.cn/11512/" target="_blank"><strong>本文选自《程序员》杂志2012年05期，未经允许不得转载。如需转载请联系 market@csdn.net</strong></a></p>
<p><strong><a href="http://dingyue.programmer.com.cn/" target="_blank">《程序员》2012年杂志订阅送好礼活动火热进行中</a></strong></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmer.com.cn/11724/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>打造无懈可击的Web设计——流动布局和弹性布局</title>
		<link>http://www.programmer.com.cn/11732/</link>
		<comments>http://www.programmer.com.cn/11732/#comments</comments>
		<pubDate>Tue, 15 May 2012 04:27:05 +0000</pubDate>
		<dc:creator>baiyuzhong</dc:creator>
				<category><![CDATA[图书推荐]]></category>
		<category><![CDATA[书摘]]></category>

		<guid isPermaLink="false">http://www.programmer.com.cn/?p=11732</guid>
		<description><![CDATA[防弹衣并不能100%保证不受伤害，但穿了总是比不穿好。这样的规则同样适用于Web设计。通过增加网页的灵活性,以及采用必要的步骤来保证它在尽可能多的场景中都具备可读性，我们就给自己的作品赋予了一些与众不同的特色。这是一个循序渐进的过程，并且当采用HTML和CSS后，将能够更加容易构建出赏心悦目并且具有良好适应能力的设计方案。 如何创建流动布局和弹性布局，为我们无懈可击的设计方案增添一个工具。掌握如何恰当地使用它们，将给网页设计增加更多的灵活性。流动布局并不是只能由CSS实现的，它也可以通过表格来实现。文中您将会发现，把布局的细节放在样式表中实现，还有许多其他好处。弹性布局中的列使用em作为长度单位，基于em的布局会随着字体大小的变化而放大或缩小。 为什么这样设计不是无懈可击的？ 一、常见的方法 多列布局并不是只能由CSS实现，也可以使用表格同样实现能够根据浏览器窗口的大小而自由缩放的(流动)布局。以前，设计者会考虑到使用列来实现，每一列都由一系列表格单元格来构造。图中显示了一个常用的布局结构，有一个页头横跨顶部、两列内容以及一个横跨底部的页脚。 以前，我们似乎很自然地会使用表格来构建这种结构，用colspan这个特性使页头和页脚横跨于内容列的上方与下方。大致的 HTML代码如下所示： &#60;table&#62; &#60;tr&#62; &#60;td colspan=”2&#8243;&#62;header&#60;/td&#62; &#60;/tr&#62; &#60;tr&#62; &#60;td&#62;content&#60;/td&#62; &#60;td&#62;sidebar&#60;/td&#62; &#60;/tr&#62; &#60;tr&#62; &#60;td colspan=”2&#8243;&#62;footer&#60;/td&#62; &#60;/tr&#62; &#60;/table&#62; 但大多数的设计者和开发者不会就此罢休。构造好了基础结构以后，会在这个结构中的每一个单元格中再嵌入表格，为布局创建边界和像素级别精度的间距。最终，为了使构造的结构和页面的样式能够更加变化灵活，会添加很多HTML代码。 为了达到流动可变性，可将表单元格的宽度设成百分比形式，这使得布局可以完全扩展而不需要考虑浏览器窗口的大小。 &#60;table width=”100%”&#62; &#60;tr&#62; &#60;td colspan=”2&#8243;&#62;header&#60;/td&#62; &#60;/tr&#62; &#60;tr&#62; &#60;td width=”70%”&#62;content&#60;/td&#62; &#60;td width=”30%”&#62;sidebar&#60;/td&#62; &#60;/tr&#62; &#60;tr&#62; &#60;td colspan=”2&#8243;&#62;footer&#60;/td&#62; &#60;/tr&#62; &#60;/table&#62; 整个表格被设置成100%的宽度，列可以根据任意需要的宽度进行拆分。如图所示：左边是一个宽一些的内容栏，右边是一个窄一些的侧边栏。当浏览器窗口扩展或收缩而使布局的大小发生变化时，各列宽度的比例将保持不变。 这表明了表格能够用来构造布局，同时也表明了表格能够用来构造随浏览器窗口变化的流动布局。然而，还可以采用其他更完美的办法做到这一点。 二、值得思考的问题：为什么这样设计不是无懈可击的？ 表格布局最主要的问题之一，就是表示内容与外观的 HTML 代码混在一起了。换句话说，边框、空白GIF和图片所用的代码都嵌入在表示重要内容的代码中。这意味着只典型的桌面浏览器才能够顺利地阅读这样的网页。而使用屏幕阅读软件、文本浏览器或在移动设备上阅读软件时，就可能遇到困难。 1.　大量的代码 内容与外观的缠结还意味着代码量的增大。使用嵌套表格来构造布局，所需要的代码量有时候是相当惊人的。许多额外的表单元格被用来构造栏间空白、边框和其他页面视觉效果。如果使用 CSS，HTML 代码就能够减少到只保留它最本质的部分，对外观的设定可以移到样式表中。这样，网页在非传统浏览设备和浏览软件中的可读性就立刻提高了，对搜索引擎也更加友好(这是一个额外的、免费的好处)。 2.　噩梦般的维护工作 因为大量的嵌套表格造成纠缠在一起的大量代码，这只能增加维护的工作量。对于基于表格布局的网页，要改造它们的外观，需要花费更大的力气——检查大量的单元格和额外的 H T M L 代码。在这样的情形下，修改的工作量会大得令人发狂，还不如推倒重来。 3.　并非最佳的内容顺序 使用基于表格的布局还存在一个缺点，即文本浏览器和屏幕阅读器上所呈现出来的内容有顺序问题。例如，有一个三列的布局，我们知道，HTML 中的顺序总是左列、中间列，然后右列。这是操作的表格方式。 在那些基于文本的浏览器或屏幕阅读器中，通常只能按上面的这种顺序对内容进行解析。但最主要的内容往往并不放在左列，而是放在中间列，这样，它很有可能被埋没在页面代码中。使用表格构造布局时，想要安排重要的内容在其他浏览器或软件中先被读到是不可能实现的。对于所有浏览设备都只有一种顺序，迫使用户在使用文本和屏幕阅读器时，想要得到重要内容之前，就要先艰难地穿过那些无关紧要的代码。 幸运的是，基于CSS的布局允许对内容顺序进行重排，这样，可以使用 HTML ，采用最优化的顺序来编写文件的源代码，而以其他的样式进行呈现。而且，所需的代码量大大地减少了，还将内容从表示层分离出来。那么，下面让我们开始使用CSS来构建流动的多列布局吧！ 为什么这样设计是无懈可击的？ 一、无懈可击的方法： 虽然在本文的无懈可击例子中重点介绍的是如何创建灵活可变的布局，但还是应该注意到，固定宽度的基于CSS的布局也具有无宽度限制的布局的很多优点。它们的主要区别是，可变的布局能够随着浏览器窗口的大小而伸缩，能够给用户更多的掌控能力。当屏幕尺寸可能存在明显差别(例如移动设备)时，这种方法的效果更好。 我们将介绍利用CSS创建流动布局的必要步骤及其原理。现在让我们从最简单的两栏布局(具有页头和页脚) 开始创建。 1. HTML 代码结构 我们不再使用表格单元格来构造页面的列结构，而使用简单的&#60;div&#62;和其他HTML 5语 义元素将内容划分成块。还要时刻记住，要使内容有最佳的排列顺序。 一个最基本的简单两栏布局可以用如下 HTML 代码编写： &#60;div id=”wrap”&#62; &#60;header role=”banner”&#62; [...]]]></description>
			<content:encoded><![CDATA[<div>
<p style="text-align: left;">防弹衣并不能100%保证不受伤害，但穿了总是比不穿好。这样的规则同样适用于Web设计。通过增加网页的灵活性,以及采用必要的步骤来保证它在尽可能多的场景中都具备可读性，我们就给自己的作品赋予了一些与众不同的特色。这是一个循序渐进的过程，并且当采用HTML和CSS后，将能够更加容易构建出赏心悦目并且具有良好适应能力的设计方案。<span id="more-11732"></span><img class="aligncenter  wp-image-11737" title="封面" src="http://www.programmer.com.cn/wp-content/uploads/2012/05/无懈1.jpg" alt="" width="160" height="199" /></p>
<p>如何创建流动布局和弹性布局，为我们无懈可击的设计方案增添一个工具。掌握如何恰当地使用它们，将给网页设计增加更多的灵活性。流动布局并不是只能由CSS实现的，它也可以通过表格来实现。文中您将会发现，把布局的细节放在样式表中实现，还有许多其他好处。弹性布局中的列使用em作为长度单位，基于em的布局会随着字体大小的变化而放大或缩小。</p>
<p><span style="color: #808080;"><strong>为什么这样设计不是无懈可击的？</strong></span></p>
<p><strong><span style="color: #000000;">一、常见的方法</span></strong></p>
<p>多列布局并不是只能由CSS实现，也可以使用表格同样实现能够根据浏览器窗口的大小而自由缩放的(流动)布局。以前，设计者会考虑到使用列来实现，每一列都由一系列表格单元格来构造。图中显示了一个常用的布局结构，有一个页头横跨顶部、两列内容以及一个横跨底部的页脚。</p>
<div id="attachment_11738" class="wp-caption aligncenter" style="width: 260px"><img class=" wp-image-11738 " title="常会看到与此类似的一种两列的布局结构" src="http://www.programmer.com.cn/wp-content/uploads/2012/05/未命名.jpg" alt="" width="250" height="250" /><p class="wp-caption-text">常会看到与此类似的一种两列的布局结构</p></div>
<p>以前，我们似乎很自然地会使用表格来构建这种结构，用colspan这个特性使页头和页脚横跨于内容列的上方与下方。大致的 HTML代码如下所示：</p>
<blockquote><p>&lt;table&gt;</p>
<p>&lt;tr&gt;</p>
<p>&lt;td colspan=”2&#8243;&gt;header&lt;/td&gt;</p>
<p>&lt;/tr&gt;</p>
<p>&lt;tr&gt;</p>
<p>&lt;td&gt;content&lt;/td&gt;</p>
<p>&lt;td&gt;sidebar&lt;/td&gt;</p>
<p>&lt;/tr&gt;</p>
<p>&lt;tr&gt;</p>
<p>&lt;td colspan=”2&#8243;&gt;footer&lt;/td&gt;</p>
<p>&lt;/tr&gt;</p>
<p>&lt;/table&gt;</p></blockquote>
<p>但大多数的设计者和开发者不会就此罢休。构造好了基础结构以后，会在这个结构中的每一个单元格中再嵌入表格，为布局创建边界和像素级别精度的间距。最终，为了使构造的结构和页面的样式能够更加变化灵活，会添加很多HTML代码。</p>
<p>为了达到流动可变性，可将表单元格的宽度设成百分比形式，这使得布局可以完全扩展而不需要考虑浏览器窗口的大小。</p>
<blockquote><p>&lt;table width=”100%”&gt;</p>
<p>&lt;tr&gt;</p>
<p>&lt;td colspan=”2&#8243;&gt;header&lt;/td&gt;</p>
<p>&lt;/tr&gt;</p>
<p>&lt;tr&gt;</p>
<p>&lt;td width=”70%”&gt;content&lt;/td&gt;</p>
<p>&lt;td width=”30%”&gt;sidebar&lt;/td&gt;</p>
<p>&lt;/tr&gt;</p>
<p>&lt;tr&gt;</p>
<p>&lt;td colspan=”2&#8243;&gt;footer&lt;/td&gt;</p>
<p>&lt;/tr&gt;</p>
<p>&lt;/table&gt;</p></blockquote>
<p>整个表格被设置成100%的宽度，列可以根据任意需要的宽度进行拆分。如图所示：左边是一个宽一些的内容栏，右边是一个窄一些的侧边栏。当浏览器窗口扩展或收缩而使布局的大小发生变化时，各列宽度的比例将保持不变。</p>
<p>这表明了表格能够用来构造布局，同时也表明了表格能够用来构造随浏览器窗口变化的流动布局。然而，还可以采用其他更完美的办法做到这一点。</p>
<p><span style="color: #000000;"><strong>二、值得思考的问题：为什么这样设计不是无懈可击的？</strong></span></p>
<p>表格布局最主要的问题之一，就是表示内容与外观的 HTML 代码混在一起了。换句话说，边框、空白GIF和图片所用的代码都嵌入在表示重要内容的代码中。这意味着只典型的桌面浏览器才能够顺利地阅读这样的网页。而使用屏幕阅读软件、文本浏览器或在移动设备上阅读软件时，就可能遇到困难。</p>
<p>1.　大量的代码</p>
<p>内容与外观的缠结还意味着代码量的增大。使用嵌套表格来构造布局，所需要的代码量有时候是相当惊人的。许多额外的表单元格被用来构造栏间空白、边框和其他页面视觉效果。如果使用 CSS，HTML 代码就能够减少到只保留它最本质的部分，对外观的设定可以移到样式表中。这样，网页在非传统浏览设备和浏览软件中的可读性就立刻提高了，对搜索引擎也更加友好(这是一个额外的、免费的好处)。</p>
<p>2.　噩梦般的维护工作</p>
<p>因为大量的嵌套表格造成纠缠在一起的大量代码，这只能增加维护的工作量。对于基于表格布局的网页，要改造它们的外观，需要花费更大的力气——检查大量的单元格和额外的 H T M L 代码。在这样的情形下，修改的工作量会大得令人发狂，还不如推倒重来。</p>
<p>3.　并非最佳的内容顺序</p>
<p>使用基于表格的布局还存在一个缺点，即文本浏览器和屏幕阅读器上所呈现出来的内容有顺序问题。例如，有一个三列的布局，我们知道，HTML 中的顺序总是左列、中间列，然后右列。这是操作的表格方式。</p>
<div id="attachment_11739" class="wp-caption aligncenter" style="width: 325px"><img class=" wp-image-11739 " title="基于表格的内容通常的顺序是左列、中间列、右列" src="http://www.programmer.com.cn/wp-content/uploads/2012/05/2.jpg" alt="" width="315" height="199" /><p class="wp-caption-text">基于表格的内容通常的顺序是左列、中间列、右列</p></div>
<p>在那些基于文本的浏览器或屏幕阅读器中，通常只能按上面的这种顺序对内容进行解析。但最主要的内容往往并不放在左列，而是放在中间列，这样，它很有可能被埋没在页面代码中。使用表格构造布局时，想要安排重要的内容在其他浏览器或软件中先被读到是不可能实现的。对于所有浏览设备都只有一种顺序，迫使用户在使用文本和屏幕阅读器时，想要得到重要内容之前，就要先艰难地穿过那些无关紧要的代码。</p>
<p>幸运的是，基于CSS的布局允许对内容顺序进行重排，这样，可以使用 HTML ，采用最优化的顺序来编写文件的源代码，而以其他的样式进行呈现。而且，所需的代码量大大地减少了，还将内容从表示层分离出来。那么，下面让我们开始使用CSS来构建流动的多列布局吧！</p>
<p><span style="color: #808080;"><strong>为什么这样设计是无懈可击的？</strong></span></p>
<p><strong>一、无懈可击的方法：</strong></p>
<p>虽然在本文的无懈可击例子中重点介绍的是如何创建灵活可变的布局，但还是应该注意到，固定宽度的基于CSS的布局也具有无宽度限制的布局的很多优点。它们的主要区别是，可变的布局能够随着浏览器窗口的大小而伸缩，能够给用户更多的掌控能力。当屏幕尺寸可能存在明显差别(例如移动设备)时，这种方法的效果更好。</p>
<p>我们将介绍利用CSS创建流动布局的必要步骤及其原理。现在让我们从最简单的两栏布局(具有页头和页脚) 开始创建。</p>
<p>1. HTML 代码结构</p>
<p>我们不再使用表格单元格来构造页面的列结构，而使用简单的&lt;div&gt;和其他HTML 5语</p>
<p>义元素将内容划分成块。还要时刻记住，要使内容有最佳的排列顺序。</p>
<p>一个最基本的简单两栏布局可以用如下 HTML 代码编写：</p>
<blockquote><p>&lt;div id=”wrap”&gt;</p>
<p>&lt;header role=”banner”&gt;</p>
<p>&lt;h1&gt;Header Goes Here&lt;/h1&gt;</p>
<p>&lt;/header&gt;</p>
<p>&lt;div id=”content” role=”main”&gt;</p>
<p>&#8230; content goes here &#8230;</p>
<p>&lt;/div&gt;</p>
<p>&lt;div id=”sidebar” role=”complementary”&gt;</p>
<p>&#8230; sidebar goes here &#8230;</p>
<p>&lt;/div&gt;</p>
<p>&lt;footer role=”contentinfo”&gt;</p>
<p>&#8230; footer goes here &#8230;</p>
<p>&lt;/footer&gt;</p>
<p>&lt;/div&gt; &lt;!&#8211; end #wrap &#8211;&gt;</p></blockquote>
<p>代码结构就应该这样，很难再简化了。这种排序方式最为合理：页头、内容、侧栏和页脚。这是考虑了在没有CSS的情况下页面的布局。就这一点来说，到目前为止，一切都还不错。</p>
<p>我在整个布局之外增加了一个&lt;div&gt;容器。&lt;div&gt;通常可以在各种目的的设计中派上用场。所以，每当使用CSS来构建布局时，都会从&lt;div&gt; 开始。</p>
<p>2．创建栏：浮动与定位</p>
<p>用CSS创建栏的方法之一就是绝对定位(absolute positioning)，所谓绝对定位，就是使用屏幕上的X和Y坐标将组件定位在特定的位置。但使用绝对定位最大的缺点是，不能使页脚准确地定位于所有栏的下方。</p>
<p>在构建多列布局时，方法的不灵活导致CSS设计者通常使用 ﬂ oat 属性。因为浮动元素是可以被清除的，所以它是我们用来控制分栏布局的最好工具。CSS 3提供了创建模块化布局的新语法，但是这些语法还没有得到浏览器的广泛支持。而没有这些支持，是无法完成布局设计这类比较关键的任务的。因此我们仍然沿用ﬂoat属性。</p>
<p>3．应用样式</p>
<p>选择用浮动作为创建栏的方法之后，我们再用百分比将网页分为内容栏和侧边栏两部分。在本例中，比例为 7:3(70% 内容栏，30% 侧边栏)。</p>
<p>第一步，要给页头、侧边栏和页脚加上背景色，以便区分我们所要处理的这几个部分。</p>
<blockquote><p>header[role="banner"] {</p>
<p>background: #666;</p>
<p>}</p>
<p>#sidebar {</p>
<p>background: #999;</p>
<p>}</p>
<p>footer[role="contentinfo"] {</p>
<p>background: #DDD;</p>
<p>}</p></blockquote>
<p>然后做两件事。首先，设置内容栏的宽度为 70%，侧边栏的宽度为 30%。然后，使内容栏浮动在左边，侧边栏浮动在右边。这使得两个栏的位置相对。</p>
<blockquote><p>header[role="banner"] {</p>
<p>background: #666;</p>
<p>}</p>
<p>#content {</p>
<p>ﬂ oat: left;</p>
<p>width: 70%;</p>
<p>}</p>
<p>#sidebar {</p>
<p>ﬂ oat: right;</p>
<p>width: 30%;</p>
<p>background: #999;</p>
<p>}</p>
<p>footer[role="contentinfo"] {</p>
<p>background: #DDD;</p>
<p>}</p></blockquote>
<p>4．Gutter</p>
<p>“gutter”这个术语已经沿用了很多年了，指文本栏之间的间距。在处理流动布局的栏宽时，gutter 的设置就会变得非常困难。在一个固定栏宽的设计中，我们可将预计的宽度设置成像素大小，这样就可以很容易地连同栏宽一并考虑 gutter的宽度。</p>
<p>但对于流动的栏宽，我们有两种选择：将gutter宽度设成百分比的形式，栏宽也如此；或者，添加一个额外的&lt;div&gt;元素来设定和栏宽分离的外边距和内边距。后一种方法从 HTML 代码的角度来看不是最佳的，但它确实提高了控制水平，这在复杂的设计中是必不可少的。稍后将再次讨论这个问题。</p>
<p>为内容栏与侧边栏之间的gutter设置百分比宽度，一种方法就是给内容栏指定一个右外边距，然后从内容栏的宽度里减去它的值。当然百分比值的总和应该是100%。</p>
<blockquote><p>header[role="banner"] {</p>
<p>background: #666;</p>
<p>}</p>
<p>#content {</p>
<p>ﬂ oat: left;</p>
<p>width: 65%;</p>
<p>margin-right: 5%;</p>
<p>}</p>
<p>#sidebar {</p>
<p>ﬂ oat: right;</p>
<p>width: 30%;</p>
<p>background: #999;</p>
<p>}</p>
<p>footer[role="contentinfo"] {</p>
<p>clear: both;</p>
<p>background: #DDD;</p>
<p>}</p></blockquote>
<p>通过上面的设置，我们把内容栏的宽度减少了5%，同时给内容栏的右外边距增加了同样的宽度来设置栏间的 gutter。显示结果，在内容栏和侧边栏之间多了一条白色的间隔。</p>
<p>要记住，当给gutter赋百分比值时，栏间的间隔也会随着窗口的宽度而改变。在窄的窗口中会更小，在宽的窗口中则会更大。对于某些设计需求，这或许是个问题。例如，往往要求栏的边线或背景图片在栏之间有一个固定的间隔。在这些情况下，给容器加上第二层&lt;div&gt;容器是最佳选择了，这一点将在本章中继续讨论。但如果追求简单化，那么给外边距指定一个百分比值是最简单的选择。</p>
<p>5. 栏的内边距</p>
<p>如果栏的宽度设置使用百分比的方式，那么在指定其内边距时，也会出现相似的问题。这是内边距的计算方式造成的(在已声明元素的宽度上为“增加”)。如果使用除百分比之外的值来设定栏的内边距，那么最后的总宽度很容易超过或小于预期的值。这会让您轻易地放弃选择用浮动来控制页面布局。</p>
<p>例如，我们给侧边栏的内边距增加20个像素，使其显得更宽松一些。</p>
<blockquote><p>header[role="banner"] {</p>
<p>background: #666;</p>
<p>}</p>
<p>#content {</p>
<p>ﬂ oat: left;</p>
<p>width: 65%;</p>
<p>margin-right: 5%;</p>
<p>}</p>
<p>#sidebar {</p>
<p>ﬂ oat: right;</p>
<p>width: 30%;</p>
<p>padding: 20px;</p>
<p>background: #999;</p>
<p>}</p>
<p>footer[role="contentinfo"] {</p>
<p>clear: both;</p>
<p>background: #DDD;</p>
<p>}</p></blockquote>
<p>在宽度固定的布局中，可以很容易地将列两边定义的宽度各减去20像素的内边距。但在流动宽度布局中，是使用百分比来定义宽度的，根本无法设定一个30%的宽度减去40像素的宽度。这会使侧边栏的宽度变得大于30%，无法再与内容栏&lt;div&gt;并列，会被迫挤到</p>
<p>内容栏下边去。这可不是我们所希望的效果。</p>
<p>那么在这种情况下会有哪些解决方案可供选择呢？</p>
<ul>
<li>将内边距也设置为百分比，然后从列宽中减去它的值(就像前面我们增加一个 5%的列间 gutter 时所做的一样)。</li>
<li>只在侧边栏内部的元素中应用内边距。</li>
<li>增加一个额外的&lt;div&gt; ，可以使用任意值来分别为它们的内边距赋值。</li>
<li>使用中新增的极为方便的box-sizing属性，可以改变浏览器计算方框尺寸的方式(例如，在对象内部应用内边距)。</li>
</ul>
<p>6．设置宽度的最大值和最小值</p>
<p>构建流动布局时，设计者常常要面对的一个障碍就是行的长度。能够随心所欲地伸展布局，对用户而言非常有益。但到了一定程度时，行的长度可能长到使内容难以阅读，也可能窄到破坏页面上其他部分的外观。</p>
<p>在这里，CSS的max-width和min-width属性就派上用场了。给流动布局设置最大和最小宽度，可以防止栏被无限制地伸长或收缩。很遗憾，IE6 不支持这种功能。但对支持这种功能的浏览器来说，它会带来很大的提高，而且添加起来十分便捷。</p>
<p>7. 滑动人造栏</p>
<p>如果您重新观察这一整章中我们一直在用的两栏布局，就会注意到，虽然我们给侧边栏设置了绿色的背景色，但这个背景只会往下扩展到刚好满足所需的位置。所以，根据栏中所容纳的内容，侧栏的高度与内容栏会有所不同。</p>
<p>通常，人们希望所看到的栏的外观是等高的，而且定义了一致的背景和边框。但使用流动布局时，无法使一个栏的高与另一栏相一致。</p>
<p>使用这种技术，平铺的图片位于栏的后面，造成一种错觉让人以为两栏一样高。这种方法可以使背景色、样式和边框都位于布局的后边，并一直延伸到页面底部。然而，这种技术只能应用于宽度固定的布局，其中列宽预先确定好，然后被内置到平铺的图片中。</p>
<p>Douglas Bowman(www.stopdesign.com/log/2004/09/03/liquid-bleach.html)和Eric Meyer(www.meyerweb.com/eric/thoughts/2004/09/03/sliding-faux-columns/)使这种思想更推进了一步，他们提出了“Sliding Faux Columns(滑动人造栏) ”方法，这样，平铺的图片就可以在流动布局的后面滑动，既可以实现栏等高的效果，同时也保留了灵活性。</p>
<p><span style="color: #000000;"><strong>二、再次探讨：为什么这样设计是无懈可击的？</strong></span></p>
<p>第一个理由，代码量更少。不必再用嵌套的表格在 HTML 代码中实现边框、背景和间隔，我们只要用几个简单的&lt;div&gt;，而不必再用CSS为每栏设置位置与样式，就可以轻松地构造出一个多栏布局。即使在设计固定宽度的 gutter 和“滑动人造栏”(Sliding Faux Columns)时添加了额外(然而是必需)的&lt;div&gt;，HTML代码量还是远远少于使用嵌套表格时的情形。</p>
<p>第二，有了更易于维护的基本代码。因为外观的细节都在样式表中定义，HTML代码变得更容易阅读，要更改布局的外观，只需更新几个样式规则即可。使用CSS的float属性，在多栏布局中，可以给内容安排最佳的顺序，最重要的内容可以安排在 HTML 代码的最前面。这给使用屏幕阅读器、文本浏览器和不支持CSS的其他设备进行浏览的用户带来了好处。</p>
<p>最后，当实现了一个灵活的、流动的布局时，就会赋予用户一种控制能力。使他们能够随心所欲地扩展布局，也能在使用小屏幕时使窗口变窄。这种更高层次的控制能力，是证明设计方案无懈可击的另外一种方式，使设计方案能适应尽可能多的环境。</p>
<p>固定布局、流动布局和弹性布局，哪种方法更好呢？在选择采用何种布局时，需要记住最重要的一点是，每种方法都有它合适的位置。要通过试验来搞清楚它们是如何运作的，以及在每个解决方案中它们的优缺点</p>
<p>One point:选择讨论流动布局和弹性布局，不是因为我觉得它们在任何时候都优于固定宽度的布局。更恰当地说，每种布局都有它自己适合的场合，这主要取决于设计需求，因为对网页设计者来说，设计需求并不总是能够由自己作出决定的。</p>
<p>这就是说，如果您的设计方案中能加上流动布局或者弹性布局，那么就请为用户能从中获益而感到高兴吧。流动边距也为适应性Web设计(Responsive Web Design，RWD)打下了基础，适应性Web设计是一种根据网格布局所在的浏览环境使它们进一步调整并适应环境的方法。</p>
<p><strong><span style="color: #000000;">PS:小提示</span></strong></p>
<p>当构建流动布局时，应当记住以下几点：</p>
<ul>
<li>使用 ﬂ oat 属性来构建多栏布局，可以清除掉浮动对象对页脚所产生的影响。</li>
<li>从列宽中减去 gutter 的百分比宽度值，或者增加一个额外的&lt;div&gt;在列宽以外单独设置内边距的值。</li>
<li>使用CSS 3的box-sizing:border-box;，在基于百分比的元素声明的宽度内设置内边距和边框。这种方法不需要使用额外的&lt;div&gt;来控制gutter，但是需要注意，并不是所有的浏览器都支持box-sizing。</li>
<li>为流动布局设置min-width和max-width，防止布局尺寸过大或过小。不必在意IE6不支持这种功能。</li>
<li>尝试用“滑动人造栏”(Sliding Faux  Columns)的方法，通过使边框和背景一直延伸到页脚，来实现等高栏(但很灵活)。</li>
<li>基于em的布局能提供另外一种灵活性。要记住，当把浏览器中的字体增大到某个值时，整个设计中的一部分就只能通过水平滚动条才看到(除非对布局设定了max-width)。</li>
</ul>
<p>至此已经介绍了创建一个灵活、流动、基于CSS的布局的基础知识，接下来将把这本书中迄今讨论过的方方面面综合起来，从而构建一个完整的、单页的无懈可击的设计方案。</p>
<p>&nbsp;</p>
<p><strong>本文节选自《无懈可击的web设计——使用HTML5和CSS提高网站的灵活性与适应性》一书，Dan Cederholm著，马跃译，由清华大学出版社出版。</strong></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.programmer.com.cn/11732/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>将“智能”投入电网：人工智能的大挑战</title>
		<link>http://www.programmer.com.cn/11729/</link>
		<comments>http://www.programmer.com.cn/11729/#comments</comments>
		<pubDate>Mon, 14 May 2012 07:01:19 +0000</pubDate>
		<dc:creator>baiyuzhong</dc:creator>
				<category><![CDATA[每日关注]]></category>
		<category><![CDATA[ACM]]></category>
		<category><![CDATA[外刊]]></category>

		<guid isPermaLink="false">http://www.programmer.com.cn/?p=11729</guid>
		<description><![CDATA[世界各地有许多政府都在采取行动向低碳经济转型，这一目标要求我们不再直接使用本已用惯的石油燃料。未来，电动汽车（EV）和高速电动火车将广为普及。相似的，家庭、办公室制暖将改用电力驱动下的地源热泵、空气源热泵供能。大部分用于满足以上需求的电力都通过再生型风能、太阳能以及潮汐能资源获得，而非依赖时下所用的煤、天然气发电，这一点至关重要。 面对这一挑战，观点日趋统一：简单拓展现有电网无法满足上述挑战，必须对电网从根本上进行重新设计。美国能源部设想了这样一种“智能电网”：全自动电力输送网络，对每一个客户和节点进行监控，确保电能和信息在电厂和电器之间、在所有节点相互之间进行双向流动。智能电网的分布式结构加上宽带通信和自动控制系统，将实现实时市场交易以及人、建筑、工厂、发电设备以及电力网络之间的无缝接口。 智能电网面临的挑战见于需求端管理、电动车辆、虚拟电厂、产消合一者涌现、自恢复网络等方面。以电动车辆为例，针对个别用户，需要根据电动车辆的日常活动和行驶需要预测电动车辆的充电需求；针对电网不同位置，需要在已知电动车辆连续行驶、电池原有电量、用户社交活动的前提下，预测该位置的所有电动车辆总充电量；需要设计分散式控制机制，协调所有电动车辆行驶（车辆的电量和充电需求各不相同），通过激励措施使消费者前往不同充电点，以此维持电网安全运作，防止变压器由于需求过大而跳闸；需要设计各种算法，优化电动车辆的充电周期，满足用户的预计需求，同时实现V2G（车辆到电网）利润最大化。 总之，面对五花八门的作用因素，智能电网技术将采用一些算法和机制逐一解决牵涉到以上因素的各种问题。 &#160; 《Communications of the ACM》2012年5月文章精选，感谢译者李芳支持 本文选自《程序员》杂志2012年05期，未经允许不得转载。如需转载请联系 market@csdn.net 《程序员》2012年杂志订阅送好礼活动火热进行中]]></description>
			<content:encoded><![CDATA[<p>世界各地有许多政府都在采取行动向低碳经济转型，这一目标要求我们不再直接使用本已用惯的石油燃料。未来，电动汽车（<span style="font-family: 'Times New Roman';">EV</span><span style="font-family: 宋体;">）和高速电动火车将广为普及。相似的，家庭、办公室制暖将改用电力驱动下的地源热泵、空气源热泵供能。大部分用于满足以上需求的电力都通过再生型风能、太阳能以及潮汐能资源获得，而非依赖时下所用的煤、天然气发电，这一点至关重要。<span id="more-11729"></span></span></p>
<p>面对这一挑战，观点日趋统一：简单拓展现有电网无法满足上述挑战，必须对电网从根本上进行重新设计。美国能源部设想了这样一种“智能电网”：全自动电力输送网络，对每一个客户和节点进行监控，确保电能和信息在电厂和电器之间、在所有节点相互之间进行双向流动。智能电网的分布式结构加上宽带通信和自动控制系统，将实现实时市场交易以及人、建筑、工厂、发电设备以及电力网络之间的无缝接口。</p>
<p>智能电网面临的挑战见于需求端管理、电动车辆、虚拟电厂、产消合一者涌现、自恢复网络等方面。以电动车辆为例，针对个别用户，需要根据电动车辆的日常活动和行驶需要预测电动车辆的充电需求；针对电网不同位置，需要在已知电动车辆连续行驶、电池原有电量、用户社交活动的前提下，预测该位置的所有电动车辆总充电量；需要设计分散式控制机制，协调所有电动车辆行驶（车辆的电量和充电需求各不相同），通过激励措施使消费者前往不同充电点，以此维持电网安全运作，防止变压器由于需求过大而跳闸；需要设计各种算法，优化电动车辆的充电周期，满足用户的预计需求，同时实现<span style="font-family: 'Times New Roman';">V2G</span><span style="font-family: 宋体;">（车辆到电网）利润最大化。</span></p>
<p>总之，面对五花八门的作用因素，智能电网技术将采用一些算法和机制逐一解决牵涉到以上因素的各种问题。</p>
<p>&nbsp;</p>
<p><strong>《Communications of the ACM》2012年5月文章精选，感谢译者<a href="http://www.weibo.com/u/1765039161">李芳</a>支持</strong></p>
<p><a href="http://www.programmer.com.cn/11062/" target="_blank"><strong>本文选自《程序员》杂志2012年05期，未经允许不得转载。如需转载请联系 market@csdn.net</strong></a></p>
<p><strong><a href="http://dingyue.programmer.com.cn/" target="_blank">《程序员》2012年杂志订阅送好礼活动火热进行中</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmer.com.cn/11729/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>从1个中心到5个要素——金字塔与软件测试</title>
		<link>http://www.programmer.com.cn/11712/</link>
		<comments>http://www.programmer.com.cn/11712/#comments</comments>
		<pubDate>Thu, 10 May 2012 07:11:01 +0000</pubDate>
		<dc:creator>baiyuzhong</dc:creator>
				<category><![CDATA[图书推荐]]></category>
		<category><![CDATA[书摘]]></category>

		<guid isPermaLink="false">http://www.programmer.com.cn/?p=11712</guid>
		<description><![CDATA[埃及金字塔的神秘，不仅是因为它的规模宏伟、结构精密，而且它的兴起和演变至今只是一个传说，成为千古之谜。而软件测试，也感觉和金字塔有一种神秘的关系，为什么这样说呢？ 金字塔中有神奇的黄金分割数Φ，其值是个无穷小数，若只取三位小数便是0.618。如用金字塔的高除以底边长，即1÷1.618 = 0.618。而金字塔许多特征数据，和13世纪数学家法布兰斯所提到的奇异数字的组合，有许多巧合之处。这些奇异数字的组合是1、1、2、3、5、8、13、21、34、55、89、144、233…它们任何两个连续的比率都接近0.618，如3/5、5/8、34/55、55/89、89/144等。而且金字塔有一个顶点、五个面、八个边，总数为十三个层面，这些特征数据也和上述奇异数字非常吻合。 首先，软件测试的出发点就是质量，软件测试的一切工作应该围绕质量而开展。质量是软件测试的中心，可以看做是金字塔的顶点，如图1-1所示。测试的其他部分就是支撑这个顶点的测试人员、测试资源、测试技术和测试流程。因此，构成软件测试的5个要素就是：质量、人员、技术、资源、流程。 这样，5个要素构成了5个面，每个面由3个要素构成，代表着软件测试的工作面。具体是怎样的工作面？请往下看，自然会越来越清楚。 在这金字塔构成中，还有每两个要素构成的8条边，每条边代表两个要素之间的关系，如何处理这些关系，也就决定着测试能否获得成功。基于要素、工作面、要素之间的关系，我们确定了13项软件测试原则、21个关键域。针对软件测试关键域，每个软件组织可以了解自己在这个领域的水平，持续进行改进。最后，列出目前所使用的各种软件测试方法，并将这些方法应用于软件测试实际工作之中。所以软件测试可概括为： 从1个中心到5个要素 质量（quality）是软件测试的中心，这是毋庸置疑的。测试是质量保证的重要手段之一，测试本身就是为质量服务的。测试能否通过，其检验的标准是用户的需求，也就是质量的标准。所以，在软件测试的5个要素中，质量是核心，其他4个要素要服务于质量，服从于质量。 如果要问，除了质量，还有什么是最重要的？那自然是测试人员。人是决定的因素，决定了技术和流程的执行。像软件开发这样的智力活动，要强调“以人为本”的管理文化，才能真正发挥每个人的潜力，以最有效的方法完成测试工作。 如果继续追问下去，在软件测试过程中，哪两样东西是我们必须关注的？答案应该是“测试覆盖率”和“效率（productivity）”。如何保证质量，一个重要的衡量方法就是测试的覆盖率，包括用户实际需求的覆盖率和代码覆盖率。在保证质量的前提下，确定任务的优先级，采取正确的策略和方法，包括自动化测试方法，以高效的方法完成测试。 一而再、再而三，关注了“测试覆盖率”和“效率”，拿什么来保证呢？这不外乎三个方面，就是测试人员、测试流程和测试的技术。就人员来说，要从招聘、培训和考核等各个环节来培育良好的团队文化，树立正确的工作态度，强化质量意识，提高团队的战斗力，构建卓越的测试团队。无论是采用敏捷的测试流程还是传统的测试流程，一定要结合具体的产品和技术特点，因地制宜，形成适合自己的、有效的测试流程。测试技术比较丰富，因而下面各章的讨论会很多，从客户端到服务器端，从黑盒测试到白盒测试，从静态测试到动态测试，全力构造一个完整的测试技术体系，使之满足测试工作的需要。这些内容，可以用图1-2形象地描述，使我们一目了然。 软件测试的金字塔体系可以基于上一节的描述进行扩充，得到如下结构，更接近于一串神秘的数字。 最后，总结一下软件测试的5个要素。 质量：软件质量是软件测试的目标，也是软件测试工作的中心，一切从质量出发，也就是一切从客户需求出发。任何违背质量的东西都是问题，测试就是要找出这些问题。 人员：人是决定的因素，测试人员的态度、素质、能力决定着测试的效果，对测试产品的质量也有很大的影响。测试人员因素包括测试组织结构、角色和责任的定义。 技术：软件测试技术，包括方法、工具。 资源：主要是指测试环境中所需要的硬件设备、网络环境，甚至包括测试数据。另外一个重要因素就是测试时间，时间也是测试的资源，但测试人员不能看做资源，每个人的能力千差万别，不同的测试人员担任不同的角色，不能相互代替。这也是软件图书的经典之作——《人件》的作者反对将人作为资源对待的原因。 流程：从测试计划和测试用例的创建、评审到测试的执行、报告，设定每个阶段的进出标准。 5个工作面 基于软件测试金字塔的构成，我们好好研究其5个工作面，如图1-3所示。 质量-人员-技术：团队建设，包括人员的招聘、培训、考核等。 质量-人员-资源：成本管理，人员和软硬件资源都是测试的投入，但同时必须将人和软硬件资源区别对待，不要将人也作为软硬件资源那样处理，否则会带来较多的问题。 质量-技术-流程：技术和流程结合起来就是一种测试架构或测试框架，通过技术，将流程融入系统或工具中，流程的执行才能稳定、有效。技术通过框架固化，技术才能发挥最大效益。 质量-流程-资源：基础设施，构建测试环境，将测试建立在坚固、流程的基础设施之上。 人员-技术-流程-资源：项目管理，在一定的质量标准下，如何平衡这些要素、如何获得最大的生产力，就是软件测试项目管理的主要任务。 本文节选自《完美测试：软件测试系列最佳实践》一书，朱少民主编，由电子工业出版社出版。 &#160;]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">埃及金字塔的神秘，不仅是因为它的规模宏伟、结构精密，而且它的兴起和演变至今只是一个传说，成为千古之谜。而软件测试，也感觉和金字塔有一种神秘的关系，为什么这样说呢？<img class="aligncenter  wp-image-11714" title="完美测试 封面" src="http://www.programmer.com.cn/wp-content/uploads/2012/05/完美测试：软件测试系列最佳实践_副本1.jpg" alt="" width="180" height="226" /><span id="more-11712"></span></p>
<p>金字塔中有神奇的黄金分割数Φ，其值是个无穷小数，若只取三位小数便是0.618。如用金字塔的高除以底边长，即1÷1.618 = 0.618。而金字塔许多特征数据，和13世纪数学家法布兰斯所提到的奇异数字的组合，有许多巧合之处。这些奇异数字的组合是1、1、2、3、5、8、13、21、34、55、89、144、233…它们任何两个连续的比率都接近0.618，如3/5、5/8、34/55、55/89、89/144等。而且金字塔有一个顶点、五个面、八个边，总数为十三个层面，这些特征数据也和上述奇异数字非常吻合。</p>
<p>首先，软件测试的出发点就是质量，软件测试的一切工作应该围绕质量而开展。质量是软件测试的中心，可以看做是金字塔的顶点，如图1-1所示。测试的其他部分就是支撑这个顶点的测试人员、测试资源、测试技术和测试流程。因此，构成软件测试的5个要素就是：质量、人员、技术、资源、流程。</p>
<p>这样，<span style="font-family: Calibri;">5</span><span style="font-family: 宋体;">个要素构成了</span>5个面，每个面由<span style="font-family: Calibri;">3</span><span style="font-family: 宋体;">个要素构成，代表着软件测试的工作面。具体是怎样的工作面？请往下看，自然会越来越清楚。</span></p>
<p>在这金字塔构成中，还有每两个要素构成的8条边，每条边代表两个要素之间的关系，如何处理这些关系，也就决定着测试能否获得成功。基于要素、工作面、要素之间的关系，我们确定了13项软件测试原则、21个关键域。针对软件测试关键域，每个软件组织可以了解自己在这个领域的水平，持续进行改进。最后，列出目前所使用的各种软件测试方法，并将这些方法应用于软件测试实际工作之中。所以软件测试可概括为：</p>
<p style="text-align: center;"><img class="aligncenter  wp-image-11715" title="软件测试" src="http://www.programmer.com.cn/wp-content/uploads/2012/05/0011.jpg" alt="" width="412" height="43" /></p>
<p><span style="color: #000000;"><strong>从<span style="font-family: Calibri;">1</span><span style="font-family: 宋体;">个中心到</span><span style="font-family: Calibri;">5</span><span style="font-family: 宋体;">个要素</span></strong></span></p>
<p>质量（quality）是软件测试的中心，这是毋庸置疑的。测试是质量保证的重要手段之一，测试本身就是为质量服务的。测试能否通过，其检验的标准是用户的需求，也就是质量的标准。所以，在软件测试的<span style="font-family: Calibri;">5</span><span style="font-family: 宋体;">个要素中，质量是核心，其他</span><span style="font-family: Calibri;">4</span><span style="font-family: 宋体;">个要素要服务于质量，服从于质量。</span></p>
<p>如果要问，除了质量，还有什么是最重要的？那自然是测试人员。人是决定的因素，决定了技术和流程的执行。像软件开发这样的智力活动，要强调“以人为本”的管理文化，才能真正发挥每个人的潜力，以最有效的方法完成测试工作。</p>
<p>如果继续追问下去，在软件测试过程中，哪两样东西是我们必须关注的？答案应该是“测试覆盖率”和“效率（productivity）”。如何保证质量，一个重要的衡量方法就是测试的覆盖率，包括用户实际需求的覆盖率和代码覆盖率。在保证质量的前提下，确定任务的优先级，采取正确的策略和方法，包括自动化测试方法，以高效的方法完成测试。</p>
<p>一而再、再而三，关注了“测试覆盖率”和“效率”，拿什么来保证呢？这不外乎三个方面，就是测试人员、测试流程和测试的技术。就人员来说，要从招聘、培训和考核等各个环节来培育良好的团队文化，树立正确的工作态度，强化质量意识，提高团队的战斗力，构建卓越的测试团队。无论是采用敏捷的测试流程还是传统的测试流程，一定要结合具体的产品和技术特点，因地制宜，形成适合自己的、有效的测试流程。测试技术比较丰富，因而下面各章的讨论会很多，从客户端到服务器端，从黑盒测试到白盒测试，从静态测试到动态测试，全力构造一个完整的测试技术体系，使之满足测试工作的需要。这些内容，可以用图1-2形象地描述，使我们一目了然。</p>
<p>软件测试的金字塔体系可以基于上一节的描述进行扩充，得到如下结构，更接近于一串神秘的数字。</p>
<div id="attachment_11716" class="wp-caption aligncenter" style="width: 426px"><img class=" wp-image-11716 " title="图1-2  软件测试核心、目标、基础等关系" src="http://www.programmer.com.cn/wp-content/uploads/2012/05/0021.jpg" alt="" width="416" height="229" /><p class="wp-caption-text">图1-2 软件测试核心、目标、基础等关系</p></div>
<p>最后，总结一下软件测试的<span style="font-family: Calibri;">5</span><span style="font-family: 宋体;">个要素。</span></p>
<ul>
<li>质量：软件质量是软件测试的目标，也是软件测试工作的中心，一切从质量出发，也就是一切从客户需求出发。任何违背质量的东西都是问题，测试就是要找出这些问题。</li>
<li>人员：人是决定的因素，测试人员的态度、素质、能力决定着测试的效果，对测试产品的质量也有很大的影响。测试人员因素包括测试组织结构、角色和责任的定义。</li>
<li>技术：软件测试技术，包括方法、工具。</li>
<li>资源：主要是指测试环境中所需要的硬件设备、网络环境，甚至包括测试数据。另外一个重要因素就是测试时间，时间也是测试的资源，但测试人员不能看做资源，每个人的能力千差万别，不同的测试人员担任不同的角色，不能相互代替。这也是软件图书的经典之作——《人件》的作者反对将人作为资源对待的原因。</li>
<li>流程：从测试计划和测试用例的创建、评审到测试的执行、报告，设定每个阶段的进出标准。</li>
</ul>
<p><strong>5<span style="font-family: 宋体;">个工作面</span></strong></p>
<p>基于软件测试金字塔的构成，我们好好研究其5个工作面，如图1-3所示。</p>
<div id="attachment_11717" class="wp-caption aligncenter" style="width: 271px"><img class=" wp-image-11717 " title="图1-3  软件测试的5个基本工作面" src="http://www.programmer.com.cn/wp-content/uploads/2012/05/0031.jpg" alt="" width="261" height="199" /><p class="wp-caption-text">图1-3 软件测试的5个基本工作面</p></div>
<ul>
<li>质量-人员-技术：团队建设，包括人员的招聘、培训、考核等。</li>
<li>质量-人员-资源：成本管理，人员和软硬件资源都是测试的投入，但同时必须将人和软硬件资源区别对待，不要将人也作为软硬件资源那样处理，否则会带来较多的问题。</li>
<li>质量-技术-流程：技术和流程结合起来就是一种测试架构或测试框架，通过技术，将流程融入系统或工具中，流程的执行才能稳定、有效。技术通过框架固化，技术才能发挥最大效益。</li>
<li>质量-流程-资源：基础设施，构建测试环境，将测试建立在坚固、流程的基础设施之上。</li>
<li>人员-技术-流程-资源：项目管理，在一定的质量标准下，如何平衡这些要素、如何获得最大的生产力，就是软件测试项目管理的主要任务。</li>
</ul>
<p><strong>本文节选自《完美测试：软件测试系列最佳实践》一书，朱少民主编，由电子工业出版社出版。</strong></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmer.com.cn/11712/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Siri详解之输入系统和活跃本体</title>
		<link>http://www.programmer.com.cn/11696/</link>
		<comments>http://www.programmer.com.cn/11696/#comments</comments>
		<pubDate>Thu, 10 May 2012 03:30:33 +0000</pubDate>
		<dc:creator>yangshuang</dc:creator>
				<category><![CDATA[管理]]></category>
		<category><![CDATA[Siri]]></category>
		<category><![CDATA[云技术架构]]></category>

		<guid isPermaLink="false">http://www.programmer.com.cn/?p=11696</guid>
		<description><![CDATA[文 / 张俊林 Siri是iPhone 4S内置的智能语音识别系统，吸引了许多用户的关注。本文将从技术层面详解Siri，主要讲述输入系统和活跃本体两部分内容。 寰球今日，苹果正红。 iPhone 4S无疑是苹果公司的博利杀手及系列产品中的当家小生，除采用A5双核处理器、800万像素摄像头以及全新的iOS 5外，最吸引眼球的还是其内置的智能应用Siri。 Siri并非苹果公司自主研发，最初只是苹果App Store上的一款应用，由Siri公司开发。2010年4月28日，苹果公司收购了Siri公司，传言收购价格在2亿美元左右。不久之后Siri从App Store下架，集成进iPhone 4S。 从纯技术角度，Siri是一套较准确的语音识别系统，也是具有环境感知能力的持续自学习系统，更是一整套集成上述所有优点的新型人工智能框架。本质上，Siri是通过多轮对话来获得用户事务意图的意图识别系统。为了做到这一点，其内部综合了语音识别、自然语言理解、任务控制、意图理解、服务集成等多项技术。 用一句话来概述Siri：Siri能理解用户的语言语义，并经过多轮会话弄清用户的意图后，集成能够满足用户意图的多种服务（内部和外部）来帮助用户达成特定领域的事务。 Siri整体技术框架 从整体上来说，Siri符合云计算的技术架构，图1展示了其物理架构。Siri正常运转需要调用词典资源、计算模型等很多资源，客户端也会存储部分数据资源和计算资源，但绝大部分数据和资源存储在服务器端。客户端接收用户输入并做简单处理。 就语音流来说，Siri会将语音数据传输给服务端进行语义理解和意图识别等操作，并将服务结果在客户端展示给用户。Siri对用户需求的满足，最终要体现在能够集成提供一定功能的各种服务上。Siri提供的所有服务，一部分是苹果自身提供的，但大部分服务都是通过调用外部网站提供的服务API来完成的。 Siri是一个功能繁复的综合AI框架，图2展示了其包含的数据、模型和计算模块。为了更易于理解整个框架，本文将其划分为能顺序执行有先后依赖关系的四部分。 输入系统支持用户多种模态的输入，并在内部统一以标注文本的方式表示。 在用户输入表示为文本后，Siri利用活跃本体和对应的执行系统将文本表示解析为用户意图。 理解用户意图只是一个中间过程。为了能够帮助用户完成事务，Siri的服务系统将调用各种内部和外部服务，作为满足用户意图的结果。 输出系统将Siri的运算结果返回给用户，完成一次服务，输出系统同样支持多模态输出方式。 Siri的资源主要分为数据资源和计算资源两类，其中数据资源有领域模型、词汇表数据库、短期记忆系统、长期记忆系统、领域本体数据库、对话流模型、服务模型、服务能力模型和外部服务；计算资源包括语音识别系统、语言模式识别器、语言解释器、对话流控制器、任务控制器、服务集成模块和语音生成系统。 Siri系统的复杂性由上面众多的数据资源和计算资源可窥一斑。下面将讲述输入系统和活跃本体两大子模块。 输入系统 Siri系统以用户输入开始，以输出服务结果为终，其间与用户进行多轮交互。Siri的输入系统主要提供了以下三个功能。 支持多通道输入模式。所谓多通道，即不仅支持键盘文本输入模式，也支持语音自动识别模式、GUI界面操作模式以及系统事件触发的输入等多种输入模式。 消除用户输入信息的歧义。自然语言理解系统的最大难点是在各级别的处理过程中会遇到形式各异的语言歧义现象，而输入系统也会对用户输入的信息进行初步的歧义消解工作。 尽可能将用户的注意力引导到Siri能够提供的服务上。虽然Siri可用于趣味性的聊天对话，但其根本目的并不在此，能够为用户提供各个领域的实用服务是其本原，因此在Siri整个运作流程中都会尽量将用户引导到其能够提供的服务，而输入系统也肩负这一重任。 多模态输入 Siri提供多模态输入，即给用户多种可选择的输入方式（如图3所示）。用户可以选择文本键入方式，也可以选择语音输入方式或者在GUI界面通过点选来进行功能选择。 Siri提供了多种输入通道，供用户随意选择。在用户输入前，根据与用户个人兴趣的相关性提供给用户一些可能感兴趣的选择项。如果用户没有从提供的选择项里选择，则接受用户的主动输入，在用户输入过程中Siri自动判断用户输入是否完成。如果判断用户还需继续输入，则将当前的输入追加到之前的输入流中，同时根据与目前输入数据的相关性自动给出一些输入建议。如果判断用户输入完成，则结束输入过程。 在用户以任意一种输入方式输入信息的过程中，Siri都会实时地进行引导或提示，尽可能将用户的输入引导到Siri可以识别的商业实体或能够提供服务的功能上。归根结底，Siri是要根据用户的输入提供一些服务，采用主动引导而非被动等待用户自由输入，能帮助用户节约时间，充分展示出Siri的能力。 Siri的输入提示是引导用户的重要组件。在用户输入部分信息后，Siri根据目前的信息，结合自己能够提供的服务，提供了功能强大的输入提示来引导用户到某项功能上来。这种输入提示可以是单词这种表层拼写级别的，也可以是语法语义和任务功能等深层级别的。 比如，最简单的输入提示是自动补全功能，用户输入了“rest”，此时Siri可以提示用户restaurants，通过直接选择减少用户的输入成本。Siri也提供如替换和语义改写类型的输入提示，比如用户输入：find restaurants of style，此时Siri可以提示用户：Italian，而用户点选了这个提示后，Siri可以将这个输入语义改写为：Find Italian restaurants。这是Siri在输入阶段就体现出来的智能。 语音输入流程 语音自动输入也是Siri最吸引人的特性之一。图4展示了Siri的语音输入流程。系统接收用户的声音流信号，通过调用“语音文字转换器”来将语音信号转换成可能的文字信号，这个“语音文字转换器”是Nuance通信公司提供的。 虽说如此，但这个转换器可被认为是Nuance通信公司为苹果公司特别制作的。我们知道，“语言模型”在语音识别系统中起到至关重要的作用，因为音频符号转换为文字信息时，有多种可能选项，而哪个选项才是用户真正表达的内容呢？此时语言模型在进行正确答案选择时会发挥很大的作用。 举个例子，假设用户语音输入：“我喜欢苹果”。语音识别后输出两个可能答案：1.我喜欢苹果；2.我稀饭苹果。此时可以利用语言模型来对两个结果进行打分，语言模型本质上是通过大规模语料统计来获得相连两个单词的连接紧密程度，通过语言模型可知“喜欢苹果”比“稀饭苹果”更容易在真实语料中出现，于是选项1的得分就高于选项2，此时Siri会将选项1作为识别结果。 之所以说这个转换器是为苹果公司定制的，是因为转换器的语言模型是根据Siri专门训练的。Siri是多个垂直领域的垂直智能助手，所以数据中包含领域相关的商业实体名称以及用户的个性化信息。在训练语言模型时也会考虑这一点，并将这些信息在语言模型中的权值加大，这样在识别时更容易被识别为能由Siri提供的服务。所以说整个Siri系统都有引导用户到其能够提供的服务上来的机制，这点从语音识别中也可看出。 尽管经过语言模型调整有助于明确输入内容，但语音识别结果仍然不是唯一可确定的，会有语音流的多种文本解释。此时Siri会对其语法语义进行检查，判断哪些是符合语义的，哪些是不符合语义的。 比如语音识别结果为两个候选项：1.Italian food for lunch；2.Italian shoes for lunch。此时Siri可以判断出选项1在语义上更合理，所以会根据语义合理性进行排序。如果得分最高的选项超过一定阈值，则Siri认为这就是语音识别的结果，并进行一些语义标注工作作为最终识别结果。否则，会将多个选项提交给用户进行选择，把用户的选择结果作为最终识别结果。在上面的例子中，Siri可能会问用户：“Did you [...]]]></description>
			<content:encoded><![CDATA[<p><strong>文 / 张俊林</strong></p>
<p><strong>Siri是iPhone 4S内置的智能语音识别系统，吸引了许多用户的关注。本文将从技术层面详解Siri，主要讲述输入系统和活跃本体两部分内容。</strong></p>
<p><span id="more-11696"></span></p>
<p>寰球今日，苹果正红。</p>
<p>iPhone 4S无疑是苹果公司的博利杀手及系列产品中的当家小生，除采用A5双核处理器、800万像素摄像头以及全新的iOS 5外，最吸引眼球的还是其内置的智能应用Siri。</p>
<p>Siri并非苹果公司自主研发，最初只是苹果App Store上的一款应用，由Siri公司开发。2010年4月28日，苹果公司收购了Siri公司，传言收购价格在2亿美元左右。不久之后Siri从App Store下架，集成进iPhone 4S。</p>
<p>从纯技术角度，Siri是一套较准确的语音识别系统，也是具有环境感知能力的持续自学习系统，更是一整套集成上述所有优点的新型人工智能框架。本质上，Siri是通过多轮对话来获得用户事务意图的意图识别系统。为了做到这一点，其内部综合了语音识别、自然语言理解、任务控制、意图理解、服务集成等多项技术。</p>
<p>用一句话来概述Siri：Siri能理解用户的语言语义，并经过多轮会话弄清用户的意图后，集成能够满足用户意图的多种服务（内部和外部）来帮助用户达成特定领域的事务。</p>
<p><span style="color: #00ccff;"><strong>Siri整体技术框架</strong></span></p>
<p>从整体上来说，Siri符合云计算的技术架构，图1展示了其物理架构。Siri正常运转需要调用词典资源、计算模型等很多资源，客户端也会存储部分数据资源和计算资源，但绝大部分数据和资源存储在服务器端。客户端接收用户输入并做简单处理。</p>
<div id="attachment_11697" class="wp-caption aligncenter" style="width: 305px"><a href="http://www.programmer.com.cn/11696/0510%e5%9b%be1/" rel="attachment wp-att-11697"><img class="size-full wp-image-11697" title="0510图1" src="http://www.programmer.com.cn/wp-content/uploads/2012/05/0510图1.jpg" alt="" width="295" height="183" /></a><p class="wp-caption-text">图1 Siri的云技术与架构</p></div>
<p>就语音流来说，Siri会将语音数据传输给服务端进行语义理解和意图识别等操作，并将服务结果在客户端展示给用户。Siri对用户需求的满足，最终要体现在能够集成提供一定功能的各种服务上。Siri提供的所有服务，一部分是苹果自身提供的，但大部分服务都是通过调用外部网站提供的服务API来完成的。</p>
<p>Siri是一个功能繁复的综合AI框架，图2展示了其包含的数据、模型和计算模块。为了更易于理解整个框架，本文将其划分为能顺序执行有先后依赖关系的四部分。</p>
<div id="attachment_11698" class="wp-caption aligncenter" style="width: 343px"><a href="http://www.programmer.com.cn/11696/0510%e5%9b%be2/" rel="attachment wp-att-11698"><img class="size-full wp-image-11698" title="0510图2" src="http://www.programmer.com.cn/wp-content/uploads/2012/05/0510图2.jpg" alt="" width="333" height="339" /></a><p class="wp-caption-text">图2 Siri技术结构图</p></div>
<ul>
<li>输入系统支持用户多种模态的输入，并在内部统一以标注文本的方式表示。</li>
<li>在用户输入表示为文本后，Siri利用活跃本体和对应的执行系统将文本表示解析为用户意图。</li>
<li>理解用户意图只是一个中间过程。为了能够帮助用户完成事务，Siri的服务系统将调用各种内部和外部服务，作为满足用户意图的结果。</li>
<li>输出系统将Siri的运算结果返回给用户，完成一次服务，输出系统同样支持多模态输出方式。</li>
</ul>
<p>Siri的资源主要分为数据资源和计算资源两类，其中数据资源有领域模型、词汇表数据库、短期记忆系统、长期记忆系统、领域本体数据库、对话流模型、服务模型、服务能力模型和外部服务；计算资源包括语音识别系统、语言模式识别器、语言解释器、对话流控制器、任务控制器、服务集成模块和语音生成系统。</p>
<p>Siri系统的复杂性由上面众多的数据资源和计算资源可窥一斑。下面将讲述输入系统和活跃本体两大子模块。</p>
<p><strong><span style="color: #00ccff;">输入系统</span></strong></p>
<p>Siri系统以用户输入开始，以输出服务结果为终，其间与用户进行多轮交互。Siri的输入系统主要提供了以下三个功能。</p>
<ul>
<li>支持多通道输入模式。所谓多通道，即不仅支持键盘文本输入模式，也支持语音自动识别模式、GUI界面操作模式以及系统事件触发的输入等多种输入模式。</li>
<li>消除用户输入信息的歧义。自然语言理解系统的最大难点是在各级别的处理过程中会遇到形式各异的语言歧义现象，而输入系统也会对用户输入的信息进行初步的歧义消解工作。</li>
<li>尽可能将用户的注意力引导到Siri能够提供的服务上。虽然Siri可用于趣味性的聊天对话，但其根本目的并不在此，能够为用户提供各个领域的实用服务是其本原，因此在Siri整个运作流程中都会尽量将用户引导到其能够提供的服务，而输入系统也肩负这一重任。</li>
</ul>
<p><strong>多模态输入</strong></p>
<p>Siri提供多模态输入，即给用户多种可选择的输入方式（如图3所示）。用户可以选择文本键入方式，也可以选择语音输入方式或者在GUI界面通过点选来进行功能选择。</p>
<div id="attachment_11707" class="wp-caption aligncenter" style="width: 314px"><a href="http://www.programmer.com.cn/11696/0510%e5%9b%be3-2/" rel="attachment wp-att-11707"><img class="size-full wp-image-11707" title="0510图3" src="http://www.programmer.com.cn/wp-content/uploads/2012/05/0510图31.jpg" alt="" width="304" height="165" /></a><p class="wp-caption-text">图3 Siri支持多模态输入</p></div>
<p>Siri提供了多种输入通道，供用户随意选择。在用户输入前，根据与用户个人兴趣的相关性提供给用户一些可能感兴趣的选择项。如果用户没有从提供的选择项里选择，则接受用户的主动输入，在用户输入过程中Siri自动判断用户输入是否完成。如果判断用户还需继续输入，则将当前的输入追加到之前的输入流中，同时根据与目前输入数据的相关性自动给出一些输入建议。如果判断用户输入完成，则结束输入过程。</p>
<p>在用户以任意一种输入方式输入信息的过程中，Siri都会实时地进行引导或提示，尽可能将用户的输入引导到Siri可以识别的商业实体或能够提供服务的功能上。归根结底，Siri是要根据用户的输入提供一些服务，采用主动引导而非被动等待用户自由输入，能帮助用户节约时间，充分展示出Siri的能力。</p>
<p>Siri的输入提示是引导用户的重要组件。在用户输入部分信息后，Siri根据目前的信息，结合自己能够提供的服务，提供了功能强大的输入提示来引导用户到某项功能上来。这种输入提示可以是单词这种表层拼写级别的，也可以是语法语义和任务功能等深层级别的。</p>
<p>比如，最简单的输入提示是自动补全功能，用户输入了“rest”，此时Siri可以提示用户restaurants，通过直接选择减少用户的输入成本。Siri也提供如替换和语义改写类型的输入提示，比如用户输入：find restaurants of style，此时Siri可以提示用户：Italian，而用户点选了这个提示后，Siri可以将这个输入语义改写为：Find Italian restaurants。这是Siri在输入阶段就体现出来的智能。</p>
<p><strong>语音输入流程</strong></p>
<p>语音自动输入也是Siri最吸引人的特性之一。图4展示了Siri的语音输入流程。系统接收用户的声音流信号，通过调用“语音文字转换器”来将语音信号转换成可能的文字信号，这个“语音文字转换器”是Nuance通信公司提供的。</p>
<div id="attachment_11708" class="wp-caption aligncenter" style="width: 314px"><a href="http://www.programmer.com.cn/11696/0510%e5%9b%be4-2/" rel="attachment wp-att-11708"><img class="size-full wp-image-11708" title="0510图4" src="http://www.programmer.com.cn/wp-content/uploads/2012/05/0510图41.jpg" alt="" width="304" height="424" /></a><p class="wp-caption-text">图4 Siri的语音输入流程</p></div>
<p>虽说如此，但这个转换器可被认为是Nuance通信公司为苹果公司特别制作的。我们知道，“语言模型”在语音识别系统中起到至关重要的作用，因为音频符号转换为文字信息时，有多种可能选项，而哪个选项才是用户真正表达的内容呢？此时语言模型在进行正确答案选择时会发挥很大的作用。</p>
<p>举个例子，假设用户语音输入：“我喜欢苹果”。语音识别后输出两个可能答案：1.我喜欢苹果；2.我稀饭苹果。此时可以利用语言模型来对两个结果进行打分，语言模型本质上是通过大规模语料统计来获得相连两个单词的连接紧密程度，通过语言模型可知“喜欢苹果”比“稀饭苹果”更容易在真实语料中出现，于是选项1的得分就高于选项2，此时Siri会将选项1作为识别结果。</p>
<p>之所以说这个转换器是为苹果公司定制的，是因为转换器的语言模型是根据Siri专门训练的。Siri是多个垂直领域的垂直智能助手，所以数据中包含领域相关的商业实体名称以及用户的个性化信息。在训练语言模型时也会考虑这一点，并将这些信息在语言模型中的权值加大，这样在识别时更容易被识别为能由Siri提供的服务。所以说整个Siri系统都有引导用户到其能够提供的服务上来的机制，这点从语音识别中也可看出。</p>
<p>尽管经过语言模型调整有助于明确输入内容，但语音识别结果仍然不是唯一可确定的，会有语音流的多种文本解释。此时Siri会对其语法语义进行检查，判断哪些是符合语义的，哪些是不符合语义的。</p>
<p>比如语音识别结果为两个候选项：1.Italian food for lunch；2.Italian shoes for lunch。此时Siri可以判断出选项1在语义上更合理，所以会根据语义合理性进行排序。如果得分最高的选项超过一定阈值，则Siri认为这就是语音识别的结果，并进行一些语义标注工作作为最终识别结果。否则，会将多个选项提交给用户进行选择，把用户的选择结果作为最终识别结果。在上面的例子中，Siri可能会问用户：“Did you mean shoes or food?”然后根据用户的选择来挑选正确答案。</p>
<p><strong><span style="color: #00ccff;">活跃本体</span></strong></p>
<p>活跃本体和执行系统是Siri中最具技术含量的两个核心组件。活跃本体可以被理解为整个Siri系统的具体执行环境和场所；执行系统调用所有系统数据、词典、模型和程序，在活跃本体内将用户输入的信息解析为用户真正的意图，然后根据意图来调用外部的服务。</p>
<p>如果进行类比的话，可将活跃本体类比为人工智能系统里著名的“黑板系统”，即将数据放入黑板中，各个程序来对黑板内的数据进行加工。</p>
<p>在程序执行时，活跃本体内放入的数据和模型包括：领域模型、用户个性化信息、语言模式、词汇表和领域实体数据库等。</p>
<p><strong>领域模型</strong></p>
<p>领域模型包括某个领域内的概念、实体、关系、属性和实例的内部表示，这其实就是Semantic Web研究领域常说的ontology。Siri包含很多垂直领域的领域模型，如外出就餐领域包括餐馆这个概念，而这个概念又具有名称、地址和电话等属性；另外就餐事件（Meal Event）也是该领域一个概念，具有人数、日期和时间等属性；多个领域的领域模型被Siri用来引导输入、解析自然语言、派发服务和生成输出内容。</p>
<p>领域模型有以下一些功能。</p>
<ul>
<li>表层单词到领域概念的映射关系。</li>
<li>单词分类，比如判断某个单词是个餐馆名称。</li>
<li>保存概念关系，比如“菜系”和“餐馆”的关系，以方便Siri在内部作出推理功能。假设用户输入是local mexican food，因为领域模型体现了菜系和餐馆其中一个是概念，另一个是概念的属性，于是通过内部推理可以表示为：find restaurants with style=mexican。</li>
<li>组织领域有关的服务地址，比如哪个网站提供餐馆评论。</li>
<li>在输出系统生成语言时，提供信息并进行语义转写。</li>
</ul>
<p>领域模型采用被动触发机制，当外部任务或事件达到一定阈值后相关概念会被触发。</p>
<p><strong>个性化信息</strong></p>
<p>Siri在个性化方面也做得非常出色。在和用户沟通的过程中，一台本来冰冷无知的机器能够叫出你的名字，并且知晓你的个人爱好，用户体验无疑会非常好。</p>
<p>从具体技术手段上，Siri有长期记忆和短期记忆两个记忆系统，来实现个性化和与用户交流。短期记忆和长期记忆是存储个性化信息的场所，主要功能有两个：一方面在Siri将文本映射为语义或者用户意图时消除歧义，帮助Siri更准确地判断用户想要干什么；另一方面可以增加亲和力（知道用户的个人信息，在交互时增加亲切感）。</p>
<p>Siri的<strong>短期记忆系统</strong>会记录以下内容。</p>
<ul>
<li>最近用户和Siri的完整对话记录。</li>
<li>最近用户通过GUI界面所做的选择项，比如打过哪些电话、浏览过哪些页面、查询过哪些商业实体查的地图等。</li>
<li>最近用户发出的查询请求及对应的查询结果。</li>
<li>最近用户和Siri交互时对应的传感器信息，比如地理位置、时间、手势等信息。</li>
</ul>
<p>短期记忆系统是通过触发机制发挥作用的，比如当一些条件或者事件发生时，如果强度超过一定阈值，就会触发短期记忆系统。</p>
<p><strong>长期记忆系统</strong>会记录以下内容。</p>
<ul>
<li>用户个人信息，如名字、居住地址、账户信息及个人偏好等。</li>
<li>记载用户收集的相关信息，比如收藏书签等。</li>
<li>记录用户使用过的商业实体，比如电影院、餐馆、旅馆等，不仅记录其名称，还记录电话、地点等更详细的完备信息。</li>
<li>记录娱乐相关实体，比如电影、视频、歌曲等。</li>
<li>个人计划或者社交关系，比如待做列表、定时提醒或者其电话联系人列表等。</li>
<li>商品或者服务的历史购物记录或者心愿表。</li>
</ul>
<p>与短期记忆系统类似，长期记忆系统也通过触发机制发挥作用。用户和Siri交互的任何时刻都有可能触发长期记忆系统，比如用户浏览网页或者在进行网络购物都可能触发长期记忆系统来获取其个人偏好信息。另外，长期记忆保存的账户信息也能避免用户输入繁琐的登录步骤。</p>
<p><strong>语言模式识别系统</strong></p>
<p>语言模式识别系统是对用户输入的表层、语法层、习惯用语和成语等进行模式匹配的模块。在Siri内部，这个系统的数据以模式定义的形式存在，而有专门代码解析这个模式定义数据。其实这就是我们平常说的模板系统。</p>
<p>匹配模式的代码在Siri内部采用正则表达式或者状态机等方式实现。这个模式识别系统的使用场合包括引导用户输入、NLP解析、识别任务类型和对话类型等。比如对于常用语what&#8217;s happening来说，这就是一个具体的模式。在Siri匹配发现这个模式后，会在内部被认为是事件计划任务以及本地事件类型任务，这有助于进一步处理。</p>
<p><strong>词汇表</strong></p>
<p>词汇表用于维护Siri中的表层单词到领域模型或任务模型中定义的的概念、关系、属性的映射关系，被用来引导用户输入、自然语言解析和生成输出结果。</p>
<p><strong>领域实体数据库</strong></p>
<p>领域实体数据库是被Siri的执行系统直接使用的，其主要目的是存储领域实体的比较全面的信息并提供统一的查询接口。其存储的领域实体包含以下几方面。</p>
<ul>
<li>商业类型实体，比如与餐馆相关的信息（名称、地址、电话等信息）。</li>
<li>娱乐类实体，如电影、视频、歌曲等实体信息。</li>
<li>其他领域的实体。</li>
<li>事件。</li>
<li>地理位置信息，比如著名地点、地标型建筑、机场及国家区划等地理信息。</li>
</ul>
<p>假设用户的输入需求是要寻找一个合适的就餐地点，图5展示了Siri在某个运行时刻时活跃本体的即时快照。从图5中可以看出，在活跃本体中已经存储了被激活的相关概念及其属性，其中餐馆和就餐事件是两个具体的激活概念，而餐馆这一概念又包含名称、菜系、地理位置三个属性信息，地理位置本身既是一个属性，也是一个概念，而街道名称又是地理位置这一概念的属性。同样的就餐事件也有时间段、就餐人数等属性。在运行时刻，活跃本体中的餐馆概念可能已经根据领域实体数据库中的餐馆名称将某个具体餐馆具象化，即名称内已经填写入候选的具体餐馆名称作为这个激活概念的实例。</p>
<div id="attachment_11703" class="wp-caption aligncenter" style="width: 320px"><a href="http://www.programmer.com.cn/11696/0510%e5%9b%be5-3/" rel="attachment wp-att-11703"><img class="size-full wp-image-11703" title="0510图5" src="http://www.programmer.com.cn/wp-content/uploads/2012/05/0510图52.jpg" alt="" width="310" height="244" /></a><p class="wp-caption-text">图5 活跃本体运行时刻示例片段</p></div>
<p>上述被激活的概念属性信息属于领域模型中的外出就餐这一具体垂直领域中的概念。而就餐事件同时也属于一种具体的任务流，隶属于任务流模型中的事件规划这一具体通用任务模型的领域子类型，用于确定任务的步骤和流程。假设此时Siri已经获得了一些用户输入信息，但还缺乏就餐人数这一约束条件，会话流模型会发现这一点并据此询问用户就餐人数信息。</p>
<p><strong><span style="color: #c0c0c0;">作者张俊林，《这就是搜索引擎：核心技术详解》作者，新浪微博研发人员，中科院软件博士，主要研究方向为自然语言处理、搜索技术、推荐系统及机器学习。</span></strong></p>
<p><a href="http://www.programmer.com.cn/11062/" target="_blank"><strong>本文选自《程序员》杂志2012年04期，未经允许不得转载。如需转载请联系 market@csdn.net</strong></a></p>
<p><strong><a href="http://dingyue.programmer.com.cn/" target="_blank">《程序员》2012年杂志订阅送好礼活动火热进行中</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmer.com.cn/11696/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>产品原则和产品评审团</title>
		<link>http://www.programmer.com.cn/11279/</link>
		<comments>http://www.programmer.com.cn/11279/#comments</comments>
		<pubDate>Thu, 10 May 2012 02:23:50 +0000</pubDate>
		<dc:creator>baiyuzhong</dc:creator>
				<category><![CDATA[管理]]></category>
		<category><![CDATA[Marty Cagan]]></category>

		<guid isPermaLink="false">http://www.programmer.com.cn/?p=11279</guid>
		<description><![CDATA[文 / Marty Cagan  译 / 黄捷文，唐丰能 Marty Cagan是享有世界声誉的产品管理专家，曾经担任网景副总裁、eBay产品管理及设计高级副总裁。本文是他回顾自己二十多年来从事软件产品管理工作的总结和经验分享，描述了产品开发需要遵循的产品原则以及成立产品评审团的必要性。 产品原则 产品原则是对团队信仰和价值观的总结，用来指导产品团队作出正确的决策和取舍。它体现了产品团队的目标和愿景，是产品战略的重要组成部分。从形式上看，它是一系列明确的、体现团队特色的产品价值准则。 每次加入新团队，我要做的第一件事都是制定产品原则。这意味着要决定什么重要、什么不重要，哪些原则是根本的、战略性的，哪些是临时的、战术性的。 产品原则不是产品功能的清单，不依赖于任何单独的产品，而是整个产品线的战略指南和公司的价值宣言。好的产品原则还可以激发设计产品的灵感。制定产品原则的过程也是学习的过程，可以从中了解新公司的企业文化，以及公司创始人设立的企业目标。产品原则是一套价值判断的框架，帮助公司作出正确的决策。 举例来说，某电影网站的产品原则是相信社区用户的影评比专业人士的影评更有价值。当某家制片厂想借网站发表评论时，产品团队就可以根据这条产品原则决定是否采纳。产品原则是否公开因公司而异。它既可以用做团队内部的指导工具，如产品战略文档，也可以公开给客户、合作伙伴、投资人，用于向公众宣传公司的理念。此外，产品原则还可以用来团结产品团队，让产品经理、产品设计师、开发团队和营销团队形成共同的价值观，在认识上保持一致。这是任何产品说明文档都做不到的。注意，只罗列出产品原则还不够，还要按原则的重要性排序。所有产品都要既易于使用又安全可靠，但总有需要优先考虑的原则。最重要的究竟是易用性，还是可靠性？ 制定产品原则时，容易出现以下两类错误。 原则过于空泛，失去了指导作用。 把设计原则误当成产品原则。比如，为用户提供清晰的导航路径（方便用户完成下一步操作）属于常见的设计原则，不是产品原则。 如果你所在的团队还没有制定清晰的、有关产品理念的产品原则，那么应该把大家召集起来，花点时间来讨论分析，确定团队最看重的价值理念。 解决意见冲突 不少产品经理向我抱怨，他们受够了没完没了的会议（既无议程也无结果），以及会议中的那些争论和冲突。公司高管还时不时打断会议进程，扔下没头没脑的意见，拂袖而去，留下他们丈二和尚摸不着头脑。 这种情况在产品决策过程中经常发生，原因主要有以下几点。 每位同事对产品都有自己的看法。 大家都非常在乎产品，明白公司盈利得靠用户，只有产品才能吸引用户。 许多人以为自己比其他人了解目标用户，事实上并非如此。 另外，产品团队大多不必向产品经理汇报工作，产品经理没有管理产品团队的实权。在需要产品团队的配合时，产品经理只能摆事实、讲道理，不能强制执行。所以产品经理总觉得施展不开拳脚，非常沮丧。 有时大家各持己见，僵持不下，只能请高管出面定夺。出现这种局面，说明沟通方式有问题。产品创意在辩论中可以得到完善，但前提是大家形成一致意见。请高管出面决策、解决冲突会激化团队内部矛盾，得不偿失。 制定产品决策的过程中存在的困难着实不少，且是不可避免的，因为建设性的辩论和论证是定义优秀产品的必由之路。不过即使认识到这一点，我也很难把争论当成一种享受。 为了鼓励创新，改善讨论效果，同时降低外界干扰，在作产品决策之前，应该先确定决策要解决什么问题，让大家在以下几个要点上达成共识。 究竟要解决什么问题？ 要为哪类人物角色解决这个问题？ 产品要达到什么目标？ 每项目标的优先级是什么？ 在我看来，每当团队内出现严重的意见分歧时，并非是大家对事实的认定有争议，而是对目标和目标的优先级有不同的理解。 比如说，团队首先应该确定哪个目标对用户最重要，是易用性、响应速度、功能、成本、安全性，还是用户隐私？只有先统一对产品目标和目标优先级的认识，大家才能在此共识上进一步讨论各种方案的合理性与可行性。 务必认真分析产品目标的优先级（从最重要到最不重要逐项排序），让团队达成共识。切不可把所有目标都贴上“关键”和“重要”的标签。一定要区分什么最重要，什么第二重要…… 我常被请去解决产品决策中出现的争议，发现多数团队跳过了这关键的一步。由于缺少基本评估标准，每个人对目标和优先级的理解都不同，大家往往情绪激动，在细枝末节上争执不下。 即使大家已经达成共识，也应该在讨论开始前再次予以强调，最好把目标按优先级顺序写在白板上，这样每位同事都可以看到评估方案和制定决策的确切依据。 制定决策的过程和依据必须完全透明，不要让人觉得你只凭直觉判断。务必告诉大家决策的依据和理由，清楚地展示每一个决策环节。 激烈的会议争论会影响大伙的斗志和工作效率。如果再出现这种情况，请先回顾产品目标和目标优先级，确保大家达成共识。 制定更及时、更可靠的产品决策 即使对小公司来说，制定决策通常也是既耗时又费力的。产品公司需要一套机制让决策者和相关人员及时作出明智的产品决策。我认为成立产品评审团是最好的解决途径。 我通常不热衷于出席会议或参加各种委员会，但产品评审团除外。产品评审团让所有决策者坐到一起，为把产品推向市场共同制定决策，可以有效地加快研发产品的速度。 组织产品评审团的难点在于既要为高管制定产品决策、监督产品流程提供透明的信息，又要避免高管干预产品团队的具体工作，如参与产品设计。不少公司都有类似的组织，但我认为最早提出这个概念的人是eBay前COO Maynard Webb。多年来，我一直在实践中不断规范产品评审团的具体职责，完善其流程。 产品评审团的工作目标 成立产品评审团的目的是决定产品战略方向，从宏观上监督公司产品的研发流程，合理配置资源。产品评审团不制定公司的商业战略，而是在给定商业战略的条件下，提出与之相匹配的产品战略。产品评审团的决策直接影响企业的运营。 产品评审团的成员组成 产品评审团由公司各个部门的管理者组成。虽然各个公司的情况不同，但通常都包括以下人员。 首席执行官/首席运营官/部门总经理 产品管理总监/副总监 用户体验设计总监/副总监 市场总监/副总监 开发总监/副总监 网站运营总监/副总监 客户服务总监/副总监 产品评审团的工作效果很大程度上取决于会议组织者的技巧。他必须不受干扰，善于阐明问题、促成决策。大公司里，组织者通常由公司的产品负责人担任；小公司里，则由老板担任。要确保每个关键部门都有代表参加产品评审团，但最好把人数控制在十人以内。如果有的部门不止一人参加评审团，应该选一个人代表部门陈述观点。例如，销售总裁代表市场部发言，质检（QA）主管代表开发部门发言。 产品评审团的职责 产品评审团并不是设计和开发产品的团队，它的职责是监督产品研发流程，制定关键决策。 它根据研发产品的四个里程碑来评审产品，制定决策。 1. 评审产品战略和产品路线图，启动评估产品机会的工作，即选择值得投入精力的产品，请产品经理开始评估产品机会。 2. 根据评估产品机会的结果，决定是否开始定义产品的解决方案。 3. 评审产品原型、用户测试结果、成本估算明细，决定是否开始开发产品。 4. 评审最终产品、产品品质、发布计划、社会效应，决定是否发布产品。 [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #808080;"><strong>文 / Marty Cagan  译 / 黄捷文，唐丰能</strong></span></p>
<p><span style="color: #000000;"><strong>Marty Cagan是享有世界声誉的产品管理专家，曾经担任网景副总裁、eBay产品管理及设计高级副总裁。本文是他回顾自己二十多年来从事软件产品管理工作的总结和经验分享，描述了产品开发需要遵循的产品原则以及成立产品评审团的必要性。</strong></span></p>
<p><span id="more-11279"></span></p>
<p><span style="color: #888888;"><strong>产品原则</strong></span></p>
<p>产品原则是对团队信仰和价值观的总结，用来指导产品团队作出正确的决策和取舍。它体现了产品团队的目标和愿景，是产品战略的重要组成部分。从形式上看，它是一系列明确的、体现团队特色的产品价值准则。</p>
<p>每次加入新团队，我要做的第一件事都是制定产品原则。这意味着要决定什么重要、什么不重要，哪些原则是根本的、战略性的，哪些是临时的、战术性的。</p>
<p>产品原则不是产品功能的清单，不依赖于任何单独的产品，而是整个产品线的战略指南和公司的价值宣言。好的产品原则还可以激发设计产品的灵感。制定产品原则的过程也是学习的过程，可以从中了解新公司的企业文化，以及公司创始人设立的企业目标。产品原则是一套价值判断的框架，帮助公司作出正确的决策。</p>
<p>举例来说，某电影网站的产品原则是相信社区用户的影评比专业人士的影评更有价值。当某家制片厂想借网站发表评论时，产品团队就可以根据这条产品原则决定是否采纳。产品原则是否公开因公司而异。它既可以用做团队内部的指导工具，如产品战略文档，也可以公开给客户、合作伙伴、投资人，用于向公众宣传公司的理念。此外，产品原则还可以用来团结产品团队，让产品经理、产品设计师、开发团队和营销团队形成共同的价值观，在认识上保持一致。这是任何产品说明文档都做不到的。注意，只罗列出产品原则还不够，还要按原则的重要性排序。所有产品都要既易于使用又安全可靠，但总有需要优先考虑的原则。最重要的究竟是易用性，还是可靠性？</p>
<div class="wp-caption alignright" style="width: 160px"><img title="Marty Cagan：打造用户喜爱的产品" src="http://www.programmer.com.cn/wp-content/uploads/2011/12/未命名_副本3.bmp" alt="" width="150" height="205" /><p class="wp-caption-text">打造用户喜爱的产品</p></div>
<ul>
<li>制定产品原则时，容易出现以下两类错误。</li>
<li>原则过于空泛，失去了指导作用。</li>
</ul>
<p>把设计原则误当成产品原则。比如，为用户提供清晰的导航路径（方便用户完成下一步操作）属于常见的设计原则，不是产品原则。</p>
<p>如果你所在的团队还没有制定清晰的、有关产品理念的产品原则，那么应该把大家召集起来，花点时间来讨论分析，确定团队最看重的价值理念。</p>
<p><span style="color: #888888;"><strong>解决意见冲突</strong></span></p>
<p>不少产品经理向我抱怨，他们受够了没完没了的会议（既无议程也无结果），以及会议中的那些争论和冲突。公司高管还时不时打断会议进程，扔下没头没脑的意见，拂袖而去，留下他们丈二和尚摸不着头脑。</p>
<p>这种情况在产品决策过程中经常发生，原因主要有以下几点。</p>
<ul>
<li>每位同事对产品都有自己的看法。</li>
<li>大家都非常在乎产品，明白公司盈利得靠用户，只有产品才能吸引用户。</li>
<li>许多人以为自己比其他人了解目标用户，事实上并非如此。</li>
</ul>
<p>另外，产品团队大多不必向产品经理汇报工作，产品经理没有管理产品团队的实权。在需要产品团队的配合时，产品经理只能摆事实、讲道理，不能强制执行。所以产品经理总觉得施展不开拳脚，非常沮丧。</p>
<p>有时大家各持己见，僵持不下，只能请高管出面定夺。出现这种局面，说明沟通方式有问题。产品创意在辩论中可以得到完善，但前提是大家形成一致意见。请高管出面决策、解决冲突会激化团队内部矛盾，得不偿失。</p>
<p>制定产品决策的过程中存在的困难着实不少，且是不可避免的，因为建设性的辩论和论证是定义优秀产品的必由之路。不过即使认识到这一点，我也很难把争论当成一种享受。</p>
<p>为了鼓励创新，改善讨论效果，同时降低外界干扰，在作产品决策之前，应该先确定决策要解决什么问题，让大家在以下几个要点上达成共识。</p>
<ul>
<li>究竟要解决什么问题？</li>
<li>要为哪类人物角色解决这个问题？</li>
<li>产品要达到什么目标？</li>
<li>每项目标的优先级是什么？</li>
</ul>
<p>在我看来，每当团队内出现严重的意见分歧时，并非是大家对事实的认定有争议，而是对目标和目标的优先级有不同的理解。</p>
<p>比如说，团队首先应该确定哪个目标对用户最重要，是易用性、响应速度、功能、成本、安全性，还是用户隐私？只有先统一对产品目标和目标优先级的认识，大家才能在此共识上进一步讨论各种方案的合理性与可行性。</p>
<p>务必认真分析产品目标的优先级（从最重要到最不重要逐项排序），让团队达成共识。切不可把所有目标都贴上“关键”和“重要”的标签。一定要区分什么最重要，什么第二重要……</p>
<p>我常被请去解决产品决策中出现的争议，发现多数团队跳过了这关键的一步。由于缺少基本评估标准，每个人对目标和优先级的理解都不同，大家往往情绪激动，在细枝末节上争执不下。</p>
<p>即使大家已经达成共识，也应该在讨论开始前再次予以强调，最好把目标按优先级顺序写在白板上，这样每位同事都可以看到评估方案和制定决策的确切依据。</p>
<p>制定决策的过程和依据必须完全透明，不要让人觉得你只凭直觉判断。务必告诉大家决策的依据和理由，清楚地展示每一个决策环节。</p>
<p>激烈的会议争论会影响大伙的斗志和工作效率。如果再出现这种情况，请先回顾产品目标和目标优先级，确保大家达成共识。</p>
<p><span style="color: #888888;"><strong>制定更及时、更可靠的产品决策</strong></span></p>
<p>即使对小公司来说，制定决策通常也是既耗时又费力的。产品公司需要一套机制让决策者和相关人员及时作出明智的产品决策。我认为成立产品评审团是最好的解决途径。</p>
<p>我通常不热衷于出席会议或参加各种委员会，但产品评审团除外。产品评审团让所有决策者坐到一起，为把产品推向市场共同制定决策，可以有效地加快研发产品的速度。</p>
<p>组织产品评审团的难点在于既要为高管制定产品决策、监督产品流程提供透明的信息，又要避免高管干预产品团队的具体工作，如参与产品设计。不少公司都有类似的组织，但我认为最早提出这个概念的人是<span style="font-family: Times New Roman;">eBay</span><span style="font-family: 宋体;">前</span><span style="font-family: Times New Roman;">COO Maynard Webb</span><span style="font-family: 宋体;">。多年来，我一直在实践中不断规范产品评审团的具体职责，完善其流程。</span></p>
<p><strong>产品评审团的工作目标</strong></p>
<p>成立产品评审团的目的是决定产品战略方向，从宏观上监督公司产品的研发流程，合理配置资源。产品评审团不制定公司的商业战略，而是在给定商业战略的条件下，提出与之相匹配的产品战略。产品评审团的决策直接影响企业的运营。</p>
<p><strong>产品评审团的成员组成</strong></p>
<p>产品评审团由公司各个部门的管理者组成。虽然各个公司的情况不同，但通常都包括以下人员。</p>
<ul>
<li>首席执行官<span style="font-family: Times New Roman;">/</span><span style="font-family: 宋体;">首席运营官</span><span style="font-family: Times New Roman;">/</span><span style="font-family: 宋体;">部门总经理</span></li>
<li>产品管理总监<span style="font-family: Times New Roman;">/</span><span style="font-family: 宋体;">副总监</span></li>
<li>用户体验设计总监<span style="font-family: Times New Roman;">/</span><span style="font-family: 宋体;">副总监</span></li>
<li>市场总监<span style="font-family: Times New Roman;">/</span><span style="font-family: 宋体;">副总监</span></li>
<li>开发总监<span style="font-family: Times New Roman;">/</span><span style="font-family: 宋体;">副总监</span></li>
<li>网站运营总监<span style="font-family: Times New Roman;">/</span><span style="font-family: 宋体;">副总监</span></li>
<li>客户服务总监<span style="font-family: Times New Roman;">/</span><span style="font-family: 宋体;">副总监</span></li>
</ul>
<p>产品评审团的工作效果很大程度上取决于会议组织者的技巧。他必须不受干扰，善于阐明问题、促成决策。大公司里，组织者通常由公司的产品负责人担任；小公司里，则由老板担任。要确保每个关键部门都有代表参加产品评审团，但最好把人数控制在十人以内。如果有的部门不止一人参加评审团，应该选一个人代表部门陈述观点。例如，销售总裁代表市场部发言，质检（<span style="font-family: Times New Roman;">QA</span><span style="font-family: 宋体;">）主管代表开发部门发言。</span></p>
<p><span style="color: #000000;"><strong>产品评审团的职责</strong></span></p>
<p>产品评审团并不是设计和开发产品的团队，它的职责是监督产品研发流程，制定关键决策。</p>
<p>它根据研发产品的四个里程碑来评审产品，制定决策。</p>
<p>1. <span style="font-family: 宋体;">评审产品战略和产品路线图，启动评估产品机会的工作，即选择值得投入精力的产品，请产品经理开始评估产品机会。</span></p>
<p>2. <span style="font-family: 宋体;">根据评估产品机会的结果，决定是否开始定义产品的解决方案。</span></p>
<p>3. <span style="font-family: 宋体;">评审产品原型、用户测试结果、成本估算明细，决定是否开始开发产品。</span></p>
<p>4. <span style="font-family: 宋体;">评审最终产品、产品品质、发布计划、社会效应，决定是否发布产品。</span></p>
<p><strong>注意事项</strong></p>
<ul>
<li>小公司的产品评审团通常负责评审公司所有的产品；大公司可能需要根据业务单位的大小，设立若干个产品评审团。</li>
<li>产品评审团不负责评审对产品细节的更新或修正。这是为了加快对细节问题的处理，保证公司业务运作流畅。</li>
<li>产品评审团不负责具体的产品设计工作。如果产品存在缺陷，应该由产品团队着手处理，然后重新提交产品评审团评审。</li>
<li>在<span style="font-family: Times New Roman;">2</span><span style="font-family: 宋体;">号里程碑处，由于产品解决方案尚未形成，不可凭直觉估算产品的成本，至多只能估计大致的项目规模；但在</span><span style="font-family: Times New Roman;">3</span><span style="font-family: 宋体;">号里程碑处，应该仔细估算开发时间和成本，让公司上下做好准备。</span></li>
<li>尽量避免产品评审团讨论具体执行策略，讨论这些问题非常耗费时间。如果必须讨论，则一定要控制好时间，不要影响产品评审团监督产品流程的主要工作。</li>
<li>产品评审团开会频率取决于具体产品的进度，可以每月开一小时会议或者每周开两小时会议。</li>
<li>产品评审团还应该回顾、分析产品上市后的表现。可以在产品发布<span style="font-family: Times New Roman;">3~6</span><span style="font-family: 宋体;">个月后，请产品团队汇报产品的市场业绩表现，产品评审团可以反思之前的决策是否明智，今后应该如何调整。</span></li>
<li>每次评审会议，最好由产品经理向产品评审团汇报产品的进展情况。由产品经理的直接领导指导产品经理准备陈述内容，确保产品经理准备充分。在会议召开前，产品经理最好逐一向产品评审团成员做简要汇报，存在疑问应及时解决，避免在汇报过程中措手不及。</li>
</ul>
<p>如果公司制定产品决策的效率太低，应考虑组织产品评审团。它可以替代以往各种冗长的决策会议，大大缩短决策时间，制定明智、及时、透明的产品决策。</p>
<p><span style="color: #808080;"><strong>何时估算项目成本</strong></span></p>
<p>尽管软件行业早就有估算成本的传统，但直到今天仍然容易出现混乱的估算结果。我认为混乱的原因在于管理层总是希望尽早获悉成本信息，但开发人员往往要较晚才能精确估算成本（至少要等到具体的解决方案出炉）。结果，要么过早估算导致结果与实际出入很大，要么结果虽然准确，但远远超出预算，让管理层难以接受。</p>
<p>这里要介绍的估算方式虽然源自我提倡的产品研发流程，但同样能解决大多数公司的问题。</p>
<p>开始研发产品前，应该先评估产品机会。评估产品机会的目的是看产品创意宣称要解决的问题是否有价值。此时，解决方案尚未出炉，手头仅有产品创意和待解决的问题，所以产品团队只能先大致估算项目的规模（建议分成小型、中型、大型三个等级），再根据项目规模粗略估算项目成本。虽然这种估算与实际情况会有出入，但通常不会出现跨级别的误差。</p>
<p>确认产品机会有价值，粗略估算的成本也可以接受，管理层才能允许项目组着手定义产品解决方案。理想情况下，详细的产品解决方案还应该包含可供用户测试的高保真原型。</p>
<p>在定义解决方案的过程中，首先产品经理和交互设计师需要一位开发人员的协助来评估不同解决方案的成本。然后产品经理和交互设计师根据评估结果进一步调整解决方案。待完整的产品说明文档形成后，即可根据文档细节生成详细、可靠的成本估算结果。</p>
<p>此时，手头有了详细的产品说明文档、可信的成本估算结果，管理层可以很方便地决定是否开始开发产品。如果解决方案有问题或成本估算结果超出了预算，管理层可以马上叫停。如果决定开发产品，产品团队就可以在充分了解产品定义与成本细节的条件下全力开始工作。</p>
<p>总而言之，我建议分两个阶段进行成本估算。在评估产品机会时做粗略估算，根据最终的产品说明文档做详细估算。</p>
<p><strong><br />
<img class="alignright" title="TM截图未命名" src="http://www.programmer.com.cn/wp-content/uploads/2012/02/TM截图未命名1.jpg" alt="" width="110" height="157" /></strong></p>
<p><strong>Marty Cagan，作为负责定义和开发产品的高级经理人为多家一流企业工作过，亲历了个人电脑、互联网、电子商务的起落沉浮，致力于通过写作、演讲、培训帮助客户打造富有创意的产品。</strong></p>
<p><strong>本文节选自华中科技大学出版社《启示录：打造用户喜爱的产品》一书和作者的博客。该书从人员、流程、产品三个角度介绍了现代软件（互联网）产品管理的实践经验和理念。特此感谢华中科技大学出版社与Marty Cagan先生授权。</strong><strong><br />
</strong></p>
<p><a href="http://www.programmer.com.cn/11062/" target="_blank"><strong>本文选自《程序员》杂志2012年04期，未经允许不得转载。如需转载请联系 market@csdn.net</strong></a></p>
<p><strong><a href="http://dingyue.programmer.com.cn/" target="_blank">《程序员》2012年杂志订阅送好礼活动火热进行中</a></strong></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmer.com.cn/11279/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>为什么要阅读计算机经典著作</title>
		<link>http://www.programmer.com.cn/11680/</link>
		<comments>http://www.programmer.com.cn/11680/#comments</comments>
		<pubDate>Wed, 09 May 2012 02:33:02 +0000</pubDate>
		<dc:creator>lispython</dc:creator>
				<category><![CDATA[每日关注]]></category>
		<category><![CDATA[ACM]]></category>
		<category><![CDATA[外刊]]></category>
		<category><![CDATA[经典]]></category>
		<category><![CDATA[阅读]]></category>

		<guid isPermaLink="false">http://www.programmer.com.cn/?p=11680</guid>
		<description><![CDATA[我们往往对于自己的特定研究领域过于投入，以至于无法充分利用核心计算机科学原本具有的潜力我们缺乏CS（计算机科学）领域的基本理论知识；更有甚者，CS经典著作竟不为许多计算机科学家所知。 带着这些想法，土耳其伊兹密尔理工学院计算机工程系博士生导师Selma Tekir于2011年夏季学期在他所在的计算机工程系组织了几场计算机经典著作阅读会，他的团队选择了几本经典书籍和文章，启动了读书项目：C.A.R. Hoare所著《The Emperor&#8217;s Old Clothes》与《An Axiomatic Basis for Computer Programming》、图灵的《Computing Machinery and Intelligence》、Ken Thompson的《Reflections on Trusting Trust》、Dijkstra的《The Humble Programmer》，以及高德纳的《计算机程序设计艺术》等。 Tekir发现，通过阅读这些经典著作，所有人都大有收获，因而决定将这样的集体阅读作为常规学术活动在伊兹密尔理工学院持续开展下去。 例如Hoare的著作将让读者了解英国1960年代以及1970年代的计算机行业，当时的编程语言社区亦在著作中详加描述。Hoare设计了一种排序算法，比Shell之前设计的效率来得更高，但因为思路独特，并不知道如何在计算机中实现。当他在ALGOL 60课程上第一次听到关于递归程序的原理时，他意识到这种机制刚好可以用来实现他设计的排序算法，这一算法后来成为QuickSort的前身。这则故事告诉我们，每个人都应该与他人交流，以此获得解决问题的方法，还应该时时想到改进前人的成果。此外，他还认为对于任何系统来说“简洁”至关重要。无论编程语言、 操作系统还是任何软件都需要有一个简单、可靠的核心。基于这些概念，他发表了著名的关于公理化语义的论文《An Axiomatic Basis for Computer Programming》，论文也同样简洁，只有短短6页，前辈们就是这样的，用6页纸就能开宗立派。 再比如高德纳，他在计算机编程方面具有远见卓识，他说：“编程是由一个人告诉另一个人他想让计算机完成什么工作的艺术。” 阅读CS经典著作给读者带来永恒不变的思想，阅读CS理论知识有助于理解CS领域的局限性，开阔读者视野，让读者远离时代的喧嚣，从更朴实无华的角度评估CS领域，从而直接影响当前正在进行的研究。读者通过学习计算机历史，研究杰出科学家的工作、生活，将认识到跻身这一令人尊敬的职业领域和特权社区的真正裨益。此外，先辈轶事会鼓舞年轻学者、普及历史、凝聚社区，促使大家将CS作为一门独立学科和专业进行对待。 SelmaTekir希望他的观点能够提高读者对计算机经典著作的兴趣，由CS专家更新书目，能鼓励他们扩大经典书库范围。 无论教育者还是研究者，阅读经典著作所费之时日不是浪费，而是投资。 《Communications of the ACM》2012年4月文章精选，感谢译者李芳支持 本文选自《程序员》杂志2012年05期，未经允许不得转载。如需转载请联系 market@csdn.net 《程序员》2012年杂志订阅送好礼活动火热进行中]]></description>
			<content:encoded><![CDATA[<p>我们往往对于自己的特定研究领域过于投入，以至于无法充分利用核心计算机科学原本具有的潜力我们缺乏CS（计算机科学）领域的基本理论知识；更有甚者，CS经典著作竟不为许多计算机科学家所知。</p>
<p>带着这些想法，土耳其伊兹密尔理工学院计算机工程系博士生导师Selma Tekir于2011年夏季学期在他所在的计算机工程系组织了几场计算机经典著作阅读会，他的团队选择了几本经典书籍和文章，启动了读书项目：C.A.R. Hoare所著《The Emperor&#8217;s Old Clothes》与《An Axiomatic Basis for Computer Programming》、图灵的《Computing Machinery and Intelligence》、Ken Thompson的《Reflections on Trusting Trust》、Dijkstra的《The Humble Programmer》，以及高德纳的《计算机程序设计艺术》等。<span id="more-11680"></span></p>
<p>Tekir发现，通过阅读这些经典著作，所有人都大有收获，因而决定将这样的集体阅读作为常规学术活动在伊兹密尔理工学院持续开展下去。</p>
<p>例如Hoare的著作将让读者了解英国1960年代以及1970年代的计算机行业，当时的编程语言社区亦在著作中详加描述。Hoare设计了一种排序算法，比Shell之前设计的效率来得更高，但因为思路独特，并不知道如何在计算机中实现。当他在ALGOL 60课程上第一次听到关于递归程序的原理时，他意识到这种机制刚好可以用来实现他设计的排序算法，这一算法后来成为QuickSort的前身。这则故事告诉我们，每个人都应该与他人交流，以此获得解决问题的方法，还应该时时想到改进前人的成果。此外，他还认为对于任何系统来说“简洁”至关重要。无论编程语言、 操作系统还是任何软件都需要有一个简单、可靠的核心。基于这些概念，他发表了著名的关于公理化语义的论文《An Axiomatic Basis for Computer Programming》，论文也同样简洁，只有短短6页，前辈们就是这样的，用6页纸就能开宗立派。</p>
<p>再比如高德纳，他在计算机编程方面具有远见卓识，他说：“编程是由一个人告诉另一个人他想让计算机完成什么工作的艺术。”</p>
<p>阅读CS经典著作给读者带来永恒不变的思想，阅读CS理论知识有助于理解CS领域的局限性，开阔读者视野，让读者远离时代的喧嚣，从更朴实无华的角度评估CS领域，从而直接影响当前正在进行的研究。读者通过学习计算机历史，研究杰出科学家的工作、生活，将认识到跻身这一令人尊敬的职业领域和特权社区的真正裨益。此外，先辈轶事会鼓舞年轻学者、普及历史、凝聚社区，促使大家将CS作为一门独立学科和专业进行对待。</p>
<p>SelmaTekir希望他的观点能够提高读者对计算机经典著作的兴趣，由CS专家更新书目，能鼓励他们扩大经典书库范围。 无论教育者还是研究者，阅读经典著作所费之时日不是浪费，而是投资。</p>
<p><strong>《Communications of the ACM》2012年4月文章精选，感谢译者<a href="http://www.weibo.com/u/1765039161">李芳</a>支持</strong></p>
<p><a href="http://www.programmer.com.cn/11062/" target="_blank"><strong>本文选自《程序员》杂志2012年05期，未经允许不得转载。如需转载请联系 market@csdn.net</strong></a></p>
<p><strong><a href="http://dingyue.programmer.com.cn/" target="_blank">《程序员》2012年杂志订阅送好礼活动火热进行中</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmer.com.cn/11680/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>青蛙设计首席创意执行官：一切都是为了创新</title>
		<link>http://www.programmer.com.cn/11659/</link>
		<comments>http://www.programmer.com.cn/11659/#comments</comments>
		<pubDate>Tue, 08 May 2012 09:59:40 +0000</pubDate>
		<dc:creator>baiyuzhong</dc:creator>
				<category><![CDATA[CTO视点]]></category>
		<category><![CDATA[移动专区]]></category>
		<category><![CDATA[高端视点]]></category>
		<category><![CDATA[创新]]></category>
		<category><![CDATA[设计]]></category>

		<guid isPermaLink="false">http://www.programmer.com.cn/?p=11659</guid>
		<description><![CDATA[特约撰稿人 / 西乔 青蛙设计首席创意执行官Mark Rolston在接受《程序员》特约撰稿人西乔的采访时谈到，软件是设计的首要推动力，中国市场也正在意识到需要高品质的设计来帮助产品脱颖而出，并预测数据可视化将成为设计的重要分支，而数字世界和自然世界最终将合二为一。 在创立之初，青蛙设计的目标就是把设计定位为策略性专业与工业和商业相结合，创造出审美和功能兼备的科技产品。1982年，青蛙设计获得了和苹果合作的机会。它提供的设计背离了当时科技产品笨重、单调的外观，提供了一种新的设计语言，其中包括如下一些策略：苹果电脑将会是小巧、干净、白色；所有图形和字体都必须是简洁而有秩序的；最终的外观将由最先进的工厂车间打造，具有灵巧、高科技感的特点。30年过去了，我们可以惊讶地发现，这些策略仍然作为苹果风格的灵魂，沿用至今。今天的青蛙设计早已不再称自己为一家设计公司，而是一家创新公司。正是对创新的不懈追求，加上远见和冒险精神，让青蛙设计从一个间工作室，成长为今天全球尊敬的国际设计巨头。 作为首席创意执行官，Mark Rolston（以下简称Mark）负责青蛙设计的全球创意构想，是数字媒体、用户界面、设计、电子商务和移动应用领域国际公认的专家。作为一个互联网先锋，他于1996年创建青蛙设计的数字媒体部门（Digital Media Design group）。在2000年推动了Dell官网的创新，让其成为迄今为止赢利最高的网站之一，树立了电子商务新标准。又与i2、微软、SAP及SUN等品牌合作，不断改进人们的数字体验。 软件是设计的首要推动力 西乔：不少中国人第一次是从《乔布斯传》中知道青蛙设计。20世纪80年代和乔布斯的两次合作的设计，获得《时代》周刊评选的年度最佳设计奖。与苹果及乔布斯合作的经历给青蛙设计带来了什么？ Mark：1982年，Esslinger（青蛙设计创始人）开始为苹果工作，这段合作经历让我们有机会参与设计了里程碑式的产品。令人印象最深刻是，这种合作关系的性质不是两家公司之间的商业关系，而是像真正的搭档和朋友那样合作。  乔布斯能够敏锐地发现别人的价值，尊重你的价值，和你成为伙伴。人们都知道设计师可以提供重要的价值，但往往只有那些拥有开放价值观的客户才能从中受益。 我们一直都在帮助客户创造有影响力的产品、服务和体验，给他们带来比预期更多的东西，让他们有更多兴趣去挑战。苹果公司是从这类合作关系中受益的一个案例。 西乔：您在1996年创立了青蛙设计的数字媒体部门， 这在当年是很有远见的。是什么样的想法促成了您来做这件事？ Mark：我一直接触计算机，很小就开始学习编程，同时也是一名设计师。我一直在做软件开发，而且希望利用设计让软件变得更好。任何领域的设计师，都梦想能去改变世界，而在那个年代，改变世界的最好方式是通过设计软件。即使你并不亲自使用这些软件，它们也改变了你身边的世界。而当1994年我来到青蛙设计时，我发现这里拥有我想要的一切条件。 那时，青蛙设计已在设计实体产品方面取得很大成功，拥有近30年的丰富经验。但软件设计做得并不多。最初这个部门是帮助已有的工业设计和产品设计部门去解决和软件相关的问题，但很快我们发现很多问题的核心并不是产品的工业设计，而是产品上的软件。所以事情很快发生了改变。到1998年，青蛙设计把注意力转移到了软件设计上。 当时，还有许多人质疑为什么我们投入如此多的精力在软件上。但到2000年时，人人都知道软件是未来，将会是设计的首要推动力。 数字世界和自然世界将合二为一 西乔：当年的数字媒体设计部门现在已发展为青蛙设计的主营业务之一，这充分证明了您当年的前瞻性。作为一个数字设计领域的先锋，在16年后，您对数字化未来有什么预见性看法？是直觉式（intuitive）的设计吗？ Mark：计算机已给人类和社会带来了本质改变，但目前人们还是必须借助特定的设备来操作计算机。你必须拥有一部智能手机，或者桌子上必须放着一台电脑， 这些设备是我们通往软件世界的走廊。但同时它们和自然世界也是分离的。你需要特殊的技能，在特别的场景下去操作它，你离不开按键、屏幕、输入、输出。我认为计算机应该和我们的使用情景融为一体，而不是一个需要转换焦点去进行特殊操作或交互的对象，所以我认为这些设备在未来可能消失。在未来，当我需要打电话或搜索信息时，我能够直接利用身边的环境，用自然的方式来完成这些任务。 不仅是更直觉式的操作方式，而且是真正把数字世界和自然世界合二为一。计算机会变得更加适合与人类交流。交互方式会变得更自然，更符合人类习惯。而触屏技术正是实现这一趋势的突破。在未来，计算机会拥有自己的意识，能够不断学习和识别周围的一切，我们可以和它共处一室，使用语音指令，像与人对话一样在3D空间里和计算机进行沟通。 西乔：您认为未来的终端不会有固定的外形，它将可能存在于任何情境中，是任何东西对吗？ Mark：对，这就好比剑。对于一个统治者，剑最初是武器，但后来就变成了力量的象征和对领土统治的申明。剑的实际功能消失了，象征性的意义保留下来。所以现在我们所理解的终端也会这样，形态会消失，但延伸价值会保留下来。今天我们拥有这些设备，就像剑一样，给你力量。人们也将不再只通过具体的功能来标识某一物理事物。它可以成为任何你希望它成为的东西。人机交互也不再被绑定在某一设备上，而是和环境完全地融入在一起。这一切都是由人机交互界面的快速发展所带来的。我认为人机交互会经过5个阶段的发展。 计算机成为人们生活的一部分。 我们随身携带它。 我们通过它来感知世界。 计算机装备在我们身体上。 我们就是计算机本身。 如今，我们正在给物理世界打上各种标注；我们身边到处都能看到各种形式的计算机、个人电子设备；我们的身体正在变成节点、外围甚至是交互界面本身。也许当我们正在谈论的未来在某一天最终到达时，它可能看起来很理所当然。但时尚不正是把今天看起来奇怪的一切变成明天被普遍接受的事物吗？ 当一个设备可以记录你的健康指数，同时也用于更新你的SNS状态时，想象一下，会发生什么？你的心跳会成为你与别人对话的一部分。 西乔：它们最终会成为人体的一部分吗，比如植入人体？ Mark：当然。但需要花上较长的时间。有可能在未来十年内，开始有小规模的实验，例如植入式的无线电通信设备。假设一下这个场景：当我们想非正式地获得关于我们身体的信息，可以往手臂里植入很小的医疗设备，然后可以得到一些预测信息：例如前一夜的醉酒会让我今天的身体发生些什么？ 西乔：您在2009年关于《The White Box》的演讲中，讨论了移动相关的技术和设计。在那次演讲里您提到了 “第六感设备”（The SixthSense Device），这个概念是在Pranav Mistry的TED演讲中所展示的一种人际交互设备。您记得它吗？ Mark：是的。第六感是一个早期的实验性设计，拥有很好的创意。我们与他们有合作。 西乔：但有人质疑它的可商用性和使用精度。 Mark：我们一直在推进它，寻求更明朗、更高水准的解决方案。 我们尝试将交互界面投影到更多不同的环境中，和新的应用场景结合。而且现在投影设备也有了更好的选择，每一年它都在变得更好。你应该对这个世界充满想象力。这类设备的识别精度，准确度和运算能力都在提高。看到的东西越多，识别能力越强。就像Google，用户的每次搜索，都会让系统变得更加智能，让下一次搜索变得更快、更准确。每天由用户带来的上万次使用，会积累成惊人的结果。这就是商用化的前景。现在我们已知道它可以和电子游戏设备进行连接，你可以期待这种连接很快放到笔记本、智能手机和许多设备上。 数据可视化将成为设计的重要分支 西乔：最近有很多国内外的设计Blog都在推荐青蛙设计最新的一个案例：Bloomberg&#8217;s Big Beautiful Data。它使用了HTML5和实时数据，在风格上也很容易联想到Metro UI。请问您怎样看待Metro UI在设计和交互方式的突破和适用性？ Mark：我认为微软是一家高品质的公司，在某些独特的领域中取得了非凡的成绩。但随着全球层面的产品革新风潮，如果只维持传统风格，它们将会受到很大挑战。微软过去太执着于修补已有的产品，缺乏突破性，如果希望赢得人们对它们设计的尊敬，类似现在苹果公司得到的，还是要走出自我的限制才行。 如今微软能够走出这一步，创造一种属于自己的新的设计语言，是非常好的事情。 Metro UI这套设计语言，要求这个平台上的应用都要符合这种风格，这相当于限制了边界。开发者需要接受良好的训练才能掌控这种风格。成熟的框架是Android和iOS平台成功的原因之一：通过设定一套设计语言，任何文化下的开发者都可以避免混乱，开发出和平台相协调的应用。但同时也有很多弊端，比如增加开发者的学习成本。当希望创造一些框架中没有的独特东西时，也要付出很高的代价。 西乔：这个设计案例同样采用了数据可视化（Data Visualization) 的表现手法。关于数据可视化的应用前景，您怎么看？ Mark：数据可视化会变得非常重要。在过去，数据的获取是有限的，人们也只能利用现有的数据来产生和获取价值，但现在我们拥有了历史积累的海量数据，去解释和分析它们具有重要的意义。世界上大部分数据是未经加工的，我们要做的不仅是把它们图形化，而且是通过结构化数据，对他们进行组合、运算，提炼出更深的含义与价值；不仅是了解个体数据，同时也要获得对整体模式的认知。伴随着数据存储、处理与分析能力的提高，未来它会是一个很大的产业， 成为未来设计的一个重要分支。对于所有人，这都是新的挑战和机会。 所有市场都期待高品质的设计 西乔：青蛙设计在官方网站上提到有一个专长是“中国”，这说明你们对在中国市场的业务非常有信心，对吗？ Mark：我们对任何地区的市场都很有信心。中国是一个每天都在增长并且快速改变的市场。我们在这里花费了大量时间，围绕中国用户的行为和消费者的生活做研究。我们关心他们的想法，他们如何生活，他们的需求是什么，他们希望世界变成什么样？在零售、医疗、消费电子、移动通信、媒体、时尚等诸多领域，我们积累了大量对用户的了解。中国是一个很大的市场，拥有大量的用户和快速变化的节奏。对于该如何开展在中国的业务，引导中国的用户，我们还处于学习的过程中。 西乔：有人总结，在中国，设计的最大的特点是山寨和没品。从历史上看，中国制造的品牌并不重视设计的价值，因为它们的优势就是低研发周期、低成本、低价格竞争，并不在乎拿用户冒险。在这一点上，青蛙设计对待设计的观点，或者说青蛙设计提供的服务，和这些“中国制造”的成功之道并不相符，甚至与它们的节奏和优势是冲突的。在这种情况下，你们仍对中国市场充满信心吗？ Mark：我们相信，任何时候，任何市场，人们都想要高质量、有意义的产品。用户和市场期待突破性的改变。当桌上有20个看起来差不多的手机时，用户的选择会很困难。但如果其中的一款手机做了更好的设计、使用了更好的材料、配备更好的软件，用户的决定将是显而易见的。每一个市场都证明了这一点，如果人们有足够的资源，他们自然会选择更好的，去赋予生活更高的价值。在中国，经济发展使人们拥有了更高的消费能力，去选择拥有出色设计的产品。人们会为了追求更高的品质而花钱。这是伴随经济增长自然而然发生的现象。 我们也接触过制作山寨产品的客户，他们不再想只做山寨产品，而是想要好的原创设计。他们意识到这会给他们带来更大的市场。 另外，中国通常认为他们所面临的版权现状是很特殊的，但所有年轻的市场在开始时都伴随过这种问题。在19世纪，美国也盗版英国的图书而不支付任何版权费用。在不同的历史时期可能表现有所不同，但市场和用户成长的趋势是相同的。品质、创新、标准和清晰是人类共同的追求。 同时，山寨工厂也不仅仅只做了抄袭，它们也从这一过程中获得了技术和经验。最后，技术也会被用于去创造新的东西。市场会激发企业，激发用户。人类与生俱来就拥有创造的激情，这种激情必定也会在中国成长起来。 西乔：中国市场还有一个特点是，用户群的消费能力、消费习惯和使用习惯差异很大，不同地区之间文化差异也很大。你们网站上提到，你们能够分析中国一线城市和农村市场中消费者的行为，来作为创新机会的灵感。在对待中国在用户群和地区的巨大差异问题上，你们有什么心得? Mark：虽然这些差异会限制产品的适应性，但我们试着不去考虑这些，而是把注意力放到用户真正的需求上。他们只是不同的用户，不管生活在大城市还是农村，人们都期待高质量的生活。差别只在于是否有足够的经济能力去得到它而已。 创新是成功的一条捷径 西乔：设计研究和用户研究是青蛙设计的另一个专长，那对设计的研究主要是用于解决客户在发展中遇到的现有问题，还是用于激发灵感、形成创新的产品策略？ Mark：我们所做的一切都是为了创新。设计研究不会确切地告诉你应该去做什么，而是帮助你建立理解和关注重点。最终设计师会从这些灵感中得到信息，获得原创的解决方案。设计研究无法直接回答问题，而是提供一种帮助你解决问题的工具。 西乔：在用户研究中，有两个很难回避的问题：一是用户其实并不知道它们真正想要的是什么，二是统计和数字解决往往并不能真正解读用户的期望。还有人说苹果从来不做用户调研，因为他们做的是超越时代的产品。您同意这种说法吗？ Mark：不，我不这么认为。用户不会直接告诉你他们要的是什么，但如果你多花点时间，就可以了解到他们真正的需求。苹果会做用户研究，但不是以传统的形式。苹果只设计自己会去使用的产品，在设计和开发过程中，设计师、工程师和员工会反复使用他们所创造的产品，在使用过程中不断测试、分析、研究和提升产品。他们自己就是用户，这种关系会驱动他们不断完善设计。而很多其他公司并不是这样，它们会设计一些自己从来不用的产品，也从来没想过要成为这些产品的用户。 对于我而言，我并不一个中国人，但如果我需要为中国用户设计产品，我会亲身实地体验中国用户的生活，来了解他们真正的需要。很多中国公司追求快速的研发周期，不愿意做深入的用户研究。但了解你的用户是非常有价值的事情，你可以变得离他们越来越近。 西乔：在设计研究中，你们主要采取的是定性研究，这会带来一个问题，研究的成功与否非常需要依赖研究者的水平。这就导致这种研究模式难以复制，服务的规模难以扩大，青蛙设计是怎样解决这个困境的，以保持研究质量的稳定？ [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #888888;"><strong>特约撰稿人 / 西乔</strong></span></p>
<p><span style="color: #888888;"><strong>青蛙设计首席创意执行官Mark Rolston在接受《程序员》特约撰稿人西乔的采访时谈到，软件是设计的首要推动力，中国市场也正在意识到需要高品质的设计来帮助产品脱颖而出，并预测数据可视化将成为设计的重要分支，而数字世界和自然世界最终将合二为一。<span id="more-11659"></span></strong></span></p>
<p>在创立之初，青蛙设计的目标就是把设计定位为策略性专业与工业和商业相结合，创造出审美和功能兼备的科技产品。<span style="font-family: 'Times New Roman';">1982</span><span style="font-family: 宋体;">年，青蛙设计获得了和苹果合作的机会。它提供的设计背离了当时科技产品笨重、单调的外观，提供了一种新的设计语言，其中包括如下一些策略：苹果电脑将会是小巧、干净、白色；所有图形和字体都必须是简洁而有秩序的；最终的外观将由最先进的工厂车间打造，具有灵巧、高科技感的特点。</span><span style="font-family: 'Times New Roman';">30</span><span style="font-family: 宋体;">年过去了，我们可以惊讶地发现，这些策略仍然作为苹果风格的灵魂，沿用至今。今天的青蛙设计早已不再称自己为一家设计公司，而是一家创新公司。正是对创新的不懈追求，加上远见和冒险精神，让青蛙设计从一个间工作室，成长为今天全球尊敬的国际设计巨头。</span></p>
<p>作为首席创意执行官，<span style="font-family: 'Times New Roman';">Mark Rolston</span><span style="font-family: 宋体;">（以下简称</span><span style="font-family: 'Times New Roman';">Mark</span><span style="font-family: 宋体;">）负责青蛙设计的全球创意构想，是数字媒体、用户界面、设计、电子商务和移动应用领域国际公认的专家。作为一个互联网先锋，他于</span><span style="font-family: 'Times New Roman';">1996</span><span style="font-family: 宋体;">年创建青蛙设计的数字媒体部门（</span><span style="font-family: 'Times New Roman';">Digital Media Design group</span><span style="font-family: 宋体;">）。在</span><span style="font-family: 'Times New Roman';">2000</span><span style="font-family: 宋体;">年推动了</span><span style="font-family: 'Times New Roman';">Dell</span><span style="font-family: 宋体;">官网的创新，让其成为迄今为止赢利最高的网站之一，树立了电子商务新标准。又与</span><span style="font-family: 'Times New Roman';">i2</span><span style="font-family: 宋体;">、微软、</span><span style="font-family: 'Times New Roman';">SAP</span><span style="font-family: 宋体;">及</span><span style="font-family: 'Times New Roman';">SUN</span><span style="font-family: 宋体;">等品牌合作，不断改进人们的数字体验。</span></p>
<div id="attachment_11660" class="wp-caption aligncenter" style="width: 324px"><img class="size-full wp-image-11660" title="Mark Rolston在1996年创立了青蛙设计的数字媒体部门" src="http://www.programmer.com.cn/wp-content/uploads/2012/05/Mark-Rolston在1996年创立了青蛙设计的数字媒体部门.jpg" alt="" width="314" height="309" /><p class="wp-caption-text">Mark Rolston在1996年创立了青蛙设计的数字媒体部门</p></div>
<p><span style="color: #3366ff;"><strong>软件是设计的首要推动力</strong></span></p>
<p><span style="color: #808080;"><strong>西乔：不少中国人第一次是从《乔布斯传》中知道青蛙设计。20世纪80年代和乔布斯的两次合作的设计，获得《时代》周刊评选的年度最佳设计奖。与苹果及乔布斯合作的经历给青蛙设计带来了什么？</strong></span></p>
<p>Mark<span style="font-family: 宋体;">：</span><span style="font-family: 'Times New Roman';">1982</span><span style="font-family: 宋体;">年，</span><span style="font-family: 'Times New Roman';">Esslinger</span><span style="font-family: 宋体;">（青蛙设计创始人）开始为苹果工作，这段合作经历让我们有机会参与设计了里程碑式的产品。令人印象最深刻是，这种合作关系的性质不是两家公司之间的商业关系，而是像真正的搭档和朋友那样合作。 </span></p>
<p>乔布斯能够敏锐地发现别人的价值，尊重你的价值，和你成为伙伴。人们都知道设计师可以提供重要的价值，但往往只有那些拥有开放价值观的客户才能从中受益。</p>
<p>我们一直都在帮助客户创造有影响力的产品、服务和体验，给他们带来比预期更多的东西，让他们有更多兴趣去挑战。苹果公司是从这类合作关系中受益的一个案例。</p>
<p><strong><span style="color: #808080;">西乔：您在1996年创立了青蛙设计的数字媒体部门， 这在当年是很有远见的。是什么样的想法促成了您来做这件事？</span></strong></p>
<p>Mark<span style="font-family: 宋体;">：我一直接触计算机，很小就开始学习编程，同时也是一名设计师。我一直在做软件开发，而且希望利用设计让软件变得更好。任何领域的设计师，都梦想能去改变世界，而在那个年代，改变世界的最好方式是通过设计软件。即使你并不亲自使用这些软件，它们也改变了你身边的世界。而当</span><span style="font-family: 'Times New Roman';">1994</span><span style="font-family: 宋体;">年我来到青蛙设计时，我发现这里拥有我想要的一切条件。</span></p>
<p>那时，青蛙设计已在设计实体产品方面取得很大成功，拥有近<span style="font-family: 'Times New Roman';">30</span><span style="font-family: 宋体;">年的丰富经验。但软件设计做得并不多。最初这个部门是帮助已有的工业设计和产品设计部门去解决和软件相关的问题，但很快我们发现很多问题的核心并不是产品的工业设计，而是产品上的软件。所以事情很快发生了改变。到</span><span style="font-family: 'Times New Roman';">1998</span><span style="font-family: 宋体;">年，青蛙设计把注意力转移到了软件设计上。</span></p>
<p>当时，还有许多人质疑为什么我们投入如此多的精力在软件上。但到<span style="font-family: 'Times New Roman';">2000</span><span style="font-family: 宋体;">年时，人人都知道软件是未来，将会是设计的首要推动力。</span></p>
<p><span style="color: #3366ff;"><strong>数字世界和自然世界将合二为一</strong></span></p>
<p><span style="color: #808080;"><strong>西乔：当年的数字媒体设计部门现在已发展为青蛙设计的主营业务之一，这充分证明了您当年的前瞻性。作为一个数字设计领域的先锋，在16年后，您对数字化未来有什么预见性看法？是直觉式（intuitive）的设计吗？</strong></span></p>
<p>Mark<span style="font-family: 宋体;">：计算机已给人类和社会带来了本质改变，但目前人们还是必须借助特定的设备来操作计算机。你必须拥有一部智能手机，或者桌子上必须放着一台电脑， 这些设备是我们通往软件世界的走廊。但同时它们和自然世界也是分离的。你需要特殊的技能，在特别的场景下去操作它，你离不开按键、屏幕、输入、输出。我认为计算机应该和我们的使用情景融为一体，而不是一个需要转换焦点去进行特殊操作或交互的对象，所以我认为这些设备在未来可能消失。在未来，当我需要打电话或搜索信息时，我能够直接利用身边的环境，用自然的方式来完成这些任务。</span></p>
<p>不仅是更直觉式的操作方式，而且是真正把数字世界和自然世界合二为一。计算机会变得更加适合与人类交流。交互方式会变得更自然，更符合人类习惯。而触屏技术正是实现这一趋势的突破。在未来，计算机会拥有自己的意识，能够不断学习和识别周围的一切，我们可以和它共处一室，使用语音指令，像与人对话一样在<span style="font-family: 'Times New Roman';">3D</span><span style="font-family: 宋体;">空间里和计算机进行沟通。</span></p>
<p><span style="color: #808080;"><strong>西乔：您认为未来的终端不会有固定的外形，它将可能存在于任何情境中，是任何东西对吗？</strong></span></p>
<p>Mark<span style="font-family: 宋体;">：对，这就好比剑。对于一个统治者，剑最初是武器，但后来就变成了力量的象征和对领土统治的申明。剑的实际功能消失了，象征性的意义保留下来。所以现在我们所理解的终端也会这样，形态会消失，但延伸价值会保留下来。今天我们拥有这些设备，就像剑一样，给你力量。人们也将不再只通过具体的功能来标识某一物理事物。它可以成为任何你希望它成为的东西。人机交互也不再被绑定在某一设备上，而是和环境完全地融入在一起。这一切都是由人机交互界面的快速发展所带来的。我认为人机交互会经过</span><span style="font-family: 'Times New Roman';">5</span><span style="font-family: 宋体;">个阶段的发展。</span></p>
<ul>
<li>计算机成为人们生活的一部分。</li>
<li>我们随身携带它。</li>
<li>我们通过它来感知世界。</li>
<li>计算机装备在我们身体上。</li>
<li>我们就是计算机本身。</li>
</ul>
<p>如今，我们正在给物理世界打上各种标注；我们身边到处都能看到各种形式的计算机、个人电子设备；我们的身体正在变成节点、外围甚至是交互界面本身。也许当我们正在谈论的未来在某一天最终到达时，它可能看起来很理所当然。但时尚不正是把今天看起来奇怪的一切变成明天被普遍接受的事物吗？</p>
<p>当一个设备可以记录你的健康指数，同时也用于更新你的<span style="font-family: 'Times New Roman';">SNS</span><span style="font-family: 宋体;">状态时，想象一下，会发生什么？你的心跳会成为你与别人对话的一部分。</span></p>
<p><span style="color: #808080;"><strong>西乔：它们最终会成为人体的一部分吗，比如植入人体？</strong></span></p>
<p>Mark<span style="font-family: 宋体;">：当然。但需要花上较长的时间。有可能在未来十年内，开始有小规模的实验，例如植入式的无线电通信设备。假设一下这个场景：当我们想非正式地获得关于我们身体的信息，可以往手臂里植入很小的医疗设备，然后可以得到一些预测信息：例如前一夜的醉酒会让我今天的身体发生些什么？</span></p>
<p><span style="color: #808080;"><strong>西乔：您在2009年关于《The White Box》的演讲中，讨论了移动相关的技术和设计。在那次演讲里您提到了 “第六感设备”（The SixthSense Device），这个概念是在Pranav Mistry的TED演讲中所展示的一种人际交互设备。您记得它吗？</strong></span></p>
<p>Mark<span style="font-family: 宋体;">：是的。第六感是一个早期的实验性设计，拥有很好的创意。我们与他们有合作。</span></p>
<p><span style="color: #808080;"><strong>西乔：但有人质疑它的可商用性和使用精度。</strong></span></p>
<p>Mark<span style="font-family: 宋体;">：我们一直在推进它，寻求更明朗、更高水准的解决方案。 我们尝试将交互界面投影到更多不同的环境中，和新的应用场景结合。而且现在投影设备也有了更好的选择，每一年它都在变得更好。你应该对这个世界充满想象力。这类设备的识别精度，准确度和运算能力都在提高。看到的东西越多，识别能力越强。就像</span><span style="font-family: 'Times New Roman';">Google</span><span style="font-family: 宋体;">，用户的每次搜索，都会让系统变得更加智能，让下一次搜索变得更快、更准确。每天由用户带来的上万次使用，会积累成惊人的结果。这就是商用化的前景。现在我们已知道它可以和电子游戏设备进行连接，你可以期待这种连接很快放到笔记本、智能手机和许多设备上。</span></p>
<p><span style="color: #3366ff;"><strong>数据可视化将成为设计的重要分支</strong></span></p>
<p><span style="color: #808080;"><strong>西乔：最近有很多国内外的设计Blog都在推荐青蛙设计最新的一个案例：Bloomberg&#8217;s Big Beautiful Data。它使用了HTML5和实时数据，在风格上也很容易联想到Metro UI。请问您怎样看待Metro UI在设计和交互方式的突破和适用性？</strong></span></p>
<p>Mark<span style="font-family: 宋体;">：我认为微软是一家高品质的公司，在某些独特的领域中取得了非凡的成绩。但随着全球层面的产品革新风潮，如果只维持传统风格，它们将会受到很大挑战。微软过去太执着于修补已有的产品，缺乏突破性，如果希望赢得人们对它们设计的尊敬，类似现在苹果公司得到的，还是要走出自我的限制才行。 如今微软能够走出这一步，创造一种属于自己的新的设计语言，是非常好的事情。</span></p>
<p>Metro UI<span style="font-family: 宋体;">这套设计语言，要求这个平台上的应用都要符合这种风格，这相当于限制了边界。开发者需要接受良好的训练才能掌控这种风格。成熟的框架是</span><span style="font-family: 'Times New Roman';">Android</span><span style="font-family: 宋体;">和</span><span style="font-family: 'Times New Roman';">iOS</span><span style="font-family: 宋体;">平台成功的原因之一：通过设定一套设计语言，任何文化下的开发者都可以避免混乱，开发出和平台相协调的应用。但同时也有很多弊端，比如增加开发者的学习成本。当希望创造一些框架中没有的独特东西时，也要付出很高的代价。</span></p>
<p><span style="color: #808080;"><strong>西乔：这个设计案例同样采用了数据可视化（Data Visualization) 的表现手法。关于数据可视化的应用前景，您怎么看？</strong></span></p>
<p>Mark<span style="font-family: 宋体;">：数据可视化会变得非常重要。在过去，数据的获取是有限的，人们也只能利用现有的数据来产生和获取价值，但现在我们拥有了历史积累的海量数据，去解释和分析它们具有重要的意义。世界上大部分数据是未经加工的，我们要做的不仅是把它们图形化，而且是通过结构化数据，对他们进行组合、运算，提炼出更深的含义与价值；不仅是了解个体数据，同时也要获得对整体模式的认知。伴随着数据存储</span>、处理与分析能力的提高，未来它会是一个很大的产业， 成为未来设计的一个重要分支。对于所有人，这都是新的挑战和机会。</p>
<p><span style="color: #3366ff;"><strong>所有市场都期待高品质的设计</strong></span></p>
<p><span style="color: #808080;"><strong>西乔：青蛙设计在官方网站上提到有一个专长是“中国”，这说明你们对在中国市场的业务非常有信心，对吗？</strong></span></p>
<p>Mark<span style="font-family: 宋体;">：我们对任何地区的市场都很有信心。中国是一个每天都在增长并且快速改变的市场。我们在这里花费了大量时间，围绕中国用户的行为和消费者的生活做研究。我们关心他们的想法，他们如何生活，他们的需求是什么，他们希望世界变成什么样？在零售、医疗、消费电子、移动通信、媒体、时尚等诸多领域，我们积累了大量对用户的了解。中国是一个很大的市场，拥有大量的用户和快速变化的节奏。对于该如何开展在中国的业务，引导中国的用户，我们还处于学习的过程中。</span></p>
<p><span style="color: #808080;"><strong>西乔：有人总结，在中国，设计的最大的特点是山寨和没品。从历史上看，中国制造的品牌并不重视设计的价值，因为它们的优势就是低研发周期、低成本、低价格竞争，并不在乎拿用户冒险。在这一点上，青蛙设计对待设计的观点，或者说青蛙设计提供的服务，和这些“中国制造”的成功之道并不相符，甚至与它们的节奏和优势是冲突的。在这种情况下，你们仍对中国市场充满信心吗？</strong></span></p>
<p>Mark<span style="font-family: 宋体;">：我们相信，任何时候，任何市场，人们都想要高质量、有意义的产品。用户和市场期待突破性的改变。当桌上有</span><span style="font-family: 'Times New Roman';">20</span><span style="font-family: 宋体;">个看起来差不多的手机时，用户的选择会很困难。但如果其中的一款手机做了更好的设计、使用了更好的材料、配备更好的软件，用户的决定将是显而易见的。每一个市场都证明了这一点，如果人们有足够的资源，他们自然会选择更好的，去赋予生活更高的价值。在中国，经济发展使人们拥有了更高的消费能力，去选择拥有出色设计的产品。人们会为了追求更高的品质而花钱。这是伴随经济增长自然而然发生的现象。</span></p>
<p>我们也接触过制作山寨产品的客户，他们不再想只做山寨产品，而是想要好的原创设计。他们意识到这会给他们带来更大的市场。</p>
<p>另外，中国通常认为他们所面临的版权现状是很特殊的，但所有年轻的市场在开始时都伴随过这种问题。在<span style="font-family: 'Times New Roman';">19</span><span style="font-family: 宋体;">世纪，美国也盗版英国的图书而不支付任何版权费用。在不同的历史时期可能表现有所不同，但市场和用户成长的趋势是相同的。品质、创新、标准和清晰是人类共同的追求。</span></p>
<p>同时，山寨工厂也不仅仅只做了抄袭，它们也从这一过程中获得了技术和经验。最后，技术也会被用于去创造新的东西。市场会激发企业，激发用户。人类与生俱来就拥有创造的激情，这种激情必定也会在中国成长起来。</p>
<p><span style="color: #888888;"><strong>西乔：中国市场还有一个特点是，用户群的消费能力、消费习惯和使用习惯差异很大，不同地区之间文化差异也很大。你们网站上提到，你们能够分析中国一线城市和农村市场中消费者的行为，来作为创新机会的灵感。在对待中国在用户群和地区的巨大差异问题上，你们有什么心得?</strong></span></p>
<p>Mark<span style="font-family: 宋体;">：虽然这些差异会限制产品的适应性，但我们试着不去考虑这些，而是把注意力放到用户真正的需求上。他们只是不同的用户，不管生活在大城市还是农村，人们都期待高质量的生活。差别只在于是否有足够的经济能力去得到它而已。</span></p>
<p><span style="color: #3366ff;"><strong>创新是成功的一条捷径</strong></span></p>
<p><span style="color: #808080;"><strong>西乔：设计研究和用户研究是青蛙设计的另一个专长，那对设计的研究主要是用于解决客户在发展中遇到的现有问题，还是用于激发灵感、形成创新的产品策略？</strong></span></p>
<p>Mark<span style="font-family: 宋体;">：我们所做的一切都是为了创新。设计研究不会确切地告诉你应该去做什么，而是帮助你建立理解和关注重点。最终设计师会从这些灵感中得到信息，获得原创的解决方案。设计研究无法直接回答问题，而是提供一种帮助你解决问题的工具。</span></p>
<p><span style="color: #808080;"><strong>西乔：在用户研究中，有两个很难回避的问题：一是用户其实并不知道它们真正想要的是什么，二是统计和数字解决往往并不能真正解读用户的期望。还有人说苹果从来不做用户调研，因为他们做的是超越时代的产品。您同意这种说法吗？</strong></span></p>
<p>Mark<span style="font-family: 宋体;">：不，我不这么认为。用户不会直接告诉你他们要的是什么，但如果你多花点时间，就可以了解到他们真正的需求。苹果会做用户研究，但不是以传统的形式。苹果只设计自己会去使用的产品，在设计和开发过程中，设计师、工程师和员工会反复使用他们所创造的产品，在使用过程中不断测试、分析、研究和提升产品。他们自己就是用户，这种关系会驱动他们不断完善设计。而很多其他公司并不是这样，它们会设计一些自己从来不用的产品，也从来没想过要成为这些产品的用户。</span></p>
<p>对于我而言，我并不一个中国人，但如果我需要为中国用户设计产品，我会亲身实地体验中国用户的生活，来了解他们真正的需要。很多中国公司追求快速的研发周期，不愿意做深入的用户研究。但了解你的用户是非常有价值的事情，你可以变得离他们越来越近。</p>
<p><strong><span style="color: #808080;">西乔：在设计研究中，你们主要采取的是定性研究，这会带来一个问题，研究的成功与否非常需要依赖研究者的水平。这就导致这种研究模式难以复制，服务的规模难以扩大，青蛙设计是怎样解决这个困境的，以保持研究质量的稳定？</span></strong></p>
<p>Mark<span style="font-family: 宋体;">：我们通过创建和培养企业文化来解决这个问题。青蛙设计有很好的传统与方法去传授它的设计研究思想和创新文化，让员工具备高水准的技巧和能力。同时我们在做设计研究时，不仅只有分析师和研究者，设计师也会参与整个过程，当他们在观察用户时，同时也在考虑方案。青蛙设计在设计方法的一个重要特点正是将设计和研究相结合。</span></p>
<p><span style="color: #888888;"><strong>西乔：产品主要关注的是给用户带去的价值；商业主要关注如何赢利；而创新则更关注如何超越期待，获得更高更长久的利益，这三者有一致也有冲突，你们是如何帮助客户平衡它们的？</strong></span></p>
<p>Mark<span style="font-family: 宋体;">：我们的很多客户也问过这种问题，但在成功的产品和设计中，这三者是不冲突的。开发一个好的产品，可以让你获得更大的市场，赢得更高的利润。同时一个好的产品也一定离不开创新。创新实际上提供了一种更新、更容易的方式让你赢得市场。</span><span style="font-family: 'Times New Roman';">iPhone</span><span style="font-family: 宋体;">的成功就是最有说服力的案例。因此，解决冲突的方法就是创造最好的产品、最好的设计。</span></p>
<p>但对于青蛙设计而言，所面对的最大挑战便是去说服我们的客户。他们觉得已花了很多钱在设计上。但这不仅仅是投入多少钱的问题，而是要投入精力，去重视产品和设计的价值。</p>
<p><span style="color: #808080;"><strong>西乔：中国的客户更难被说服吗？</strong></span></p>
<p>Mark<span style="font-family: 宋体;">：是的。但这只是时间问题。市场在不断成长，企业会感到更多的竞争压力。比如华为，当我们第一次与它们合作时，它们并没有感到太多竞争，它们有自己的特长。但如今，它们开始希望通过更好的产品设计来取得更大的优势。有许多成功的公司，都利用设计策略让自己更具个性，在竞争中脱颖而出。不仅是传统意义上的产品设计，还包括利用创新的方法和程序去改造生产流程。重视产品品质和创新，对于用户和企业是双赢的，既改善了普通人的生活和产品体验，也为世界带来更多价值。</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="http://www.programmer.com.cn/11512/" target="_blank"><strong>本文选自《程序员》杂志2012年05期，未经允许不得转载。如需转载请联系 market@csdn.net</strong></a></p>
<p><strong><a href="http://dingyue.programmer.com.cn/" target="_blank">《程序员》2012年杂志订阅送好礼活动火热进行中</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programmer.com.cn/11659/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

