“程序的迭代”——复杂性度量随想

编程的一个基本技巧是迭代:先有一个可运行的小程序,再加点修改,调试这些修改。依次迭代。程序逐渐越来越复杂,功能越来越多。

  思考一个问题:“   迭代像什么?  ” 

迭代——写文章

迭代比较像写文章。我们先写一个大纲框架,然后再细化每个条目。大纲在某种程度上算一个完整的文章。越细化也就是越迭代深入。

  有1个区别是小程序一般只有目标任务里的一点点局部功能,而大纲包涵了文章的所有大致意思。也就是写文章是自上而下,而程序迭代是自下而上的。这个区别是因为迭代每一步都要保证一个程序是可运行的。可运行是一个很复杂的机制,需要很多智力活动才能形成。这个是编程需要迭代的根本原因:在每个时间节点,都要形成一个激活的小型复杂系统。

迭代——生物进化

  然后我想到一个更好的比喻,就是生物的进化。先有简单生物,能活着生孩子就行。

  生物会产生变异,这就像程序添加新功能。进化论说的适者生存,就像大自然在调试程序。这个比喻的契合度非常高。

  不能生存和繁衍的生物体是一个转瞬即逝的失败。必须有活性的生命体才有意义。生物在每个时间节点,都要形成一个激活的小型复杂系统。

复杂性度量

  复杂性度量,应该从“质”上分为两种:低级复杂和高级复杂。

  高级复杂系统的标准是形成了某种智能结构。智能是说针对某些输入,或仅以自身状态作为输入,该系统可以做出某些有意义的反馈。

  例如求最大值函数就是一个有意义的反馈。草履虫游向食物也是有意义的反馈。人类思考存在的意义也是有意义的反馈。而龙卷风就是低级复杂系统。他没有什么意义,或者说能把东西举起来的“意义”很弱,很有限。

  这里“意义”的定义很模糊,这需要更多的思考进行更详细的量化定义。其中一种“有意义”是非常容易定义的,那就是维持系统本身存在的意义。例如草履虫移向食物,这就是一种明显的“有意义”。

  还有个缺点是“意义”这个词略显主观,这点倒是不足为虑,因为量子力学也有所谓“观察者”的概念。

整体性——意义

  我比较关注复杂系统称之为“系统”所具有的层次性。如果这些东西没有组合起来,那么就不算什么系统,也就没有什么基础去研究他的复杂性。这种层次性,是因为他们组合起来形成了某种意义,所以人会认为他们是一个系统。

  从这个角度说,龙卷风确实是有意义的,因为他是“一股”龙卷风,而不是一堆堆一个个空气分子运动集合。这点是整体论的基础,研究对象要是一个整体。当然还原论其实研究的也是整体,不然也就没有分解的目标了。在这里看到,低级复杂和高级复杂直接的界限其实是模糊的。也许“自组织”是一个比较容易划分的界限。

  对于复杂性,关键是眼光要盯在他们为什么而成为一个整体,这应该是整体论区别于还原论的地方。我认为一堆东西是一个整体,是因为这个整体能够做有意义的反馈,反馈越有意义,说明这个整体的整体性越强。也许整体性和复杂性还是有一定区别,但是我认为说“大脑比地球大气复杂”是有一定的合理性的。

  这些说法看起来有点像是循环论证,用2个概念互相解释,但这也许是探索复杂性度量的一个很好的视角。对于这些学科我的了解还很浅薄,请大家多多指点。欢迎大家多多留言。

  

  

时间: 2024-10-15 01:57:30

“程序的迭代”——复杂性度量随想的相关文章

软件复杂性

http://student.zjzk.cn/course_ware/software/txt/txt/show.asp?filename=11_3.txt 11.3 软件复杂性11.3.1 软件复杂性的基本概念    软件复杂性度量的参数很多,主要有:    (1) 规模,即总共的指令数,或源程序行数.    (2) 难度,通常由程序中出现的操作数的数目所决定的量来表示.    (3) 结构,通常用于程序结构有关的度量来表示.    (4) 智能度,即算法的难易程度.    软件复杂性主要表现

软件度量复习

软件规模度量——软件内部属性的测量 3.1 基本知识 1.可以从哪些方面测量软件的规模? ? 软件功能数量: 数据流图.用例图 ? 软件模块数量:模块功能结果图 ? 代码的行数:操作符.操作数 ? 设计文档的页数 ? 用户手册的页数 2. 软件规模可以用于反映: ? Effort 工作量(人月) ? Cost 成本 ? Productivity 效率 ? Schedule 进度安排 3. 可以根据以下方面定义软件规模: ? Length 长度(代码长度.规格说明书长度) ? Functional

