像设计电路一样编程(2) 电路设计与软件编程的区别版权声明:《像设计电路一样编程》系列博客文章由陈明计原创,版权完全属于陈明计,转载请务必完全转载。欢迎访问陈明计的博客:http://blog.sina.com.cn/cmj2。 高级编程语言可分为命令式语言(Imperative programming language)和声明式语言(declarative programming language),两者的编程方法有很大的不同。声明式语言又可分为函数式语言、逻辑式语言等;而命令式语言可分为冯.诺伊曼式编程语言、脚本编程语言、面向对象编程语言等。目前,软件编程中命令式语言主导地位,这里将以此为例说明软件编程与电路设计的区别。 电路设计与软件编程的区别表面上看只是一个图形形式,一个是文字形式;但实质上有很大的不同。 迄今为止,凡是能够实用的电子计算机都是按照冯·诺依曼提出的结构体系和工作原理来设计制造的,简而言之,计算机就是存储程序并按地址顺序执行的。其要点如下:
*
* 计算机由运算器、控制器、存储器、输入设备与输出设备所组成。其中最广泛应用编程语言的C语言(属于冯.诺伊曼式编程语言)充分表达计算机结构原理。 因此,计算机编程实际上是“按步骤解决问题”:把解决问题的方法分成若干的大步骤,每个大步骤又分为若干个小步骤,一直分下去,直到分不可分;然后计算机就按照步骤来一丝不苟的执行。这种“按步骤解决问题”的思路很利于执行,但从步骤中分析解决问题的思路就非常困难了;进而分析程序是否完全符合解决问题的思路也是很困难的。很简单的例子,网上有大量的教程,很多也是step by step的,但很多人按照教程做,依然无法解决问题。 与计算机编程不同,电路是连续工作的,没有“步骤”一说。数据(电流或电压)持续的流入一个器件,经过一个器件加工后,又流出这个器件。例如放大器,会只要通电,就会持续不断的对输入信号放大,在工作范围内,输出信号一直与输入信号成正比或反比。数字电路同样如此,例如二输入与门,其输出信号时时刻刻是两个输入信号的与。即使有时钟参与的时序数字电路,可认为时钟也是一个输入信号,同样脱离不了上述规律。即使不把时钟当作输入信号,时序电路也没有“步骤”,只是信号处理不再是连续的,而是离散的而已。 综上所述,计算机编程关注的是解决问题的步骤。如果步骤太多(程序规模较大),则编程时很容膝疏忽某些步骤,造成程序隐含的BUG。而电路设计关注的是数据流动,每个器件都对数据进行特定的处理,数据按照指定的方式路径流过这些器件后,自然就解决了要解决的问题。因此,电路的行为比计算机编程更容易预测,更容易理解,也就更不容易出错。计算机领域中,硬件发展的速度远高于软件发展的速度就很好的证明了这一点。 前一篇:像设计电路一样编程(1) 概述
|
|