其实学习计算机没有那么难的,计算机的所有,我是说所有的规范,模型甚至设计原理都来源于生活,来源于对其他行业的借鉴。
其中两个例子最为明显:1、对于设计模式的探讨,设计模式本生不是计算机行业才有的,这是来源于建筑,并在多个社会行业生根,最后被借鉴到计算机行业中的。可以稍微细说一下:
软件构建,中间件——这个在10年前兴起,最近比较冷的两个软件行业的terms。其中构建component实际来自于建筑行业,为了能够加快房子等大型建筑物的构建,建筑师把很多公用的物件抽象出来,形成构件,在建造时期只要安装构件即可,提高了效率与建造速度。中间件也是同样的道理,当一个机构过于复杂,有处理人力的有处理IT有处理业务的有处理决策的,这时要寻找如何高效的沟通方式就变得非常困难,这也是大公司为什么办事效率低下的一个重要原因;所以为了解决沟通的问题,人们将业务进行分解,抽象出人力资源部、财务部、工厂、技术部等职能部门,这时,每个部门只做相关业务的处理,结构就变得清晰容易理解了。
2、程序的结构:
程序要运行没那么神奇的,不管是Linux还是windows还是mac还是Unix,一个程序要运行,必须要遵循一定的规则,因为所有的程序都包含了数据域与代码域,还有一个程序入口;要使得操作系统识别这个程序并知道如何去加载如何去映射如何开始运行如何中断运行如何重入,是需要做大量的工作的,这就是程序的结构。这个结构或者说是协议是很复杂的,GCC这个编译器就是干这个事情的,将人可读的C语言,最终编译为机器可读的二进制文件,而这个二进制文件时包含大量装在,运行时信息的,它会告诉操作系统如何去加载我自身。
其实,这个过程就像一个大型图书馆的运作一样,每个程序实际就是一本书,而操作系统就是图书管理员。图书管理员知道如何找到一本书,并知道如何取得它,知道它所在物理位置(文件系统);当读者需要一本书时,就相当于用户点击了一个可执行文件的图标;操作系统负责去找到这个图书的物理位置,并将它从货架中拿出来(映射到内存),然后交给读者看;如果读者发现这本书并没有包含所有需要的知识,而是一部分(依赖其他资源);如读者需要这本书引用的其他文献资料,这时他又向操作系统提出请求,我需要其他3个资料进行阅读(三个库),图书管理员接到请求,根据索引(库的位置),将文献资料取出(加载到内存——静态,或者将DLL的地址——动态)交给读者进行阅读。
所以可以看出整个过程就是一个图书管理系统,操作系统只是一个值守的管理员而已,管理计算机硬件资源。而更有趣的是,所有库文件都叫library,可见,Library的模型是整个计算机可执行文件结构的照搬。更值得深究的是,每个库文件的内部构造其实跟一本书的构造是一致的,库文件中所有的函数,都有一个索引,就像所有的书籍都有索引一样,方便操作系统找到库文件中函数的具体位置。
所以,计算机是可以类比的,并不复杂,学习计算机更应该知道这些。