C 程式设计从零开始之何谓编程
2008-02-23 05:24:33来源:互联网 阅读 ()
程式,即过程的顺序,准确地说应该是顺序排列的多个过程,其是方法的描述。比如吃菜,先用筷子夹起菜,再用筷子将菜送入嘴中,最后咀嚼并吞下。其中的夹、送、咀嚼和吞下就被称作命令,而菜则是资源,其状态(如形状、位置等)随着命令的执行而不断发生变化。上面就是吃菜这个方法的描述,也就是吃菜的程式。
任何方法都是为了改变某些资源的状态而存在,因此任何方法的描述,也就是程式,也都一定有命令这个东西连同其所作用的资源。命令是由程式的执行者来实现的,比如上面的吃菜,其中的夹、送等都是由吃菜的人来实现的,而资源则一定是执行者能够改变的东西,而命令只是告诉执行者如何改变而已。
电脑程式和上面相同,是方法的描述,而这些方法就是人期望电脑能做的事(注意不是电脑要做的事,这经常一直混淆着许多人),当人需要做这些事时,人再给出某些资源以期电脑能对其做正确的改变。如计算圆周率的程式,其只是方法的描述,本身是不能发生任何效用的,直到他被执行,人为给定他一块内存(关于内存,请参考《C 从零开始(三)》),告诉他计算结果的精度及计算结果的存放位置后,其才改变人为给定的这块内存的状态以表现出计算结果。
因此,对于电脑程式,命令就是CPU的指令,而执行者也就由于是CPU的指令而必须是CPU了,而最后的资源则就是CPU能够改变其状态的内存(当然不止,如端口等,但是一般应用程式都大量使用内存罢了)。所以,电脑程式就是电脑如何改变给定资源(一般是内存,也能够是其他硬件资源)的描述,注意是描述,本身没有任何意义,除非被执行。
何谓编程
编程就是编写程式,即制订方法。为什么要有方法?方法是为了说明。而之所以要有说明就有很多原因了,但电脑编程的根本原因是因为语言不同,且不但不同,连概念都不相通。
人类的语言五花八门,但都能够通过翻译得到正解,因为人类生存在同一个四维物理空间中,具备相同或类似的感知。而电脑程式执行时的CPU所能感受到的空间和物理空间严重不同,所以是不可能将电脑程式翻译成人类语言的描述的。这很重要,其导致了大部分程式员编写出的拙劣代码,因为人想的和电脑想的没有共性,所以他们在编写程式时就随机地无目的地编写,进而导致了拙劣却能够执行的代码。
电脑的语言就是CPU的指令,因为CPU就这一个感知途径(准确地说更有内存定位、中断响应等感知途径),不像人类还能有肢体语言,所以电脑编程就是将人类语言书写的方法翻译成相应的电脑语言,是个翻译过程。这完全不同于一般的翻译,由于前面的红字,所以是不可能翻译的。
既然不可能翻译,那电脑编程到底是干甚?考虑一个木匠,我是客人。我对木匠说我要一把摇椅,躺着很舒服的那种。然后木匠开始刨木头,按照一个特别的曲线制作摇椅下面的曲木以确保我摇的时候重心始终不变以感觉很舒服。这里我编了个简单的程式,只有一条指令——做一把摇着很舒服的摇椅。而木匠则将我的程式翻译成了刨木头、设计特定的曲木等一系列我看不懂的程式。之所以会这样,在这里就是因为我生活的空间和木工(是木工工艺,不是木匠)没有共性。这里木匠就相当于电脑程式员兼CPU(因为最后由木匠来制作摇椅),而木匠的手艺就是CPU的指令定义,而木匠就将我的程式翻译成了木工的一些规程,由木匠通过其手艺来实现这些规程,也就是执行程式。
上面由于我生活的空间和木工(指木工工艺,不是工人)没有共性,所以是不可能翻译的,但上面翻译成功了,实际是没有翻译的。在木工眼中,那个摇椅只是一些直木和曲木的拼接而已,因为木工空间中根本没有摇椅的概念,只是我要把那堆木头当作摇椅,进而使用。假如我把那堆木头当作凶器,则他就是凶器,不是什么摇椅了。
“废话加荒谬加放屁!”,也许您会这么大叫,但电脑编程就是这么一回事。CPU只能感知指令和改变内存的状态(不考虑其他的硬件资源及响应),假如我们编写了一个计算圆周率的程式,给出了一块内存,并执行,完成后就看见电脑的屏幕显示正确的结果。但一定注意,这里电脑实际只是将一些内存的数值复制、加减、乘除而已,电脑并不知道那是圆周率,而假如执行程式的人不把他说成是圆周率那么那个结果也就不是圆周率了,可能是个随机数或其他什么的,只是运气极好地和圆周率惊人地相似。
上面的东西我将其称为语义,即语言的意义,其不但仅可应用在电脑编程方面,实际上许多技术,如机械、电子、数学等都有自己的语言,而那些设计师则负责将客户的简单程式翻译成相应语言描述的程式。作为一个程式员是极其有必要了解到语义的重要性的(我在我的另一篇文章《语义的需要》中对代码级的语义做过较周详的阐述,有兴趣能够参考之),在后续的文章中我还将提到语义连同其对编程的影响,假如您还没有理解编程是什么意思,随着后续文章的阅读应该能够越来越明了。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: 理解C 语言的布尔类型和枚举类型
下一篇: 理解内联函数inline在C 中的用法
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash