“设计方法、设计原则、设计模式这些过程都是为了“半自动化”的产生代码,从设计、开发、测试到发现问题再反馈到设计的过程实际上一种人参与的强化学习。”
前面在探讨设计的价值时提到设计方法、设计原则、设计模式这些过程都是为了“半自动化”的产生代码,从设计、开发、测试到发现问题再反馈到设计的过程实际上一种人参与的强化学习。
人的参与使得设计上会出现差异性,有些设计优雅被称作艺术,有些则非常糟糕不堪一用。更加不幸地是消除差异性的代价异常高(上面提到的原则、模式都是试图消除差异的探索,但显然没有完全做到),以致于常被神秘色彩笼罩,比如天赋、直觉。因此未来的道路究竟在哪里呢?
01
—
可能性的探索
对于未来的道路,前篇文章中“另一种可能性”提供了一种探索方向"系统的行为、约束和属性是严格、精确、抽象和简洁的,将设计过程自动化直接从系统行为、约束和属性产生代码"。这话听上去比较宽泛,下面用一个例子来说明。
语义的抽象
先来看这样一段代码。
这段代码很容易理解,是在用两种不同的方式说“你好”,条件分支是根据当前所处的国家来选择说英语还是韩语。这里我们发散一下,选择条件不仅可以根据国家来区分,还可以有很多其它的条件。如果从外部行为来看,好像就是有时在说韩语,有时在说英语,至于条件的内容我们并不关心,就像这样:
如果再进一步把说的内容抽象,比如我们不单单可以打招呼,也可以是任何其它事情,即不再关注具体的内容,可能是P也可能是Q,那么代码就可以演变为:
是否可以再抽象一点?比如:
这样是不是很抽象,可以表达的内容更多?从上述过程不难看出语义模型就是系统行为的集合,抽象是这个集合大小的度量,越抽象行为集合越大,比如我们说程序A是程序B的抽象,就可以记做
综上总结语义的抽象:
用不确定性忽略无关的行为
用状态变迁关系表达语义
状态变迁是初始状态到所有可能结束状态的集合
状态是变量到值的映射
从规格说明导出程序
一个简单的语言
语义定义
假如我们要用这个语言实现如下的规格说明,如何做?
句法的精化计算
程序推导
根据上面的精化计算规则如下,因为程序是推导出来的,所以其正确性是有保证的。
02
—
未来的一丝曙光
上面的例子使我们相信程序的自动导出是有可能的,要实现这个过程必须得有以下要素的帮助。
严格、精确的系统规格说明(目标)
行为、属性、约束
程序导出、变换(生成规则)
语义模型
抽象-精化(Abstraction-Refinement)
Equational Reasoning
在这些基础上,借助一些适当的方法与工具就可以有效、快速的生成源代码,帮助我们克服由人参与设计过程造成的瓶颈。现在这样的工具已经开始显现出来,比如机器学习,这就像黎明前的一道曙光,为我们的未来之路开辟了一种有力支撑的可能,因此未来值得期待!
03
—
结语
虽然设计未来的曙光已经开始显露,但在其完全揭示之前尚有一段较长的夜路需要摸索。对于我们而言,与其枯等它的降临不若为未来规划与准备,去打造抵御“诸神黄昏”的女武神。
领取专属 10元无门槛券
私享最新 技术干货