自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

分析要适可而止

    在软件设计中分层应该是越少越好, 过度分解一般都是有害的.虽然说复杂的事物分解之后一般可以得到一些较简单的组成成分, 但这并不是必然有用的. 分析学成功的关键在于分解之后的组分能够出现大量重叠的情况,参见软件中的分析学 http://canonical.blogdriver.com/canonical/555330.html    当分解到一定程度之后我们未必能够发现可以重用的部分....

2005-12-29 23:58:00 86

[导入]敏捷随想

   敏捷(Agile)开发的灵魂是演化(evolution),其具体的过程表现为迭代(iteration),迭代的每一步就是重构(refactor),而单元测试(unit test)与持续集成(continuousintegration)模拟了程序生存的环境(约束),是mercilessrefactoring的技术保障。从数学上我们知道迭代总有个收敛问题。一些重型方法将变化(无论是正方向...

2005-12-28 23:15:00 95

[导入]过度设计与设计不足

    Agile批评过度设计(over-engineering)的声音很大,但对于设计不足(under-engineering)同样是持坚决的否定态度的。修改过度设计的应用比修改设计不足的程序要容易的多。因为简化的途径是明确的,而走向复杂的途径却往往是难以控制的。Refactoring ToPatterns试图引入一些经验,但这些可预见的调整多半只在细节处,其影响是局部的。一个复杂性低层次...

2005-12-28 23:11:00 150

[导入]程序中的结构表达

  循环结构是imperativelanguage的重要组成部分,一般也是程序中比较难以理解的部分。特别是没有软件技术背景的朋友,明显对于循环的理解力较弱。在Von Neumann体系结构中,赋值语句是必须的,因而引出了存储概念,也引入了时间概念,因为我们可以区分出赋值前和赋值后的时刻。引入时间之后,本质性的影响是程序串行化,而强迫我们从并行思考转入串行处理。很多时候这是一种不自然的情况,在...

2005-12-28 22:49:00 74

[导入]UnitTest:语义校验

  单元测试随着agile的流行已经家喻户晓了,这正反映了软件的一个本质特征:软件是Man-Made的,而人是不可靠的。软件出错的高频率必然导致控制间隔的缩短。我最早是在编写matlab程序的时候独立的发现了单元测试的作用。因为matlab是弱类型的,横纵矢量也不区分,很容易犯错误,我就为每一个matlab函数编写了测试脚本,约定了命名规范为xxx_test.m, 在测试的时候通过can_...

2005-12-28 22:34:00 91

[导入]IVarValueSet: Map语义的扩展

   关系数据库提供的是集合存储模型, query(fields, condition) ==> list of records, 可以从条件集合映射到记录集合。当condition退化为单一的key, 而fields采用默认值的时候,我们就退化到Map语义, 从key对象映射到value对象,而不是从集合映射到集合。很多时候我们只需要这种简单Map语义的存储模型,例如用户偏好设置的存...

2005-12-28 22:22:00 60

一般性不等于抽象性

    级列设计理论中我们谈到一般和特殊的关系, 但这是否指的是“相对抽象” 以及 “相对具体”之间的关系,而“一般”到“特殊”和“特殊”到“一般”这两个方向是否指的是具化过程和抽象泛化过程?我猜测有这种想法的人大概是受到软件设计中所谓抽象封装思想的影响. 很显然, 我并不是这样认为的. 一般性(普遍性)与抽象性是不同的概念.在物理学中相对论是比Newton力学更加一般性的理论,但它和New...

2005-12-27 22:21:00 171

关于级列设计理论

   级列理论是分析学中常见的一个思维框架,我只是把它从我最熟悉的物理学中借用到软件设计领域而已,它本身并不是我所创造的一种概念(创造是艰难的)。在某些领域,这一分析框架可以表现出完美的数学特性,如时频分析领域的小波分析(wavelet),统计学习理论中的支持向量机(Support Vector Machine),分子动力学中的BBGKY级列等等。在其他一些领域它的精确性可能要弱很多,但其...

2005-12-27 01:27:00 114

[导入]概念的连续性

   近代数学和物理学的发端是从微积分的发现开始的,人类第一次系统化的将连续性的思想推向了极限,也开创了崭新的思维方式。记得高中自学微积分的时候我也花了很多时间去思考连续性的问题,但是后来渐渐习以为常了。研究生的时候重新开始考虑连续性的问题,只是关注的方向是概念体系中的连续性。   all ornothing是我们的思维中经常出现的一个误区。很多时候我们的讨论局域在一个封闭的既定的体系中...

2005-12-27 01:25:00 200

[导入]设计的可扩展性

   敏捷思想的流行使得很多人对可扩展设计产生了一种怀疑的态度。这有几方面的原因,一方面是J2EE平台本身提供的分布式机制等技术因素很容易诱导你定义不必要的扩展需求,第二是基于目前的技术手段对于程序结构的分解仍然有着很大限制,具体的程序实现中往往会引入某种强制依赖,削弱了潜在的可扩展性,第三则是设计者本身对于技术和业务的把握不够深入,在考虑设计的可扩展性时经常做出错误的判断。但是一个只满足当...

2005-12-27 01:24:00 101

[导入]反问题的级列求解

   实际观测到的结果是系统内在结构的外在表现,而软件开发是从需求分析开始,经历系统分析,设计并实现的过程,即从用户需求逆推出软件的结构。这种根据外在表现求解内部结构的模型的过程,在数学上称为反问题(inverseproblem)。关于反问题,一个众所周知的难点在于解的不适定性。因为不同的结构可以有类似的外在表现,因而反问题的解是不稳定的。在一个既定的情况下,我们按照某种粗略的外在度量标准...

2005-12-27 01:22:00 95

架构的可退化性与无侵入性

   架构的可退化性(degragation)指的是架构的结构可以从元素比较丰富,层次比较多,比较复杂的情况退化到比较简单的情况,而架构的无侵入性(non-invasive)指的是架构对于外部接入对象没有特殊的形式要求, 一般通过依赖注入(dependencyinjection)向接入的外部对象推送信息. 这两个概念之间存在着紧密的关联, 但并不等同. 无侵入性可以看作是架构的一种局部可退化...

2005-12-22 22:55:00 151

杂谈架构和架构设计师

    系统架构通俗的说起来就是系统的结构组织方式.原则上说, 架构只有好坏之分,而不存在有无的问题.软件的体系架构可以直接体现为代码的类结构, 也可以表现为文档性的编码规范和全局约定等. 如果软件架构中能够抽象出一些稳定的元素,那我们就可能得到一些所谓的框架代码. 一般业务架构是很难重用的, 目前常见的框架代码所描述的多半是与业务无关的技术架构.         良好的系统架构应该体现出...

2005-12-18 17:35:00 93

图形 vs. 文本

    现在MDA建模的宣传多集中于可视化的表现形式, 鼓吹通过平面图标的摆放来传达信息.图形的方式是否一定比文本表现要优越呢?  图形的表现能力确实是要强于普通文本的.文本对于信息的组织方式基本上是一维的,而平面图形本质上是二维的(如果考虑颜色因素, 平面图形可以说是2.5维的). 人的视觉对于图形有着天然的并行处理能力,通过图形我们有可能更有效的获得信息. 但是程序中细节的关联可能是复杂...

2005-12-13 23:32:00 116

[导入]Less is More and More is Less

    据说"Less ismore"是1961年宝姿品牌提出的设计理念,它开创了简约优雅的时尚风格。Unix系统的设计可以说也是这一设计理念的最佳体现。使用Unix工具,读Unix系统源码,我们时时都能体会到一种简约之美。而Microsoft发放出来的源代码一般都相当冗长,变量名也长,这一度让我很反感。为了简化C++中的COM编程,我不得不专门写了一个封装框架。    简约并不简单。例如...

2005-12-12 22:46:00 269

[导入]validate: javascript 客户端验证框架

    在witrix平台中,validate.js提供了完整的客户端输入校验框架。其基本思想是为每个输入控件指定验证函数(validator属性),在提交Form的时候自动调用该验证函数即可。<form action="test.jsp"><input type="text" name="userName" validator="js.validate.checkNotEm...

2005-12-12 22:26:00 85

[导入]守,破,离

    守破离(Shu Ha Ri)是日本剑道(Kendo)的哲学。http://c2.com/cgi/wiki?ShuHaRi  (日本人很善于推销自己传统的思想,而中国的传统却似乎在盲目自卑和盲目自大两个极端之间徘徊)   守是模仿(Imitate),遵循,是无我的过程。在日本的传统心性中,守的阶段需要完全开放心志,全盘接受导师的教导。此时应该学习唯一的真理,知道唯一正确的方法,分清对与错...

2005-12-12 22:24:00 207

[导入]tpl与FreeMarker的标签对比

witrix平台中的tpl模板技术是一种通用的xml动态标签技术,不仅可以用于文本生成,而且可以用于任何需要动态标签的地方,例如工作流引擎的配置和执行脚本。tpl模板引擎采用的不是jsptag的标准机制,而是重新设计并实现的。在开发的后期,因为jstl标准出现,我们对标签的命名作了一定的修改,以尽量符合标准的调用接口。tpl模板语言完全符合xml规范,其标签定义都是完全独立开发的。在开发tp...

2005-12-12 22:18:00 285

关于Continuation

    http://www.ps.uni-sb.de/~duchier/python/continuations.html    A continuation is a procedure that takes the valueof the current expression and computes the rest of the computation.    Continuat...

2005-12-12 00:58:00 136

通过继承构造业务对象环境

    现在很多设计中推崇接口和依赖注入(dependencyinjection),而不倾向于采用继承机制来构造程序结构。但很多时候作为一种简便而廉价的封装方法,继承仍然是不可或缺的.例如与一些Engine打交道的时候,需要实现某些特定的接口. 在osworkflow中, 我们需要实现FunctionProvider接口,      interface FunctionProvider{ ...

2005-12-06 22:33:00 78

Learning Barriers

    Six Learning Barriers in End-User Programming Systems http://www.cs.cmu.edu/~ajko/LearningBarriers.pdf   学习在传统上被认为是人类特有的活动, 怎样降低学习的难度一直是理论上非常令人迷惑的问题, 同时它也是人类所面临的最大的实际困难之一.在软件的世界中, 关于学习的研究也是一个非...

2005-12-03 21:49:00 89

[导入]Exceptions: 统一异常处理

    在witrix平台中,异常处理没有采用java语法支持的checked exception,也不提倡使用自定义的异常类,而是定义了少数几个RuntimeException基类,一般是CommonException(RuntimeException的派生类)。   在我自己的经验中,checked exception从未发挥过实质性的作用。checkedexception在某种程度...

2005-12-02 23:00:00 149

[导入]tag技术

    tag在国内java社区并不算流行,这在很大程度上是因为jsptag的设计失误造成的。但在整个开发业界内,tag已经成为一种广泛应用的技术。微软的dotNet服务器端极端依赖tag技术,而在浏览器端IE的behaviour, htc也独立的发展起来。Longhorn的XAML,Firefox的XUL无一例外的依赖于可自定义的tag。java社区的JSF, SiteMesh, Tile...

2005-12-02 22:59:00 263

[导入]AOP considered harmful

    AOP作为一种新的分解与合成技术,除了性能问题之外,仍有一些概念层面上的细节问题需要解决。最近Stoerzer的一篇论文AOP Considered harmful因为与Dijkstra的经典论文Go To Statement Considered Harmful 进行对比而引起了广泛的讨论。   Dijkstra认为程序运行时的指令序列是我们最终想要的东西,而这一序列是运行时根据源...

2005-12-02 22:50:00 85

[导入]template vs. interface : 形与名

     接口(interface)总对应于某种明确的概念,它并不简简单单的等价于其成员函数的集合。有的接口如java.io.Serializable甚至没有任何成员函数。接口最重要的就是名, 是对概念的甄别。接口发布出去之后才能够被实现。当我们使用某个接口的时候,即使我们只用到其中部分函数,我们也必须负担整个概念。虽说"有名,万物之母", 并不是任何时候我们都需要名的。我们会说,就要那个,蓝色的...

2005-12-02 22:37:00 86

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除