随笔-88  评论-77  文章-48  trackbacks-0
 

演讲人:浙大高分子物理郑强教授
地点: 浙江图书馆报告厅
  精彩语录节选:
  “在中国这个发展中国家,你能建10所世界一流大学,那美国有多少所?日本有多少所?现在的实际状况是:世界上前200所大学,中国一所都排不进!在亚洲能排出几所?我到国外去看了以后,感到要将浙大建成世界一流大学就像共产主义理想.“
  “以前说“无知无畏“,现在却是“无知才无畏“,许多企业把浙江省技术监督局、科委的人请来吃一顿饭,喝一点酒,他就给你签个字,再把我们这些教授胁迫到那里去,给你盖个章,然后就是“填补国内外空白“、“国际先进水平“,写论文则是“国际领先水平的研究成果“、“首次科学发现“等等,这都是目前非常严重的问题!作为一个大学教授,我深深地为此担忧!这不是我们的责任,是我们的领导无知,是他们倡导了这个主流.我知道在座的处长或老总日子很难过,因为你们不写这样的报表,就拿不到钱,项目就得不到批准.教授也同样如此,天天写报告,而不是在实验室静下心来好好搞研究,这是很严重的!“
  “我们国家的现实和发展就是这样:凡是依赖不成的,我们自己都能搞得像模像样,比如二弹一星;凡是能够引进的,就都搞不成.......现在很多合资企业就这样,卖点东西,而没有去考虑这些深层次的东西.殊不知,这就是社会的恶性循环!“
  “我认为:语言、计算机就是工具.中国的外语教授讲英语还不如美国卖菜的农民!怎么看待这个问题?日本博士、德国教授说不出英语的多得是!我们怎么能说一个人不会说英语就是文盲呢?语言就是一个工具!你没有那个环境,他怎么能讲这个语言呢?......如果我是教育部长,我要改革二件事:第一,取消六级考试,你一个研究生连中文一级都不及格,你英文考六级干什么呢?看看研究生写得论文,自己的民族文化都没有学好,天天考英语──打勾:托福打勾,GRE打勾,英文考出很高的分,可哪个写的英文论文在我面前过得了关呢?过不了关!这样培养出来的人能干什么?自己搞的专业一点都没学好!......说不会计算机就是文盲,这又是一个误区!我现在是教授,我顾不上搞计算机!“
  “你看我,从高中开始学英语,大学学,硕士学,博士学,花了我多少精力!你说中国人怎么做得出高科技的研究成果?我这几天就教训我手下的几位女学生,问她们在干什么,看不到人影,一天到晚考这样、考那样的,到美国去干什么?在国内要干的事多着呢!你整天考英语,美国人连报个名都要收你们的钱,日本人也是如此,中国学生到日本去要交手续费,到日本留学是为日本人打工,好不容易挣点钱交了学费,读完博士在日本的公司就职,当劳动力,挣了一笔钱后要回国了就买了家电,把钱全给了日本人.你们都没有注意这件事,这里面都是经济问题.这就是素质教育到底是什么.“
  “中小学的教育就是听话,老师管干部,干部管同学,孩子们都学会了成年化的处世方式,这是害人啊!这样强迫性地做了一些好事后,没有把做好事与做人准则结合起来去培养,而只学会了拍马屁、讨老师喜欢、说成人话.上次电视上就曾经播出,一个小孩得了个奖,主诗人问他最愿意说什么,他说:“我最愿意跟江爷爷说:我向你报告!““江爷爷“是谁?还不是老师教的!孩子们在中小学活得很累,到了大学就没人管了,所以就要玩、就要谈恋爱.
  “我们有很多同学成绩好,却什么都做不了.在我们大学像我这种程度的人,招博士生是从来不看成绩的,成绩算什么!现在我从事的这个领域在中国有叁个杰出的人才,当初在读研究生时都补考过,而成绩考得好的几个人却都跑到美国去卖中药了,这说明了什么问题?作老板的可不能这样啊!......人才的梯队一定要合理,而不要认为教授就是万能的、博士就是万能的.中国的教育体系就是让每一个老百姓都充满希望和理想,教育孩子们要树立远大的理想.实际上,人的能力是不一样的,扫地能扫好,也应该受到尊重;打扫厕所能打扫干净,也应该受到尊重,不能动不动就要高学历.我要提醒的是:在国外可不是这样,美国、日本的博士就很难找到工作,为什么?因为老板心疼钱,招了博士要给他高工资,而他能做什么用呢?这是个具体问题.“
  “科技到底该干什么?高科技到底该干什么?如果我是科技部长,该玩的就玩,就像陈景润,他就是玩!陈景润如果是处在今天的中国,他绝对是要去讨饭的,因为他不会去搞产业化,他的英语也不好,他说话都不流利,中文都讲不好,按现在“标准“,他是个文盲,还谈什么教授!日本人就是喜欢美国人,我跟日本人说:你们这个民族爱谁,谁就要向你们扔原子弹.日本人就是喜欢黑人也不喜欢中国人.......我特别对我们的女教授、女同学说:在日本人面前一句日文都不要讲,会也不要讲;日本人一听说你讲英文,特别是看到中国女孩讲英文,腿都要发软,这是真的!“
  “中国人为什么这些年都往外跑,最重要的是要让国民自己爱自己国家.......如果我是杭州的市长,我绝对不是狭隘的民族自尊心──如果杭州有什么灾难,我就首先把杭州的老百姓安排在香格里拉,让外国人在外面排队!(掌声!)这样,你才会让你的国民爱自己的国家!一个日本的农民跑到峨嵋山去玩,骨头摔断了,你就用中国空军的直升飞机去救他,而在日本大学一名中国留学生在宿舍里死了7天才被发现;名古屋大学的一对中国博士夫妇和孩子误食有毒磨菇,孩子和母亲死了,父亲则是重症肝炎,在名古屋大学医学院的门诊室等了12个小时,也没有一个日本教授来看望!而你们为什么还要这么友好,以为自己很大度,实际上是被人家耻笑,笑你的无知!你们这个民族*!我们不能这样!我们的领导人跑到国外去访问,看到有几个人在欢迎他们,就感到挺有面子;而外国来了个什么人物,都是警车开道,这究竟是怎么回事?这让我们中国人感到是自豪还是悲哀?所有这些,对教育工作来讲,都是深层次的问题.所以我经常讲,我作为一位自然科学工作者,我教育我的学生,首先是学会做人,没有这些,你学了高分子,外语都是花架子,你不是一个完整的人!“
  “一个观念或是一个问题:是不是技术越新越好?今天谈的就都是提醒大家的......技术并不是越新越好,技术要有储备.日本的企业现在卖的东西大都是10年或15年前的技术,好东西他不拿出来,他要等到现有的技术把成本收回并获得尽可能高额的利润以后才会拿出来.其次,我的对手什么时候推出新东西时,我才会出手.不要以为你今天好不容易搞了生产线,明天又有新的了,你的钱还没赚到就换新的,有什么用?我这次到日本刚好谈到悬浮列车──即使何先生在我也要说,这是中国人又在玩高新科技.悬浮列车目前在理论上都还不成熟.日本现在最完善,最经济的就是新干线!
从经济和市场的概念来讲,越先进的东西,风险越大,有可能得到的回报就越少!"

 

posted @ 2006-05-19 14:23 崛起的程序员 阅读(148) | 评论 (0)编辑 收藏
java.lang.NoSuchFieldError: tokenTypeToASTClassMap
        at org.hibernate.hql.antlr.HqlBaseParser.buildTokenTypeASTClassMap(HqlBaseParser.java:4224)
        at org.hibernate.hql.antlr.HqlBaseParser.<init>(HqlBaseParser.java:107)
        at org.hibernate.hql.antlr.HqlBaseParser.<init>(HqlBaseParser.java:112)
        at org.hibernate.hql.ast.HqlParser.<init>(HqlParser.java:47)
        at org.hibernate.hql.ast.HqlParser.getInstance(HqlParser.java:42)
        at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:203)
        at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:127)
        at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:83)
        at org.hibernate.impl.SessionFactoryImpl.getQuery(SessionFactoryImpl.java:422)
        at org.hibernate.impl.SessionFactoryImpl.checkNamedQueries(SessionFactoryImpl.java:383)
        at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:286)
很简单:查看antlr.jar这个包,把它替换成与当前版本hibernate统一的antlr包,其实也就包的版本不同一所造成的。
posted @ 2006-05-18 20:07 崛起的程序员 阅读(821) | 评论 (0)编辑 收藏

1、新建一个启动画面Window类
  1. java.awt.Window windowSplash;

2、调用prepareSplash()函数,初始化启动界面
  1.     private void prepareSplash()
  2.     {
  3.         Toolkit toolkit = Toolkit.getDefaultToolkit();
  4.         windowSplash = new Windowthis );
  5.         Image image = toolkit.getImage( "images" + File.separator + "splash.gif" );
  6.         ImageCanvas canvas = new ImageCanvas( image );
  7.         windowSplash.add( canvas, "Center" );
  8.         Dimension scmSize = toolkit.getScreenSize();
  9.         int imgWidth = image.getWidth( this );
  10.         int imgHeight = image.getHeight( this );
  11.         windowSplash.setLocation( scmSize.width2 - (imgWidth2), scmSize.height2 - (imgHeight2) );
  12.         windowSplash.setSize( imgWidth, imgHeight );
  13.     }

3、在Application的JFrame类(主界面)中调用startSplash(),显示启动界面,然后初试
化JFrame的各个可视化组件,初始化后台数据库等(如数据库的连接)
  1.     private void startSplash()
  2.     {
  3.         windowSplash.setVisible( true );
  4.         windowSplash.toFront();
  5.     }

4、在所有的初始化工作完成之后,调用stopSplash()函数,停止显示启动画面
  1.     private void stopSplash() {
  2.         windowSplash.dispose();
  3.     }
