2009年5月16日星期六

blogspot在中国大陆再次被封

blogspot在中国大陆再次被封,气愤!!!!
blogspot is blocked in china.

这个博客即将关闭,博客另寻新址。
I will leave blogspot soon and stop refresh my blog here....

bye.

2009年5月10日星期日

Java性能优化之实时性[3]

——万事开头难


如果你的应用程序能够满足内存和速度的要求,有时还是不够的,对于某些应用程序来说,尤其是实时系统,它还必须满足良好的用户体验,这就要求你的程序能够做到好的实时性。

关于用户体验,有很多心理学的研究。如果你了解用户懒惰和缺乏耐心等心理,你也许会更加明白,实时性有时会如此重要。相关的文章比如网站打开速度的心理学人之初,性本懒 等等。但是实时性的要求也不局限于用户体验,有许多被称之为 RT 应用的程序要求必须严格地满足实时同步需求,比如控制飞机方向的应用程序不能够有任何原因的延迟,否则将导致灾难性的后果。

由于很多重要原因,Java 语言在实时系统中的应用非常有限,导致Java写出来的应用程序有时实时性很差。这些原因包括 Java 语言设计中固有的不确定性性能影响,例如动态类加载,以及 Java 运行时环境(Java Runtime Environment,JRE)本身的不确定性性能影响,例如垃圾收集器和本地代码编译。

当然,为了解决这些问题,使得Java能够用来构建实时系统,一些规范应运而生,比如RTSJ。关于实时系统和RTSJ,可以参照文章:实时 Java: 使用 Java 语言编写实时系统或者这里的转载。我这里不再赘述。

我主要讲一下我碰到的一个例子: 在某些Swing应用程序中发现,做某些操作时,第一次总是比较慢,以后就好了,有时候时间相差一个数量级,导致使用起来达不到正常的用户RT需求,用户就不高兴了,这正是没有满足用户缺乏耐心的需求,可以说是软障碍。为什么第一次总是比较慢呢,第一次新建慢,第一次编辑慢,第一次弹出某个对话框也慢?这真是奇怪。我之所以出现这样的困惑,其实是因为那时候我还不理解类加载和本地代码编译的具体细节。

在运行时,当我们想生成这个类的对象时,JVM首先检查这个类的Class对象是否已经加载。如果尚未加载,JVM就会根据类名查找.class文件,并将其载入内存。一个与 Java 一致的 JVM 必须延迟加载类,直到程序第一次引用该类。根据被加载类所在的介质(磁盘或其他)的速度、类的大小、类加载器本身的开销,类加载的时间有所不同。加载类的延迟通常高达 10 毫秒。如果需要加载几十或几百个类,则加载时间本身就会引起很长时间的意外延迟。仔细地设计应用程序,使应用程序在启动时加载所有的类,但是这必须手动完成,因为 Java 语言规范不让 JVM 提前执行这一步。

再让我们来看看编译:将 Java 代码编译为本地代码引发了与类加载类似的问题。大多数现代 JVM 开始先解释 Java 方法,然后仅将频繁执行的方法编译成本地代码。延迟编译促成了快速启动,并减少了应用程序运行期间执行的编译数量。但是使用解释后的代码执行任务和使用编译后的代码执行任务在时间上有巨大的差异。对于硬 RT 应用程序来说,由于无法预测何时发生编译,将导致很大程度的不确定性,从而无法有效地规划应用程序的行为。对于类加载,通过在应用程序启动阶段使用 Compiler 类以编程的方式编译方法可以减轻这一问题,但是维护这样的方法非常乏味并且容易发生错误。

一旦找到的问题的原因,那么解决问题的方法很简单,可以在某个合适的空闲的时候,提前进行类加载和编译,那么当第一次进行一些实时操作时,所要用到的类已经加载或者相关代码已经编译,第一次操作便不再慢了。

Java性能优化之实战算法[2]

——当你拿着一把锤子的时候,所有的东西看起来都像钉子。
——当你看到钉子的时候,手上拿着的东西看起来就像一把锤子。


性能优化有时候很像玩一个策略游戏(免费),对手不是计算机,程序员,设计架构,编译器,控制流,而是时间,内存,竞争条件,预算限制等等。有三个资源限制几乎所有应用都会面临:1.CPU速度和有效性2.系统内存3.磁盘I/O。

性能分析的关键是找到瓶颈所在,符合二八原理的是,计算机通常会将80%的时间花在20%的程序上,所以找出这20%的瓶颈很重要,这就是我上篇中所说的,为什么在优化之前一定要分析,不要相当然。我从二八原理学到的就是要统筹分析,使做事效率最优化,这个优化跟我们标题中提到Java性能优化道理上都是一样的。即应该把80%的时间花在造成问题的80%原因上面。呵呵,绕口吧。

比如,我在分析的时候,就发现了这么一个瓶颈,一个微不足道的步骤却消耗了大部分CPU资源,某些情况下CPU花了它96%的时间来处理它。

简化模型,描述起来,就是:

一维数组,每个元素都有保持它是第几个的一个index, 从头到尾插入元素,已有的元素的index需要做出调整,以保持一致性(即:array[i].index = i)。按照我们现在的算法,是每插入一条,其后面的每个元素记录的索引都要做出相应调整。简单估计一下,假设输入规模是N,大概需要O(N^2)的时间,当只有两三万的时候还好,大到8万就显得慢了(是两万时的16倍)。

这个问题本质上是个算法问题,就是怎么样把O(N^2)降到O(N)或者更低的问题,这样便可以大大的提高CPU效率和速度。

开始之前,我想了两种方法:
方法一:绕过这个问题,想办法直接计算出某元素在插入后的值,或者等到多次插入后,一起调整。
方法二:直接解决这个问题,不用字段index保存这个问题,想办法借助类似C++的指针地址,和数组地址来计算index。

对于方法二,需要借助语言特性,因为Java是没有办法取到对象值实例的地址,估计C++也悬,这条途径的复杂度和陷阱太多了,所以很快被抛弃了。
思考方法一:其实对于插入记录整个这个过程,许多记录被调整了多次,其实中间的这些调整是不用关心的,我们只需要知道最后状态是在某个位置就行了。因此,我们想要直接计算插入后的位置,让每条记录只进行一次索引调整。