Kolmogorov复杂性

原文-wiki 看Kolmogorov复杂性看到云里雾里,于是干脆把wiki上的翻译了一下. [toc] Chaitin complexity, algorithmic entropy, program-size complexity 定义 Kolmogorov 复杂性可被定义到任意数学对象,为简化本文的范围,限制到字符串.必须首先为字符串指定一个描述语言.这种描述语言可以基于任意计算机编程语言.如果$P$是一个程序,输出字符串$x$,则$P$是$x$的一个描述.描述的长度只是$P$作为字母串的

百度开放云首席架构师徐串:架构师必须理解程序员的痛

在2016中国云计算技术大会(CCTC 2016,专题报道)上,百度开放云首席架构师徐串发表了题为<企业IT基础架构在云端如何变革>的主题演讲,并接受CSDN记者专访,深入分享了他对架构及设计的认识,对架构师工作和技能的理解,以及百度开放云架构满足大数据和人工智能等不同应用需求的实践经验. 徐串表示,云计算环境下的架构,除了高吞吐.可扩展性.稳定性的需求,灵活性的实现也很重要.架构师的工作就是在各种矛盾之间坚持或妥协,如高吞吐和低延迟的矛盾,优雅架构和紧迫需求的矛盾.保证业务的需求,是设计架构

24种设计模式--迭代模式【Iterator Pattern】

周五下午,我正在看技术网站,第六感官发觉有人在身后,扭头一看,我 C,老大站在背后,赶忙站起来,“王经理,你找我?” 我说. “哦,在看技术呀.有个事情找你谈一下,你到我办公室来一下.” 老大说. 到老大办公室,“是这样,刚刚我在看季报,我们每个项目的支出费用都很高,项目情况复杂,人员情况也不简单,我看着也有点糊涂,你看,这是我们现在还在开发或者维护的 103 个项目,你能不能先把这些项目信息重新打印一份给我,咱们好查查到底有什么问题.”老大说. “这个好办,我马上去办”我爽快的答复道.很快我设

微信小程序,前端大梦想(三)

微信小程序的事件及生命周期 继续下节课,今天我们还是从四个方面来了解小程序: ●常用事件和事件冒泡 ●配置 ●app生命周期及app对象的使用 ●页面的生命周期 一.事件的绑定: 事件一方面可以理解成用户的行为,当用户对UI层做了某些操作时,程序可以捕捉到操作的类型.如:点击.长按.移动等.另一方面事件也是一种通讯方式,比如当程序运行时来电话.短信通知时会改变当前程序的生命周期.常用的事件类别主要有: ●点击事件:Tap ●长按事件:longTap ●触摸事件:touchstart.touche

完整性度量架构(IMA)介绍与分析

前言: 2004年,IBM在13th USENIXSecurity Symposium上发表文章<Design and Implementation of a TCG-based Integrity MeasurementArchitecture>,第一次提出了IMA架构.该架构通过在内核中进行patch,实现当应用程序运行.动态链接库加载.内核模块加载时,将用到的代码和关键数据(如配置文件和结构化数据)做一次度量,将度量结果扩展到PCR10,并创建与维护一个度量列表ML.当挑战者发起挑战时,

应用程序和Activity

Android 应用程序的组成部分 Android应用程序由各个组件组成,并使用Manifest绑定到一起,Manifest描述了每一个组件和它们之间的交互方式,还用于指定权限,硬件,平台以及应用程序的元数据等信息. 应用程序的基本组成模块 Activity 应用程序的表示层,程序的每一个UI都是通过Activity类来显示的,Activity使用Fragment和视图来布局和显示信息,以及响应用户的操作. Service 应该用程序中不可见的工作者 ,Service运行时没有UI,可以更新数据

小程序的持续集成方案

半年前,有机会开始接触微信小程序开发.却因为只是接触而并没投入开发小程序的过程中,因此对很多小程序的细节并未有充分的理解,仅仅停留在了解类似的理论层面,比如mpvue修改了 Vue.js 的 runtime 和 compiler 实现了编译及运行在原生小程序能力,比如原生小程序不支持npm包的使用及管理等,当然那时候的技术细节难点都是由非常给力的好同事解决消化了,所以也没多去细究. 最近,我开始投入到完成的小程序开发迭代里,却发现一个头痛的问题,如何准确并快速的的把小程序上传去后台,并让测试人员