设计的未来在哪里

原文:https://www.jianshu.com/p/4a7d652c9ba2
作者:肖锋钢
前面在探讨设计的价值时提到设计方法、设计原则、设计模式这些过程都是为了“半自动化”的产生代码,从设计、开发、测试到发现问题再反馈到设计的过程实际上一种人参与的强化学习。
人的参与使得设计上会出现差异性,有些设计优雅被称作艺术,有些则非常糟糕不堪一用。更加不幸地是消除差异性的代价异常高(上面提到的原则、模式都是试图消除差异的探索,但显然没有完全做到),以致于常被神秘色彩笼罩,比如天赋、直觉。因此未来的道路究竟在哪里呢?
另一种可能性的探索 对于未来的道路,前篇文章中“另一种可能性”提供了一种探索方向"系统的行为、约束和属性是严格、精确、抽象和简洁的,将设计过程自动化直接从系统行为、约束和属性产生代码"。这话听上去比较宽泛,下面用一个例子来说明。
语义的抽象 【设计的未来在哪里】先来看这样一段代码。
if currentLocation() == Korea then say "?????" else say "Hello" fi

这段代码很容易理解,是在用两种不同的方式说“你好”,条件分支是根据当前所处的国家来选择说英语还是韩语。这里我们发散一下,选择条件不仅可以根据国家来区分,还可以有很多其它的条件。如果从外部行为来看,好像就是有时在说韩语,有时在说英语,至于条件的内容我们并不关心,就像这样:
if ??? then say "?????" else say "Hello" fi

如果再进一步把说的内容抽象,比如我们不单单可以打招呼,也可以是任何其它事情,即不再关注具体的内容,可能是P也可能是Q,那么代码就可以演变为:
if ??? then P else Q fi

是否可以再抽象一点?比如:
P + Q

这样是不是很抽象,可以表达的内容更多?从上述过程不难看出语义模型就是系统行为的集合,抽象是这个集合大小的度量,越抽象行为集合越大,比如我们说程序A是程序B的抽象,就可以记做
设计的未来在哪里
文章图片
抽象 综上总结语义的抽象:
  • 用不确定性忽略无关的行为
  • 用状态变迁关系表达语义
  • 状态变迁是初始状态到所有可能结束状态的集合
  • 状态是变量到值的映射
从规格说明导出程序
  • 一个简单的语言
设计的未来在哪里
文章图片
一个简单的语言
  • 语义定义
设计的未来在哪里
文章图片
语义定义 假如我们要用这个语言实现如下的规格说明,如何做?
设计的未来在哪里
文章图片
要实现的规格说明
  • 句法的精化计算
设计的未来在哪里
文章图片
精化计算
  • 程序推导
    根据上面的精化计算规则如下,因为程序是推导出来的,所以其正确性是有保证的。
设计的未来在哪里
文章图片
推导 未来的一丝曙光 上面的例子使我们相信程序的自动导出是有可能的,要实现这个过程必须得有以下要素的帮助。
  • 严格、精确的系统规格说明(目标)
    • 行为、属性、约束
  • 程序导出、变换(生成规则)
    • 语义模型
    • 抽象-精化(Abstraction-Refinement)
    • Equational Reasoning
在这些基础上,借助一些适当的方法与工具就可以有效、快速的生成源代码,帮助我们克服由人参与设计过程造成的瓶颈。现在这样的工具已经开始显现出来,比如机器学习,这就像黎明前的一道曙光,为我们的未来之路开辟了一种有力支撑的可能,因此未来值得期待!
结语 虽然设计未来的曙光已经开始显露,但在其完全揭示之前尚有一段较长的夜路需要摸索。对于我们而言,与其枯等它的降临不若为未来规划与准备,去打造抵御“诸神黄昏”的女武神。

    推荐阅读