最后的解决办法就是,首先将插入的记录排序,即从前往后插入,然后要做到取消中间的这些调整,使每条记录只调整一次,对于每个记录来说,只要用一个临时变量来记录它的前面已经插入的多少条记录,从前往后调整,轮到某条记录时,便可以计算出位置索引index的值,保证初始状态和插入结束后状态的一致性。

这个问题看起来是不是似乎很简单?但是,实际情况中的问题要复杂的多,比如,有可能这个插入是在某个大的循环中进行的,也可能在插入的同时,程序需要对这个数组中的记录做操作,可能还是个二维数组等等。关键的是,你需要做出某些努力,重构简化模型,然后抽象出模型,找出问题的本质。

原来的做法,每插入一次就调整一次为的是保证插入过程中每个记录状态都要保持一致性,这个要求太高了,所以导致了O(N^2)的高代价。真正的要求没有那么高,我们只需要开始和结束两个状态的一致性就行了,而这只需要N(O)就可以做到,这个代价就低了。这样这个瓶颈就通过算法来解决了,可以看出算法在性能优化中还是很重要的。

2009年5月9日星期六

Java性能优化之实战漫谈[1]

——I can feel the need, the need of speed...
——提前优化是万恶之源

最近由于工作的原因,对Java的性能优化比较关注,其间也看到不少比较好的文章系列,比如Program-Think同学的Java性能优化系列。平常工作的时候,发现稍微有点好想法的时候,把自己独自一个人关在小屋子里集中精力思考,效果很不错,俗称“闭关”,大家也可以试一试。

谈到Java优化,我认为一切开始之前,最最重要的是找到一个合适的profile工具,这里有篇文章介绍的很详细:How to Fix Memory Leaks in Java,里面介绍了许多有用的profile工具,不用花太多时间,找到合适你自己的就行了,我用的是jprofile,感觉还不错。记住,重要的是,在每个优化开始之前,一定要用profile工具分析性能的问题出在哪边,千万不要想当然。

今天就先将两个简单的例子作为开头吧,大家轻松轻松。
例子一:
class A {
int a_num;
B b;
}
class B{
int b_num;
A a;
}

如果改成下面这样怎么样?

class AB {
int a_num;
int b_num;
}
某些Java应用程序当对象太多而垃圾回收器还没有来得及回收的时候,就可能会导致堆内存溢出,其实内存溢出是分为栈内存溢出和堆内存溢出的,关于堆和栈的区别,可以参考program-think的这篇文章,讲的通俗易懂。关于上面的这个例子,就是我在实际编码中发现的一个造成内存消耗严重的一个问题,你或许还会认为上面那种写法更技术,更××。如果A的实例和B的实例个数很少的时候还好,但是如果他们的实例个数达到上百万的级别的时候,你就会思考一下是不是要换成下面这种写法了。首先你要了解怎么去计算一个对象会占多少字节的内存,然后思考为什么下面的写法会比上面的占用更少的内存?

例子二:
如果你用Java写程序,那么你会怎么样把一个数组objct_array:Object[]加到一个list:java.util.List中去?
我并不清楚你是怎么写的,不过我却见过一种非常常用的写法:

list.addAll(java.util.Arrays.asList(objct_array));
其实,如果不是在内核运算的地方,或者某个对性能要求很高的地方写这句话完全没有问题,但如果在某个关键的地方,比如在某个要调用极多次数的方法里写用这个方法,也许就会出现问题。在这种地方,最好还是不要偷懒,用最原始但很高效的数组来解决问题。

Object[] old_array = array;
array = new Object[old_array.length + new_array.length];
System.arraycopy(old_array, 0, array, 0, old_array.length);
System.arraycopy(new_array, 0, array, old_array.lengyh, new_array.length);
事实上:ce_list.addAll(java.util.Arrays.asList(ce_array));这句效率是非常慢的,它将
一个数组变成了一个list又变成一个数组又变成一个list,因为内部是这样实现的:
public static List asList(Object[] a) {
return new ArrayList(a); // 新建了一个对象,同时数组变成一个list.
}
public boolean addAll(Collection c) {
Object[] a = c.toArray(); // 看这里, list又变成了一个数组,绕了一圈啊
int numNew = a.length;
ensureCapacity(size + numNew); // Increments modCount
System.arraycopy(a, 0, elementData, size, numNew); // 这个跟修改后做的差不多
size += numNew;
return numNew != 0;
}
结果证明:修改后这部分消耗的临时内存没有了,速度也变快了。

2009年4月25日星期六

信息2.0(译文)

这篇文章的作者是印度一家公司www.InRev.org的市场总监,这是一家十分年轻的公司,刚刚成立不久,致力于数据分析。就像它的名字InRev一样,他们野心勃勃的想要参与到信息革命中的浪潮来,并在其中充当至关重要的弄潮儿。 
在作者的另外一篇博客Analytics Industry(分析工业)中曾指出在中国这样数据分析公司几乎没有,而国外这些公司已经小有规模,中国如果想要赶上信息革命的浪潮,也许应该具备更长远的眼光。 


这篇文章主要指出了市场对于智能处理数据的需求,介绍了Web上现有的一些处理工具和报表工具,指出信息2.0的时代已经到来——

----------------------------------------

----------------------------------------

信息2.0

作者:Deep Sherchan

译者:YantseFisher

原文地址:http://engineeringanalytics.blogspot.com/2008/11/information-20.html

发表日期 2008年11月21日,星期五

毫无疑问,这是信息的时代。但是,随着数据量的增长和大量冗余的出现,我们很容易就会迷失在这些海量的数据中。你是否记得你有多少次坐在电脑前为了去查找某个具体知识的相关内容,发现自己毫无目的的漫游了几个小时,忘记了你原来的意图。经常这样,不是吗?


