《这些年编程的一些反思》002. 变量

计算机计算的本质是什么?

如果喜欢看武侠小说的话,可能对武术的精髓有了解,有句话叫“天下武功,无坚不破,唯快不破”。

快

计算机计算的本质,非常完美的诠释了这个道理,电脑之所以厉害,就是靠一个“快字诀”。如果人的心脏每秒跳一次的话,假设人的平均寿命是100岁,那么,人一生心脏跳动的次数是30亿次左右,假设每跳一次,人可以计算1次,那么,人一生可以计算30亿次。但是对电脑的CPU来说,30亿次大概是现在主流中档CPU1秒的运算量,在京东上可以花1000来块钱买一个。一个人计算100年,一个主流家用电脑计算1秒,这就是电脑在某些方面的过人之处吧。电脑每完成一次计算,光可以在空中行走10厘米。

可以认为电脑里有个神奇的小精灵,他不知疲倦搬运数据,以人类无法想象的速度来做事。想必大家曾经看过闪电侠吧,他就是以极快的速度来做事,现在每台电脑里都有一个闪电侠。

比喻的好处和坏处

在学习计算机的时候,有个必须要接受的现实,无论你研究到哪一个层次,下面总有一个层次是你无法了解的。所以,要学会和自己的无知相依相伴。

不止在学习编程的过程中,在现实生活中,我们也无时无刻的不用到比喻。比如,我们会把孩子比喻成祖国的花朵,把老师比喻成辛勤的园丁。在软件开发中把流程描述成瀑布流开发模型,像瀑布一样从上而下的开发。这些比喻在一定程度上隐藏了一些东西,又在一定程度上展示了一些东西。

当我在下面用到比喻的时候,希望你也能明白,这只是学自行车的时候,用到的那个辅助轮。比喻只是比喻,不是编程的本质。因为抽象的来解释,会让人昏昏欲睡。[这个方法借鉴自罗素,他在研究集合论的时候,没有办法给集合一个完美的定义,他就回避了这个定义,变抽象为具体。]

变量是什么

再回到本文最开始的时候,我们电脑里的那个小精灵在干什么呢?答案是,在不停的搬运并计算数据。数据存在哪里呢?准确的答案是,一部分在CPU里,一部分在内存里,还有一部分在硬盘里。

变量本质上是一段由0和1组成的数字串,他存放在内存里。

我要用到比喻了,希望能把这个事情说清楚一点。

我家附近有个超市,这个超市有个规定,带包是不能进去的,可能怕别人进去偷一包辣条什么的。他有个自动的存包柜,你可以按一个按钮,就会弹开一个小柜子,让你把东西放进去,然后就会弹出一张条形码。用比喻的话,内存就是那个存包柜,弹出的那个条形码就是变量名,而存进去的东西就是变量。

我觉得如果你不是特别的理解的话,可以停下来想一下,是不是这个样子?这个比喻是不是有一点道理?

当你把包取走以后,就是程序员经常所说的内存释放,这个柜子又可以给别人使用了。

变量的类型

如果我们能够看到计算机内存的话,会发现无论什么样的数据,都是一样的表示方法,都是一串0和1组成的数字。在内存的层面上,并没有区分什么整数型,字符型,都是一样的。

采用的这些类型,只是人为的加上的一些数据,如果搞错了这些类型,比如0110 0001这一串数字,在C语言中,如果解释成是整数,就是十进制的97,如果解释成字符,就是小写字母’a’。

不同的语言,对数据类型的规定有些不同,我会在接下来的几篇文章里,(狂妄的试图)分析一下数据类型的进化历史。从古老的Fortran语言开始,在Fortran语言中,如果一个变量名是以I,J,K,L,M,N开头,那么,这个变量就是整数,非常的简单粗暴。再后来到C语言中有了隐性类型转换,到了C++中,类也是一种数据类型,再到了前两年Apple公司强推的Swift语言,所有的数据类型其实都是个Structure,每种数据类型都可以有自己的properties, initializers和methods。

我一直试图从各种语言中找到一些共同点,找到几个主流语言的共同特点(共同点非常多),或者细微的区别。我接下来的文章,就写一下在这方面的我个人努力研究出来的谬论。


形成本文的草稿

02-01

02-02

找区别,左边是Apple推出的Swift语言,右边是Google支持的Kotlin语言,是不是非常的相似?

也可以自己去这个网站看看。 http://nilhcem.com/swift-is-like-kotlin/

kotlin

刘延栋 wechat
欢迎扫一下关注我的公众号:软件那些事儿
欢迎收听我的电台,你的支持将鼓励我继续前进