傻瓜纯洁思想里的沙子

愿意当傻瓜的人都快乐
posts - 7, comments - 3, trackbacks - 0, articles - 11

2006年8月10日

         十一长假过完了,昨天挤火车也累得够呛,用一句流行的生存语言描述“累得像狗一样”。
         今天看了林锐的一篇文章,感觉讲的很好,简直是精华,可惜是ppt,不能完全展示,从里面摘录一些话出来勉励自己:
      
      
青年白领阶层小康了吗 
               
u      改革开放20年之后,中国基本上解决了全民的温饱问题。现在国家提出了全民奔小康的奋斗目标。所谓小康是指全国人均年收入达到1000美元。你千万不要觉得全民奔小康这个目标很容易实现。要知道中国有13亿人口,大约有10亿人在拖小康的后腿啊。所以发达地区至少要有10倍于落后地区的经济能力,才能抵消落后地区的负担。
      据大致估计,上海、北京等发达城市的软件白领平均年薪为10万元左右。如果进一步细分的话,年薪5万元左右的称为灰领,年薪20万元以上的称为金领。
u对于生活在上海、北京、深圳等发达城市的人而言,如果他的年收入只有1000美元的话,那么他就是赤贫阶了。面对高昂的房价和不低的物价,年薪10万元左右的人也许有胆量谈小康。所以大部分白领人士将和农民一样,不得不为小康而长期奋斗。


 
软件白领的现状
u      尽管软件白领是令社会大众羡慕的阶层,但是男士们成家立业的艰辛程度丝毫不亚于农民和蓝领。这是因为他们所负的压力远远超过了经济收入。
          “月光王子的潇洒日子是短暂的。
u      家的三大构成要素是男主人、女主人、房子。根据中国的传统习俗,买房子这个重任主要由男士来挑,女士的主要本事将用在有房子之后治理这个家。
工作才两三年的小伙子全靠自己的积蓄难以支付房子的2030%首付。在亲人和朋友们的帮助下,好不容易买了房子,接下去每月都要还银行贷款。
当他的工资扣除税收、缴掉各种保险金、还银行住房贷款之后,顿时所剩无几。这时如果再让他肩负家庭的生活费用,他就不再是白领了。我已经多次听到一些小伙子们恨恨地说:自从买了房子后,我就活得像个民工,开始为家庭的温饱而奋斗。
      这就是目前普通软件白领的生活写照,如果他不能在事业上有大的跃进,生活的压力将逐渐磨灭他的斗志,后半生就平淡如水。
u      大多数人并不甘心平庸,所以他不停地奋斗,不停地承受更多的压力,这种死循环程序在读大学的时候就已经编写好了。
u      《读者》曾经刊登了一篇文章叫中国的男人为什么不浪漫?,估计是悠闲女人写的。其实不必写那么长的文章,一句话就可以解答:因为他太累了。

         
软件白领的常规职业发展
u      在外界看来,做个程序员是蛮光彩的。但是我们自己切勿轻易满足,软件行业还有许多比编程更有价值的工作。
      有个朝鲜官员第一次到中国参观学习,感叹万分
u      软件白领的常规职业发展大致可分三个阶段:
         第一阶段,做个职业程序员,主要工作是编程、测试和维护,领导让他干啥就干啥。
         第二阶段,成为项目经理或同等级别的技术负责人,从事项目管理、需求分析、系统设计之类的工作,带领一批程序员干活。
         第三阶段,成为机构(企业或者事业部)的领导,成天琢磨怎样让机构赚更多的钱,决定产品的发展战略,然后让别人去开发产品。
u         软件白领处于第一阶段为合格,处于第二阶段为良好,处于第三阶段为优秀。比较合适的年龄分别为25岁左右、30岁左右、35岁左右。第一阶段比较容易实现,第二阶段需要一定程度的努力,第三阶段则靠奋斗了。  


什么是强势知识 
              
u         在解释什么是强势知识之前,我们先举例说明它的反义词——垃圾知识。
               《读者》有一篇文章说,国内有个杜甫研究专家在国际上拥有一项独一无二的研究成果,他用了19年时间研究证明杜甫是吃牛肉死的,因此成为权威。
         人们总以为研究杜甫是为了让人们更好地欣赏高雅的诗词,没想到有人执著到用19年时间研究杜甫是吃什么死的。这个研究成果不是学问,它对人类社会毫无价值,称之为垃圾知识最恰当不过了。