Google通过提供高效率的搜索引擎,使得我们查找这些信息数据变得容易多了。不知怎么的,我们所有的人都开始变得懒惰起来,甚至不愿意去记住那些网站的名字,因为我们都很相信搜索引擎。那么信息革命的下一步是什么?分析?


好吧,我并不是要吹嘘我的专业背景,但是当信息量太大的时候,你当然需要某个东西去分析它们,还有...还有什么?还有就是要把他们报告给最终用户。


最终,我们需要的是定义明确,解释清楚的信息。所以,你不难在这里或者那里发现很多报表工具。但是,你能够经常找到一个网络报表入口,并且它是基于开源软件的哲学吗?我曾遇到过的这样一个工具是OpenI.


当我们讨论报表工具的时候,根据数据量的不同大小,他们是基于不同的数据库系统或者结构。最常见到的数据库系统有MySQLOraclePostGreSQLSQL等等。但是,报表并不是直接从数据库服务器制作而来的,在他们之间还需要一些中间层,以便让这些数据能够被处理成需要的形式。


在OpenI中,这些中间层就是发布于J2EE服务器上的OLAPRDBMS。技术上说,OpenI是某些基于Java的工具的整合,像JPivotJFreeChartMondrianJasper Report


它提供了一种简单的方式去将处理过的OLAP数据和最终用户联系起来,通过文字图形和图表的形式,用户只要简单的单击按钮,然后进行查询处理。使用它非常有趣,尤其当他是基于网络的。今后不久,各种信息处理器便会冲斥市场,这是必然的。


由于市场上对于智能数据的需求,我十分确信的告诉诸位,这就是我们正在提及的信息2.0的时代。

2009年4月6日星期一

读《少有人走的路》

在谈及这本书 之前,先说说一些个人经历。本人作为一个不修边幅的80后男生,平常对穿着打扮实在不太感冒,认为浪费时间。去年回家过年,我妈认为我头发太难看,逼着我去理发,而我这个从不烫发的老实小子怀着叛逆的心理第一次去理发店烫了个稍显古怪的发型。说实话,我自己也不喜欢这个发型,回南京有空就把它修理了。重要的不是发型,而是我所想要表达的,那种渴望独立的心情。正如不久前,即将毕业时,自己和父母在关于选择人生道路时的分歧一样,我所想要表达是每个人都应该选择他自己的独一无二的道路,这是一个心智成熟的旅程,而每个人的这条道路对于其他人来说都是“少有人走的”。
《少有人走的路》是一本畅销书,可是看到它时却不是在什么《纽约时报》的畅销书排行榜上,而是从好朋友的豆瓣上看到的,副标题是“心智成熟的旅程”。人可以拒绝任何东西,但绝不可以拒绝成熟。正如译者在序中所说:“如果说以前中国人最大的问题是温饱问题,那么,今天,中国人最大的问题就是心理问题,而心智不成熟又是心理问题中最大的问题”。这本书的作者,M.斯科特.派克,是一名杰出的心理医生,该书的观点和思想,大多来自于他的从业经历。我们长期以来的想法和感受,终有一天会被一些陌生人一语道破,而派克或许就是其中的一个。

这本书的大多数内容在论述关于心理问题以及心智成熟的话题,自律,爱,成长和宗教,神奇的力量。然而,让我最感兴趣并且读起来津津有味的却是最后部分关于“神奇的力量”的论述。如果大家在高中或者大学学过物理的话,可能会知道所谓热力学第二定律,世界由有序向无序发展,能量从有规律的状态流向无规律的状态,从高度分化流向低度分化,宇宙处于逐渐分解状态,直至达到没有组织不再分化的状态,就像流水一样,永远只从高处往低处流动。根据热力学第二定律,经过十亿年时间,宇宙会完全分解,其高度降至最低点,成为没有任何形状和结构、不再发生分化的死寂状态,这种没有组织、不再发生分化的状态,我们称之为“熵”。而这种导致能量自然的从高处流向低处,最终进入熵的状态的作用,称为“熵的力量”。现在我们已经知道,生物进化过程与熵的力量彼此抵触,由此联想到,生物的死亡是不是也是一种“熵的力量”,与生物成长相抵触。进化过程是由低向高的发展,在此过程中,事物变得更复杂,更具分化性,更有组织性。

关于进化过程,作者把它画成一座金子塔,如下:



类似的,作者提出了人类的心灵进化的金子塔图形。因此,作者指出,心灵的成长,心智的成熟,需要不断的努力,必然是艰苦的过程,因为在这一过程中,它必须和自然的力量——熵的力量对抗。如同生物进化一样,我们的心灵还是克服了熵的力量,并得以成长。心灵进化的金子塔图形,适用于每一个人。



那么阻碍心智成熟的障碍,即所谓心智成熟过程中“熵的力量”是什么呢?作者认为,最大的障碍就是懒惰。只要克服懒惰,其他阻力都能迎刃而解。不难理解,每个人都有保持现状的惰性,害怕去改变,因为改变会带来痛苦和未知的麻烦。正是这种惰性阻碍了各种通往高级层次状态的可能性道路,也许连第一步你都没有跨出去。

对于这些话题,我只是拾人牙慧,如果您感兴趣,更多的内容在书中,慢慢去看吧。

2009年4月5日星期日

读《影响力》

《影响力》是一本销售心理学的书,按道理来说,它是写来给那些销售工作者看的,但事实上,这却不是作者的本意。书的作者写这本书时恰恰是用来告诉人们,甚至帮助人们,来应付那些怀有目的让他们轻易“说是”的“影响专家”。这本书阐述了各种有意无意的利用心理武器来捕猎的技巧,它的本意是用来教会人们怎么防止被捕猎,但同时也会教会人们去怎么捕猎别人。从某种意义上来说,每个人既是猎物又是猎人。因此,这本书对于每个人的教育都是意义深刻的,精彩之极。
这本书在豆瓣上的评论是相当高的,事实上,我当初正是好奇这是怎样一本书,能够获得如此高的评价,有些评价甚至让人觉得很夸张。比如有一位评论说:“我只希望这本书没有被出版”,还有些读者看完后写书评,题目叫做“看完了不要借给别人看,包括朋友”。这些人的心理其实是很有趣的,我甚至怀疑大部分人都会或多或少的这种想法。正如我一样,他们意识到了人类社会有时就像丛林,而《影响力》就是这样一本书,能提高人们在丛林社会中的技能。丛林社会体现在相互竞争性和互斥性上,别人提高了,对自己就越不利。这样说,确实有些太夸张了,因为这种看法太过片面了,谁都知道,除了竞争,还有合作。

