计算机领域的误导
其实计算机的面目并不神秘,只是70年以来,放久了,上面灰比较厚,你需要一层一层把上面的灰剥下去。
人们在计算机领域最大的误导就是“语言”两个字。
但是如果你按照下面的思路考虑下去,你就会觉得乌云散尽,神明引路。
首先:电子元器件看得懂的叫“0和1”(因为电子元件通常对电压的正负有两种反应,或者对电流强弱有两种反应...),
cpu看的懂的叫”指令集合","指令集合"就是一套用于触发cpu各种执行状态太的"01序列"(实际上是不同的电流脉冲)。
那么如果我用“另一套指令”,也就是该cpu对应的“指令集合”中根本不存在的“指令”,输入给cpu的话,它听不听得懂呢?
答案是听得懂,但条件是:
需要用该cpu看得懂的"指令集"开发出一套“代码解释工具"并且设定好这个”新的代码指令集合”。
同理:
如果我输入上面“新的代码指令集合”里也没有的“指令”给上面的“解释工具”呢?
当然,还是要用上面“代码解释工具”规定好的“代码指令”开发“另一个代码解释工具”并且设定好“另外一堆指令”如此
循环下去,就产生了各种各样的“解释工具与相应的代码集合”。
一句话”做好交接工作要预先定好暗号“
就好像有一天,你想对一个“老外A”说汉语,但是他听不懂,于是你找了另一个学过汉语的”老外B“,你和“老外B”约
定好:当你对“老外A”说“开始”的时候“老外B”就需要站在“老外A”的旁边,并对他说“start”;你这边说“停止”的时候,
那边就说"stop"。
”一种代码解释工具和代码指令集合“确切的说就法是“一套程序”。
计算机程序发展的过程永远都伴随着”设定一套代码指令“与”解释一套代码指令“。
其实“汇编语言”或者更应该说叫“汇编程序”就是谋cpu指令集开发的“代码解释工具和他所设定的那套新代码指令
的集合“,在cpu那边的表达方式其实还是“01构成的序列”,而为了在编程人员这边容易使用,所以设定了“一套助记
符号”作为新的代码指令,经过自身的“解释工具”最终转换成cpu认识的“01序列”。
一个“强大的代码解释工具”和一套‘强大的代码指令集合’构成的”强大程序“就是通常所谓的某某“语言”。
”强大程序的代码集合“中的”一部分代码“经过排序、组合、嵌套、循环使用等,就开发出了有特定一类功能的软
件。(本文中“开发型的程序”,比如c语言开发套件程序,或者说应用范围如同语言一样广泛的开发型程序,一律
称之为“开发程序”,凡是为了实现某种单一的功用而被开发的程序都称作“软件”,本文的”工具“一律都指的是”程
序“)
“一套强大的程序”可能不只包含一种“代码解释工具”,也可能不只包含一种“代码集合”。
(这里需要强调的是一套“开发程序”的核心是它的”解释工具“,而不是他的“指令代码”和“代码编辑工具”,因
为“代码编辑工具”可以有很多种,谋些“指令代码”也不一定是谋开发程序所“独有的”,唯一独有的就是他的“解释工
具”)
发展到如今的样子,我们看到的各种”程序“其实主要只做两件事,一件事是“给出一种功能”,另一件事就是“执行
这个功能”对于我们平常所谓的“开发程序”来讲,给你的“功能”就是“使用它的代码集合”,“使用的方法”可以是输入
一条代码、多条代码,或者干脆使用鼠标点击一个按钮或者是拖动一个图形化的“图片元件”就能自动写入代码,“开
发程序”本身是个“解释工具”,它规定的代码你输入后他肯定是认识的。然后他会想方设法把他的代码让cpu看得懂
就是了。让cpu看懂代码就是”解释工具“的职能。
代码让cpu看得懂的基本方式有两种:
比如:
一种是找一个认识代码的解释工具B,解释成B被开发时所用的代码,再由开发”解释工具B“时所对应的“解释工具
A”解释成A被开发时用的代码,这样依次找下去,最终肯定会翻译成cpu所认识的代码。
这就像,你想对老外A说汉语,但是你只会说方言,而那个老外B学的是中国普通话,于是你又不得不找你的普通
话很流利的老乡为你在做一次普通话的翻译。
另一种方法是直接找个认识很多种代码的”解释工具“直接翻译成cpu认识的代码,这就是我们通常所说的“编译”
这就像上面的例子中,你直接找了一个即懂普通话又懂方言的老外为你做了翻译。
很多时候这两种方法也可以联合起来灵活运用。
为啥叫“编译”呢?
因为这种“强大的解释工具”有的时候需要对代码重新“编排”然后再“翻译”,所以就叫“编译”。
总之所有的代码在最终执行以前都会变为“各种0和1”的形式出现在cpu的眼前
由此可见“o,1” "指令集" “程序” “软件” “解释工具” “代码指令” “功能” 是计算机领域几种有必要存在的名词,
而“语言”这个名词放在计算机这个领域实在是差强人意。关键是容易让人对计算机“望而怯步”。
所谓语言就是一套被大众认可的“标准”,具有逐步“普及”的特性,就像汉语和英语。
而当时把“计算机程序”说成是“语言”的那个老外,可能是更多的看到了那套程序的“普及性”,而没重视那套程序
的“逻辑性”。
更恰切一点的说,称得上“语言”的,应该是”一套‘强大’的计算机程序“所提供的那套功能多样,又被普遍采用
的“功能指令”或者说”代码指令集合“
比如:比较有境界的编程人员会说:”计算机语言只是工具“。
为什么这么说呢,因为真正做事情的是cpu,而不是这些”语言“,另外,当一个计算机领域的人这样描述计算机语言的时候,
说明他的注意力已经不在各种语言代码上面了,因为他了解这些语言工具的特性,计算机平台的特性,或者是cpu的特性,
他只要注意开发的应用、项目等能够符合这些特性,在这些特性范围内,他更多关注的是产品体验,产品性能,以及产品的
价值方面。
软件开发呢,可以说就是让cpu来帮我们实现”想法“,但我们需要用”正确的代码“来告诉cpu”正确的指令“。
如今的软件开发不仅是"工具化",同时也越来越"对象化了",就比如我们手头上有,扳手,钳子,电焊机,
弧焊机,切割机,车床,打磨机,抛光机,这些都可算作工具,而螺丝,螺母,发动机,轮胎,车圈,车底架,车
棚方向盘,油箱,水箱,都可算作对象。而我们编程人员来决定用手头这些资源把它们变成一辆汽车,或变成一堆
废铁。
比如我们开发网站可以使用代码编辑工具dreamwaver,这个工具里面有很多现成的元件,如同做ppt一样就可以轻
松做出一个花花的网页,那么如何去编排,如何去实现更高级的控制呢,比如说让网页会和你对话,让网页能够进
行信息的自动更新,让网站控制你的登录权限,让网站自动发邮件等等,就需要你去使用更细节的代码了,代码同
样也可以看成是工具或对象,在我们的世界里,为了实现某种”创造“之前,几乎还没有什么东西看不成工具或
对象,就连你的女朋友,在你们创造婚姻或者爱情以前,你都称之为对象,(hoho...玩笑)在计算机领域我们常
把那些拿来就能用的,或方便直接使用的,或者做做简单修改就能符合自己意愿的一般看成是对象;需要我们去编排,
并且用来实现一个有意义的功能的那些”基本代码“我们就称之为”指令“或”工具“,或”工具代码“。
如果想把计算机里面的东西理顺,或有更高的认识的话,就要把视野抬高,那样的话就会抓住事物的本质,计算机世界
首先分两大块除了硬件就是软件,而软件世界,再分两大块:有一切都是程序,与“数据”,你在电脑上屏幕看到的一切都
是数据与程序相互调和的产物。程序在分两大块:一部分是程序本身“提供功能的代码”,一部分是程序设定好的”使用功能
的代码“
计算机软件的所有东西,都可以一分为二,类,函数,接口,对象,句柄,变量,等等等等.......
无非也都是做两件事”提供功能“与”使用功能“
这就是计算机领域高度概括性的理论,面对一件要完成的事情,一切都是工具与零件,你了解的工具与零件越多,
你可以做的事情就越多,仅此而已。
cpu的一个恰切比喻应该是一堆可以高速开启与闭合的开关集合。
cpu最棒的功能就是通过谋些电路传来不同的电信号,来实现其他电路的”开与关“。
众多的小型cpu(也称为芯片)构成了,内存,硬盘,显卡,中央处理器,主板(通常意义上的cpu)的核心元件,
还有些芯片用于控制各种插槽,接口,键盘,显示器,电源。
最终电脑的构成流程是怎样的呢?
首先由这些密密麻麻的开关器件,配合电流,导线,信号放大器件,发光器件,传感器件,滤波器件,等等就构
成了我们看到的低级部件,低级部件又经过不同的组装与配合构成高级电脑部件。依次进行,最终就构成了我们看
到的计算机。
就好比上万人站在一个广场,虽然每个人只会简单的几个动作,甚至是只会”蹲下“或”站起来“两个动作,张艺谋只需
放开音乐,这帮人就通过密切的配合,做出了08奥运会仪式上的各种壮观图案。
想象一下,你在键盘上敲的并不是文字,而是一个个高速的“电子开关”
想象一下,你看到的也并不是文字,而是受到了不同电流刺激就会发生不同颜色的“液晶”通过一条条预先彩排好
的指令使得这些文字规规矩矩的呈现在你的面前。
道家有句口诀:
所谓:道生一,一生二,二生三,三生万物。
就是说,开始有一样东西叫”道“,”道“这个东西有阴有阳,于是也可以看成是”两样东西“,当”阴“”阳“这两样东西调
和的时候就又有了第三样东西,第三样东西出现的时候说明了一个问题,那就是“阴阳可以相互调和”,相互作用,
于是得出:有第三样东西出来的时候同样意味着万物也开始诞生了。
就如同:
电流是一样东西,电流这东西有正有负,于是也可看成有两样东西,通过正电流和负电流在空间和时间上的相互
作用,我们得到无数种不同的脉冲信号。
数字也是一样东西,数字有0有1,于是也可以看成有两样东西,通过”0”和“1""位置"与"个数"的变化我们可以表
达无数个“量”,我们称之为”二进制“。
“二进制”是一样东西,二进制可以进行“解释”和“表示”,通过不同的“解释”和“表示”就有了八进制,十进制,十
六进制,三十二进制,六十四进制,
“计算机指令”是一样东西,通过不同的“解释工具”与”解释工具所设定的代码“,就有了各种各样的”开发程序“有
了各种”开发程序“就有了各种各样”被开发的软件“
“程序指令”一开始是很少的,因为cpu所会的东西就那么几样,比如:加,减,乘,除,开始,停止,读取,输
出,向左移动一位并读取,或向右移动一位并读取等等......
但是这些指令经过人为的组合编排就产生了千变万化的效果,外加多种cpu不同的配合,有了多种多样的应用,
为了使这些指令组合再次被用到时不必重新输入,于是很多开发程序把这些常用的指令组合保存在自己的常用指令
仓库中,当需要再次使用时,直接输入一个简单的调用指令就可以了,于是后续的“开发程序”所具有的指令功能也
越来越多。
计算机的“应用与开发”,最重要的是”有正确的想法“,就是说“想法”要符合一些特性,比如计算机的特性,以及
网络的特性,开发程序的特性,或是cpu的特性。而“正确的代码或指令”都是可以“查阅、搜索和试验”的。
所以面对计算机这个东西,只要有兴趣去使用和了解,就没有什么是不可掌握的,虽然看起来很繁琐,有很多了
解不完的知识,但是只要想一想:计算机技术发展了近70年,有全世界无数著名的科学家研究和开发,积攒了大半
个世纪的心血才到今天这个地步,而我们今天轻松就可以掌握这些创造成果,相比前人的“效率”我们不知道要高出
多少倍。智慧的创造是异常缓慢的,而智慧的学习却是飞速的。
爱因斯坦终其一生发现了《相对论》,牛顿晚年创造了《微积分》,赫兹用大半生去发现《电磁波》,霍金用一
生去钻研宇宙并开创《量子力学》,诺贝尔发现《硝化甘油》;这些智慧的创造都是异常缓慢的。
而今天的互联网时代,是知识爆炸发展的时代,我们只需懂得搜索和查阅就可以让知识成为我们创想的工具,我
们是多么轻而易举的就掌握了前人的智慧。
如果你有任何创想,或者想去探索这个世界的奥秘,却又因为惧怕繁琐和难以掌握而止步。那么你的惧怕和止步
是多么的愚蠢。
如果你对世界的奥秘充满渴望,并且想有自己的发现,你却不想去掌握前人的成果和智慧,那就是对前人”智
慧“与”创造“的亵渎。
要知道,就算你仅仅懂得什么是电流,你在古代都将是一位何等伟大的人物。
现在,你想获取一种知识或智慧就犹如探囊取物,相对前人来讲,你是多么幸运。
因为与前人相比,你是多么容易的就获取到了知识,你多么轻松的就把这么多伟人的发现占为己有
世界上没有绝对的创造,所有的创造都源于创新与整合,不去了解现有智慧就没有新的智慧。
而现在,你也许在贪婪的想着什么时候可以有个超级妙的金点子从头脑中闪现?并且这个点子是别人都发现不了的?
而且是别人难以掌握的?最后你利用这个点子开启智慧之门,同时又带给你自己意想不到的财富?
hohohoho。。标题可能有点夸张,只是想说明一下,计算机领域该有的理解、认识以及态度,下面就不多说了