My way to Rome - 万变之宗
小前言:由于失眠之夜的心血来潮,冒出了这个系列文章的念头。当然,写这些文章的目的并不是在博友们面前班门弄斧,只是想用文字记录一些自己的理解,自己的感悟。。。文中如有不当之处,还望朋友不胜赐教。
有一个每个人都知道的著名的等式:程序 = 数据 + 算法。
我个人非常喜欢它!因为,一切一切的软件程序,归根结底都难逃这么一个简单的等式。以一个游戏为例,它的数据可以包括:网络数据,用户输入数据,文件数据;通过按照预定算法编写成的程序,对网络数据进行处理,对用户输入进行处理,最后,产生了各种各样的输出数据:提交给服务器的网络数据,用于保存游戏状态的文件数据,反馈给用户的显示输出数据,反馈给用户的音频输出数据。任何程序都是如此。其实,这是由电脑 - 计算机的本质所决定。计算机的核心部件 - CPU,其根本职责,就是按照编排好的指令,对指定的数据进行计算处理。代表指令的二进制机器码 - 这是计算机底层硬件唯一能听懂的语言。CPU,从来都是严格按照指令办事。
当然,当今的程序员,还有谁每天与一堆堆的机器代码打交道呢?除了专门搞相关研究的人和有狂热追求的人,绝对数量的程序员,每天都生活在 .net,java,c++,ruby,perl…等等高级语言的世界里。高级语言,帮助程序员站在了软件世界的最顶层,把最原始的机器码踩在了脚下,并且忽视它。然而,毕竟CPU不认识这些高级语言;它们是如何回归原始的呢?
软件程序的发展,至始至终都是一个抽象的过程 - 不断地简化,不断地积累。于是,为了让机器代码更人性化,人们设计出了汇编语言;为了让程序员从繁琐复杂而又重复的底层处理中解脱,人们发明了高级语言,并开始对基本的常见的重复功能进行封装(学过汇编的人都知道,在汇编中实现一句printf("Hello World");的功能就要花多少时间写多少代码)。抽象,降低软件的复杂度;封装,则是对前人成就的尊敬和积累。于是,有了汇编语言到机器指令的翻译解释器;于是,有了将C代码翻译成汇编代码的编译器。金字塔每下降一层,都意味着更高的复杂度,意味着更多的代码。

随着Java,.NET等更高级的程序语言出现,软件编程被抽象到了一个新的高度。专用的运行时环境被构筑在了操作系统之上(.NET的CLR,java的JVM);提供了高重用,并作为程序基础框架的类库;软件的复杂度进一步降低。


也许,在未来,这样的金字塔会越来越高;但是,站在金字塔上层的程序员,必须懂得,即使看不到下层的机器码,看不到汇编,万变不离其宗 - 任何程序,其本质,依然是数据+算法的0,1世界。

浙公网安备 33010602011771号