但是,回到当前社会,尤其是中国,面对这么大的人口数量压力,我感觉人们的竞争意识大大强于合作意识,在我身边的几乎所有的同龄人,都是从高考过来的。在高考这种巨大的压力面前,提升的正是人们的竞争意识,对合作意识到培养是少之又少,而合作意识正是公司等社会团体十分重要的价值所在,我也仅仅是在工作后,才深刻的体会到合作的重要性。

我们生活在一个自动化的时代,人们觉得自己更有力量,能主宰自然。但是很少有人意识到,他们作为大自然的一部分,仍然存在着一些原始或者现代的依从,带着某些机械性,有一些正如作者所描述的雌火鸡的行为一样不可理喻。一只雌火鸡会满腔热情地拥抱一个天敌,仅仅因为它发出了“嘁噗-嘁噗”的声音;她会毫不留情地虐待甚至杀死自己的后代,也仅仅因为它没有发出这种声音。我想要说的是,人们自己也好不到哪里去,一旦按下按钮,便会播放自己体内事先录好的基因磁带,卡塔-哗...

我推荐此书的时候,总会在前面加上一句“很不情愿的”。我甚至怀疑书的作者写出这本书时,是不是也犹豫了一下。所以,即使是您或者我已经读过了这本书,我们仍然是人,不必期望能够通过读这本书来改变你的机械性和心理,因为你的心理反应在大多数情况下是合理的,只不过当心理学成为一种武器的时候被别人利用时,才会变得有些危险。所以,如果你不是用它来帮助你作为销售或者其他武器的话,不必太认真,这本书只不过是用来更好的帮助你认识自己和他人。

2009年3月22日星期日

合肥行记

最近公司派同事和我到合肥中科大去了一趟,公司事务不便详谈,谈谈对合肥这个城市的印象吧。以前对合肥的了解很少,只知道是安徽的省会,还有就是中科大的所在,这正是我们此行的目的。我们整个行程,从离开南京火车站到回到南京火车站,整个行程28小时,看看这效率..

从南京到合肥坐动车正好一个小时左右,车上同事告诉我在合肥打的很便宜,起步价只有6元钱左右,不知道这与各个城市的消费水平有没有关系。初到合肥,天气不是很好,正值下班高峰,打的队伍排的长长的,要等很长时间。从没见过哪个城市打的这么难的,我们走了老远,到了一个什么希尔顿大饭店的门口,才打到的。安徽是个欠发达省,合肥从气质上来说也少有了大城市的那种自信。穿走于街头,感觉到的除了是混乱的交通,俗气的街头灯饰,疲惫的人群,再有没有其他什么了。我瞬间仿佛感觉,这个城市是属于小市民的..

车子开到大概是科大附近的一个饭店旁边,同事在科大的两个同学请他在这边聚聚,我就凑凑热闹。饭后,就沿着街边走了走,感觉街上真是够冷清的,沿着这条够冷清的街道走到了中科大东区的门口。对中科大的印象主要来源于高中老师和报纸的吹牛(×××少年班什么的),还有就是大学时听说的科大跟南大差不多的气质(能静下心来搞学术),不过科大比南大幸运多了,估计在合肥这块地盘上,科大会被当成个宝供着,科大更不可能有像南大可能被一条四车道劈成两半的尴尬境遇。我对科大还是崇敬有加的,因为大学时有一位很有趣的副教授就是科大少年班毕业的,哪怕从现在四十多岁的他身上看来,都能感觉到他当时在科大合肥这块地盘上他一定经历了许多年少轻狂的故事。

第二天在科大,真是忙碌了一天。金融危机确实对中国的普通人造成的冲击,例一,科大包括其他大学的好多学生今年的出国形势不容乐观,要知道很多穷学生没有全奖是几乎无法承担的,他们中的部分人也参与到了找工作的行列,例二,同事他同学的一个朋友,也是做软件的,因为经济危机被开掉了,至于经济危机是不是一个借口不得而知。在加上考研落榜的学生们,这三股汇聚了今年找工作的庞大队伍。上午真的把我累死了,好长的队伍,不过还是得认真的接收看看简历,是真不想负了这些学生的心(有个简历的标题是“×××,捧着一颗心来”,心软的我让他进面试了),毕竟我也曾是他们中的一员。这个时候,我才知道,合肥除了科大之外,还有两所还行的大学,安徽大学和合肥工业大学。这种经历真是有趣,我不到一年前还未跨出学校,现在却在这些学生面前接受着简历,这些学生大都毕恭毕敬,有的认真,有的麻木,有的套近乎,有的关切。我则是尽量缓和气氛,找些他们简历上有趣的事情聊一聊,比如许多电子与工程学院的学生都会在简历上加上这么一条——“科大生源最优秀的系之一”,我乐翻天了,每遇到这样一份简历,都会问下为什么这么写,还有好多学生是从其他学院转到这个专业的,看来当时此专业确实很火。还有另外一点,我可以很明显的看出来,那些学校较差的学生更加重视珍惜这些机会,非常认真的想多问几句。其中有个数学系的女生,成绩排名第一,我就请她讲解一下简历上提到的一篇论文的意思给我听,是关于矩阵排序的,讲的很不错,估计旁边的人正纳闷,这个hr怎么连数学都懂一点。当然了,有时候遇到美女了,也会多聊几句,能够缓解缓解疲劳嘛。最搞笑的是,结束后,有几个不知道哪来的学生,给我们送来两瓶矿泉水,想打听一下消息,希望多给他们机会,不知道这算不算“贿赂”...当然了,直到我们走后,那两瓶水还在静静的立在那桌子上面。

下午面试,我心想大家都是年轻人,不必太严肃,我早上醒来时就想好了一个简单的面试题:
现有60个球,请任意选择放到6个盒子中去,要求如果想要选择任意数量的球时,只要选择若干盒子,这些盒子中就包含此数量个数的球.
我旁边一科大高分子的博士(同事的同学,过来旁听的)很快的就答出来了。面试过程中其他比较搞笑的情形,就是那些同学听到我同事说出我年龄时夸张的表情,他们估计很郁闷..

晚上吃饭时感叹,真是把广大科大同学涮了一把,其实最终我们要的人数肯定不会超过五个手指头(想起<疯狂的赛车>黑社会老大伸手指头的情形),不过我们来时也没想到会有这么多人啊,只不过是来赚经验的而已。还有,合肥餐馆的菜真是便宜啊。

晚上有点郁闷,动车没票了,被黄牛拉过去,坐了一辆破车,颠啊颠的,两个多小时,才到南京。那黄牛也真够黑的,向一女生要了160,还好那美女机灵,上车趁不注意,向一乘客讯问了价格,才60,把她给气的。然后乘很多人在,给她壮胆,嚷嚷了才把价格拉到100。一路无事,晚上11点钟到家,洗洗倒头就睡...

2009年3月7日星期六

谈谈学习型组织的实践

学习型组织(Learning Organization),美国学者彼得·圣吉(Peter M. Senge)在《第五项修炼》(The Fifth Discipline)一书中提出此管理观念,企业应建立学习型组织,其涵义为面临变遭剧烈的外在环境,组织应力求精简、扁平化、弹性因应、终生学习、不断自我组织再造,以维持竞争力。

前段时间公司提到所谓学习型组织,是件好事,但许多事情做到的结果往往会与目标恰恰相反。所以说,有时候做事情的技巧和细节也非常重要。

比如其中有一项是每天写邮件,总结今天干了什么,有什么想法,和明天的打算。这其实是一个非常好的想法,除了可以让leader了解到手下的人具体的做了什么,及时掌握公司日常运作情况,还可以增进员工之间的相互理解和沟通。但是非常好还不够?好的想法还必须付诸正确的实践手段才能起到有效的作用。这项措施其实很早就开始实施,并且刚刚开始大家都还是能够做到完成任务。但是渐渐的,一个严重的问题出现了,出现了形式化的倾向,把这项东西作为一个无关紧要的东西,应付了事。再其后,大家渐渐的就开始对这个东西有点厌烦,甚至感觉有点像是变相监督,慢慢的都不写了。

过了一段时间,觉得不行,还得写,不写leader不踏实。但是意识到了大家支持反对不一,广泛征求意见,我指出了以前形式化错误,以及参与者的不良体验。于是重新开始,规定了上面的三项(今天,想法,明天),至于内容可以比较自由化。这次有了以前的经验,真的比以前好多了。但是还是仍然存在一些问题,导致我对这种措施的实施效果的持久性仍不太乐观。

可以从想法谈起。我平时属于比较活跃的人之一,想法也比较多,也比较乐于跟别人分享和沟通自己的想法,知道分享的价值所在。所以刚刚开始时,有了想法就说出来,而且顾忌比较少,对各个方面的事情都会谈谈,但是马上感觉到了一些不对劲。首先,回应的人寥寥,大家各说各的,无法形成有效的沟通。其次,有一个现象是公司里面管事的人位置比较高的人谈的比较多,但是做事的人进来比较晚的人谈的比较少,一般是寥寥带过。我属于后者,所以感觉不对劲,人们往往会根据现象来反推本质。于是对公司各个方面评头论足的就少了,而是渐渐主要谈谈自己工作的一些想法,一堆形式化的东西我写不来。于是每天,我开始谈论一堆关于编程方面经验感想啊什么的,不过这些东西公司里面也就那么几个人听的懂,所以我很怀疑这样的效果和意义,我对其他部门的细节不感兴趣,学习型组织有个要素就是——“自我超越Personal Mastery):个人有意愿投入工作,专精工作技巧的专业等等。而且,在别人面前谈论一些他们不懂也不需要懂得东西让我觉得自己有点"自大和白痴"。所以结果我发现,那些愿意分享自己想法的人,不仅没有得到什么,而且失去了不少,没有任何的激励。这个制度本身的价值就是互相矛盾的,与学习型组织互相提高,互相激励共赢的精神是违背的,付出的多收获的却少。而违背自然规律法必定会自我消亡,很可惜的是,在今天的中国,仍然有不少公司或组织的领导人还在沿袭毛时代那种狂妄自大,人定胜天的落后理念。

打个也许不恰当的比方。感觉每天这样说出自己的想法就像过去吃大锅饭一样(当然了,我没吃过,不过听父辈提起过),大家一起吃,每个人都可以吃到,但是每个人都吃的少,每个人都吃不好,每个人提供粮食的积极性都不高(假设提供劳动力=提供粮食);类似的,每个人大家的想法一起提,一起看,但是每个人看到的都很少,每个人接受到想法质量也不高,每个人提供想法的积极性不高。问题关键,不是积极性高不高的问题,而是这种大锅饭造成了这种格局。

学习型组织还有一个要素就是——团队学习(Team Learning):团队智慧应大于个人智慧的平均值,以做出正确的组织决策,透过集体思考和分析,找出个人弱点,强化团队向心力。要想找出个人弱点,继而改掉个人的缺点,有时候靠的就是把自己撕裂,把自己的价值观暴露的在众目睽睽之下,让烈日暴晒,让雨雪吹打。其中的一条途径就是能在一个绿色的环境中,充分的表达出自己的观点,接受各种价值观的冲击,被不断的考验。而要做到这点,最重要的也许就是勇气和绿色的环境。勇气指的是每个参与者都勇于表达自己,把自己曝光,敢于承担一定的风险;而绿色的环境值得是对于那些敢于表达自己观点的人,这个环境不会施之以相应的惩罚。充满勇气并不是目标,目标是充分的交流。勇气和环境的绿化不但可以提高表达的概率,而且可以保持表达的持续性,降低表达所需要勇气的程度。因为两者之间是相互作用的,即勇气的提高可以作用于环境使更加绿化,而环境的绿化也可以作用于勇气使更勇敢。