posted @ 2006-05-18 13:11 崛起的程序员 阅读(271) | 评论 (0)编辑 收藏
作者:金蝶中间件公司CTO袁红岗
不知不觉做软件已经做了十年,有成功的喜悦,也有失败的痛苦,但总不敢称自己是高手,因为和我心目中真正的高手们比起来,还差的太远。世界上并没有成为高手的捷径,但一些基本原则是可以遵循的。
  1. 扎实的基础。数据结构、离散数学、编译原理,这些是所有计算机科学的基础,如果不掌握他们,很难写出高水平的程序。据我的观察,学计算机专业的人比学其他专业的人更能写出高质量的软件。程序人人都会写,但当你发现写到一定程度很难再提高的时候,就应该想想是不是要回过头来学学这些最基本的理论。不要一开始就去学OOP,即使你再精通OOP,遇到一些基本算法的时候可能也会束手无策。
  2. 丰富的想象力。不要拘泥于固定的思维方式,遇到问题的时候要多想几种解决问题的方案,试试别人从没想过的方法。丰富的想象力是建立在丰富的知识的基础上,除计算机以外,多涉猎其他的学科,比如天文、物理、数学等等。另外,多看科幻电影也是一个很好的途径。
  3. 最简单的是最好的。这也许是所有科学都遵循的一条准则,如此复杂的质能互换原理在爱因斯坦眼里不过是一个简单得不能再简单的公式:E=mc2。简单的方法更容易被人理解,更容易实现,也更容易维护。遇到问题时要优先考虑最简单的方案,只有简单方案不能满足要求时再考虑复杂的方案。
  4. 不钻牛角尖。当你遇到障碍的时候,不妨暂时远离电脑,看看窗外的风景,听听轻音乐,和朋友聊聊天。当我遇到难题的时候会去玩游戏,而且是那种极暴力的打斗类游戏,当负责游戏的那部分大脑细胞极度亢奋的时候,负责编程的那部分大脑细胞就得到了充分的休息。当重新开始工作的时候,我会发现那些难题现在竟然可以迎刃而解。
  5. 对答案的渴求。人类自然科学的发展史就是一个渴求得到答案的过程,即使只能知道答案的一小部分也值得我们去付出。只要你坚定信念,一定要找到问题的答案,你才会付出精力去探索,即使最后没有得到答案,在过程中你也会学到很多东西。
  6. 多与别人交流。三人行必有我师,也许在一次和别人不经意的谈话中,就可以迸出灵感的火花。多上上网,看看别人对同一问题的看法,会给你很大的启发。
  7. 良好的编程风格。注意养成良好的习惯,代码的缩进编排,变量的命名规则要始终保持一致。大家都知道如何排除代码中错误,却往往忽视了对注释的排错。注释是程序的一个重要组成部分,它可以使你的代码更容易理解,而如果代码已经清楚地表达了你的思想,就不必再加注释了,如果注释和代码不一致,那就更加糟糕。
  8. 韧性和毅力。这也许是"高手"和一般程序员最大的区别。A good programming is 99 weat and 1ffee。高手们并不是天才,他们是在无数个日日夜夜中磨练出来的。成功能给我们带来无比的喜悦,但过程却是无比的枯燥乏味。你不妨做个测试,找个 10000以内的素数表,把它们全都抄下来,然后再检查三遍,如果能够不间断地完成这一工作,你就可以满足这一条。
  这些是我这几年程序员生涯的一点体会,希望能够给大家有所帮助
posted @ 2006-05-16 14:35 崛起的程序员 阅读(298) | 评论 (0)编辑 收藏
创业者要遵循的5个基本做事方法

对于想创业的人,我对他们的提醒是:不要被成功企业所编写的创业故事所迷惑,因为那里讲的都是一个企业成长过程中过五关斩六将的最精彩的部分。作为创业者,有5个很基本的做事方法你必须遵循。

我鼓励大家创业,但鼓励大家创业不等于盲目创业。对于想创业的人,我对他们的提醒是:不要被成功企业所编写的创业故事所迷惑,因为那里讲的都是一个企业成长过程中过五关斩六将的最精彩的部分。你要用自己的头脑去思考,去学习。作为创业者,有5个很基本的做事方法必须遵循:


第一,一定要有激情和理念,你才能感染自己和其他人。在最困难的时候,在所有人绝望的时候,你要感染你的客户,感染你的员工,感染你的合作伙伴……你要感染所有人!

第二,要专注。别说小公司,大公司多元化也有失败的例子,小公司更应该抓准一个点把它做深、做透。这样才能积累所有的资源。小公司到处试验,会让你的企业耗尽很多资源。专注就是有所不为才能有所为,这点非常重要。

3721坚持了6年,一直坚持做中文上网、中文搜索,我就做这一件事情;Google也是很专注,有了一定的积累以后才能横向扩展。很多创业者都栽在不够专注上,是因为他自己脑子里面没有想清楚,今天在这儿打一口井,明天在那儿打一口井,最后哪儿也没有挖出水,地面上只是留下了许多坑而已。你5个指头都叉开和一个拳头是不一样的,专注就是你把所有的资源都凝聚在一个点上。

第三是执行力,很多创业者很容易在这里摔跟头。我见过很多人夸夸其谈,估计他们创业,至少第一次肯定都不会成功,因为我觉得真正的创业者要少说多做,要把自己美妙的想法努力转化成结果。

创业者做事情着眼点要低,要现实。很多创业者去见风险投资人的时候,说起自己的事业都说得云山雾罩的,其实这样会让风险投资人根本不明白你在说什么。你只要踏踏实实地说你想做什么,这个东西能解决什么问题就可以了。

想法只是一个开头的方式,是不值钱的。我们坐在这儿,一个小时可以天马行空,弄出几十个想法来,脑子稍微一转,你的思想已经在宇宙走了好几个来回了—- 行动的成本才是最高的,对创业者来讲要看自己是不是有这种经验和执行力。同样的想法两个人同样做,谁的执行力更强,谁的经验更丰富,谁就更容易成功。

第四,创业者还要有一种胸怀,就是所谓与时俱进的学习能力。我看到很多人创业不成功就是因为他们太自负,不能从成功人士那里学到一些优点,听不进好的建议。很多创业者没有经验,没有经验不可怕,问题是你有没有谦虚、开放学习的心态,使你不能与时俱进。很多创业者会陷入一个死循环,他们通常认为自己看得准,才是出手的前提;积累经验越多,才能越看越准。但你没经验,又怎么可能看准?

解决这个问题有办法,时机不成熟,就不创业,先给别人打工。把公司让我做的事情做好,提高自己的能力,逐步就知道创业的方向了。我不赞成年轻人刚毕业就创业,我认为他们还是应该在公司里踏踏实实干五六年,虽然是打工,实际上是公司在给你“缴”学费,你在不同的平台通过积累经验,这是任何老板剥夺不走的,只有积累这种经验,你的创业能力才更高,才更有把握。我在方正工作时,从来没有觉得自己是打工,我一直认为自己是在创业,因为我觉得是在积累自己的能力,积累自己的资源。客观上,我对方正还是作了很多贡献。我到雅虎还是一种创业的心态,我把雅虎的文化改成创业的文化,因此雅虎中国在2004年取得了很好的业绩。保持良好的心态,这是你创业成功的前提。

第五,不要盲目去模仿和抄袭大公司的做法。比如,很多人在新浪、搜狐做过,他出来就会不自觉按照大公司的做法建立一些规范制度等,但大公司为了稳妥,一般都比较慢。大公司为这个“慢”付得起代价,小公司不能用大公司的这种做事方法。我讲过大象和兔子的故事:大象和骆驼3天不吃也没事,但是新创业的公司像小兔子一样,每一步都要跑得快,要到处找食。本来就是个兔子,却以为自己是个大象,用大象的心态做事,在狼面前慢慢踱步,最后就会被狼吃掉。创业意味着你要有创业的做事方式。

如果你跟大公司做一样的事,他的实力很强,跟他比是没有优势的。因此,如果把整个产业画成一张地图,你可以看哪些领域被谁占了,谁有什么优势。你应该找一个不在这张地图上的事情去做。比如说,前几年大家都不重视的搜索,现在就做起来了。创业公司应该踏踏实实把自己的事做好,不要在自己很小的时候就想要通吃,要颠覆,要灭掉谁,这是没有意义的。小公司要学会跟大公司合作,要学会广交朋友,在这个产业链跟别人合作,会使自己成功得更快一些。

周鸿祎:1970年10月生于湖北,1995年毕业于西安交大管理学院系统工程系,获硕士学位。曾就职方正集团,先后任研发中心副主任、事业部总经理等职。1998年10月,创建3721公司。2003年3721被雅虎收购,2004年3月出任雅虎中国总裁。2005年7月6日,宣布将于8月31日正式辞去雅虎中国总裁一职。9月1日,他将以投资合伙人的身份正式加盟IDGVC(国际数据集团风险投资基金)。

posted @ 2006-05-16 10:53 崛起的程序员 阅读(223) | 评论 (0)编辑 收藏
Eclipse Communication Framework (ECF)  是一个新的ECLIPSE项目,目的是为了提供一个开源的通讯框架,让开发者可以更容易开发出通讯相关的项目。

IBM的文章Getting started with the Eclipse Communication Framework 介绍了ECF,同时告诉我们如何开始使用ECF,同时还提供了一个基于Yahoo IM 的例子。

Getting started with the Eclipse Communication Framework

http://www.ibm.com/developerworks/opensource/library/os-ecl-commfwk/?ca=dgr-jw22ECF

下载地址
http://www.eclipse.org/ecf/downloads.html
引用页 http://www.eclipse.org/downloads/download.php?file=/technology/ecf/org.eclipse.ecf.sdk-0.8.0.S20060507.zip

安装完毕插件后,起服务目录在
$:\eclipse\features\org.eclipse.ecf.serverfeature_0.8.0\bin
startserver.cmd
然后打开eclipse 菜单ECF链接选择协议ecf generic 后设置服务器url例如http://localhost:3282/server,输入别名
进入强大的聊天室.让我们一起XP 编程吧

posted @ 2006-05-12 17:41 崛起的程序员 阅读(1051) | 评论 (0)编辑 收藏

一、6sigma管理的来源 

六西格玛(6σ或SixSigma)最早作为一种突破性的质量管理战略在八十年代末在摩托罗拉公司成型并付诸实践,三年后该公司的六西格玛质量战略取得了空前的成功:产品的不合格率从百万分之6210(大约四西格玛)减少到百万分之32(5.5西格玛),在此过程中节约成本超过20亿美金。随后即有德仪公司和联信公司(后与霍尼维尔合并)在各自的制造流程全面推广六西格玛质量战略。但真正把这一高度有效的质量战略变成管理哲学和实践,从而形成一种企业文化的是在杰克·韦尔奇领导下的通用电气公司。 

该公司在1996年初开始把六西格玛作为一种管理战略列在其三大公司战略举措之首(另外两个是全球化和服务业),在公司全面推行六西格玛的流程变革方法。而六西格玛也逐渐从一种质量管理方法变成了一个高度有效的企业流程设计、改造和优化技术,继而成为世界上追求管理卓越性的企业最为重要的战略举措,这些公司迅速运用六西格玛的管理思想于企业管理的各个方面,为组织在全球化、信息化的竞争环境中处于不败之地建立了坚实的管理和领导基础。 


二、6sigma管理的发展 

继摩托罗拉、德仪、联信/霍尼维尔、通用电气等先驱之后,几乎所有的财富500强的制造型企业都陆续开始实施六西格玛管理战略。值得注意的是,一直在质量领域领先全球的日本企业也在九十年代后期纷纷加入实施六西格玛的行列,这其中包括索尼、东芝、本田等。韩国的三星、LG也开始了向六西格玛进军的旅程。

另一值得注意的现象是自通用电气之后,所有公司都将六西格玛战略应用于组织的全部业务流程的优化,而不仅仅局限于制造流程。更有越来越多的服务性企业,如美国最大的花旗银行、全球最大的B2C网站公司Amazon.com等也成功的采用六西格玛战略来提高服务质量、维护高的客户忠诚度,所以六西格玛已不再是一种单纯的、面向制造性业务流程的质量管理方法,同时也是一种有效的提高服务性业务流程的管理方法和战略。更有一些政府机构也开始采用六西格玛的方法来改善政府服务。

