一:
大家在学习英语的过程中,有没有纠结过这样的事情。我们平常买东西、数数的时候,应该是习惯于这样数吧1、2、3、4、5,我应该和大家是一样的,也是1、2、3、4、5这样数的,好像平常也不怎么区分1,2,3,4,5这种叫基数词,第一、第二、这种叫序数词吧。也不知道是我语文老师没教还是怎么回事,我在汉语里面真没专门去区分过这是两种不同的类型。
二:
回到我初一刚开始上英语的课堂上,
第一节课:one,two,three,Four....。嗯,看起来挺简单的,我会了。
第二节课 first、second、third、fourth。嗯?什么情况?我们上节课已经学过1,2,3,4了啊。怎么又来?第一、第二、第三、第四 不应该是第one 第two这样吗?老师在上面问:大家记住了吗?同学们:记住了。
第三节课:老师开始考了,1怎么说,2怎么说,第一怎么说。基本情况是,老师问第一的时候很多人就会说错,1是first。2second。 最后可能老师也没时间没耐心继续灌输下去了,丢下一句“就是这个样子的,你记住就行了”,我们的好奇心,就是这样被扼杀了。
上了大学后,上计算机编程课C语言的时候,又遇到一件事情,老师讲到C语言中数组计数规定是从0开始的。数数大家不是从1开始吗?莫名奇妙,干嘛从0开始啊。是有病吗?课上怕耽误上课进度,也没敢多想,也没太深究,这事儿就一晃过去了。
后来参加工作以后,我学了各种各样的计算机语言,VB、c#;汇编、java、C、C++、PHP、Python、Groovy、shell等一大堆,VB、C#计数是从1开始的。其他几种都是从0开始的。我主修java也是从0开始的。2年前,我一个同事英语学的很不错,我就问他基数词和序数词你知道吧,我总分不清,你说java编程中数数为啥从0开始啊,数组这个0到底是序数词还是基数词呢?他这要是序数词的话,英语里面好像也没有第0个啊,没有第0的话,这种下标应该算基数词啊,但感觉这对不上啊。两个人对着百度,边讨论边在网上查资料,最终也没弄出个所以然来。
三:
直到2021年一个偶然的机会,终于破解了困扰我10多年问题;
在计算机中,要存数据的时候,需要解决两个问题:1我存的是第几个。2从哪里开始存。
按我们人类的思维是这样的,看下图:
我保存的第1个数据。从0的位置开始存。这里用到了2个数字,分别是1和0。
我保存的第2个数据。从1的位置开始存。用到了2个数字,分别是2和1。
我保存的第3个数据。从2的位置开始存。用到了2个数字,分别是3和2。
依次类推,那么大家会发现,每存一次就会用到2个数字。
好。下面看优秀的计算机是怎么做的。看右图,它规定,计数从0开始计数。
我保存第0个数据。从0的位置开始存。用到了1个数字,0。
我保存第1个数据。从1的位置开始存。用到了1个数字,1。
我保存第2个数据。从2的位置开始存。用到了1个数字,2。
依次类推,那么大家会发现,每保存一次数据,只会用到1个数字。
别小看这小小的从2个数字变为了1个数字的小变化。我们在电子设备中存的所有数据,都是按兆(2^20百万)按G(2^30=10亿)度量的。可想而知,这一点变化对性能的提升是多么可观。
而大家平常用的windows电脑,大部分都是基于人类的思考方式C#语言写的,性能天然就会慢。而手机、平板、上网的网站等是基于从0这种方式构筑的,性能就会好一些。采用这种能提升性能的计算机方式,带给程序员的困扰就是他们要同时面对人类的思维方式和计算机的思维方式。这也就是我会出现困扰的原因。
想明白了上面的问题后,我也终于释然了,在人类的世界里大家已经习惯了从1开始记数序数词。计算机才发明不到80年,为了提升性能,开始从0计数序数词。通过我对序数词的这一点困扰的探究,真正感受到了一沙一世界。平时我们看起来还算明白的事情,但凡让你感觉到有一丢丢的偏差,后面都可能蕴含着非常深刻的科学规律和道理。就像,二百多年前,英国化学家拉姆赛发现空气燃烧试验中的一些细微的差别,最终推翻了之前法国化学家的空气中只有氮气和氧气的学说。也有可能像是电影黑客帝国中的neo,经常感觉这个世界有点儿不大对,最终成了救世主。我们是不是也应该在各自的领域中,经常怀疑和探究事物的细微差别,可能会有惊喜、有创新,进而会有进步。