那么到底是哪边出问题了呢,怎样才能解决呢?学习型组织是从组织领导人的头脑中开始的,如果要想领导建立学习型组织,在一切开始之前,领导人应该让自己变得有头脑,理解学习型组织,并能够帮助其他人获得成功,然后再开始行动。执行力很重要,但不是指“过早的执行”。

其实如果在以前,这些想法我也许会在每天的邮件总结中发出来,但是我现在只是把它们写在私人博客中。虽然有点遗憾,不能充分的分享,但我我认为遵守自然法则是聪明的选择。

附:学习型组织应包括的五项要素:
  1、建立共同愿景(Building Shared Vision):愿景可以凝聚公司上下的意志力,透过组织共识,大家努力的方向一致,个人也乐于奉献,为组织目标奋斗。
  2、团队学习(Team Learning):团队智慧应大于个人智慧的平均值,以做出正确的组织决策,透过集体思考和分析,找出个人弱点,强化团队向心力。
  3、改变心智模式(Improve Mental Models):组织的障碍,多来自于个人的旧思维,例如固执己见、本位主义,唯有透过团队学习,以及标杆学习,才能改变心智模式,有所创新。
  4、自我超越(Personal Mastery):个人有意愿投入工作,专精工作技巧的专业,个人与愿景之间有种「创造性的张力」,正是自我超越的来源。
  5、系统思考(System Thinking):应透过资讯搜集,掌握事件的全貌,以避免见树不见林,培养综观全局的思考能力,看清楚问题的本质,有助于清楚了解因果关系。
  学习是心灵的正向转换,企业如果能够顺利导入学习型组织,不只能够达致更高的组织绩效,更能够带动组织的生命力。

2009年2月15日星期日

能坚持

过完年后回到工作岗位,一直提醒自己脚踏实地,做的多点,想的少点,可是写的却也变少了。

人生如果有十步路要走,很多时候走到第三步路,第四步路的时候就会比较难走,也有很多人走到这个时候就会放弃。前段时间一直在思考,为什么boss能够把一个公司从刚开始一个人,几千块钱,慢慢的两个人,几个人,十几个人的能够撑到现在,慢慢地发展壮大?就他个人的技术水平,商业运营水平实在不敢恭维,常常做出错误的决定,目前看来,绝不是一个优秀的领导者。按照他自己的说法,他有很好的运气,我赞成,运气有时确实很重要,甚至比其他因素都更加重要。但是我觉得他有一个我们公司里其他人都比不上的优点,那就是“能坚持”,甚至不管是对是错。也许,“能坚持”就能等来足够的运气。

有人说,万事开头难,我倒觉得其实是“开头之前”难!也就是当你面临选择,决定去做一件事情的时候,其实是很难的。比如,我大学快毕业的时候,是保研?是出国?是工作?是计算机?是金融?选择起来确实太痛苦了,因为没有目标,所以难。犹豫之中,时机慢慢丧失。

但是,选择之后,真正“开头”的第一步并不一定就难,比如当你选择了一个方向作为目标,哪怕这样的选择没有任何理由,那么接下来的事情就很简单,只要朝着那个方向努力就可以了,而开头的东西一般很简单,所以学起来就快,不一定难。

有时候难的不是第一步,反而是你朝目标前进了一段时间后的第三步,第四步。这个时候你将会面临什么样的境遇?首先,刚起步时快速成长的快感在这里会被卡住,因为当你深入了之后,学习来源就会变少,你所做的东西很有可能是前人没有碰过的领域,你刚刚建立起来的成长自信会遭到打击;其次,你从你身边的人们中意识到当你走完十步中的八九步的时候,要想再放弃就很难了,到达这个地步的人大多数会为去证明过去走过的那些路是有意义的而甘冒风险(即使实际上并不值得),而刚刚走到第三步的你可以放弃,还是承担风险。所以这个时候,能不能坚持就成了一个很重要的问题。

从成本的角度来看,如果到了第三步放弃,付出成本30%,收益可能接近零,显然不划算,聪明的商人不会这么做。

从地球的南极走到北极,只要方向没错,哪怕你像蚂蚁那样走,离目标总会越来越近,但如果犹豫不决,就可能南辕北辙,忽东忽西,永远达不到目标。

如何才能够知道目标一定可以实现呢?不知道,但是我想除了“能坚持”,找不出别的法子了,你能吗?

2009年1月19日星期一

酒、诗和女人

我最近读到一则关于诗人的笑话,说是让一个诗人远离尘世,去一个岛上过一辈子,让他挑选三件最喜欢的和他一同前往。诗人毫不犹豫地选了三样:诗、酒和女人。如果让他选择两样,他会放弃酒,如果让他只选一样,他会放弃诗。

其实不单是诗人如此,其他一些人群同样如此,比如真正的数学家和真正的程序员,他们是这个社会中离诗人最近的一群人。只不过对于数学家和程序员来说,诗分别变成了数学问题和程序。不过诗人也好、数学家和程序员也好,首先他们都是人。女人的意思,我想是一种对爱的追求;诗,应该是对美的一种追求;而酒应该是一种入世的追求。程序员所关心的应该是代码之美,然后发现自己整天面对键盘、鼠标,感觉特焖,于是心中有火,开始想爱了;如果运气好点能够有份"有意义"的工作,或者是能够成为founder之类,那么就感觉为世界创造了价值,于是就完成"入世"了。数学也一样是美的,恨不能不吃不喝,生活在数学的虚拟世界里,遇到什么想往数学问题靠。但是久而久之,人的本性会让他们产生孤独,数学再美,却无人欣赏,没有爱。能够做到与世无争,数学就是自己的全部的数学家不是没有,少之又少,佩雷尔曼可能算是一个,其他人或多或少有着对世俗(包括荣誉等等)和爱情的追求。