目前,美国公司的平均水平已从十年前的三西格玛上下提高到了接近五西格玛的程度,而日本则已超过了5.5西格玛的水平。可以毫不夸张的说西格玛水平已成为衡量一个国家综合实力与竞争力的最有效的指标。 



【关于6sigma管理的含义】 

一、何谓6sigma 

6Sigma的概念最早由摩托罗拉提出,推行六西格玛之后的摩托罗拉,产生巨大的蜕变,在品质方面超越当时的日本。但是,让六西格玛在短短几年内,成为许多世界级企业争相投入,作为降低成本、提高竞争力最大妙方的最大功臣,则是美国通用公司的杰克·韦尔奇。 

Sigma(中文译名‘西格玛’)是希腊字母σ的中文译音,统计学上用来表示“标准偏差”,即数据的分散程度。6sigma即意为“6倍标准偏差”。
 
在质量上,6Sigma表示每百万个产品的不良品率(PPM)不大于3.4,意味着每一百万个产品中最多只有3.4个不合格品,即合格率是99.99966%。在整个企业流程中,6Sigma是指每百万个机会当中缺陷率或失误率不大于3.4,这些缺陷或失误包括产品本身以及采购、研发、产品生产的流程、包装、库存、运输、交货期、维修、系统故障、服务、市场、财务、人事、不可抗力……等等。流程的长期西格玛值与不良品率有如下关系: 
不良品率合格率(%)西格玛值 
3.499.999666 
23099.9775 
620099.384 
6680093.323 


【事例】

举一个航空公司的例子,如果某一航班的预计到达时间是下午五点,由于各种原因,真正在五点准时到达的情况是极少的。假如我们允许在五点半之前到达都算准点到达,一年里该航班共运营了200次,显然到达时间是个变量。如果其中的55次超过五点半到达,从质量管理的角度来说,这就是不良品,所以航空公司这一航班的合格品率为72.5%,大约为2.1个西格玛。如果该航班的准点率达到六西格玛,这意味着每一百万次飞行中仅有3.4次超过五点半到达,如果该航班每天运行一次,这相当于每805年才出现一次晚点到达的现象。所以六西格玛的业务流程几乎是完美的。对于制造性业务流程来说,在有均值漂移1.5σ的情况下六西格玛意味着每一百万次加工只有3.4个不良品。这个水平也叫做流程的长期的西格玛值。 


二、何谓6sigma管理 

6sigma管理即要求企业在整个流程中(而不仅限于产品质量),每百万个机会中的缺陷率少于3.4,这对企业来说是一个很高的目标。 

随着将近二十年来的应用发展,六西格玛已由原先摩托罗拉创建成型的质量管理战略上升到了一整套系统的使公司达到世界级的质量和竞争力的管理策略和技术手段。其实理解6Sigma不需要很深的统计学技术或背景,事实上,“6Sigma是什么”能以各种不同的方式回答。如果概括地回答的话,可以说6Sigma管理是:“寻求同时增加顾客满意和企业经济增长的经营战略途径。”即: 
◆在提高顾客满意程度的同时降低经营成本和周期的过程革新方法; 
◆通过提高组织核心过程的运行质量,进而提升企业赢利能力的管理方式; 
◆在新经济环境下企业获得竞争力和持续发展能力的经营策略。 

在这里我们将简洁、条理地定义6Sigma为: 
1、衡量企业产品质量、整体运作流程质量及整体竞争力水平的方法; 
2、改进企业产品质量、整体运作流程质量及提升核心竞争力的方法; 
3、真正实现卓越业绩和持续领先的管理哲学和方法论。 

6sigma管理的核心理念实际上不仅是一个质量上的标准,它更代表着一种全新的管理理念,即要企业改变过去那种“我一直都这样做,而且做得很好”的思想,因为尽管过去确实已经做得很好,但是离6sigma管理的目标还差得很远。 


三、受益于6sigma管理的企业和组织 

摩托罗拉公司在1986年率先提出6sigma管理模式并在企业中推行。自从采取6sigma管理后,该公司平均每年提高生产率12.3%,因质量缺陷造成的损失减少了84%,摩托罗拉公司因此取得了巨大的成功,成为世界著名跨国公司,并于1998年获得美国鲍德里奇国家质量管理奖。美国通用电气公司(GE)自1995年推行6sigma管理模式以来,由此所产生的效益每年呈加速度递增:每年节省的成本为1997年3亿美元、1998年7.5亿美元、1999年15亿美元;利润率从1995年的13.6%提升到1998年的16.7%。 

6sigma的最大受益组织之一通用公司的前CEO杰克·韦尔奇曾评价说:“6sigma是GE公司历史上最重要、最有价值、最赢利的事业。我们的目标是成为一个6sigma公司,这将意味着公司的产品、服务、交易零缺陷。”……“6Sigma是管理工具中最强有力的、最有突破性的,它适用于名种公司用来增加市场份额、降低成本及提高利益率底线。”……“六个西格玛所包含的中心思想是,在一个过程中您能否测量出有多少‘缺陷’,以及您能否系统地找出消除它们的方式,并尽可能地接近‘零缺陷’。六个西格玛已经改变了通用电气公司的遗传基因——现在,它贯穿我们所做的每一件事情,融入我们设计的每一件产品,成为了我们的运作方式。” 

6sigma管理已成功地应用于许多世界著名的大公司和组织,如摩托罗拉-1987、德州仪器-1988、ABB-1993、霍尼韦尔-1994、通用电气-1995、科达-1995、西屋-1996、西门子-1997、诺基亚-1997、索尼-1997、花旗银行-1999、Amazon.com-1999、东芝-2001、三星、LG。国内企业如:联想电脑、盐田国际、海南航空、上海中远、上海宝钢股份、美的空调、江苏小天鹅、中国移动、咸阳彩虹…… 


【关于实施6sigma管理的必然性】 

一、实施6sigma的目的 

事实上,企业组织和管理者实施任何业务改进的目的只能是,也必须是:“获利和持续获利”以及“成功和持续成功”。 

随着我国加入WTO和世界经济的进步放缓,中国企业和企业管理者所面临的最具挑战性的问题已不是“如何成功”,而是“如何持续成功”。六西格玛管理不但告诉我们怎样获得成功,而且可以帮助我们获得保持持续发展的核心能力。 

人才是企业适应变革和竞争的核心力量。六西格玛不仅为企业提供必须的管理工具和操作技巧,更为企业培养具备组织能力、激励能力、项目管理技术和数理统计诊断能力的领导者。这些将帮助企业降低质量缺陷和服务偏差并保持持久性的效益,促进快速突破性绩效。 


二、实施的必然性 

质量水平意味着什么 
一个组织在接触而甚至不是考虑是否实施6Sigma之前,首先让我们来看一下真正的质量水平意味着什么。 

在过去的半个世纪中,普遍存在的3σ质量水平不再为人们所接受了。 
事实上,我国的大多数企业运作在3—3.5个西格玛的水平,这意味着每百万个机会中已经产生10000至66800个缺陷,对应合格率为93.3%—96%。从企业内部的效率与成本来看,所有的不良品要么成为废品,要么需要返工或在客户现场维修、调换,这些都是企业的成本。美国的统计资料表明,一个3西格玛的公司直接与质量问题有关的成本占其销售收入的15%—30%!而从另一方面看,一个六西格玛水平的公司仅需耗费年销售额的1.5%来矫正失误。所以提高公司的综合质量水平对于公司的盈利性有直接的好处。当然,最为重要的是高质量、稳定的业务流程是提高客户满意度的根本要素。 

对一个3西格玛水平的企业来说,提高一个西格玛水平可获得下述收益: 
利润率增长20% 
产出能力提高12%—18% 
减少劳动力12% 
资本投入减少10%—30% 

那么为什么要追求六西格玛?停留在4或5西格玛行不行?毕竟这已是超过99%的“好”了。用中国邮政的统计资料,如果信件的处理达到99%(3.8西格玛)的准确投递率,这表明约每小时要投错或丢失邮件数超过9500件,六西格玛意味着这一数字将降到3.4。 

可见六西格玛并不是不现实的标准。从市场环境来看,世界经济一体化加剧了公司间的竞争,一个停留在3、4或5西格玛的公司是无法与一个六西格玛的公司竞争的。国家与国家之间的竞争最终体现在综合实力方面的竞争。很显然的,一个只有不到3西格玛的国家,其内部有大量的资源浪费、愤怒的消费者、在国际市场上缺乏竞争力的产品,等等,在新的世界经济中将很难与一个具有4、5、甚至6西格玛的国度一较高下。因此,六西格玛管理是一个追求世界级水平的质量评价过程,近年来已经引起了全球质量界的高度重视。 

◆什么都不做意味着什么 
我们不得不说明这个问题:“六西格玛真的值得做吗?”对应的另一个方面的问题是:“如果我们不做六西格玛会付出什么成本?与什么都不做的成本有多大区别?” 

“什么都不做”这一选择对于某个组织而言,可能是正确的选择,然而组织需要在比较什么都不做的成本与做一些的成本之后再做这个决策。 

如果组织现有的任何一个竞争对手或新的竞争对手,在行业内或组织的细分市场上达到六西格玛质量水平,组织获利的日子可能为数不多了。六西格玛可以带来大幅度改进过去质量水平的行动命令,并能从根本上改变组织的市场地位。一旦行业内某个组织成功地实施并坚持了六西格玛经营战略,成为并保持业界领导地位的方法则是比竞争对手更明智地实施六西格玛。 

杰克·韦尔奇很早就意识到人类对于品质的要求越来越高,他认为企业应该趁着还在赚钱的时候,将成本投注在品质的改善上,而不是等到面临困境,才来寻求改善。于是在1996年开始推动六个西格玛,强调“从流程改造入手”的六个西格玛,使得通用一年获利增加7亿5千万美元,并大幅降低了成本,因此引起全球注意。 

重要的问题不是组织是否实施,而是何时、以何种方式实施六西格玛经营战略。 


【关于实施6sigma管理的收益】 

一、组织能得到的收益 

事实上,我们所有人能达成共识的、毫无疑义的一点是:“任何一项管理模式,不管它在理论上有多大的创新和理论价值,如果它不能给企业带来实际的收益,那它也将是毫无意义的。”而6sigma管理正是保持企业在经营上的成功并将其经营业绩最大化的管理模式,它能给企业带来快速的增长及可观的收益。一般来说,经营业绩的改善包括以下部分: 
◆投资利润率的提高; 
◆市场占有率的提高; 
◆顾客满意率的提升; 
◆营运成本的降低; 
◆产品和资金周转时间的缩短; 
◆缺陷率的降低; 
◆产品开发加快; 
◆企业文化的改变等等。 

