和我一起学编程 之 认识世界 |
人类认知这个世界的开始并不是开始于人类成为人类的时刻,应该是生命开始诞生的时候就开始了,因为我们对世界的认知中,有部分已经刻画在我们的基因里面。在这里,我并不想写认知的历史和哲学,因为一是功底不够,二是我的目标是写学编程。但由于编程本质上也是认知世界的一部分,因此,我想我应该被允许从这里开始我们的编程之旅。
当生命具有自我意识的时候,其实就代表生命可以把自己从环境中区分开来,当然,前提是事物是可区分的,即事物具有生命感官可区分的特性(属性和行为)。分类是我们认知这个世界最基本的手段,而分类的基础就是事物可描述的特性。 🧑🚀🎒🗑😥🙌 事物的特征很多,基于现实容量(脑容量,存储介质等)和计算(包含思考)的能力,我们不可能把所有的特征都记下来,我们会根据我们的认知目的,从这些属性中选取一些可以表征这类事物的关键特征,来作为分类的依据,当然这种特征本身也应该是可识别的(只有可识别的特征才能作为分类的依据)。 这种过程实际上就是对目标事物进行抽象的过程。抽象和泛化是我们在编程中最常用的两种设计手段,也是面向对象编程的核心思想。表征事物的特征很多,这些特征可以分成行为特征和状态属性。 👨🚒👒📞🤐🖕 在这种认知过程中,我们学会了符号化事物,符号化本身就是一种约定和制定规则的过程,从图画,声符到文字,有一个发展的过程。这个过程本身就是一种编程,只是不是由计算机来执行,而是人手工进行而已。 因此,计算机的出现是一种必然的结果。我们在对获得的认知数据进行处理的过程中,获得了数概念,并形成了一套数的处理机制。而将其分离出来,形成一类数据类型。这样做的目的是这类数据类型的数据可以进行数的运算。数据类型的本质就是具有相同类型的数据可以采用同一套加工处理机制。 对于数的概念来说,进位制的产生是人们抽象思维的一种飞跃。它实现了用少数几个基本元素(符号)来表达无数情况。小的时候大家都听说过“一是一横,二是两横,三是三横”的故事,其实人类的历史上,对于进制有很多种,可能是由于人的手指头,脚趾头都是10个的缘故,大部分的民族都产生了十进制的概念。 👀🗺🥩↔🐮 但真正具有位值意义的,最早的十进制是产生于商代。最后融于印度的数字符号形成了今天的十进制(算盘产生于中国,是不足为奇的)。人类选择10进制,除了手指头的缘故外,其所需基本元素和表达能力,性价比上应该是比较高的。二进制虽然比较简单,但表达相同的数,二进制需要的位数会比较多。 而计算机使用二进制的根本原因在于二进制只需要两个状态来表征其两个数符,比如,电位,只需要区分高和低即可,但如果用10进制,电位就需要分为10个刻度(状态),这对于测量,维持等方面都是不小的难度。 🤝🌦🍞🅿🐴 在处理认知过程中的各种数据中,通过分类,我们定义了不同的基本数据类型。一种基本数据类型,代表着一系列相同或者相似的处理加工方式。比如,整数,浮点数。图片,文本等。并在此基础上形成了数据结构的概念(比如单据)。 数据类型和数据结构并不是计算机编程所特有的。平常的数据类型和数据结构,一般不存在长度的概念。但在计算机中,为了统一处理和节省空间,数据类型,特别是数字型被分为很多种小类。虽然,我们现在的存储设备和计算机能力已经非常强大,但选取合适的数据类型和长度,还是一个非常好的习惯。这是因为需要存储和计算的数据量也是同步,甚至更快增长的。只要资源有限,在任何时候,节省都不失为一种美德。 在这里,我们需要特别强调一点,在数字类型方面,计算机中存储的数据和我们实际上的数据不完全是相等的。整数还好,日常中的浮点数相等,在计算机中并不能都成立。举个简单的例子,对于浮点数1.0,在内存中根据浮点数的表达规则(内存中是基于二进制的),由于长度有限,因此表达是有误差的。可能是0.9999999,也可能是1.0000001.因此对于计算结果比较时,对于非整数型,一般不能应用等于比较。 🙏🦼🦀❗🦌 在实际编程过程中,这是非常容易犯错的地方。比如A=1.0,B=1.0,A-B等于0,A等于B 都则不一定成立的。这种情况下,最常用的处理方式是用一个可以接受的误差来规避。比如abs(A-B)<0.0000001就代表相等。 在一定规约(基本元素),制定出一套新的规约(表达),并按此执行来处理数据就形成了程序。程序=数据结构+算法,这是比较狭义的一种定义。数据结构方面大家可以参考相关的教材。数据类型是编程语言最基本的元素。一个编程语言提供的基本数据类型不能太多,也不能太少。但实际上,大多数编程语言提供的基本数据类型都差不多。对于数据类型的选取将在下一篇文章中讲。 👨🎨🧣📬🤪🖕 理解约定规则在编程中很重要。
帖子热度 3.1万 ℃
|
|
∧__∧
( ●ω●)🧒👔⌨🤪🖕 |つ/(___ /└-(____/  ̄ ̄ ̄ ̄ ̄ ̄ 我好像懂了什么 |