如果要问我如何选择,我会和那位诗人做同样的选择,这种选择没有优与劣,或者说没得选。当然了,既然没有人问我这种又傻又蠢的问题,我当然酒、诗和女人三样照单全收了。

牛年快到了,祝福看到这篇文章的XDJM,能牛上加牛,好运连连,永远不要放弃追求自己心中的诗、酒和女人。

2009年1月15日星期四

要想创新,就不要让一个人做同一个任务两次

今天看着我写的设计器,呆呆地凝视了好久,发现自己已经不容易想到哪些地方可以改进了,回想到刚刚碰到它的时候,感觉浑身都是毛病,觉得处处都有地方可以提高?
那么,是现在的设计器达到完美的状态了吗?如果我不是犯傻的话,肯定不会这么认为,更不会觉得已经达到完美的状态了。那么为什么我不像刚接触它时有那么多想法可以去改进它呢?
因为这是我做的,设计器的每个细节都是我码出来的,是我的选择。普通人都会倾向于欣赏自己做出来的东西,这也算是一种偏见和本性。抛开这个偏见不说,一件事情的完成的多数细节,就是他自己的理念,性格,思想的表现。而这些东西恰恰是一个人内在最实质的东西,所以让他继续做这个事情,也摆脱不了这些实质东西所影响的范围。
所以,要想创新和提高,就不要让一个人重复完成某项任务两次,因为根据以上推论,这第二次很有可能失败,除非这个人的思想获得了实质性的飞跃。
好方法有很多,让有潜力的新人做肯定比那个已经做过这个事情的老手要好,这是我的想法。

2009年1月8日星期四

大前研一的“专业主义”

前段时间读管理类的书籍,收获很大,不过最近想要收收心,从而专心学习软件开发,最近发现自己不懂的东西很多,如果面面俱到,恐怕这一生都学不完的了,于是学乖了,懂得了要专注于一个方向,这样才可能深入,有所得。

前段时间注意到了不少书,阿朱的《走出软件作坊》,德鲁克的《旁观者》,还有就是大前研一的这本《专业主义》了,前两本书都没有看完,只有大前研一的这本看完了。

我以前听说过大前研一,可是那时连他是做什么的,有什么建树却一无所知,也从未看过他的书(汗颜啊,小时候不喜欢读书,尽玩掉了)。豆瓣上对这本书的评价褒贬不一,不过我觉得这本书写的还是不错的,至少适合我的胃口。在读自己喜欢的书时,感觉像是跟知己聊天,其实本来应该是由于作者跟自己观点上的相同,导致喜欢这本书的。有些时候和作者有些观点重合,但是自己模糊不清楚,但是另外一个人却能总结归纳概括起来,最终成书,这就是差距,这种文字上的差距有时候像是表面上的功夫,与思维无关。其实不然,如果一个人能将它的思维清晰的诉诸于纸笔,那么他肯定对他所思考的问题十分透彻了,接受的大脑的训练也就更加彻底,形成一个良性循环,反作用使得思维更加敏锐。其实这就是我开始认真写博客的原因,其实用文字描述出来要比大脑的闪念获得的更多。

大前研一所谓的专业跟所谓“专注”,“专一”不同,在他的眼里有着更深的含义,有时候更像是一种理念,一种主义,而之所以要提出这种主义,是因为它所带来的解决大问题综合方法的良好表现,说白了,能促进社会进步,用大钱研一自己的话说,就是“预言将自我实现”。并且,这里的专业包含两方面的含义,一个是“专”,另一个是“业”。在东方世界,人们更习惯的看中前者——“专”,因为这更多的与对公司和上司的忠诚联系在一起,但是大前研一所说的专业是整体的,“专”与“业”缺一不可。
大前研一给专家下的定义:
专家要控制自己的情感,并靠理性而行动,他们不仅具备较强的专业知识和技能以及较强的伦理
观念,而且无一例外的以顾客为第一位,具有永不厌倦的好奇心和进取心,严格遵守纪律,以上
条件全部具备的人才,我们把它们称为专家。
注:其实这里的顾客指的是广义的顾客,比如一个公司的服务职能部门的顾客可能就在公司内部,是那些直接一线生产的工人,但是现实情况却似乎是这些服务职能部门凭借着与公司高层更密切的关系,把自己放在了顾客的前面。

除此之外,大前研一还详细的论述了正真的专家必须具备的四种能力:
1.先见能力
2.构思能力
3.讨论的能力
4.适应矛盾的能力
整本书的结构非常简单清晰,分为五章,第一章论述专业主义是什么,后面的四章依次论述了这四种必须的能力。所以整本书就围绕着“专业主义”简单而又大的话题展开讨论,从不会让读者偏离问题的核心,我非常喜欢,没有买亏掉。

2009年1月3日星期六

高敏者和高感觉寻求者

几天前,我偶然接触到两个新的心理学名词:“高敏者”和“高感觉寻求者”。我下意识的带着好奇心来了解相关的概念。了解完之后,很是兴奋,发现自己既是高敏者,也是高感觉寻求者,通过这两个概念,我发现自己从未这么深刻的理解自己的本性。因此,我有必要对我的读书笔记做一些总结。

高度敏感者,简称“高敏者”,“敏”即“敏感性”,不仅意味着一种比别人能发现更多的微妙的细节、信息和刺激的倾向或者能力,而且意味着高敏者在心理上体验着更大的紧张度。这里所说的紧张度就像一台压力机器,仅仅记录我们内心的状态,也就是我们的思想和感情的压力状态。高敏者是一个相对比较新的概念,至少在现在的认识上是这样的,我自己以前从未听说过。这个概念与富有天赋、害羞胆怯、内向自省,甚至可能与迈尔斯-勃雷格斯类型的人群都有互相交叠,但是我们对高敏者性情的某些方面还是缺乏很好的理解,因此,我们对自己了解越多,我们的成长就能获得越多的力量。