u世界上的知识无穷无尽,没有人能够学得完。然而人的寿命却是有限的,对于世上的绝大多数人而言,学习知识的目的是为了使自己、家庭、乃至社会变得更加美好。我们听惯了知识就是力量,知识就是金钱的格言,殊不知劣质的知识就是垃圾。万一我们花了大半辈子时间学习或制造垃圾知识,那人生岂不可悲!
u知识的价值可以用创造出来的社会财富(包括物质财富和精神财富)来衡量。所谓强势知识就是能够最快地为社会创造最多财富的知识。我们应当在短暂的、富有生命活力的时间里学习和应用强势知识,而不是垃圾知识。

 
把事业建筑在强势知识之上 
u         由于人的精力和特长都有局限,所以人们常说有所为而有所不为。同理,我们应当有所学而有所不学一般地,人们应当根据自己的兴趣、毅力、悟性(天赋),发掘适合自己的强势知识,并把事业建筑在强势知识之上
u         要好好分析自己究竟对什么感兴趣。当然,你感兴趣的东西未必都能学得好,更未必成为你的事业。在读书的时候换专业,工作的时候改行都是很正常的事情,年轻人切勿过多地受正统教育观念的束缚。我并不推崇干一行爱一行这样的口号,因为爱和不爱都是发自内心的,无需听从口号。我更不赞同在事业上择一而终,因为这可能使生命失去色彩。人是易变的,只要朝着更加适合你的方向改变,就叫与时俱进
林锐的学习经历和工作经历回顾十多年的读书和工作生涯,我不断地改变兴趣,常常在付出努力之后再放弃,得失参半。我并不后悔,因为这是一个积极的探索过程,没有放弃就不能轻装前进。尽管目前自己干得不错,几年之后我仍然会放弃,继续探索新的兴趣,掌握更多的强势知识


 
为事业而学习
u         如果你生活在竞争激烈的社会里,特别是在IT行业,事业将毫无疑问成为男人的重心。尽管事业成功并不见得就使你幸福,但是事业却是幸福的基础。如果男人在事业上无所建树,那么他十有八九活得很失败。
u一般地讲,除了运气之外,你所掌握的强势知识决定了事业状况。不论是在学校里还是在企业里,都要懂得为了事业而学习
         根据事业的目标,确定对应的强势知识结构,有目的有步骤地学习这些强势知识。(在大学里所学的仅仅是专业基础知识而已,只够让你成为工匠挣口饭吃,不要以为自己是个本科生、硕士生或者博士生就翘尾巴。   
学好基础知识。把事业比喻为高层建筑,那么基础知识就相当于地基。 ……虽然我们强调基础知识的重要性,但是也不能过度地推崇,基础应该与事业目标匹配起来,要考虑机会成本
读书时扬长补短,工作时扬长避短。……“补短是指补习你不擅长的知识,因为这些知识对你的事业也非常重要,并不能因为你不擅长就可以甩掉它,如果不补短的话,短处将常常拖你的后腿。 ……人们工作的目的是为了创造效益,要给企业和自己多多赚钱,而不是单纯为了提高自己的知识水平。所以在工作的时候一定要扬长避短
         不仅要学习新知识,还要向错误和失败学习,形成学习的良性循环。我们从小学读到大学毕业,一直都在学习新知识,一直信奉好好学习,天天向上。然而我们不能把眼光仅仅盯在新知识上,不管是生活还是工作,人们都应该向错误和失败学习,目的是让我们在短暂的健康年华中少犯错误、少失败,多做几件正确的、对社会有贡献的事情
 
 
      还有一些就是怎么提高管理能力,表达能力和人格魅力方面也谈到了很多,先贴出这些吧。慢慢消化一下,当然有些观点还是有自己的考虑和想法。

posted @ 2006-10-08 10:27 哈迪尤 阅读(214) | 评论 (0)编辑 收藏

                                                                             Knowledge Representation

   1.3.1 Production Rules
           规则或Production Rules在Drools里由规则成立时处理动作(LHS)和规则不成立时处理动作(RHS)两部分和其它下面一些而外的属性组成。
               。salience
               。agenda-group
               。auto-focus
               。activation-group
               。no-loop
               。duration

 

rule “<name>”    
    
<attribute> <value>    
    when        
        
<LHS>    
    then        
        
<RHS>
end
      LHS由规则的名称和逻辑组合条件组成。下面则是符合规则条件下要执行的指定的动作。中间属性列用来约束初始数据。 
      Drools现在支持的逻辑条件有:
      。“and”
      。“or”
      。“not”
      。“exists”
      "forall"和"accumulate"在不久也会加入。下面的字段约束是容许的
      。Literal Constraint                 (字符串约束)
      。Bound Variable Constraint   (变量范围约束)
      。Return Value                        (范围值约束)
      。Predicate                              (断言)

          下面的语言指导介绍更详细的关于它们的消息
          Working Memory在匹配初始数据或修改数据后的时候根据LHS 的条件,把所有匹配的规则激活。一旦规则被激活放入Agenda 里就
   有可能会被按照执行顺序调用规则RHS的动作。LHS和RHS的关系就下面语句关系一样:
            
if ( <LHS> ){
     
<RHS>
}
       尽管“if”在像“if-else if...else”中是执行语句的一部分,规则使用“when”的语义确定规则是否被激活,则规则LHS被匹配。规则
   像    “package”一样关联到命名空间。其它的规则引擎叫这个叫规则集合(Rule Set)。命名空间(Package)可以声明imports其它Package,
   全局变 量, 函数和规则。
  
package com.sample

import java.util.List
import com.sample.Cheese

global List cheeses

function 
void exampleFunction(Cheese cheese) {
    System.out.println( cheese );
}


rule “A Cheesey Rule”
    when
        cheese : Cheese( type 
== "stilton" )
    then
        exampleFunction( cheese );
        cheeses.add( cheese );
end
      
      上面的例子使用一列单独的字符串变量约束的规则来匹配Cheese 。
rule "Cheddar Cheese"
    when
        Cheese( type 
== "cheddar" )
    then
        System.out.println( 
"cheddar" );
end
      这个例子和下面是相同的:
public void cheddarCheese(Cheese cheese) {
    
if ( cheese.getType().equals("cheddar"{
        System.out.println( 
"cheddar" );
    }

}
      规则引擎完全把业务规则和数据分离。改变Working Memory里的初始数据时候,规则不像方法和函数一样可以被直调用。规则引擎可以向java一样声明做什么而不是怎么做。


First Order Logic

posted @ 2006-10-08 10:13 哈迪尤 阅读(347) | 评论 (0)编辑 收藏

         下面的问题经常被问到:
               1。什么时候使用规则引擎。
               2。规则引擎比“if...else...”语句有什么样的优势。
               3。为什么使用规则引擎来代替动态脚本框架,比如Beanshell。

    1.2.1 总结使用规则引擎的优点
                 声明式编程
                  规则引擎容许你“应该做什么”而不是“怎么做”
               这个优点的关键点在于对于很难的问题也容易表述解决方案,应而可以很容易检测解决方法(比阅读代码简单).
               规则引擎解决很难很难问题的能力很强,只要解决方法能够描述怎么做就行(对于AI神经网络系统或则人的想法就不容易咯)
               把业务规则和数据分开
                        数据在业务领域对象里,逻辑在业务规则里。这个打破了OO数据和逻辑不分离的基本规则(这个优势取决你看问题的观点),这样的结果可以很容易维护业务规则,在业务层规则里适应未来的业务改变。
               运行速度快,性能可度量
               Drools' Reteoo 派生于Rete 和Leaps 算法,根据你的业务数据对象提供非常快速的规则匹配。当你的数据不做经常任何改变时,运行更有效率(规则引擎会记住以前的模式匹配)。
               集中知识
                一旦使用并运行规则引擎,就创建了知识仓储。这个意味着对于业务方针的单点入口。更理想情况是规则更容易读,业务服务可以文档化。
               工具集成
               eclipse的工具提供编辑和管理rules和直接的反馈,认证,内容协助。监控和调试工具也处于可用状态。
               日志清晰
               规则引擎有效的提供“解析说明”能够记录规则引擎做了些什么
               易理解的规则
               为业务领域问题创建创建领域模型,业务规则则可以用很自然的语言描叙,这样设计者可以拿很容易理解的规则给没有技术基础业务领域专家()
               

posted @ 2006-10-08 10:13 哈迪尤 阅读(1414) | 评论 (1)编辑 收藏

     规则引擎
  


      1。什么叫规则引擎


          I  来源和背景
                  人工智能是集中研究使计算机像人类一样来想问题用现实中自然来描述问题的宽广的研究领域,列于规则,决策树和专家系统等。AI在知识表示时关心多少知识需要被记录和维护。专家系统把知识逻辑整理成规则放入用于推理的知识库中来表示为学习(我们使用基于知识库中推理来得到结论)。知识管理系统和基于知识库的专家系统被考虑用于人工智能,在这个过程中我们称为学习引擎。EMYCIN是专家系统中第一个用来处理跟外界交互的模块(Shell),一个用于医学诊断的专家系统。成熟的专家系统从系统里剥离出里剥离出用于跟外界交互的逻辑模块。Drools是一个基于规则处理来实现专家系统的规则引擎产品。
                 规则产品这个术语是一个语法中正式的叫法,还可以简单的描述成:用无限的规则集合通过匹配一个处理流程逻辑来定义一个有限的逻辑规则。
                 商业规则管理系统为商业用户提供规则引擎系统的规则管理,部署,协作和分析的用户工具。商业规则的前景是快速的演化成专门为企业提供服务的正式学科。
                  规则引擎可以被只要使用规则的任何一个系统使用。一个简单的认证和根据结果动态表示的系统通过规则引擎来处理数据得到结果被Malcolm Chisholm 在“How to Build a Business Rules Engine (2004)”书上作为一个例子。这本书事实上关于通过用vb代码来控制不同的认证规则来建立或更改数据库中的表和验证登陆数据。当非常有效和有用的一些话题,没有觉察到与规则引擎微妙的不同点,作者希望找出隐藏的一些秘密来改善Drools引擎。jBPM 使用决策点中的表达式和代理来控制工作流中的流程。在每个决策点评估一个规则来决定采用那个处理动作,这个也属于规则引擎。虽然一个规则产品系统属于规则引擎或专家系统的一种,像上面提及的通过编程表达式来确定规则不属于专家系统。
                  一个规则系统产品完全的关注知识表现和简明的定制的执行逻辑。规则产品系统的思考是一个接口引擎用来度量很大数量的规则和事实。接口引擎匹配事实,数据和依靠已有的规则,或则直接调用已有的案例或仅仅规则集来推断出执行动作的结论。规则产品库一般由两部分组成,第一部分是条件执行逻辑。
匹配新的或则依靠已有的规则的处理过程叫模式匹配,同样它也是通过接口引擎执行。用于模式匹配的算法的接口引擎包括:
         
  • Linear

  • Rete

  • Treat

  • Leaps
    Drools 实现Rete和Leaps算法,Leaps 是经过试验证明的,尽管它还非常新。Drools 's Rate被为是Rete算法的一个面向对象的Java实现。市面上还有其他几种经过增强的Rete的商业Rete算法引擎,例如:RetePlus 和Rete III 。Rete III不像原始的Rete算法一样,它是完全商业化的产品,并不公开算法的重要细节。提出“为什么Drools不使用Rete III 算法”是非常无趣的。更多的详细内容请参阅<< Production Matching for Large Learning Systems (Rete/UL)">>(1995) by Robert B. Doorenbos。
                     将多个规则( Rules) 存储在Production Memory里,初始数据(facts的)接口引擎输入到Working Memory(工作内存区)。Working Memory里的 初始数据(Facts)是可以更改和替换的。一个系统里有一定数量的rules 和 facts,并且根据rules判断的出相同的结果,则可以说这些 rules是冲突的(执行规则冲突)。Agenda管理使用多次规则匹配规则冲突策略来确定执行命令。

    Rule_Engine.bmp


                                                                    Figure 1.1. ABasic Rete network
                      一个规则引擎系统的的接口引擎应该是声明式的,并且能够根据声明的事实来执行。它被称为Truth Maintence。执行的动作的逻辑关系是确定好的,当根据逻辑关系推论出action的状态值为真便执行动作。如果不符合条件则不执行动作。下面“真实的政客”就是Truth Maintence的一个例子。当政客存在时候,总是只有确保希望存在条件下才执行动作。

     

                     规则引擎有两种推理方式。Forward Chaining (推理)和Backward Chaining(归纳法)。实现两种算法的规则引擎称为混合型规则系统。理解两种方式操作上的不同是理解不同的规则引擎的优点。Forward chaing是数据驱动的,当把数据放入working memory 得到一个或多个执行结果。当有多个多个规则匹配时候,就用使用Agenda执行定义好的动作,直到全部执行完成。Drools 属于Forward Chaining 推理引擎。

    Forward_Chaining.bmp

    Backward chaining 是根据假设目标来驱动的。开始后试图不断找到符合的结论,如果不能找到符合的规则时候,则设定下一个子假设来帮助当前的假设来找到符合的规则,这样重复不断查找,直到找完全部的结论或者没有子假设时候才停止。Backward Chaining 的规则引擎的例子是Prolog 。Drools将在下一个发行版加入 Backward Chaining。

    Backward_Chaining.bmp

  • posted @ 2006-08-10 23:52 哈迪尤 阅读(1517) | 评论 (0)编辑 收藏