<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title></title>
		<link>http://www.eoss.cn/blog/category//</link>
		<description>一个不安分的程序员对技术和商业的思考...</description>
		<copyright>Powered by SaBlog-X. Copyright (C) 2003-2009.</copyright>
		<generator>SaBlog-X Version Plus 2.0 Build 20090308</generator>
		<lastBuildDate>Sat, 04 Feb 2012 23:45:20 +0000</lastBuildDate>
		<ttl>30</ttl>
		<item>
			<guid>http://www.eoss.cn/blog/usability1/</guid>
			<title>易用性简谈-从UML和Hibernate说开去</title>
			<author>shine</author>
			<description><![CDATA[乐在其中 ( http://www.eoss.cn/blog/ ) : <p>最近在CSDN上看到一篇文章《UML正日薄西山的13个理由》，说出了我一直想说的话，我一直认为UML就是一种&ldquo;符号暴力&rdquo;。一直想写一篇关于易用性的文章，易用性对于软件开发而言关系到用户学习和使用的难度，也就进一步关系到了开发的效率和质量。对易用性的看法还没来得及仔细梳理，简单谈谈目前想到的两条：</p>
<p>1、图形化&ne;易用性</p>
<p>很好的例子就是UML。</p>
<p>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="ProgId" content="Word.Document">
<meta name="Generator" content="Microsoft Word 11">
<meta name="Originator" content="Microsoft Word 11">
<link rel="File-List" href="file:///C:%5CTEMP%5Cmsohtml1%5C01%5Cclip_filelist.xml" /><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:PunctuationKerning />
<w:ValidateAgainstSchemas />
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:BreakWrappedTables />
<w:SnapToGridInCell />
<w:WrapTextWithPunct />
<w:UseAsianBreakRules />
<w:DontGrowAutofit />
<w:UseFELayout />
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" LatentStyleCount="156">
</w:LatentStyles>
</xml><![endif]--><style type="text/css">
<!--
 /* Font Definitions */
 @font-face
	{font-family:宋体;
	panose-1:2 1 6 0 3 1 1 1 1 1;
	mso-font-alt:SimSun;
	mso-font-charset:134;
	mso-generic-font-family:auto;
	mso-font-pitch:variable;
	mso-font-signature:3 135135232 16 0 262145 0;}
@font-face
	{font-family:"\@宋体";
	panose-1:2 1 6 0 3 1 1 1 1 1;
	mso-font-charset:134;
	mso-generic-font-family:auto;
	mso-font-pitch:variable;
	mso-font-signature:3 135135232 16 0 262145 0;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-parent:"";
	margin:0in;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman";
	mso-fareast-font-family:宋体;}
@page Section1
	{size:8.5in 11.0in;
	margin:1.0in 1.25in 1.0in 1.25in;
	mso-header-margin:.5in;
	mso-footer-margin:.5in;
	mso-paper-source:0;}
div.Section1
	{page:Section1;}
--><br></style><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0in 5.4pt 0in 5.4pt;
mso-para-margin:0in;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]-->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="ProgId" content="Word.Document">
<meta name="Generator" content="Microsoft Word 11">
<meta name="Originator" content="Microsoft Word 11">
<link rel="File-List" href="file:///C:%5CTEMP%5Cmsohtml1%5C01%5Cclip_filelist.xml" /><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:PunctuationKerning />
<w:ValidateAgainstSchemas />
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:BreakWrappedTables />
<w:SnapToGridInCell />
<w:WrapTextWithPunct />
<w:UseAsianBreakRules />
<w:DontGrowAutofit />
<w:UseFELayout />
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" LatentStyleCount="156">
</w:LatentStyles>
</xml><![endif]--><style type="text/css">
<!--
 /* Font Definitions */
 @font-face
	{font-family:宋体;
	panose-1:2 1 6 0 3 1 1 1 1 1;
	mso-font-alt:SimSun;
	mso-font-charset:134;
	mso-generic-font-family:auto;
	mso-font-pitch:variable;
	mso-font-signature:3 135135232 16 0 262145 0;}
@font-face
	{font-family:"\@宋体";
	panose-1:2 1 6 0 3 1 1 1 1 1;
	mso-font-charset:134;
	mso-generic-font-family:auto;
	mso-font-pitch:variable;
	mso-font-signature:3 135135232 16 0 262145 0;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-parent:"";
	margin:0in;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman";
	mso-fareast-font-family:宋体;}
@page Section1
	{size:8.5in 11.0in;
	margin:1.0in 1.25in 1.0in 1.25in;
	mso-header-margin:.5in;
	mso-footer-margin:.5in;
	mso-paper-source:0;}
div.Section1
	{page:Section1;}
-->≠</style><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0in 5.4pt 0in 5.4pt;
mso-para-margin:0in;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]--></meta>
</meta>
</meta>
</meta>
</meta>
</meta>
</meta>
</meta>
</p>
<p>2、自动化&ne;易用性</p>
<p>显然自动化的目的是为了易用性，但并不是所有的自动化都能够带来正面效益。以Hibernate为例，一旦自动化的设计超出了普通人的心智模型，往往会带来负面影响。我曾写过一篇批评Hibernate的文章，也引起了很大的争议，我承认只要有足够的时间和足够的细心，存在能够把Hibernate学到精通的人，但在现实的环境中，影响到时间和细心程度的因素实在太多了，有时我们不得不为Hibernate的这种复杂的自动化说埋下的隐患买单。</p>
<p>那么什么才是好的易用性，这个话题又可以谈很多，这里只归纳一条：Simple is Best.</p>
<p>附：UML正日薄西山的13个理由</p>
<p><span style="background-color: rgb(192, 192, 192);">编者按：UML开发社区最近流失了一批开发者和拥趸，对一种软件设计技术来说，这意味着它正趋于下滑。而且它的发展趋于一个不利的方向：UML已经开始变得官僚化。本文作者罗列13个理由，以此来分析为何UML正日薄西山。</span></p>
<p><span style="background-color: rgb(192, 192, 192);"><strong>由委员会设计</strong></span></p>
<p><span style="background-color: rgb(192, 192, 192);"> 从长远来看这是导致语言或技术失败的一个主要和常见的原因，CORBA就是最好的例子。</span></p>
<p><span style="background-color: rgb(192, 192, 192);"><strong>过分注重商业化</strong></span></p>
<p><span style="background-color: rgb(192, 192, 192);"> 试图为一门不够成熟的技术出售工具而且只对工程的管理部门承诺什么，这只能是一种短期有效的方法。有时候人们会认识到这样的成本远大于收益，这也让程序员在本能上非常厌恶。另一些人因为工程管理部门的要求或好奇心而尝试这些工具，但大都使用不超过一个工程就弃用了。</span></p>
<p><span style="background-color: rgb(192, 192, 192);"><strong>太过激进地想把几乎一切都涵盖起来（UML规范超过800页）</strong></span></p>
<p><span style="background-color: rgb(192, 192, 192);"> 当你试图为一个领域内的每个问题都提供一个解决方案的时候，最终你会发现其实你没有提供任何有效的解决方法。UML试图解决所有与软件开发相关的问题。试图涵盖一切是一个不可能的任务，即使规范有800页，UML也只是覆盖了复杂的软件工程领域的一部分。</span></p>
<p><span style="background-color: rgb(192, 192, 192);"><strong>背离了开发者的最初目的</strong></span></p>
<p><span style="background-color: rgb(192, 192, 192);"> 作为一名程序员，我喜欢UML为设计通讯等内容而提供的标准化，能够使用一套通用的符号来与其他的程序员或者设计师交流我的想法真的很棒。我想大多数程序 员仍然只是使用类图表，或者在他们写一份文件的序列图时偶尔用一下。然而，UML开始使用那些即便是商务人士都不懂的面向商业的类图表。</span></p>
<p><span style="background-color: rgb(192, 192, 192);"><strong>概念膨胀</strong></span></p>
<p><span style="background-color: rgb(192, 192, 192);"> 在过去的10-15年里，UML一直试图概括所有流行语言的概念。现实么？</span></p>
<p><span style="background-color: rgb(192, 192, 192);"><strong>总在追赶新的语言和概念</strong></span></p>
<p><span style="background-color: rgb(192, 192, 192);"> 承接上一点，既然UML承诺全语言的代码生成，就意味着它必须包含每一种特殊的语言架构。</span></p>
<p><span style="background-color: rgb(192, 192, 192);"><strong>试图成为一门编程语言</strong></span></p>
<p><span style="background-color: rgb(192, 192, 192);">由于能够生成全代码，所以实际上UML试图成为一门编程语言，而一种通用的图形编程语言存在很大的问题。在人类历史上，所有语言的手写形式都是从图 形到文本，在捕捉和传递思想方面，字母表证明比图像更具表达力。如果试图用图形描述每个流程，那必须还得使用语言来注释这些图形。图形在形象化人们的思维 和概念方面确实有效，但是在描述细节方面语言更有效。</span></p>
<p><span style="background-color: rgb(192, 192, 192);"><strong>需要昂贵的工具还是只需要一个文本编辑器</strong></span></p>
<p><span style="background-color: rgb(192, 192, 192);"> 要想真正地UML入门，要求很高，他们需要训练，因为他们不是时时刻刻都在使用最直观的工具。咨询公司会喜欢UML的这一特性，因为这意味着昂贵的培训课程。</span></p>
<p><span style="background-color: rgb(192, 192, 192);"><strong>缺乏模型清晰度（model clarity）</strong></span></p>
<p><span style="background-color: rgb(192, 192, 192);">  图形读不懂我听到很多开发者在理解UML图解的设计时发出这样的抱怨，最终不得不通过读代码来理解。</span></p>
<p><span style="background-color: rgb(192, 192, 192);"><strong>缺乏真正软件设计的问题解决方法</strong></span></p>
<p><span style="background-color: rgb(192, 192, 192);"> UML规范很多，却没有软件系统常见问题的好的解决方法。随便举个例子：</span></p>
<p><span style="background-color: rgb(192, 192, 192);"> 没有多任务和任务间通信的解决方案；</span></p>
<p><span style="background-color: rgb(192, 192, 192);"> 没有用例（use cases）之间的依赖</span></p>
<p><span style="background-color: rgb(192, 192, 192);"><strong>假设你在写第一行代码前就知道一切</strong></span></p>
<p><span style="background-color: rgb(192, 192, 192);"> 编写使用手册，然后在此基础上顺利成章地生成代码但这可能无法实现。由于在实践中一切都是动态的，所以UML图表如果要与代码保持一致，它的维护就变得非常麻烦，开发者对此很反感。</span></p>
<p><span style="background-color: rgb(192, 192, 192);">对待软件开发就像对待制造业</span></p>
<p><span style="background-color: rgb(192, 192, 192);"> 软件设计不是制造业，软件创作是一种创造性的活动，更加是工艺或者艺术。UML试图标准化和形式化开发者的想象力和才智。</span></p>
<p><span style="background-color: rgb(192, 192, 192);"><strong>UML工具的目标错误</strong></span></p>
<p><span style="background-color: rgb(192, 192, 192);"> 大部分的UML工具承诺代码生成，然而大多数时候它们都是没用的，因为只是生成了没有逻辑的空的类别本体。而且这很笨重和繁琐，因为开发者必须保持代码和图表的同步。有开发者不得不使用丑陋格式的评论来进行标记。</span></p>
<p><span style="background-color: rgb(192, 192, 192);"> 这些工具的另一个问题是屏幕上呈现的有效图表元素的数量。很多次我查看一个UML图表或者一个复杂的系统，但只能看到一角，根本无法帮助全局的理解。</span></p>
<p><span style="background-color: rgb(192, 192, 192);"> 而且，很多使用UML完成的工程，其最终的代码与最初的UML图表并不一致。</span></p>
<p><span style="background-color: rgb(192, 192, 192);"> 我也不认为代码生成是个好主意，一般来说生成的都是复杂的代码，而大部分工程可能使用库中的公用代码更好。</span></p>
<p><span style="background-color: rgb(192, 192, 192);">  你怎么看待UML呢？</span></p>
<p>&nbsp;</p>]]></description>
			<link>http://www.eoss.cn/blog/usability1/</link>
			<category domain="http://www.eoss.cn/blog/category/pm/">产品经理</category>
			<pubDate>2010-01-07 17:38</pubDate>
		</item>
		<item>
			<guid>http://www.eoss.cn/blog/my_view_about_pm/</guid>
			<title>我对产品经理的看法</title>
			<author>shine</author>
			<description><![CDATA[乐在其中 ( http://www.eoss.cn/blog/ ) : <p>在网上看到不少对产品经理这个职位的抱怨：<br />
<br />
&ldquo;兄弟做了6年PM--PD了 产品经理 产品总监 就是一个受气的工作 就是一个杂的工作 PM在北京最多就20000（大公司）可是说实在的运营内容 技术 市场 BD 那个部门都是你爷爷 天天的追着他们提需求 像个高级的文档写手 写文档 还要伺候爷爷一样 求着技术干天呀我真佩服我自己 这么多年 是怎么熬过来的 人家说 干产品的 要脾气好的 有个性的 基本就别考虑这个职位了&rdquo;<br />
<br />
&ldquo;压力太大，每天被人challenge，每天协调一堆又一堆的人，每天一堆破事，555555555555555555555555555555，真想去做家庭主妇。。。&rdquo;<br />
<br />
在我看来造成这种情况的原因在于国内对产品经理认识的错误。产品经理是一个从国外引进的概念，做的工作就是以产品为中心来协调跨部门合作，职责贯穿产品的整个生命周期。从产品经理的定义看来，其管的确实是产品而不是人。但是老祖宗们几千年前就教导我们&ldquo;橘生淮南则为橘，生于淮北则为枳&rdquo;，对于产品经理也是一样，我们不能简单的生搬硬套国外的模式。以IT行业为例，先来看看产品经理在国外为什么玩得转：<br />
1、国外工程师一般都有10万美元的年薪，如果去掉汇率，数值上大致与国内相等，但物价水平却低得多，福利水平高，生活压力不大，在国内的工程师为离谱的房价，沉重的生活压力伤脑筋的时候，国外的工程师想的却是游艇这类高档的消费品，这就决定了国外的工程师选择工作往往是从兴趣出发，而国内的工程师则是从生计出发。<br />
2、国外的企业一般有良好的制度保证，而国内一般在这方面比较欠缺。<br />
3、产品经理需要协调多个部门，一般需要在企业具有一定的资历，不是国内刚毕业几年的产品经理能胜任的。<br />
<br />
人是利益驱动的，一味强调产品经理的软能力，而没有合适的没有胡萝卜或大棒，就算你是一个总裁的料也玩不转。所以，只要有利于产品，就大胆的提出这些权力要求，不要拘泥于形式！<br />
<br />
另一方面，从上面的抱怨中还可以看到，国内大多数所谓的产品经理其实是产品设计师或者产品市场策划之类的工作，产品经理需要的是既懂技术又懂商业的复合型人才，只有这样的人才能压众。</p>]]></description>
			<link>http://www.eoss.cn/blog/my_view_about_pm/</link>
			<category domain="http://www.eoss.cn/blog/category/pm/">产品经理</category>
			<pubDate>2009-05-12 16:45</pubDate>
		</item>
	</channel>
</rss>

