欧亿平台-欧亿注册

欧亿平台(QQ5825-5957)创建以来以信誉为本,期待提供用户一流的线上娱乐体验。本站供用户最新欧亿注册链结以及欧亿代理招商谘询服务,欢迎收藏。

欧亿:编程自底向上

欧亿平台 编程自底向上
 
 
编程风格的一个长期原则是程序的函数元素不应该太大。如果程序的某些部分超出了易于理解的阶段,那么它就会变得非常复杂,就像大城市隐藏逃犯一样容易地隐藏错误。这样的软件很难阅读,很难测试,也很难调试。
 
根据这个原则,一个大的程序必须被分成几个部分,而程序越大,它就必须被分割得越多。如何划分程序?传统的方法叫做自顶向下设计:你说“程序的目的是做这七件事,所以我把它分成七个主要的子程序。第一个子例程必须做这四件事,所以它将有四个自己的子例程,”等等。这个过程一直持续到整个程序具有合适的粒度级别——每个部分都足够大,可以做一些实质性的事情,但又足够小,可以作为一个单元来理解。
 
经验丰富的Lisp程序员对程序的划分是不同的。除了自顶向下的设计,它们还遵循一种可以称为自底向上设计的原则——更改语言以适应问题。在Lisp中,您不仅要根据语言编写程序,还要根据程序构建语言。在编写程序时,您可能会想“我希望Lisp有这样那样的操作符”。所以你去写它。然后您会意识到使用新的操作符可以简化程序另一部分的设计,等等。语言和程序一起进化。就像两个战国之间的边界,语言和程序之间的边界被一再地画出,直到最后在山川之间,你的问题的自然边界得到了解决。最后,您的程序看起来就像是为它设计的语言。当语言和程序相互适合时,最终得到的代码是清晰、小巧和高效的。
 
值得强调的是,自底向上的设计并不意味着以不同的顺序编写相同的程序。当您自底向上工作时,通常会得到一个不同的程序。您将获得一种更大的语言,其中包含更抽象的操作符,以及用它编写的更小的程序,而不是一个单一的、整体的程序。你得到的不是门楣,而是拱门。
 
在典型的代码中,一旦抽象出仅仅是记账的部分,剩下的部分就会短得多;你掌握的语言越高,从上到下的距离就越短。这带来了几个好处:
 
通过让语言做更多的工作,自底向上的设计产生了更小、更敏捷的程序。一个较短的程序不需要划分成那么多的组件,更少的组件意味着更容易阅读或修改的程序。更少的组件还意味着组件之间的连接更少,因此出错的机会更少。当工业设计师努力减少机器中移动部件的数量时,经验丰富的Lisp程序员使用自底向上的设计来减少程序的大小和复杂性。
 
自底向上设计促进代码重用。当您编写两个或更多的程序时,您为第一个程序编写的许多实用程序在后面的程序中也会很有用。一旦您获得了大量实用程序的底层,如果必须从raw Lisp开始编写新程序,那么编写新程序只需要花费很少的精力。
 
自底向上的设计使程序更容易阅读。这种抽象类型的实例要求读者理解通用操作符;函数抽象的一个实例要求读者理解一个特殊用途的子例程。[1]
 
因为它使您总是在代码中寻找模式,自底向上的工作有助于澄清您对程序设计的想法。如果程序中两个相距较远的组件在形式上相似,您将会注意到它们之间的相似之处,并可能以一种更简单的方式重新设计程序。
 
除了Lisp之外,自底向上的设计在一定程度上也是可能的。只要看到库函数,就会发生自底向上的设计。然而,Lisp在这方面给了您更广泛的能力,并且扩展该语言在Lisp风格中扮演着更大的角色——以至于Lisp不仅是一种不同的语言,而且是一种完全不同的编程方式。
 
的确,这种开发风格更适合于可以由小团队编写的程序。然而,与此同时,它也扩大了一个小组所能做的事情的范围。在《人月神话》中,Frederick Brooks提出,一组程序员的生产力不会随其规模线性增长。随着团队规模的增加,单个程序员的生产力会下降。Lisp编程的经验提供了一种更令人愉快的方式来表述这一定律:随着团队规模的缩小,单个程序员的生产率会提高。相对而言,一个小团队获胜,仅仅是因为它规模较小。当一个小团队也利用Lisp所提供的技术时,它就可以完全胜出。
 
 
 
 
欧亿平台-欧亿注册
上一篇:欧亿:苹果的HomePod将于明年年初登陆中国
下一篇:欧亿:《超级明星兄弟》的终极评论来了:以下是
隐藏边栏