推动6Sigma活动,你可以做到: 
◆节约成本增加利润; 
◆提高生产力; 
◆扩大市场占有率; 
◆留住顾客; 
◆缩短周期; 
◆减少误差; 
◆改变文化; 
◆开发产品和服务其他好处等。 


二、支持收益的原因 

为什么6Sigma管理能给组织带来如此明显的利益收获?为什么6Sigma管理表现出强劲的发展劲头,成为企业组织在新经济环境下获得竞争力的重要手段呢?归纳起来可以有三个方面的原因: 

第一,关注底线结果。底线是指企业在一段时间内的净收益或利润。在六西格玛管理中,它是由改进顾客满意程度和过程业绩而实现了。通过对核心业务流程实施六西格玛项目并达到预期的目标,是六西格玛管理方法的核心部分。六西格玛项目的目标是增加底线的结果,所有六西格玛项目必须要达到增加底线结果,而取得底线结果正是企业最高管理者最为关注的,并因此会更加投入其中。 

第二,六西格玛管理综合了技术方法与人文因素等有关企业过程改进的所有要素。而对以往的质量改进方法来说,虽然强调了其中的一些要素,但没有像六西格玛管理那样将这些因素系统地整合起来。而这些要素对于效益的产生十分重要的。 

第三,将改进工具方法与专业化的改进过程相联结。将人力资源的培育、授权与专业化的过程改进方法相联结,将管理职责及团队工作与专业化的过程改进方法相连结,使专业化的改进过程成为企业经营活动不可缺少的部分。
 

三、组织收益的增长趋势 

根据麦肯锡公司的调查和研究表明,一个3sigma企业只要组织其现有资源进行核心业务流程改进,如果每年可以提高一个sigma水平,那么每年可以获得以下收益:利润率增加20%;产能提高12-18%;雇员减少12%;资本投入减少10-30%,而且直至提升到4.8sigma企业均无须大的资本投入,当达到4.8sigma时,再提高到6sigma则需要增加投入,但此时产品的竞争力已大幅提高,市场占有率极高,给企业带来的利润将远远大于此时的投入。GE、摩托罗拉、杜邦、福特、美国快递、联信、联想等公司实施6sigma管理取得的巨大成功就是最好的证明。
 

【关于中国企业与6sigma管理】 

一、国内企业目前面临的现状 

经过近二十年的改革开放,尤其是市场经济的逐步完善,中国的企业开始了对各种管理思想和方法的实践,其中不乏成功有效的例子。但是,中国企业由于宏观政策、制度和人的关系等原因,并没有在管理,特别是在企业运营方面取得大的成效和突破。内部管理在很大程度上还停留在作为一门艺术的阶段,尽管一些高级的质量方法和过程也有局部的应用,但是质量检查仍然是制造业的质量管理的主要内容。而整个服务性行业的企业则完全处在凭经验、人员态度或由信息系统来保障服务质量的阶段,没有一个科学、系统的保证服务、产品质量的方法。 

中国企业亟需形成一个追求管理卓越、实现完美流程的企业文化。 
更多的我们国内企业的现状描述不需赘言,下面列出来的总结大多数‘差不多’企业和先进企业管理特点对比的表格也许能给我们提供些什么。 


二、六西格玛管理与中国企业 

六西格玛随着外资的引进已在中国这块文明之地播种,在通用电气、摩托罗拉、联信和柯达等世界级大公司的中国合资企业中,六西格玛已成为其企业文化的一部分。例如,从事软件生产的希捷技术公司,三年多来一直在中国使用六西格玛模式并且对其大加赞赏。人们普遍认为六西格玛模式将有助于中国参与国际市场竞争,使他们争取更多的市场份额和削减制造成本。然而由于六西格玛作为企业成功的竞争优势之一,企业间不愿过多公司宣传或交流这方面的经验和具体实施细节,使得六西格玛在中国一直披着一层神秘的面纱。 

在这种情况下,国内企业唯一的选择就是迎头赶上,尽快开展六西格玛的学习和实施,以争取在新一轮的竞争中立于不败之地,并成长壮大。 

目前,六西格玛在中国企业中的认知度是非常低的。只有极少部分管理者和学术界对此有些认识或较有深度的研究。业界仅有屈指可数的几家公司能提供有限的和有意义的培训,至于能提供六西格玛的全程培训和实施咨询的则更是凤毛麟角。这主要是因为六西格玛咨询服务与一般的咨询服务的最大的区别在于咨询师必须具备实际的实施经验,并至少在黑带大师以上。而那种靠新鲜的MBA来提供服务的咨询公司是无法满足要求的。除了跨国公司以外,国内的企业真正全面实施六西格玛管理战略的也极少。可以预见,在相当长的时间内,知识与技能的匮乏将是中国企业实施六西格玛管理战略的最大障碍。 

除了企业传统、管理制度和市场方面的原因外,六西格玛战略在中国的实施还面临一个非常大的挑战,即人才与知识的准备不足。因此,专家称,中国企业能否成功实施六西格玛管理战略,关键在于组织的最高决策层是否坚持不懈。 

专家同时警告,必须防止把六西格玛管理实施当成又一个质量认证。六西格玛管理实施应该着眼于流程能力、产品质量或客户忠诚度的突破性提高。任何试图把六西格玛管理实施当成一个品牌、宣传或认证的手段是浪费资源,并不会取得任何实质性的管理变革。许多失败的例子业已证明了这点。 


【关于如何实施6sigma管理】 

目前,业界对6sigma管理的实施方法还没有一个统一的标准。大致上可以摩托罗拉公司提出并取得成功的“七步骤法”(Seven-StepMethod)作为参考。“七步骤法”的内容如下: 

1、找问题(Selectaproblemanddescribeitclearly)把要改善的问题找出来,当目标锁定后便召集有关员工,成为改善的主力,并选出首领,作为改善责任人,跟着便制定时间表跟进。 
2、研究现时生产方法(StudythePresentSystem)收集现时生产方法的数据,并作整理。 
3、找出各种原因(IdentifyPossiblecauses)集合有经验的员工,利用脑力风暴法(Brainstorming)、控制图(Controlchart)和鱼骨图(Causeandeffectdiagram),找出每一个可能发生问题的原因。 
4、计划及制定解决方法(Planandimplementasolution)再利用有经验的员工和技术人才,通过各种检验方法,找出各解决方法,当方法设计完成后,便立即实行。 
5、检查效果(Evaluateeffects)通过数据收集、分析、检查其解决方法是否有效和达到什么效果。 
6、把有效方法制度法(Standardizeanyeffectivesolutions)当方法证明有效后,便制定为工作守则,各员工必须遵守。 
7、检讨成效并发展新目标(Reflectonprocessanddevelopfutureplans)当以上问题解决后,总结其成效,并制定解决其它问题的方案。 


【关于实施6sigma的经验教训】 

现在学习和推动六西格玛的热潮正在我国三资企业或部分国有大中型企业中掀起。越来越多的企业开始关注6西格玛,而有些企业则处在观望中。无论如何这对提高企业的质量和竞争力是有好处的。但是应该看到,企业的高层领导在决定推进六西格玛之前必须对六西格玛有一定的了解和必要的思想准备。因为任何改进活动的进行都不会是一帆风顺的,尤其是六西格玛具有自上而下的特点,高层领导是否有彻底执行六西格玛的决心,对成功与否至关重要。在已经推行六西格玛的企业中,有哪些成功或失败的教训呢? 

1、缺少激励机制 
企业培养出来的合格黑带需要很高的成本,如果充分利用他们的知识和才能,可以为企业带来非常可观的效益。尤其在我国目前的状况下,六西格玛专业人才奇缺,所以企业的人力资源部门应为他们合理地规划发展前景并制定合理的激励机制。如果企业培养了很多黑带,然而他们没有得到充分的重视或重用,使他们看不到希望,人才流失就会成为严重问题。 

2、评审与授权不足 
实施六西格玛不是喊口号或者搞运动,需要实际的效果。仅仅培训了人员和选择了项目是远远不够的。在项目执行过程中,BB、GB们会遇到许多问题。比如缺少时间、缺少资金投入、缺少其他部门的配合、缺乏工具和方法的指导、没有得到主管领导的充分支持、改善措施受到流程使用者的抵制而无法实施等。因此需要足够的授权、监督跟踪和指导。否则虎头蛇尾甚至一无所获的现象是在所难免的。这样的经验教训已经很多。评审工作应该是由Champion来完成的。没有不成功的BB、GB,只有不成功的Champion。 

3、推动与拉动 
根据现代科学的管理方法,要求将公司的整体经营目标分解到各个部门,进而具体到每个人,即目标管理,以此作为绩效考核及晋升的依据。反过来说,每个人和每个部门的绩效指标都达到要求,公司的整体经营目标就能完成。为了完成这些指标,往往就需要有科学的、开拓创新的方法,将流程合理化,提高效率,降低成本。以这种需求拉动六西格玛实施才能将被动执行变成积极主动的行为。否则靠以往推动某项活动或运动的传统方法只能作表面文章 

4、财务支持 
六西格玛活动的开展需要财务部门的大力支持。无论在项目的选择还是结束过程都需要财务方面对项目经济效果客观的评估。效益评估容易产生两种误区:过于苛刻或过于宽松。 
评估过于苛刻的危害是改善效果得不到体现和承认,打击了BB、GB的改善活动积极性,使他们没有成就感,失去持续改善的动力。过于宽松的结果是片面夸大六西格玛的效果,失去真实性。此外,财务评估的及时性也很关键。在项目选择初期如果没有得到经济效果的确认,改善后期可能会发现BB、GB们历尽辛苦改善的项目几乎没有任何经济效果,白白浪费了人力、物力和财力资源。 

5、形式主义或者仅仅使用六西格玛的一些工具 
目前很多企业的CEO们都认识到改革的重要性,也听说过六西格玛方法在GE公司得到很好地发挥和运用,并获得成功,它能帮助企业达到突破性的效果,于是当作又一次质量运动,跟风似地上了六西格玛。但是由于对六西格玛理念和推进方法缺乏必要的认识,六西格玛活动成为质量部门的工作,针对局部的问题用六西格玛工具进行改善。结果发现效果远远不及当初想象中的那么好,于是认为六西格玛不适合自己公司,又在追寻另一条途径。 

6、来自部门间的壁垒或人为的抵触 
众所周知,六西格玛的实施不仅局限于质量部门,而是自上而下,在整个企业范围推动的活动。任何变革都不会是一帆风顺的,因为常常会触及到个别人的利益,比如工作的舒适程度降低、工作量和难易度增加等等。并且变革会逐渐打破部门间的壁垒,更多的横向联合使流程更趋于合理。然而一些人为的障碍和抵触会时有发生,提高人员的认识,强调改革的目的性变得更重要了。 

