有点讽刺的是,在我们的业务中,我们不使用太多的软件来生产软件。除了动态测试,我们通常不会使用可执行知识来创建可执行知识。我们有编译器,可以将(某些)人类可以理解的文本形式的指令转换为机器可执行的机器指令。但是编译器不知道我们是什么应该它不能生成或验证外部现实世界的功能知识。我们拥有CASE工具和建模工具,它们允许我们以各种格式(如有向图、表和字典)存储我们需要的一些知识。但我们必须把知识放到这些工具中,这些工具不能自我填充。通常情况下,我们能做的唯一一件事就是利用我们放入这些工具中的知识检索并观察它。
大多数软件开发工具的知识通常无法执行。工具可以验证知识格式符合一些传统的建模规则,但是很少有工具允许我们自动验证所包含的知识是正确的,并且适用于现实世界中手头的情况。
尽管这些工具很丰富、很聪明(也很昂贵),但它们大多无法通过可执行性测试。它们更像电子纸,而不是软件。软件开发的实际工作是在文字处理器、列表格式的数据目录和简单的受限绘图工具中完成的。更准确地说,软件开发中的大部分工作是在开发者的个人和集体的头脑中完成的——文字处理器和其他工具是不可执行的书一样的地方,一旦我们拥有了知识,我们就把它放在那里。
自使用VI编辑器进行编程以来,集成开发环境(ide)已经取得了长足的进步,但它们仍然主要是带有一些特定的查找和检索过程的文字处理程序,只有一些执行功能,如条件检查(当然,我们必须定义这些功能)。
我们花费了大部分的系统开发工作来收集知识碎片,并把它们写在纸上(电子的或其他的),考虑把知识放在纸上的物理行为对知识有什么影响是很有趣的数字这里)。
单词是有顺序的。当我们把信息写成文字写在纸上时,我们使用的是一个序列。单词是有顺序的。我们可以改变单词的序列,但在序列中单词仍然是。所以即使我们描述的不是顺序的,当我们用语言来描述的时候,它也是顺序的。
文本是面向控件的。读(写)字是一项控制导向型任务。总是有一个相关的注意力点,在那个时间点正在读什么。控制点通常根据前面描述的顺序行为从一个语句移动到另一个语句。把想法写在纸上迫使我们把控制焦点放在纸上。
阅读是一项单一的任务。人们通常不会一次只读一个单词;它们实际上同时吸收了几个单词的模式或块。但我们的注意力大多集中在一个地方。如果我在读这个单词,我就不会读那个单词;如果我在看这一页,我就不会看那一页。即使我们用文字描述的是并发的、事件驱动的和多任务的,一旦它是用文字描述的,它就会看起来像是单任务的。
文本几乎没有什么联系。物理单词之间唯一存在的真正关系是次先验。这是单词的序列,使用保持位置的阅读控制机制,在单任务模式中跟踪它。我们在不同的抽象级别上开发了不同风格的下先验,以近似不同类型的连接。我们把一系列概念分成句子,然后分成段落和章节。我们为不同的章节指定了不同的目的,以使用物理上的接近来建模逻辑关系。我们缩进段落来表示分解或所有权,在相同的缩进级别上,知识元素之间通常存在某种隐式的关系。如果我们想加强顺序关系,我们可以给段落配上数字。如果我们想要降低序列的重要性并推断出等价性,我们可以用项目符号来注释段落。
在书面文字的电子版本中,我们能够嵌入超链接,将文档中物理分离的概念“连接”在一起。但是,虽然超链接允许想法之间的物理连接和更快的转换,但它并不能清楚地显示知识的邻近性。理论上,思想的物理接近仍然是联系知识的最强机制。
我们现在正在构建的系统是那些论文本体论不能很好地工作的系统,我们必须重新思考我们如何看待系统。
文字的范围有限。文档的理解能力和字数之间有一定的关系。我们通过我所描述的机制来管理这种复杂性,并通过调整我们所使用的词语的抽象级别,我们可以使用更少的词语,但前提是这些词语(通常位于其他地方)的含义更“有知识”。我们在某些学科中可以清楚地看到这一点,例如医疗专业,它创建了一个领域特定的词汇,以实现更有效的交流。我们可以选择使用更少、更简单的词,但我们不可避免地传达更少的意思,因为句子中包含的知识肯定更少。
孤立的协会。最后,在一个文档中,很难将包含在另一个文档中的想法联系起来。我们通过索引和引用来做到这一点,但这些想法仍然“遥远”。当我们想要真正地将它们结合在一起时,我们必须重写这些想法,并将它们包含在源文档中(并注明出处)。这种方法利用词语的物理接近来强调词语所表达的逻辑关系。
如果我们使用文字和纸张(不管是纸质的还是电子的)去描述一个系统的行为,我们便会希望它能够有效地适用于那些将知识映射到媒介本体的系统,特别是如下的系统:顺序的、单任务的、基于控制的,多由局部知识(近似知识是相关的,相关知识是近似的)组成,所有必要的知识都是局部的,系统语句的抽象级别不需要大量的外部参考,因为定义简单或者复杂性被抽象到语言语句中。当然,知识不会太“大”或太“复杂”。
另一方面,我们应该期望使用论文格式来描述系统的操作对于以下系统来说不会很好地工作:多任务、事件驱动(特别是在状态之外或时间序列之外)、需要与其他知识存储库交互的系统,特别是在抽象级别没有被定义和标准化的地方,以及大型和复杂的系统。
如果我们着眼于我们在几十年前所创造的系统类型,便会发现它们非常适合纸上的优势。它们是竖井式的、孤立的、基于控制的顺序系统,与今天的系统相比,它们相当简单。但我们现在已经不怎么构建这种系统了。我们现在正在构建的系统是那些论文本体论不能很好地工作的系统,我们必须重新思考我们如何看待系统。考虑到软件是一种知识媒介,软件工程的未来显然在于使用媒介、工具和具象形式构建软件构件:
这是一个常见的cliché,我们目前正在经历一场“信息革命”,其后果可能比蒸汽机的发展在工业革命。这无疑是正确的,但它遗漏了重要的一点:工业革命不是在我们制造蒸汽机的时候发生的,而是在我们用蒸汽机制造蒸汽机的时候发生的。
除非我们使用软件来构建软件,否则真正的信息和计算革命不会发生;直到我们真正使用可执行的知识来创造可执行的知识。
把那张纸丢掉。
©2009 acm 0001-0782/09/0100 $5.00
允许制作本作品的全部或部分的数字或硬拷贝用于个人或课堂使用,但前提是该拷贝不是为了盈利或商业利益而制作或分发,并且该拷贝在第一页上带有本通知和完整引用。以其他方式复制、重新发布、在服务器上发布或重新分发到列表,需要事先获得特定的许可和/或付费。
数字图书馆是由计算机协会出版的。版权所有©2009 ACM有限公司
没有发现记录