`
canonical
  • 浏览: 367109 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

代码之外的结构

阅读更多
    我在各种场合一直都在强调结构问题是独立的,在程序语言之外存在着独立的,可研究的,富有成效的结构问题。[url]http://canonical.iteye.com/blog/147424 [/url]在这个方向上更进一步,我们注意到所有的代码并不是天然出现的,而是由人所编制的,因此代码世界内部并不构成封闭的,自足的某个世界。代码中的结构问题并不是由代码本身完全解决的,即在代码之外仍然存在着技术上可研究的结构问题。

    我们在编制代码的同时也在编制着大量的说明文档。这些文档描述了代码片断之间的相互关系,描述了代码未来的扩展方向,描述了代码之间的可能的交互方式,同时也描述了针对现有代码实现的很多具体约束。例如我们在文档中约定某个量要在10和20之间,但在代码中却不一定显式进行了判断。针对代码结构的很多具体约束条件和相关性描述可能只在文档中体现,只在程序员的头脑中存在,而并不一定忠实的在代码结构中得到表达。

    我在设计领域基本持有一种物理实在论,即某种技术相关的约束应该在技术世界中通过技术手段得到表达。只是这里的技术手段却不一定指在应用中加上特定的代码实现,虽然我们在代码实现中更直接的表达设计要求无疑是需要提倡的。为了在程序中有效的维护结构相关性,我们并不一定需要抽象出所有可能重用的代码,并不一定需要确保某一概念在程序中只有精确的唯一的表达。程序中难以直接精确表达的弱关联,仍然可以通过开发/设计工具等技术手段得到有效的维护。我们需要保证的是代码世界中知识的自恰性,而自恰性并不等于唯一性。http://canonical.iteye.com/blog/33788

    在Witrix中我们采用一种物理模型驱动的开发方式,http://canonical.iteye.com/blog/29412 由pdm模型出发,自动生成hibernate的hbm文件,java实体类,元数据meta文件,前台Action注册文件等。生成的配置文件通过 syncWithModel标记与模型保持着稳定的关联。所有配置文件都支持手工修改,开发工具识别syncWithModel标记,当pdm模型发生变化的时候,工具自动将变化信息同步到各个配置文件中。注意到这里并不是采用一个统一的元数据模型的方式,各个配置文件所表达的信息在一定程度上是重复的,也可能是不一致的。例如后台数据库允许保存100个字节,但是前台meta中我们可能配置只允许录入20个字节。根据不同应用场景的需要,我们可以在各个层面对每个配置文件进行独立的调节. 当然,在一般情况下并不存在这种需要。整个开发过程中,信息表达的自恰性并不是在应用程序代码中得到定义的,而是因为开发工具的存在而在技术上得到保证的。放松模型之间的唯一匹配要求,我们可以得到更加丰富,更加灵活的软件结构。实际上我认为RoR(RubyOnRails)采用直接映射的 ActiveRecord的方式虽然有效保证了系统变动中知识的一致性,但是如果不允许在各个层面上都能够自然的定义某种偏离,它在复杂应用中的价值就要打上大大的折扣。
分享到:
评论
5 楼 uda1341 2009-03-07  
canonical 写道

文档矛盾之处其实很多时候在人的语言层面的理解有一定的容忍度, 大家可以形成某种语境环境下的共识. 很多没有精确定义的概念在一定的语境下在人的思想层面并不会产生很大的误差. 但是要是打成某种精确的一致性,并始终维护它有效,则成本就高多了. 这样说其实已经有些哲学化了. 从实际操作上说, 现在大量的信息仍然处在代码之外, 我们能够以代码表达但却没有表达的东西非常之多, 必然是要发展大量技术手段来捕获这些代码之外的概念.


非精确表达所带来的好处我是承认的,我也同意,目前的技术手段在捕获代码之外的概念时非常的蹩脚。

我所指的说明文档,是那些定义代码结构,流程的说明文档。把这样的说明文挡精确化,代码化,变成程序代码的有机组成,实际上也是一种AOP的概念。写说明文挡的工作,是编程的一部分,并不会增加工作量,由于把这样的代码单独抽取出来,反而让程序结构更加清晰。
4 楼 canonical 2009-03-07  
文档矛盾之处其实很多时候在人的语言层面的理解有一定的容忍度, 大家可以形成某种语境环境下的共识. 很多没有精确定义的概念在一定的语境下在人的思想层面并不会产生很大的误差. 但是要是打成某种精确的一致性,并始终维护它有效,则成本就高多了. 这样说其实已经有些哲学化了. 从实际操作上说, 现在大量的信息仍然处在代码之外, 我们能够以代码表达但却没有表达的东西非常之多, 必然是要发展大量技术手段来捕获这些代码之外的概念.
3 楼 uda1341 2009-03-07  
canonical 写道

文档的形式化并不总是可能的,至少在现实技术的限制下并不总是可能的. 而且一般情况下如果完全通过代码来表达,则意味着我们在概念上必须完全解决这些表述之间的矛盾之处, 这是要付出真实的代价的. 从降低总代价的角度上来看, 追求完全的形式化反而是不明智的



你不觉得这些说明文档存在的矛盾之处,不正意味着我们对程序如何运行还没有清晰的概念所造成的吗?这些矛盾之处不解决,就无法写出正确的程序。我这里所说的说明文档,是关于程序结构的说明,把说明文档形式化,就可以将其做为代码的一个Aspect,将一些独立的概念解耦出来,做为独立的代码。
2 楼 canonical 2009-03-07  
文档的形式化并不总是可能的,至少在现实技术的限制下并不总是可能的. 而且一般情况下如果完全通过代码来表达,则意味着我们在概念上必须完全解决这些表述之间的矛盾之处, 这是要付出真实的代价的. 从降低总代价的角度上来看, 追求完全的形式化反而是不明智的
1 楼 uda1341 2009-03-06  
我的看法是:

这些说明文档在未来的程序设计语言中是不必要的,程序设计语言应该发展出表达这些说明的语法。

用我的说法,这里有两点:

1 在头脑中能够存在的概念,就应该能够在程序语言中用精确的方式表达。
2 从概念上能够解藕的也必须从代码上解藕。

我在设计领域基本持有一种物理实在论,即某种技术相关的约束应该在技术世界中通过技术手段得到表达。只是这里的技术手段却不一定指在应用中加上特定的代码实现

这一点并不同意,形式化代码可以是任何数据结构,具有无限的表达能力。也许是我对代码的定义比较宽泛吧。另外一点是,这些说明文档必须是精确的,可以和其他代码一起正确编译的。

相关推荐

    软技能:代码之外的生存指南+-+John+Sonmez.epub_软技能_

    《软技能:代码之外的生存指南》是编程领域的一本重要书籍,由John Sonmez撰写。这本书不仅仅关注技术层面的提升,而是强调了作为一名程序员在职业生涯中需要掌握的非技术性,或者说“软”技能。这些技能对于程序员...

    数据结构程序代码大全

    除了个别算法之外,演示系统给出了《数据结构》(C语言版)书中算法对应的程序代码(CPP文件)和测试运行程序(VC++6.0的EXE文件)。通过本系统,可以显示算法的源代码以及运行结果。具体操作步骤如下: 1.选择...

    数据结构伪代码

    ### 数据结构伪代码 #### 一、数据结构基础概念与应用 **数据结构**是计算机科学中的一个重要概念,它指的是一组数据以及它们之间的关系和在这些数据上执行的操作的集合。良好的数据结构设计能够极大地提高算法的...

    C语言编程代码结构优化

    代码外提是指将循环体中与循环变量无关的运算提出,并将其放到循环之外,以避免每次循环过程中的重复操作。 删除冗余运算 删除冗余运算是指删除循环体中的冗余运算,以减少循环体的复杂性。 变换循环控制条件 ...

    C语言数据结构源代码全注解

    除了自己复习之外,我想如果把这些代码放在自己的电脑上就太浪费了,所以分享给大家,可以方便大家复习数据结构的知识,同时有可以参考的源代码(个人所写,并不完善或严格,仅供参考)。 其中包括的数据结构有: 1...

    严蔚敏 数据结构 书本源代码

    除此之外,书中还可能包含其他数据结构和算法的实现,如二分查找、哈希表、堆排序、快速排序等。这些内容对于计算机科学的学习者来说都是基础且重要的知识。通过阅读和理解这些源代码,不仅可以提升编程能力,还能...

    代码之外的功夫:程序员精进之路

    "代码之外的功夫:程序员精进之路"这个主题,暗示了在技术深度之外,还有许多方面需要我们去修炼和提升,以实现全面的专业成长。这篇讨论将深入探讨这些非编码技能,帮助程序员在职业生涯中更上一层楼。 首先,我们...

    数据结构经典程序解析(含代码)

    本资源“数据结构经典程序解析(含代码)”旨在深入解析数据结构的实现细节,通过C语言和VC++(Visual C++)编程环境,为学习者提供了实践性的代码示例。 在C语言中,数据结构的实现往往更加底层,直接操作内存,这有...

    hnust数据结构课设报告+代码.doc

    除此之外,报告中还提到了其他多个项目,如Josephus问题、交集问题、线性表、二叉排序树、哈希表、后缀表达式求值、二叉树的创建与显示、表达式树等。这些项目涵盖了数据结构中数组、链表、树形结构、哈希等基础概念...

    严蔚敏版数据结构所有算法代码

    首先,线性表是数据结构中常见的逻辑结构,它具有相同的特性:数据元素之间是一对一的关系,除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。在代码中,线性表是通过结构体list实现的,包含了指向...

    数据结构代码(高一凡的)

    除了基本的数据结构实现之外,高一凡还可能提供了具体的实践案例来展示这些数据结构的应用。例如: - **排序算法**:冒泡排序、快速排序、归并排序等。 - **查找算法**:二分查找、哈希查找等。 - **动态规划**:...

    图灵程序设计丛书-代码之外的功夫:程序员精进之路

    《代码之外的功夫:程序员精进之路》是图灵程序设计丛书中的一部,它强调了程序员不仅仅是个技术工匠,更是问题解决者和社会创新者。这本书深入探讨了那些超越编程技术本身,对于提升程序员能力至关重要的方面。以下...

    数据结构(Python版)-代码.zip

    除此之外,Python还支持更高级的数据结构,如堆栈、队列、链表、树、图等。堆栈遵循“后进先出”(LIFO)原则,常用于函数调用和表达式求值。队列则遵循“先进先出”(FIFO)原则,适用于任务调度和消息传递。链表由...

    wordpress 代码分析整理

    WordPress的核心架构遵循“插件化”设计,这意味着功能可以独立于核心代码之外,通过插件实现。主要的代码结构包括wp-includes(包含核心函数库)、wp-content(用户可编辑的部分,如主题和插件)和wp-admin(后台...

    数据结构第三版+源代码

    本书不仅涵盖了理论知识,还提供了丰富的实践案例和代码示例,以便读者能够更好地理解和应用所学知识。 #### 二、基础知识与哲学 ##### 2.1 数据结构的重要性 - **需求**:在第1章中,作者强调了数据结构的重要性...

    C代码之全局变量(数据结构)

    标题中的"C代码之全局变量(数据结构)"指出我们要讨论的是C语言中的全局变量以及它们与数据结构的关系。全局变量是在程序的任何函数之外声明的变量,可以在整个程序中被访问,除了在局部作用域内被同名局部变量覆盖时...

    西工大数据结构实验报告+代码

    除了对数据结构的基本操作进行实现之外,我们还需要考虑时间和空间复杂度等重要问题,以确保算法的执行效率和程序的稳定性。 最后,在实验报告中,除了要详细描述实验过程和结果之外,还需要对实验中遇到的问题和...

    教你如何读懂源代码.zip

    除此之外,理解数据结构和算法也是读懂源代码的关键。数组、链表、栈、队列、树等基本数据结构,以及排序、查找、图论等算法,构成了大多数复杂程序的基础。当你遇到这些概念时,需要能够识别并理解它们在源代码中的...

    数据结构的渡口调度管理

    除此之外,为了优化调度,可能还会涉及到其他数据结构,如链表或者优先队列。链表可以方便地插入和删除船只,而优先队列可以保证紧急船只得到优先处理,即使它们不是最早到达的。这些数据结构的选择和组合,将直接...

    华为机试源代码

    这份“华为机试源代码”包含了一系列与数据结构和算法相关的挑战,如链表、二叉树以及背包问题,同时也涉及基础的算术操作。下面我们将深入探讨这些知识点。 首先,链表是一种基础的数据结构,它由一系列节点组成,...

Global site tag (gtag.js) - Google Analytics