7、开源与节流并存 
六西格玛活动的另一个误区是只关注‘节流’,而忽视了‘开源’。众所周知,六西格玛要提高产品或服务的质量。受传统的质量管理思想影响,人们通常认为提高质量的同时必然会使成本增加,为了找质量与成本的平衡点,无须追求6SIGMA,3SIGMA或许正合适。这种观点在现在看来是非常落后和不具有竞争力的。事实上随着产品或服务变差的减少,质量成本COPQ会大幅度地下降,因为废品、返工、检验等非增值部分都降低了。退一步说,即使有一些资金的投入,如果能够带来更多的效益,远远超过初期投入,又何必固守‘节流’呢? 

8、必要的投资 
六西格玛是科学和严谨的方法,在流程改善方法论的同时,运用了大量统计工具。不大可能“自学成才”,在活动初期借助专业咨询公司的帮助是必要的。这是一项高回报率的投资项目。关键问题是如何选择专业的咨询机构。 


【关于实施6sigma管理的关键驱动因素】 

六西格玛取得极大的成功,还是惨重的失败,取决于它如何通过企业的体系架构来实施。创建一个成功的六西格玛体系架构是一个不断前进的过程,其目标是将一种质量意识灌输到每个员工的日常工作方式之中。因组织的文化和经营战略目标不同,各组织间的体系架构有着极大的区别。每个组织所创建的体系架构是独一无二的,然而,每个成功的体系架构的创建过程有其共同的因素。 

这些共同的因素包括成功实施六西格玛的关键驱动因素和关键的结果事项。如果各个关键驱动因素解决了,关键事项也就实现了,那么六西格玛管理就成功实施了。这些关键驱动因素按重要性从高到低的顺序排列如下: 
◆主管人员领导; 
◆以顾客为关注焦点; 
◆战略目标; 
◆项目选择; 
◆培训与执行; 
◆资源; 
◆黑带人员的选择; 
◆测量指标及反馈; 
◆文化; 
◆沟通; 
◆计划; 
◆结果。 


【关于6sigma管理与其他管理方法、体系、思想的关系】 

随着竞争日益残酷,组织在降低成本和增加产出的同时,在改进质量和顾客满意度方面,面临更大的压力。在拥有的可用资源越来越少的情况下,这成为一种更加艰巨的挑战。面对这些挑战,如果组织能够明智地实施六西格玛,它可以帮助组织学习并出类拔萃。 

从高层主管人员那里,我们经常听到的一个问题是:“六西格玛如何与其他的组织创新相匹配?”我们认为,不应该认为六西格玛不过是另一种创新,而应该在更高层将六西格玛与其他计划或创新整合起来,作为整个经营战略的一部分。六西格玛不应该取代其他创新,而是提供一种战术性方法论,以确定在特定的情景、过程中最好的方法。 

大家常关心的有: 
◆六西格玛与全面质量管理(TQM)的关系; 
◆六西格玛与精益制造/精益思想的关系; 
◆六西格玛与BPR、ERP、MRP(Ⅱ)的关系 
◆六西格玛和ISO9000的关系 
◆六西格玛与企业现行质量控制系统的关系 

 
posted @ 2006-04-30 09:36 崛起的程序员 阅读(426) | 评论 (0)编辑 收藏

web2.0定义是什么?
  
  web2.0定义是什么?这是一个简单直接但又是最核心的问题,讨论web2.0的文章层出不穷,内容包括如何实现web2.0, web2.0如何盈利, web2.0如何击败web1.0等。但没有多少人愿意讨论web2.0的定义,也没有多少人讨论web2.0已有的定义存在什么问题。没有清晰理性的定义,我们的讨论就像唐吉珂德骑着毛驴冲向他心目中的怪兽-大风车一样。可笑而又毫无意义。
  
  翻阅搜索引擎带给我们关于web2.0的海量资料,找到了Blogger Don的“WEB2.0概念诠释”,他写道“Web2.0是以 Flickr、Craigslist、Linkedin、Tribes、Ryze、Friendster、Del.icio.us、43Things.com等网站为代表,以Blog、TAG、SNS、RSS、wiki等社会软件的应用为核心,依据六度分隔、xml、ajax等新理论和技术实现的互联网新一代模式。” 这个定义把一些让人眼花缭乱的前卫名词和计算机专用术语堆砌在一起作为WEB2.0概念诠释,。把应用,协议,语言格式混杂在一起来描述WEB2.0概念。定义者要么对计算机知识一知半解,要么是企图让人们的感到神秘从而对其顶礼膜拜。按照其定义的方式对“国家”这个概念进行诠释,那国家就是“以中国,法国,美国,俄罗斯,土耳其等集合体为代表,以军队,警察,文官系统,议会等社会团体的应用为核心,依照量子力学,马斯络需求层次理论,混沌学等新理论和技术实现人类社会的聚集模式。“,多么荒唐的的定义
  
  一个新概念或新理论不可能从石头里蹦出来,也不会超越我们的时代凭空想象。他必然有自己的历史传承。理解WEB2.0,我们要了解WEB甚至是bbs的历史。 World Wide Web,简称WWW,由英国人TimBerners-Lee 1989年发明。通过WEB把互联网上的资源在一个网页里直观的表示出来并通过网页相互连接。在web之前,互联网相当数量的文档资源是存放在bbs上。通过对bbs发展历史的研究,我们发现web时代的内容服务网站主要是从bbs的功能中演化而成。
  
  BBS诞生于70年代末,那时还没有浏览器,搜索引擎,甚至没有个人网站。我们在BBS上可以做四件事1。发布新闻 2。发布交易信息 3。发布个人感想,心情描述4。互动式问答 前三个功能逐渐从bbs中分离出去,发展成三个方向的网站----新闻类,电子商务类和博客类,这三类网站经过整合逐渐成为各自的门户。如新浪,易趣,博客中国。第四个功能互动式问答正在分离,但还没有出现该领域的门户网站。如www.ideacool.net ,新浪的爱问,小i等网站。我们可以把这一类网站模式称之为威客模式,英文名witkey。
  
  我们应该已注意到1。新闻类网站。2.电子商务类网站 与3。博客类 4。威客类网站的功能和形式上有一个明显的鸿沟。这个鸿沟就应该是web1.0 与web2.0的划分界线。 新闻类网站和电子商务类网站为代表的web1.0时代是以信息接收者为中心,免费分享信息的时代。博客类和威客类网站为代表的web2.0时代是以信息提供者为中心。互联网用户能够管理个人的资料和信息。通过各种途径让自己的智慧,知识,经验,技能体现价值。简而言之,web2.0的定义就是提供一种平台让个人的智慧,知识,技能体现价值的一种互联网新模式。这种模式的表现形式主要为博客类,和威客类两种。实现的支撑包括互联网技术,信用制度,支付制度等。
  

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


Web2.0的盈利点

 

主要集中在威客模式上: 
  1. 威客模式面向的对象主要是有专业专长的用户如科学家,工程师,医生等,博客面向的是善于表达个人观点和思想的用户如记者,娱乐明星,专栏作家等等。
  
  2。个人的知识,技能,智慧可以体现价值。其中“体现价值”不一定指获得经济利益,获得受帮助者的赞扬,获得公众的认可也是体现价值的方式之一。但让参与者获得经济利益是威客模式的重要特点。
  
  3。个人的知识,技能,智慧可以体现价值,但不代表参与者一定能够获得收益,这要取决于其知识,技能的含金量,可以说,能力越大,收益越大。
  
  4。威客模式的建立需要实践该模式的平台建立信用制度,支付制度,例外处理制度等等。这些制度是否完善是该平台能否持续发展的决定性因素。
  
  5。威客模式也是人类大脑通过互联网协同工作的一种模式。
  
  6.为威客提供服务的平台通过分享威客交易知识的收益获取利润。