《高敏者》一书的作者伊莱恩·阿伦医生认为,我们的高敏感性植根于神经系统中,很可能是通过遗传而得,整个人群中有20%是这种情况。虽然不同的高敏者之间的敏感性或紧张性千差万别,但是,比常人更强的感觉意识无疑使高敏者们从周围世界获得的信息要多于那20%的人群,似乎80/20定律也使用于敏感者人群。高敏者们就像一加仑容量的水桶,却装了两加仑的水,所以我们也许会感觉好像快被水淹没了,而周围的人却悠然自得地游向岸边。高敏感群体在很多方面都有非常敏锐的感觉,这使得他们的工作有时陷入困顿。这些敏锐的感觉可以表现为强烈的情感或灵敏的感觉意识--比如,对丝织物的精细触觉,对微弱气味的灵敏嗅觉,对细微声音的超常听觉--仿佛心灵不停地接受信息,产生丰富的想象,从而一刻得不到休息。这种对环境的过度敏感会对我们的机体产生过度的驱动,耗尽我们的能量,甚至使我们无法继续晚上或者第二天的生活。工作不如意的压力比这些日常琐事更甚,使我们的生活暗淡无光,抑郁随之而生,健康也同时受到影响。

因为全世界只有20%的人具有高敏感性,其余的人并没有通过我们的眼睛来观察这个世界,因此我们经常被认为与众不同或负有过错。有些高敏者很幸运,成长在一个仁慈的家庭中,家庭成员并没有因为高敏感性而责备他们。但高敏者在孩提时代往往会经常受到指摘,这种烙印会一直伴随他们到成年,使他们因为与众不同而感到羞愧。高敏者在成长过程中有可能会和别人感觉不一样,跟不上潮流,而且还有可能认为自己什么地方出了问题。实际上,我们中的绝大部分会认为不适应社会,和别人有所不同。

克服最初的羞愧感(即认为自己与众不同的消极信念)是非常重要的。只要这种羞愧感存在,高敏者们就倾向于一种"习得的无助"(learned help lessness)。这就是为什么我们有时候表现出来的并不是真正的自己。想象一位高敏者,就像你自己一样,在一个现代的工作场所,每个工作者就像机器上的一个零件一样,在这样的地方,创造力是不太容易被接受的。一些高敏者换过很多工作。我们的好奇心,我们对于工作的迅速上手,我们对于挑战的渴望,以及压抑厌烦的工作带来的不适,使得我们难以在一个地方长久待下去。对一些人来说,这不啻是一种失败,不但是因为不能在一个地方待足够长的时间(当然也就没有升迁以获得承认的机会),而且因为不能很好地处理好工作。"这只是一项工作,你为什么不能坚持到底呢?"这听上去是不是很熟悉?

高敏者们极其渴望做有意义的工作,我称之为可以带来"精神收获"的工作。这类工作可以得到别人的欣赏,或者为别人做出贡献。如果没有这种精神收获,工作就是一个巨大的负担,甚至好像监狱一样。当我们为工作而工作的时候,我们不停地尝试,希望下一个比前一个要好,时间会长一些。朋友们,让我们面对现实吧,为工作而工作的态度是不行的。

高感觉寻求者(high sensation seekers), 指的是那些很容易被新鲜事物所吸引的人,与之相反,低感觉寻求者(low sensation seekers)指的是那些不太容易被诱惑的人。阿伦医生说,寻求感觉必须用我们头脑中接受新事物的那一部分来进行。为了生存,我们需要时刻准备好避免或者接受变化。高级智能生物通过学习,会知道一件新鲜事物对我们是福是祸。

高敏感者们可能是不同的感觉寻求者,困难的是如何去进行运用。当涉及体育或其他身体活动的时候,一些高敏者是高感觉寻求者。但生活不仅仅是蹦极,感觉寻求还是一种情感或者智能活动。一些高敏者需要很多刺激,需要对很多事情进行注意、思考或想象。一些需要同时进行很多事情--从继续教育的课程到整理档案系统等等。一个高敏者已经在一项工作上待了20年,同时还保持了多年的对许多事物的兴趣。一些高感觉寻求者会对一个新的主意、一件新鲜事物迅速地产生兴奋甚至狂热。我还记得当高二时拥有自己的第一台电脑的时候,我兴奋之极,好像成了一块要去吸收水分的海绵,而且一刻也不能等待。至今我仍然感激父母的仁慈与英明,在家庭负担很重的情况下,能够买了这台电脑给我,使我习得无数,并快乐无比。

很多是高感觉寻求者的高敏者们很容易给自己过多的压力。因此,调节自己的热情是非常重要的,这样才能不使自己压力过大以致不堪重负。认识到我们的紧张和不安于现状之间存在着区别,这是需要时间和反思的。

伊莱恩·阿伦指出,我们喜欢学习新鲜事物,但并不总是希望从事这些事情,因为这需要很多不同的技能,而且会把我们置于一个不能控制的环境中。感觉寻求会成为一种习惯。因此,这也提示我们可以改变习惯来调节我们的热情,以避免我们负担过重以致精疲力竭。因此我们也许应该了解“习得的乐观和无助”是什么?

取得人生的成功,实现我们工作如意的梦想,创造我们喜欢的工作,都需要有乐观主义精神。每一位领导者,每个成功人士,每个追寻并实现自己梦想的人,都道出了同样的真谛:你必须相信自己,相信自己能够做到。你需要学着去乐观地面对。

我认为,最关键的前提是:发现真正适合你的工作并不在于发现工作本身,而在于发现你自己,慢慢成长和成熟起来,并乐于接受你自己。

部分参考资料提到的对作为高敏者的我们提出的忠告:
你应该保护自己,防止情感、精神和想象所引起的过度兴奋
你应该遏制由于他人的因素而产生的大量思绪;注意掌握好原则
你应该识别出自己的高感觉寻求习惯,及其如何影响我们的日常生活,将我们带入过度兴奋状态
你应该欣赏自己做事情一板一眼、按部就班的方式

第一步:接受你的敏感性
第二步:欣赏自己的成果
第三步:了解和容忍自己的极限
第四步:和别人交流自己的限度

关注者