posted @ 2006-04-30 09:30 崛起的程序员 阅读(214) | 评论 (0)编辑 收藏
    进入2004年,伴随着各种机遇和挑战,中国的软件开发仍然在摸索中前进,程序员也在不断的学习和工作中探寻自己的未来。在这个过程中,当然少不了各种技术和公司对他们施加的影响。跟随谁,选择什么路线永远是一种充满未知数的挑战。

  谈到影响,可能以微软为首的软件巨头更容易被提及,毕竟开发人员所直接应用的操作系统、语言、开发工具等各种技术都掌握在这些公司手中。然而,这并不能抹杀和妨碍提起国内一些企业和人士对中国软件开发各方面产生的影响。

  站在这个角度,本刊在国内的软件企业和个人中评选出了如下20位人士,他们对近期软件开发产生了一定程度的影响。选出这些人,也是为了抛砖引玉,让国内的开发者更了解自己正在经历的变化和面临的挑战。

  在这些人员中,有些属于早一代的程序员,他们创造的业绩激励了很多程序员进入软件开发。鲍岳桥就是一个,尽管现在他已经成为了联众的总裁,但之前从UCDOS步入辉煌,Windows时代一度面临困境,最终凭借网 络游戏 成功 转型 ,这种以技术创业成功的例子对中国的程序员来说就是巨大的诱惑。

  与此同时,很多人从软件教育方向在逐渐改变整个软件行业的人才结构,这一说法毫不夸张。青鸟APTECH就是将印度软件教育模式带到中国来的典型,尤其是在中国软件人才结构并不合理的情况下,他们所做的工作也是有益的尝试。

  而且,面向未来的眼光也必不可少,很多人所做的工作带来的变化现在还不显著,但对未来可能会产生相当的影响。比如,中国软件人才的培养结构在逐渐向国际化靠拢,软件学院功不可没。更为超前的是,为了探索未来中国软件在底层技术上的引导性,有很多人在做努力,从Linux在中国的推广,到科泰世纪打造自己的操作系统和开发平台,尽管这些尝试可能会失败,但带给我们的是经验和深入的思考。

  现在,有人说程序员面对着太多的头绪,已经迷失了方向。的确,是有一些人迷失了方向,但这里的20位人士能够让我们以更清醒的眼光看待中国的软件开发,了解我们取得的成绩和面临的挑战。

  开国元勋

  严援朝

  所属公司:新浪网

  入选理由:开发第一个中文操作系统CCDOS,参与创办四通利方,掌控最大的中文网站新浪网技术总架构。

  “做软件就是在不断地明确目标,就是搞清楚你的GO 是什么,所有的软件都逃不出那三句话——IF、THEN、 ELSE。棒的程序员很快能够知道自己的GO是什么,没长进的程序员老也弄不清楚自己到底要干嘛,所以永远处在 学习过程中,手里永远拿着一本书,永远在学,永远也学不会。”这是严援朝很经典的一句话,甚至有程序员把这作为自己的座右铭。作为中国第一代程序员的象征,他如今依然负责在新浪网的整体技术架构上。不知是不是严援朝怕别人忘记自己,不久前,从新浪网炮制出了两篇文章,大谈自己的一些深奥看法。其实如果单纯是这种原因,应该大可不必,因为严援朝在中国软件开发史上奠定的地位无人可撼。

  求伯君

  所属公司:金山软件

  入选理由:软件领域的常青树,以榜样的力量激励众多程序员。

  每一个听到这个名字的程序员,都会有一种莫名的激动和敬仰。从金山成立的那一天起,公司的招聘广告上就把求伯君作为吸引程序员加入的重要宣传词,由此可见求伯君在程序员中的影响力。

  不久前,我们准备做“程序员的一天”的栏目,找到求伯君。他说:“做是可以,不过现在这些天不太适合,整天要陪着很多官员应酬。”看来,作为董事长的求伯君也仅仅能在精神上鼓舞程序员了。据说,金山正在筹拍一部 《剑侠情缘》 的电视剧,求伯君还可能在其中饰演一位方丈。到时候,我们或许可以欣赏求伯君的影视风采了。

  王江民

  所属公司: 江民科技

  入选理由:38岁开始编程,挖掘了杀毒软件的巨大市场潜力

  “38岁开始学习计算机,两三年之内成为中国最出色的反病毒专家之一;45岁只身一人独闯中关村办公司,产品很快占据反病毒市场的80%以上。”这些事实已经让我们无法忽视王江民对中国软件开发带来的影响力,在业内被尊称为老师的王江民,凭借坚持而开拓出了杀毒软件市场,这也成为中国软件产业所仅有的几个亮点之一。尽管现在KV系列产品中早已没有了一行他的代码,而且在市场中的表现也差强人意。但毋庸置疑,KV系列让众多的程序员知道了王江民,而他身残志坚的毅力和品质也让很多程序员面对困难和挫折时,从中得到鼓舞。

  鲍岳桥

  所属公司:联众公司

  入选理由:在DOS和Windows平台、网络时代下都获得成功的典型

  从UCDOS流行的那一天起,鲍岳桥也成为了中国无数程序员的偶像。然而,和很多程序员一样,他也并没有从UCDOS的成功中得到多少具体的物质利益。接下来,Windows平台开发的巨大冲击到来了,网络的冲击到来了,有谁能同时抓住两个机会?鲍岳桥无疑做了最好的注释。鲍岳桥认为,是否掌握某项技术不是关键,技术这个东西完全是触类旁通的,当今计算机的发展如此迅速,一个人不可能掌握所有的新技术,一个有经验的程序员应该能够利用自己原有的知识和经验,很快地掌握新技术和新知识。他与简晶、王建华的合作也是联众成长中的精彩经历,尽管现在他容登总裁宝座,而简晶和王建华离去创业,但他们当初的合作还让现在的众多程序员看到了初期团队合作的成功例子。

  宫敏

  所属公司:凝思科技

  入选理由:最早将自由软件引入中国

  宫敏,对很多人来说,这是一个陌生的名字。但正是宫敏博士,在芬兰参与了LINUX操作系统的开发与研究。后来,他用磁带背回了20GB容量的自由软件,形成了中国第一个自由软件库,被称为是中国自由软件界元老。

  然而,就在国内自由软件运动掀起狂潮时他却全身而退,埋头于开发和做实事去了。2000年,宫敏回国创办北京凝思科技有限公司,目标是在较短时间内为国家相关部门提供具有完全自主知识产权的高性能、高安全的国产信息安全 高技术 产品。宫敏认为,自由软件首先要重视教育,培养出一批有良好心态和真才实学的人。


        教育先导

  谭浩强

  入选理由:计算机基础教育

  雷军曾经说过:“是谭浩强让程序员感到了写程序就是自己的生命。”这可能是早一代程序员的感觉吧。在计算机基础教育方面,谭浩强无疑拥有极高的声望和经验。不过,现在社会已经进入新的阶段,尽管谭浩强已经成立了工作室,并不断出版了一系列的书籍,但真正如《Basic 语言》这样风行的书籍并没有再次出现。

  谭浩强的书集中体现了中国计算机教育的特点,浅显,作为入门级的书籍非常不错,但一旦真正要深入下去,可能就要选择国外那些大师级人物所写的书籍了。这也是国内很多程序员对谭浩强某些书籍颇有微词的原因所在。

  然而,不管如何,时代和机遇都造就了谭浩强在中国计算机史上的地位,这一点无法抹杀。

  李开复

  所属公司:微软

  入选理由:创办微软亚洲研究院,在学生中影响巨大

  有人说微软亚洲研究院现在很会作秀,大事小事总要通报一番,而且不时出来组织一些成果演示,或许这继承了李开复的风格。做过研究又在企业中多年锻炼的经历使得李开复把亚洲研究院当作企业一样的来运作,《追随智慧》等书籍的出版更将这种宣传推上了顶点。但从另外一方面来看,李开复的确给国内的计算机科学研究带来了新的气象,亚洲研究院的一些技术成果也对IT产业有着深远的影响。同时,微软亚洲研究院在大学中深入的各种活动使得李开复在学生中的影响力颇高。而最近《给中国学生的一封信》和《给中国学生的第二封信》都言辞恳切,引起了巨大反响。微软给中国印象最好的地方是亚洲研究院,这也算是李开复的高明之处吧。

  陈钟

  所属院校:北京大学软件学院院长

  入选理由:软件学院的积极倡导和实践者

  其实选择陈钟,不如说选择了软件学院更为恰当。毕竟从国家重视软件学院开始,有几十家高等院校开始了这方面的探索。而32岁就成为博导的陈钟作为北京大学软件学院的院长,在大兴开拓了新的天地,并取得了不错的成绩。

  最近,有朋友说:“以前,计算机系的学生对软件学院很不屑一顾,认为就是一群杂牌军。但现在,他们笑不起来了,软件学院的课程配置和教学完全是按照市场的要求去进行的,他们已经得到了市场的认可。” 当然在这些探索中,有的学院做的并不好,但作为国家希望改变现在计算机人才培养的方式而设的试点,我们有理由期待软件学院带来的改变。而陈钟将继续在这个过程中施展自己的才华。

  杨明

  所属公司:北大青鸟APTECH

  入选理由:将印度软件人才培养模式引进中国

  印度发展软件产业的成功被大肆宣扬后,吸收印度经验的探讨逐渐风行起来。但真正实施借鉴印度经验就是北大青鸟APTECH了。作为总经理的杨明,力图将这种模式和中国的实际情况相结合,打造出一种独特的软件从业人员的培训渠道。杨明并不喜欢别人称他培养出来的是“软件蓝领”,因为,在他看来,通过APTECH模式培养的人才是帮助很多人进入IT领域的“金光大道”。而且,采取特许经营这套模式也被巨额资金打造的产业链证明是可行的,因为目前已在全国建立和发展了近100家授权培训中心。据说,北大青鸟还将继续投资几个亿用来扩张,无论如何,教育模式方面,杨明带领的北大青鸟APTECH将会给国内软件业人才市场带来相当的影响。

  侯捷

  入选理由:技术写作创造品牌

  侯捷深入浅出的写作手法,给国内枯燥的技术书籍写作注入了一针强心剂。而且,国内的出版公司也从侯捷身上看到了一个优秀技术作者的市场潜力,因此将挖掘国内优秀作者作为重要的工作内容。

  同时,在侯捷直接和间接的影响下,国内一批软件开发者看到了技术写作的价值,开始出版技术书籍。现在,程序员发现了另外的一条可供选择的方向:技术写作。随着更多的开发者参与到其中,对提升国内开发者交流、共享技术起到了很好的促进作用。

  侯捷并不掩饰自己对财富的追求,他说:“好的作者就应该得到好的报酬,这样才能保证他能够静心研究技术,再写出更好的书来。”当网上攻击自己的帖子越来越多的时候,侯捷选择了自己的方式,他以老师的口吻试图来解释自己所倡导的这一切。然而,他的回应和解释并不能排解一些人的继续攻击,因为网络就是网络。

   创新者

  王志东

  现属公司:点击科技

  入选理由:在网络上取得成功后仍然钟情软件,投巨资做面向未来的协同软件

  不了解王志东的人觉得他放弃了软件,而后又被网络所抛弃;但了解王志东的都知道他最钟爱的还是软件,而且现在他同时拥有了网络。

  自从离开新浪之后,王志东的消息就逐渐从网络上减少了。应该说,王志东带给我们的消息更多是互联网所带来的影响力。

  对于王志东正在做的协同软件,很多人到现在也没有完全明白。尽管国外的一些厂商正在投巨资开发协同软件,但在国内,推广起来还存在很多的问题。但无论如何,王志东能够在功成名就后仍然投入资金来开发一个仍属未知数的软件领域,这种对软件的痴情不正彪显了开发者执著的特质吗。

  周奕

  入选理由:倡导走向国际市场,以共享软件挣美元的先行者。

  2001年的10月份,周奕从美国打来一个长途电话,对共享软件在国外寻求注册谈了很多他的想法,当时的他充满着发现新大陆的喜悦,也迫切希望与国内的程序员共同分享。随着媒体的宣传,“宝马车”给程序员带来了极大的吸引,一大批程序员、没有毕业的学生、甚至包括刚刚学习VB两三天的小孩子也都做起了美元梦。不过,周奕在国际上面临的压力也不小,一大批类似MP3 to CD的软件不断出现,其中不乏其他中国程序员的作品。尽管周奕的软件销售量下滑,但他从来没有后悔过这样做。

  现在国际市场上有数量众多的共享软件,其中中国、俄罗斯和美国占据了最大的份额,一大批共享软件作者通过这种途径换来了丰足的生活,当然也有另外一批人并没有带来所企盼的收获。但无论如何,周奕作为“共享软件走向国际市场”创始人被众多的程序员称为“老大”,这种影响力在中国的软件开发史值得一书。

  陈天桥

  所属公司:上海盛大

  入选理由:用市场的成功加速了网络游戏开发的进程

  陈天桥的入选可能争议很大,之所以坚持把他列入,完全是基于他给网络游戏市场带来的巨大冲击。掰开手指数数,中国有几个软件行业被如此追捧过,除财务管理软件和杀毒软件之外,还没有那个软件行业被疯狂的关注。正是基于上海盛大为代表的公司在网络游戏市场上取得的成绩,才使人把目光放在了网络游戏上。而且,正是盛大和韩国游戏开发商产生的冲突才使得自己和其他的运营商意识到了国产网络游戏研发的重要性。网络游戏程序员一时物以稀为贵,很多培训结构和高校都开设了相关专业,国家在这方面的政策也有了调整。以一己之力影响了网络游戏开发的产业进程,陈天桥带领盛大产生的影响力不可忽略。

  陈榕

  所属公司:科泰世纪

  入选理由:打造新一代操作系统

  陈榕的身上散发着一股锐气,有人说他是个天生的演讲家。不过当陈榕刚到国内推广其思想的时候,很多人不理解,他的情绪也会很激动。有人说他对技术研究的太深刻了,虽然提出的思想很对,但这种事情不应该在国内做,因为中国没有这样的环境。不知道陈榕如何看待这个问题。

  现在,美国的风险投资已经不易获得,而政府对这方面的支持使陈榕找到了一个机会。能否取得市场成功尽管是陈榕所关注的,但他可能更在意将多年以来在微软无法实现的一个梦在这里实现吧。

  然而,在微软的.NET已经推出,多种嵌入式操作系统相互争夺的市场上,科泰世纪的操作系统要取得成功还面临严峻的挑战。不过陈榕很有信心,他用一个例子来证明:微软很多的产品在1.0和2.0版本的时候都不被人看好,都是到3.0才成熟并得到市场认可的。我们也期望那一天早些到来。

  吴涛

  入选理由:易语言创始人

  如果说在中文语言编程上,中国有为数不多的开发者还寄托希望的话,那身处湖北省枝江市鑫源村的吴涛无疑是其中之一。这位数年前就开始做易语言的程序员远离了喧嚣的北京,毅然回家做起了中文可视化编程环境。

  在最近的版本中,吴涛建立了完全的易程序编译器系统,支持全编译,可以直接将程序编译为CPU指令码运行,从而突破了长期以来的速度瓶颈。同时,他的商业推广也做的不错,从易语言支持论坛的火爆中就可以看出这点。而吴涛一直执著在语言研究和底层编程工具的态度也是很多程序员需要学习的。尽管吴涛所做的工作不会撼动整个软件开发的大局,但有人执著于这样的工作也应该得到我们的尊敬。想一想,同样是基于中文的出发点,为什么WPS会得到推崇,而不能容忍易语言的存在呢。


   个人典范

  雷军

  现属公司:金山软件

  入选理由:从程序员向管理者成功转型的代表

  2003年初,当雷军在亚运村的一个并不为人所知的酒吧中聊天,探讨程序员成长和转型的时候,雷军曾说:“我现在认识到,CEO也是一种职业,这个职业对我更有吸引力。对公司未来的几年发展,我心中已经有了一个方向,关键就是如何去实施和时间快慢的问题而已。”

  应该说,媒体已经将雷军塑造成为了一个从程序员到管理者转型的典型例子。然而,在这种转变中,有谁能够了解到雷军当时所面临的压力和风险,如果失败了呢?没有人会问这个问题,也没有人会回答它。雷军带领金山发动的红色风暴也将通用软件的价格拉了下来,这也给程序员一次重新审视自己的机会。记得当时有报道谈到铭泰的程序员看到自己开发的软件不得不以几十元的低价销售时,甚至哭了起来。这算不算的雷军带给程序员的另外一种影响呢?

  不过,现在雷军作为管理者,同样面临着多种问题,当网络游戏火爆之后,雷军将赌注放在了剑侠情缘网络版上,有人还说雷军精于战术,但战略还有欠缺,这次的宝押对了吗?不管怎样,如果雷军成功了,这是管理者的成功,如果他失败了,也不过是管理者的失败案例之一。但雷军曾经有过的程序员身份将永远让我们关注他的人生。

  丁磊

  所属公司:网易

  入选理由:技术眼光抓住网络时代机遇的典范

  如果告诉你中国的首富也在看《程序员》杂志,你是否相信?这可能很难想像,但事实的确如此。

  如果说网络给了很多人一个机遇,包括软件开发人员,但并不是所有人都能抓住了这个机遇,即便抓住,又很难有人把这个机遇发挥到像丁磊这样极至。

  有人说丁磊不是一个技术人员,因为并没有开发过哪个令其扬名的产品,但丁磊所具有独到的技术眼光在转向网络服务和网络游戏时都起到了重要作用,说丁磊属于那种“玩技术”的更为合适。开发者如何利用各种技术挖掘到更为广阔的商业价值,这可能就是丁磊带给我们的启示吧。

  张小龙

  所属公司:博大

  入选理由:开发Foxmail和微软的OutLook抗衡,以免费软件一夜成名

  一个普通的程序员开发的软件能和微软的产品相抗衡,这很少见,而产品被巨资收购就更加是传奇,创造这个传奇的人就是张小龙。如果说互联网时代的软件只有几个算上成功的话,Foxmail肯定会名列其中。

  依靠这两点,张小龙对很多程序员产生的激励就不可小视。当然,这也是在当时的背景下发生的传奇,现在这样的故事可能不会再次发生了。

  张小龙加盟博大任副总裁和CTO后,他现在的工作首先是管理和组织各个产品和项目开发组,其次是规划公司的产品结构,公司现在有很多的产品和项目都要由他来统筹。这一次,团队合作的力量将成为他再次成功的基础。

  廖恒毅

  现属公司:佳软公司

  入选理由:十多年从事一线软件开发的代表,正打造基于.NET的企业级开发平台

  廖恒毅从不掩饰自己对微软的喜爱。从中文之星2.0到开发基于.NET的大型企业管理软件,他与微软的关系密不可分。而之前曾经在杜家滨领导下的微软中国公司担任开发合作部经理的经历,更给他身上打下了深深的微软烙印。尽管廖恒毅很坦率的谈到,他当时所做的工作不如现在的负责人,但作为一个纯粹的程序员,他利用微软技术创造的价值却无人可及。从中文之星2.0的热卖,到创造的拼音加加输入法带动了输入法技术的创新都是证明,而现在,他用.NET构架了佳软公司未来超速发展的动力,他说:“今天我更关注我的技术能否给社会而不仅仅是个人带来的价值。”

  如果有人说,微软的技术能做什么样的系统呢?廖恒毅一定会毫不迟疑的拿自己的系统举例,利用创建的软件平台,一个人可以在10多天的时间中打造出一个完整的企业管理系统,这是类似SAP和Sibel的平台,只是现在中国的软件环境并不适合其拿出来做公开的标准,公司更愿意使用这套系统来面向最终客户。未来,廖恒毅所创造的这一软件架构给中国企业软件开发带来冲击也并非不可能。当然,技术的领先并不代表市场的领先,这一点他也很清楚。

  廖恒毅并不习惯去公司分配给他的办公室去办公,他更喜欢扎在公司程序员的房子里面和大家一起工作。有次,聊程序员能做到什么时间,廖恒毅笑着说:“做了程序员,只要活着,就要一直写程序了。”

  袁红岗

  所属公司:金蝶中间件公司

  入选理由:最早开发Windows上的企业应用软件,打造独立知识产权的EJB服务器

  很多JAVA程序员对袁红岗极其佩服,源于他做了很多人不敢想更不敢做的事情,这就是他打造了国产的EJB服务器,很快,金蝶将在国内推出自主产权EJB服务器的3.0版本。

  同时,袁红岗还是在Windows平台上开发企业应用软件的最早的一批程序员,当时写出的适合小型企业使用的财务购销存一体化软件KINGDEE 2.7,令IT行业对金蝶刮目相看,使金蝶一举成名,正是这些人才奠定了中国的管理软件的基础。

  袁红岗将自己多年的经验以一种朴实的风格写出来,这些帖子在网上也影响深远。

  后记:

  我们选择了20位对中国软件开发最具影响力的人,从侧面也展示了中国软件开发的脉络。其中我们可以看到中国的软件开发大部分以国内市场为主,很多过去的那些软件英雄都与中文、汉化有着千丝万缕的联系。正是在这种情况下,这些人取得了成功,但同时也让国内的开发人员将目光局限在了国内市场上。而国内市场的不成熟以及其他一系列原因又导致了无法支撑起语言和底层开发工具技术厂商的存活。

  正因为如此,我们也有一些无奈,这些人大部分都是在心理上给程序员施以影响的人,而在技术层面上能够对软件开发方向产生影响的很少,即便是有影响力,其影响范围也很小。

  软件设计方面,国内没有一个企业或者个人引领某种规范使得大家可以靠过来。在全球技术统一化的今天,能否开发出面向全球市场的软件技术,这是需要重视的问题。我们的软件公司和程序员能否向这个方向努力呢?

posted @ 2006-04-30 09:11 崛起的程序员 阅读(217) | 评论 (0)编辑 收藏

摘要

Hibernate和struts是当前市面上几个最流行的开源的库之一。它们很有效率,是程序员在开发Java企业应用,挑选几个竞争的库的首选。虽然它们经常被一起应用,但是Hibernate的设计目标并不是和Struts一起使用,而Struts在Hibernate诞生好多年之前就发布了。为了让它们在一起工作,仍然有很多挑战。这篇文章点明了Struts和Hibernate之间的一些鸿沟,尤其关系到面向对象建模方面。文章也描述了如何在两者间搭起桥梁,给出了一个基于扩展Struts的解决方案。所有的基于Struts和Hibernate构建的Web应用都能从这个通用的扩展中获益。

在Hibernate in Action(Manning,2004十月)这本书里,作者Christian Bauer和Gavin King揭示了面向对象世界的模型和关系数据模型,两个世界的范例是不一致的。Hibernate非常成功地在存储层(persistence Layer)将两者粘合在一起。但是领域模型(domain model)(也就是Model-View-Controller的model layer)和HTML页面(MVC的View Layer)仍然存在不一致。在这篇文章中,我们将检查这种不一致,并且探索解决的方案。

范例不一致的再发现

让我们先看一个经典的parent-child关系例子(看下面的代码):product和category。Category类定义了一个类型为long的标示符id和一个类型为String的属性name。Product类也有一个类型为long的标示符id和一个类型为Category的属性category,表示了多对一的关系(也就是说很多product可以属于一个Category)

				
				
				
						/**
* @hibernate.class table="CATEGORY"
*/
public class Category {
   private Long id;

   private String name;

   /**
    * @hibernate.id generator-class="native" column="CATEGORY_ID"
    */
   public Long getId() {
      return id;
   }

   public void setId(Long id) {
      this.id = id;
   }

   /**
    * @hibernate.property column="NAME"
    */
   public String getName() {
      return name;
   }

   public void setName(Long name) {
      this.name = name;
   }
}

/**
* @hibernate.class table="PRODUCT"
*/
public class Product {
   private Long id;
   private Category category;

   /**
    * @hibernate.id generator-class="native" column="PRODUCT_ID"
    */
   public Long getId() {
      return id;
   }

   public void setId(Long id) {
      this.id = id;
   }

   /**
    * @hibernate.many-to-one
    * column="CATEGORY_ID"
    * class="Category"
    * cascade="none"
    * not-null="false"
    */
   public Category getCategory() {
      return category;
   }

   public void setCategory(Category category) {
      this.category = category;
   }
}




我们希望一个product可以被更改category,所以我们的HTML提供了一个下拉框列出所有Category。

				
				
				
						<select name="categoryId">
   <option value="">No Category</option>
   <option value="1">Category 1</option>
   <option value="2">Category 2</option>
   <option value="3">Category 3</option>
</select>




这里我们看出了两者的不一致:在Product领域对象里,category属性是Category类型,但是ProductForm只有一个类型为long的categoryId。这种不匹配不但增加了不一致,而且导致了不必要的代码进行primitive type的标示符和对应的对象之间的转换。

这种不一致部分是由于HTML Form自己引起的:它只代表了一种关系模型,不能代表面向对象的模型。面向对象和关系模型的不一致在存储层由对象关系映射(O/RM)解决。但是类似的问题在表示层(view layer)仍然存在。解决的关键是让他们一起无缝地工作。

Struts的功能和局限

幸运的是,Struts能够生成和解释内嵌的对象属性。Category下拉框可以用Struts page-construction(html) tag library:

				
				
				
						<html:select property="category.id">
   <option value="">No Category</option>
   <html:options collection="categories" property="id" labelProperty="name"/>
</html:select>



我们假设categories是Category对象的一个list。所以现在我们要修改ProductForm,让它变得更加“面向对象”,我们要修改ProductForm的categoryId,改成类型为Category的category。这种改变会导致在Product和ProductForm之间复制属性的工作更加繁琐,因为两者有相同的属性。

				
				
				
						public class ProductForm extends ActionForm {
     private Long id;
     private Category category;
     ...
}




当我们完成剩余的Struts Action, configuration, validator, jsp, hibernate层后,开始测试,我们马上在访问ProductForm.category.id时遇到了NullPointerException。这是预料中的!因为ProductForm.category还没有被设置,同时,Hibernate也会将多对一所联系的对象引用设为空(如果database field为空指)(译者:这里指Hiberate将product.category为Null,如果该Product没有联系到任何category)。Struts要求所有的对象在显示(生成HTML Form)和传播(提交HTML FORM)之前被建立。

让我们看看如何用ActionForm.reset()来架起桥梁。

(并非如此)臭名昭著的Struts ActionForm

在我第一个星期接触Struts的时候,我最大的一个疑问就是:为什么我必须为Properties, getter方法, setter方法保持几乎完全相同的两份copy, 一份在ActionForm Bean, 一份在DomainObject。这个繁琐的步骤成了Struts社区最主要的抱怨之一。

以我的观点,ActionForm存在有原因的。首先,它们可以区别于Domain Object因为他们但当了不同的角色。在MVC模式下,Domain Object是Model层的一个部分,ActionForm是View层的。因为Webpage的Field和Database的Field可能不一样,某些特制的转换是常见的。第二,ActionForm.validate()方法可以定义非常好用的验证规则。第三,可能有其他的,特定的View行为,但是又不想在domain layer实现,特别当persistence framework来管理domain object的时候。

提交Form

让我们来用ActionForm内有的方法-reset()-来解决view和model之间的不一致。这个reset()方法是在ActionForm在被Struts Controller Servlet处理request时候复制ActionForm属性之前调用的。这个方法最常见的使用是:checkbox必须被显式地设为false,让没有被选中的checkbox被正确识别。Reset()也是一个初始化用于view rending对象的合适地方。代码看起来是这样的:

				
				
				
						public class ProductForm extends ActionForm {
     private Long id;
     private Category category;
     ...
     public void reset(ActionMapping mapping, HttpServletRequest request)
     {
        super.reset( mapping, request );
        if ( category == null ) { category = new Category(); }
     }
}




Struts在使用用户提交的值填写ProductForm之前,Struts会调用reset(),这样category属性将会被初始化。请注意,你必须检查category看它是不是null,后面我们会讨论这个。

编辑Form

到目前为止,我们已经解决了form提交时候的问题。但是当我们在生成form页面的时候呢?Html:select tag也希望有一个非空的引用,所以我们将在form生成页面之前调用reset()。我们在action类里加入了一行:

				
				
				
						public class EditProductAction extends Action {
     public final ActionForward execute( ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response ) throws Exception
     {
        ...
        Product product = createOrLoadProduct();
        ProductForm productForm = (ProductForm)form;
        PropertyUtils.copyProperties( productForm, product );
        productForm.reset( mapping, request );
        ...
     }
}




我假设读者已经对action类和Jakarta commons Beanutils包非常熟悉了。CreateOrLoadProduct()建立了一个新的Product实例或者从数据库里载入一个已有的实例,具体取决于这个action是建立或者修改Product的。ProductForm被赋值后(译者:也就是调用PropertyUtils.copyProperties后),productForm.category已经从Product.category复制过来了(译者:实际上只是复制了category对象引用,并没有开销),然后,ProductForm就能用来生成页面了。我们同时也必须保证:不覆盖已经被Hibernate载入的对象,所以我们必须检查(category)是不是为null。

因为reset()方法是在ActionForm中定义的,我们可以把上述代码放入一个superclass,比如CommonEditAction,来处理这些事情:
    

				
				
				
						      Product product = createOrLoadProduct();
        PropertyUtils.copyProperties( form, product );
        form.reset( mapping, request );



如果你需要一个只读的Form, 你有两个选择: 第一检查所联系的jsp对象是不是null, 第二复制domain对象到ActionForm之后调用Reset()

保存domain对象

我们解决了提交Form和生成Form页面的问题, 所以Struts可以满足了。但是Hibernate呢?当用户选择了一个null ID option – 在我们的例子中“no category”option- 并且提交form, productForm.category指向一个新建立的hibernate对象,id为null。当category属性从ProductForm复制到Hibernate控制的Product对象并且存储时,Hibernate会抱怨product.category是一个临时对象,需要在Product存储前先被存储。当然,我们知道它是Null,并且不需要被存储。所以我们需要将product.category置为Null,然后Hibernate就能存储Product了(译者:在这种情况下,数据库product.category被设成空值)。我们也不希望改变Hibernate的工作方式,所以我们选择在复制到Domain对象之前清理这些临时对象,我们在ProductForm中加了一个方法:

				
				
				
						public class ProductForm extends ActionForm {
     private Long id;
     private Category category;
     ...
     public void reset(ActionMapping mapping, HttpServletRequest request) {
        super.reset( mapping, request );
        if ( category == null ) { category = new Category(); }
     }

     public void cleanupEmptyObjects() {
        if ( category.getId() == null ) { category = null; }
     }
}




我们在copyProperties之前清理掉这些临时对象,所以如果ProductForm.category只是用来放Null的,则将ProductForm.category置为Null。然后Domain对象的category也会被设成null:

				
				
				
						public class SaveProductAction extends Action {
     public final ActionForward execute( ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response ) throws Exception
     {
        ...
        Product product = new Product();
        ((ProductForm)form).cleanupEmptyObjects();
        PropertyUtils.copyProperties( product, form );
        SaveProduct( product );
        ...
     }
}




一对多关系

我还没有解决Category到Product的一对多关系。我们把它加入到Category的Metadata中:

				
				
				
						public class Category {
     ...
     private Set products;
     ...

     /**
      * @hibernate.set
      * table="PRODUCT"
      * lazy="true"
      * outer-join="auto"
      * inverse="true"
      * cascade="all-delete-orphan"
      *
      * @hibernate.collection-key
      * column="CATEGORY_ID"
      *
      * @hibernate.collection-one-to-many
      * class="Product"
      */
     public Set getProducts() {
        return products;
     }

     public void setProducts(Set products) {
        this.products = products;
     }
}



注意:Hibernate的cascade属性为all-delete-orphan表明:Hibernate需要在存储包含的Category对象时候,自动存储Product对象。和parent对象一起存储child对象的情况并不常见,常见的是:分别控制child的存储和parent的存储。在我们的例子中,我们可以容易地做到这一点,如果我们允许用户在同一个html page编辑Category和ProductS。用set表示Products是非常直观的:

				
				
				
						public class CategoryForm extends ActionForm {
     private Set productForms;
     ...
     public void reset(ActionMapping mapping, HttpServletRequest request) {
        super.reset( mapping, request );

        for ( int i = 0; i < MAX_PRODUCT_NUM_ON_PAGE; i++ ) {
           ProductForm productForm = new ProductForm();
           productForm.reset( mapping, request );
           productForms.add( productForm );
        }
     }

     public void cleanupEmptyObjects() {
        for ( Iterator i = productForms.iterator(); i.hasNext(); ) {
           ProductForm productForm = (ProductForm) i.next();
           productForm.cleanupEmptyObjects();
        }
     }
}




更进一步
我们已经可以察看,编辑,提交forms,并且存储相关的objects,但是为所有的ActionForm类定义CleanupEmptyObjects()和reset()方法是个累赘。我们将用一个抽象的ActionForm来完成协助完成这些工作。

作为通用的实现,我们必须遍历所有的Hibernate管理的domain对象,发现他们的identifier,并且测试id值。幸运的是:org.hibernate.metadata包已经有两个Utility类能取出domain对象的元数据。我们用ClassMetadata类检查这个object是不是Hibernate管理的。如果是:我们把它们的id Value取出来。我们用了Jakarta Commons Beanutils包来协助JavaBean元数据的操作。

				
				
				
						import java.beans.PropertyDescriptor;
import org.apache.commons.beanutils.PropertyUtils;
import org.hibernate.metadata.ClassMetadata;

public abstract class AbstractForm extends ActionForm {
   public void reset(ActionMapping mapping, HttpServletRequest request) {
      super.reset( mapping, request );

      // Get PropertyDescriptor of all bean properties
      PropertyDescriptor descriptors[] =
         PropertyUtils.getPropertyDescriptors( this );

      for ( int i = 0; i < descriptors.length; i++ ) {
         Class propClass = descriptors[i].getPropertyType();

         ClassMetadata classMetadata = HibernateUtil.getSessionFactory()
            .getClassMetadata( propClass );

         if ( classMetadata != null ) {   // This is a Hibernate object
            String propName = descriptors[i].getName();
            Object propValue = PropertyUtils.getProperty( this, propName );

            // Evaluate property, create new instance if it is null
            if ( propValue == null ) {
               PropertyUtils.setProperty( this, propName, propClass.newInstance() );
            }
         }
      }
   }

   public void cleanupEmptyObjects() {
      // Get PropertyDescriptor of all bean properties
      PropertyDescriptor descriptors[] =
      PropertyUtils.getPropertyDescriptors( this );

      for ( int i = 0; i < descriptors.length; i++ ) {
         Class propClass = descriptors[i].getPropertyType();
         ClassMetadata classMetadata = HibernateUtil.getSessionFactory()
            .getClassMetadata( propClass );

         if ( classMetadata != null ) {   // This is a Hibernate object
            Serializable id = classMetadata.getIdentifier( this, EntityMode.POJO );

            // If the object id has not been set, release the object.
            // Define application specific rules of not-set id here,
            // e.g. id == null, id == 0, etc.
            if ( id == null ) {
               String propName = descriptors[i].getName();
               PropertyUtils.setProperty( this, propName, null );
            }


         }
      }
   }
}



为了让代码可读,我们省略了Exception的处理代码。

我们的新AbstractForm类从Struts的ActionForm类继承,并且提供了通用行为:reset和cleanup多对一关联对象。当这个关系是相反的话(也就是一对多关系),那么每个例子将会有所不同,类似在Abstract类里实现是比较好的办法。

总结

Struts和Hibernate是非常流行和强大的框架,他们可以有效地相互合作,并且弥补domain模型和MVC视图(view)之间的差别。这篇文章讨论一个解决Struts/Hibernate Project的通用的方案,并且不需要大量修改已经有的代码。

posted @ 2006-04-30 09:01 崛起的程序员 阅读(279) | 评论 (0)编辑 收藏
仅列出标题
共9页: 上一页 1 2 3 4 5 6 7 8 9 下一页